diff --git a/app/main.6edbb1cdf4d2e063961a.css b/app/main.6edbb1cdf4d2e063961a.css deleted file mode 100644 index 1a86a4e6..00000000 --- a/app/main.6edbb1cdf4d2e063961a.css +++ /dev/null @@ -1,88 +0,0 @@ -@font-face { - font-family: 'Open Sans'; - font-style: italic; - font-weight: 300; - src: url(../fonts/Open_Sans-italic-300.woff) format('woff'); - unicode-range: U+0-10FFFF; -} - -@font-face { - font-family: 'Open Sans'; - font-style: italic; - font-weight: 400; - src: url(../fonts/Open_Sans-italic-400.woff) format('woff'); - unicode-range: U+0-10FFFF; -} - -@font-face { - font-family: 'Open Sans'; - font-style: italic; - font-weight: 600; - src: url(../fonts/Open_Sans-italic-600.woff) format('woff'); - unicode-range: U+0-10FFFF; -} - -@font-face { - font-family: 'Open Sans'; - font-style: italic; - font-weight: 700; - src: url(../fonts/Open_Sans-italic-700.woff) format('woff'); - unicode-range: U+0-10FFFF; -} - -@font-face { - font-family: 'Open Sans'; - font-style: italic; - font-weight: 800; - src: url(../fonts/Open_Sans-italic-800.woff) format('woff'); - unicode-range: U+0-10FFFF; -} - -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 300; - src: url(../fonts/Open_Sans-normal-300.woff) format('woff'); - unicode-range: U+0-10FFFF; -} - -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 400; - src: url(../fonts/Open_Sans-normal-400.woff) format('woff'); - unicode-range: U+0-10FFFF; -} - -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 600; - src: url(../fonts/Open_Sans-normal-600.woff) format('woff'); - unicode-range: U+0-10FFFF; -} - -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 700; - src: url(../fonts/Open_Sans-normal-700.woff) format('woff'); - unicode-range: U+0-10FFFF; -} - -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 800; - src: url(../fonts/Open_Sans-normal-800.woff) format('woff'); - unicode-range: U+0-10FFFF; -} - - -:root{--blue: #007bff;--indigo: #6610f2;--purple: #6f42c1;--pink: #e83e8c;--red: #dc3545;--orange: #fd7e14;--yellow: #ffc107;--green: #28a745;--teal: #20c997;--cyan: #17a2b8;--white: #fff;--gray: #6c757d;--gray-dark: #343a40;--primary: #175DDC;--secondary: #ced4da;--success: #00a65a;--info: #555;--warning: #bf7e16;--danger: #dd4b39;--light: #f8f9fa;--dark: #343a40;--primary-accent: #1252A3;--secondary-alt: #1A3B66;--breakpoint-xs: 0;--breakpoint-sm: 1px;--breakpoint-md: 2px;--breakpoint-lg: 3px;--breakpoint-xl: 4px;--font-family-sans-serif: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}*,*::before,*::after{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#333;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0 !important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#175DDC;text-decoration:none;background-color:transparent}a:hover{color:#104097;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):hover,a:not([href]):not([tabindex]):focus{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}pre,code,kbd,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button:not(:disabled),[type="button"]:not(:disabled),[type="reset"]:not(:disabled),[type="submit"]:not(:disabled){cursor:pointer}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{padding:0;border-style:none}input[type="radio"],input[type="checkbox"]{box-sizing:border-box;padding:0}input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{outline-offset:-2px;-webkit-appearance:none}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none !important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1{font-size:1.7rem}h2,.h2{font-size:1.3rem}h3,.h3{font-size:1rem}h4,.h4{font-size:1rem}h5,.h5{font-size:1rem}h6,.h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:normal}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,0.1)}small,.small{font-size:90%;font-weight:400}mark,.mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:90%;color:#6c757d}.blockquote-footer::before{content:"\2014\A0"}.img-fluid,.table.table-list td.table-list-icon img{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:100%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:100%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:100%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:10px;padding-left:10px;margin-right:auto;margin-left:auto}@media (min-width: 1px){.container{max-width:540px}}@media (min-width: 2px){.container{max-width:720px}}@media (min-width: 3px){.container{max-width:960px}}@media (min-width: 4px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:10px;padding-left:10px;margin-right:auto;margin-left:auto}.row{display:flex;flex-wrap:wrap;margin-right:-10px;margin-left:-10px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*="col-"]{padding-right:0;padding-left:0}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col,.col-auto,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm,.col-sm-auto,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md,.col-md-auto,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg,.col-lg-auto,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl,.col-xl-auto{position:relative;width:100%;padding-right:10px;padding-left:10px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.33333%;max-width:8.33333%}.col-2{flex:0 0 16.66667%;max-width:16.66667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.33333%;max-width:33.33333%}.col-5{flex:0 0 41.66667%;max-width:41.66667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.33333%;max-width:58.33333%}.col-8{flex:0 0 66.66667%;max-width:66.66667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.33333%;max-width:83.33333%}.col-11{flex:0 0 91.66667%;max-width:91.66667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}@media (min-width: 1px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.33333%;max-width:8.33333%}.col-sm-2{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.33333%;max-width:33.33333%}.col-sm-5{flex:0 0 41.66667%;max-width:41.66667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.33333%;max-width:58.33333%}.col-sm-8{flex:0 0 66.66667%;max-width:66.66667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.33333%;max-width:83.33333%}.col-sm-11{flex:0 0 91.66667%;max-width:91.66667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width: 2px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.33333%;max-width:8.33333%}.col-md-2{flex:0 0 16.66667%;max-width:16.66667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.33333%;max-width:33.33333%}.col-md-5{flex:0 0 41.66667%;max-width:41.66667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.33333%;max-width:58.33333%}.col-md-8{flex:0 0 66.66667%;max-width:66.66667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.33333%;max-width:83.33333%}.col-md-11{flex:0 0 91.66667%;max-width:91.66667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width: 3px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.33333%;max-width:8.33333%}.col-lg-2{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.33333%;max-width:33.33333%}.col-lg-5{flex:0 0 41.66667%;max-width:41.66667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}.col-lg-8{flex:0 0 66.66667%;max-width:66.66667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.33333%;max-width:83.33333%}.col-lg-11{flex:0 0 91.66667%;max-width:91.66667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width: 4px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.33333%;max-width:8.33333%}.col-xl-2{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.33333%;max-width:33.33333%}.col-xl-5{flex:0 0 41.66667%;max-width:41.66667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.33333%;max-width:58.33333%}.col-xl-8{flex:0 0 66.66667%;max-width:66.66667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.33333%;max-width:83.33333%}.col-xl-11{flex:0 0 91.66667%;max-width:91.66667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.table{width:100%;margin-bottom:1rem;color:#333}.table th,.table td{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm th,.table-sm td{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered th,.table-bordered td{border:1px solid #dee2e6}.table-bordered thead th,.table-bordered thead td{border-bottom-width:2px}.table-borderless th,.table-borderless td,.table-borderless thead th,.table-borderless tbody+tbody{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,0.02)}.table-hover tbody tr:hover{color:#333;background-color:rgba(0,0,0,0.03)}.table-primary,.table-primary>th,.table-primary>td{background-color:#bed2f5}.table-primary th,.table-primary td,.table-primary thead th,.table-primary tbody+tbody{border-color:#86abed}.table-hover .table-primary:hover{background-color:#a8c3f2}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#a8c3f2}.table-secondary,.table-secondary>th,.table-secondary>td{background-color:#f1f3f5}.table-secondary th,.table-secondary td,.table-secondary thead th,.table-secondary tbody+tbody{border-color:#e6e9ec}.table-hover .table-secondary:hover{background-color:#e2e6ea}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#e2e6ea}.table-success,.table-success>th,.table-success>td{background-color:#b8e6d1}.table-success th,.table-success td,.table-success thead th,.table-success tbody+tbody{border-color:#7ad1a9}.table-hover .table-success:hover{background-color:#a5dfc5}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#a5dfc5}.table-info,.table-info>th,.table-info>td{background-color:#cfcfcf}.table-info th,.table-info td,.table-info thead th,.table-info tbody+tbody{border-color:#a7a7a7}.table-hover .table-info:hover{background-color:#c2c2c2}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#c2c2c2}.table-warning,.table-warning>th,.table-warning>td{background-color:#eddbbe}.table-warning th,.table-warning td,.table-warning thead th,.table-warning tbody+tbody{border-color:#debc86}.table-hover .table-warning:hover{background-color:#e7d0aa}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#e7d0aa}.table-danger,.table-danger>th,.table-danger>td{background-color:#f5cdc8}.table-danger th,.table-danger td,.table-danger thead th,.table-danger tbody+tbody{border-color:#eda198}.table-hover .table-danger:hover{background-color:#f1b9b2}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b9b2}.table-light,.table-light>th,.table-light>td{background-color:#fdfdfe}.table-light th,.table-light td,.table-light thead th,.table-light tbody+tbody{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>th,.table-dark>td{background-color:#c6c8ca}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-primary-accent,.table-primary-accent>th,.table-primary-accent>td{background-color:#bdcfe5}.table-primary-accent th,.table-primary-accent td,.table-primary-accent thead th,.table-primary-accent tbody+tbody{border-color:#84a5cf}.table-hover .table-primary-accent:hover{background-color:#abc2de}.table-hover .table-primary-accent:hover>td,.table-hover .table-primary-accent:hover>th{background-color:#abc2de}.table-secondary-alt,.table-secondary-alt>th,.table-secondary-alt>td{background-color:#bfc8d4}.table-secondary-alt th,.table-secondary-alt td,.table-secondary-alt thead th,.table-secondary-alt tbody+tbody{border-color:#8899af}.table-hover .table-secondary-alt:hover{background-color:#b0bbca}.table-hover .table-secondary-alt:hover>td,.table-hover .table-secondary-alt:hover>th{background-color:#b0bbca}.table-active,.table-active>th,.table-active>td{background-color:rgba(0,0,0,0.03)}.table-hover .table-active:hover{background-color:rgba(0,0,0,0.03)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,0.03)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark th,.table-dark td,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,0.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,0.075)}@media (max-width: 0.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width: 1.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width: 2.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width: 3.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fbfbfb;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#81a9f2;outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.form-control::placeholder{color:#b4b4b4;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e0e0e0;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fbfbfb}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.15rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#333;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.15rem;line-height:1.5;border-radius:.3rem}select.form-control[size],select.form-control[multiple]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*="col-"]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled ~ .form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:90%;color:#00a65a}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(0,166,90,0.9);border-radius:.25rem}.was-validated .form-control:valid,.form-control.is-valid{border-color:#00a65a;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2300a65a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#00a65a;box-shadow:0 0 0 .2rem rgba(0,166,90,0.25)}.was-validated .form-control:valid ~ .valid-feedback,.was-validated .form-control:valid ~ .valid-tooltip,.form-control.is-valid ~ .valid-feedback,.form-control.is-valid ~ .valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .custom-select:valid,.custom-select.is-valid{border-color:#00a65a;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2300a65a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fbfbfb no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .custom-select:valid:focus,.custom-select.is-valid:focus{border-color:#00a65a;box-shadow:0 0 0 .2rem rgba(0,166,90,0.25)}.was-validated .custom-select:valid ~ .valid-feedback,.was-validated .custom-select:valid ~ .valid-tooltip,.custom-select.is-valid ~ .valid-feedback,.custom-select.is-valid ~ .valid-tooltip{display:block}.was-validated .form-control-file:valid ~ .valid-feedback,.was-validated .form-control-file:valid ~ .valid-tooltip,.form-control-file.is-valid ~ .valid-feedback,.form-control-file.is-valid ~ .valid-tooltip{display:block}.was-validated .form-check-input:valid ~ .form-check-label,.form-check-input.is-valid ~ .form-check-label{color:#00a65a}.was-validated .form-check-input:valid ~ .valid-feedback,.was-validated .form-check-input:valid ~ .valid-tooltip,.form-check-input.is-valid ~ .valid-feedback,.form-check-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-control-input:valid ~ .custom-control-label,.custom-control-input.is-valid ~ .custom-control-label{color:#00a65a}.was-validated .custom-control-input:valid ~ .custom-control-label::before,.custom-control-input.is-valid ~ .custom-control-label::before{border-color:#00a65a}.was-validated .custom-control-input:valid ~ .valid-feedback,.was-validated .custom-control-input:valid ~ .valid-tooltip,.custom-control-input.is-valid ~ .valid-feedback,.custom-control-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before,.custom-control-input.is-valid:checked ~ .custom-control-label::before{border-color:#00d976;background-color:#00d976}.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before,.custom-control-input.is-valid:focus ~ .custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,166,90,0.25)}.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before,.custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before{border-color:#00a65a}.was-validated .custom-file-input:valid ~ .custom-file-label,.custom-file-input.is-valid ~ .custom-file-label{border-color:#00a65a}.was-validated .custom-file-input:valid ~ .valid-feedback,.was-validated .custom-file-input:valid ~ .valid-tooltip,.custom-file-input.is-valid ~ .valid-feedback,.custom-file-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-file-input:valid:focus ~ .custom-file-label,.custom-file-input.is-valid:focus ~ .custom-file-label{border-color:#00a65a;box-shadow:0 0 0 .2rem rgba(0,166,90,0.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:90%;color:#dd4b39}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(221,75,57,0.9);border-radius:.25rem}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#dd4b39;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dd4b39' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dd4b39' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dd4b39;box-shadow:0 0 0 .2rem rgba(221,75,57,0.25)}.was-validated .form-control:invalid ~ .invalid-feedback,.was-validated .form-control:invalid ~ .invalid-tooltip,.form-control.is-invalid ~ .invalid-feedback,.form-control.is-invalid ~ .invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .custom-select:invalid,.custom-select.is-invalid{border-color:#dd4b39;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dd4b39' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dd4b39' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fbfbfb no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .custom-select:invalid:focus,.custom-select.is-invalid:focus{border-color:#dd4b39;box-shadow:0 0 0 .2rem rgba(221,75,57,0.25)}.was-validated .custom-select:invalid ~ .invalid-feedback,.was-validated .custom-select:invalid ~ .invalid-tooltip,.custom-select.is-invalid ~ .invalid-feedback,.custom-select.is-invalid ~ .invalid-tooltip{display:block}.was-validated .form-control-file:invalid ~ .invalid-feedback,.was-validated .form-control-file:invalid ~ .invalid-tooltip,.form-control-file.is-invalid ~ .invalid-feedback,.form-control-file.is-invalid ~ .invalid-tooltip{display:block}.was-validated .form-check-input:invalid ~ .form-check-label,.form-check-input.is-invalid ~ .form-check-label{color:#dd4b39}.was-validated .form-check-input:invalid ~ .invalid-feedback,.was-validated .form-check-input:invalid ~ .invalid-tooltip,.form-check-input.is-invalid ~ .invalid-feedback,.form-check-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-control-input:invalid ~ .custom-control-label,.custom-control-input.is-invalid ~ .custom-control-label{color:#dd4b39}.was-validated .custom-control-input:invalid ~ .custom-control-label::before,.custom-control-input.is-invalid ~ .custom-control-label::before{border-color:#dd4b39}.was-validated .custom-control-input:invalid ~ .invalid-feedback,.was-validated .custom-control-input:invalid ~ .invalid-tooltip,.custom-control-input.is-invalid ~ .invalid-feedback,.custom-control-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before,.custom-control-input.is-invalid:checked ~ .custom-control-label::before{border-color:#e47365;background-color:#e47365}.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before,.custom-control-input.is-invalid:focus ~ .custom-control-label::before{box-shadow:0 0 0 .2rem rgba(221,75,57,0.25)}.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before,.custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before{border-color:#dd4b39}.was-validated .custom-file-input:invalid ~ .custom-file-label,.custom-file-input.is-invalid ~ .custom-file-label{border-color:#dd4b39}.was-validated .custom-file-input:invalid ~ .invalid-feedback,.was-validated .custom-file-input:invalid ~ .invalid-tooltip,.custom-file-input.is-invalid ~ .invalid-feedback,.custom-file-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-file-input:invalid:focus ~ .custom-file-label,.custom-file-input.is-invalid:focus ~ .custom-file-label{border-color:#dd4b39;box-shadow:0 0 0 .2rem rgba(221,75,57,0.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width: 1px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group,.form-inline .custom-select{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn,.swal2-popup .swal2-actions button{display:inline-block;font-weight:600;color:#333;text-align:center;vertical-align:middle;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn,.swal2-popup .swal2-actions button{transition:none}}.btn:hover,.swal2-popup .swal2-actions button:hover{color:#333;text-decoration:none}.btn:focus,.swal2-popup .swal2-actions button:focus,.btn.focus,.swal2-popup .swal2-actions button.focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.btn.disabled,.swal2-popup .swal2-actions button.disabled,.btn:disabled,.swal2-popup .swal2-actions button:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary,.swal2-popup .swal2-actions button.swal2-confirm{color:#fff;background-color:#175DDC;border-color:#175DDC}.btn-primary:hover,.swal2-popup .swal2-actions button.swal2-confirm:hover{color:#fff;background-color:#134eb9;border-color:#1249ae}.btn-primary:focus,.swal2-popup .swal2-actions button.swal2-confirm:focus,.btn-primary.focus,.swal2-popup .swal2-actions button.focus.swal2-confirm{box-shadow:0 0 0 .2rem rgba(58,117,225,0.5)}.btn-primary.disabled,.swal2-popup .swal2-actions button.disabled.swal2-confirm,.btn-primary:disabled,.swal2-popup .swal2-actions button.swal2-confirm:disabled{color:#fff;background-color:#175DDC;border-color:#175DDC}.btn-primary:not(:disabled):not(.disabled):active,.swal2-popup .swal2-actions button.swal2-confirm:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.swal2-popup .swal2-actions button.swal2-confirm:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle,.swal2-popup .swal2-actions .show>button.dropdown-toggle.swal2-confirm{color:#fff;background-color:#1249ae;border-color:#1145a2}.btn-primary:not(:disabled):not(.disabled):active:focus,.swal2-popup .swal2-actions button.swal2-confirm:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.swal2-popup .swal2-actions button.swal2-confirm:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus,.swal2-popup .swal2-actions .show>button.dropdown-toggle.swal2-confirm:focus{box-shadow:0 0 0 .2rem rgba(58,117,225,0.5)}.btn-secondary{color:#212529;background-color:#ced4da;border-color:#ced4da}.btn-secondary:hover{color:#212529;background-color:#b8c1ca;border-color:#b1bbc4}.btn-secondary:focus,.btn-secondary.focus{box-shadow:0 0 0 .2rem rgba(180,186,191,0.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#212529;background-color:#ced4da;border-color:#ced4da}.btn-secondary:not(:disabled):not(.disabled):active,.btn-secondary:not(:disabled):not(.disabled).active,.show>.btn-secondary.dropdown-toggle{color:#212529;background-color:#b1bbc4;border-color:#aab4bf}.btn-secondary:not(:disabled):not(.disabled):active:focus,.btn-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(180,186,191,0.5)}.btn-success{color:#fff;background-color:#00a65a;border-color:#00a65a}.btn-success:hover{color:#fff;background-color:#008045;border-color:#00733e}.btn-success:focus,.btn-success.focus{box-shadow:0 0 0 .2rem rgba(38,179,115,0.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#00a65a;border-color:#00a65a}.btn-success:not(:disabled):not(.disabled):active,.btn-success:not(:disabled):not(.disabled).active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#00733e;border-color:#006637}.btn-success:not(:disabled):not(.disabled):active:focus,.btn-success:not(:disabled):not(.disabled).active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,179,115,0.5)}.btn-info{color:#fff;background-color:#555;border-color:#555}.btn-info:hover{color:#fff;background-color:#424242;border-color:#3c3c3c}.btn-info:focus,.btn-info.focus{box-shadow:0 0 0 .2rem rgba(111,111,111,0.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#555;border-color:#555}.btn-info:not(:disabled):not(.disabled):active,.btn-info:not(:disabled):not(.disabled).active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#3c3c3c;border-color:#353535}.btn-info:not(:disabled):not(.disabled):active:focus,.btn-info:not(:disabled):not(.disabled).active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(111,111,111,0.5)}.btn-warning{color:#fff;background-color:#bf7e16;border-color:#bf7e16}.btn-warning:hover{color:#fff;background-color:#9d6712;border-color:#916011}.btn-warning:focus,.btn-warning.focus{box-shadow:0 0 0 .2rem rgba(201,145,57,0.5)}.btn-warning.disabled,.btn-warning:disabled{color:#fff;background-color:#bf7e16;border-color:#bf7e16}.btn-warning:not(:disabled):not(.disabled):active,.btn-warning:not(:disabled):not(.disabled).active,.show>.btn-warning.dropdown-toggle{color:#fff;background-color:#916011;border-color:#86580f}.btn-warning:not(:disabled):not(.disabled):active:focus,.btn-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(201,145,57,0.5)}.btn-danger{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.btn-danger:hover{color:#fff;background-color:#cd3623;border-color:#c23321}.btn-danger:focus,.btn-danger.focus{box-shadow:0 0 0 .2rem rgba(226,102,87,0.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.btn-danger:not(:disabled):not(.disabled):active,.btn-danger:not(:disabled):not(.disabled).active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#c23321;border-color:#b7301f}.btn-danger:not(:disabled):not(.disabled):active:focus,.btn-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(226,102,87,0.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light:focus,.btn-light.focus{box-shadow:0 0 0 .2rem rgba(216,217,219,0.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled):active,.btn-light:not(:disabled):not(.disabled).active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled):active:focus,.btn-light:not(:disabled):not(.disabled).active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,0.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark:focus,.btn-dark.focus{box-shadow:0 0 0 .2rem rgba(82,88,93,0.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled):active,.btn-dark:not(:disabled):not(.disabled).active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled):active:focus,.btn-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,0.5)}.btn-primary-accent{color:#fff;background-color:#1252A3;border-color:#1252A3}.btn-primary-accent:hover{color:#fff;background-color:#0e4181;border-color:#0d3b75}.btn-primary-accent:focus,.btn-primary-accent.focus{box-shadow:0 0 0 .2rem rgba(54,108,177,0.5)}.btn-primary-accent.disabled,.btn-primary-accent:disabled{color:#fff;background-color:#1252A3;border-color:#1252A3}.btn-primary-accent:not(:disabled):not(.disabled):active,.btn-primary-accent:not(:disabled):not(.disabled).active,.show>.btn-primary-accent.dropdown-toggle{color:#fff;background-color:#0d3b75;border-color:#0c356a}.btn-primary-accent:not(:disabled):not(.disabled):active:focus,.btn-primary-accent:not(:disabled):not(.disabled).active:focus,.show>.btn-primary-accent.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(54,108,177,0.5)}.btn-secondary-alt{color:#fff;background-color:#1A3B66;border-color:#1A3B66}.btn-secondary-alt:hover{color:#fff;background-color:#122948;border-color:#10233d}.btn-secondary-alt:focus,.btn-secondary-alt.focus{box-shadow:0 0 0 .2rem rgba(60,88,125,0.5)}.btn-secondary-alt.disabled,.btn-secondary-alt:disabled{color:#fff;background-color:#1A3B66;border-color:#1A3B66}.btn-secondary-alt:not(:disabled):not(.disabled):active,.btn-secondary-alt:not(:disabled):not(.disabled).active,.show>.btn-secondary-alt.dropdown-toggle{color:#fff;background-color:#10233d;border-color:#0d1e33}.btn-secondary-alt:not(:disabled):not(.disabled):active:focus,.btn-secondary-alt:not(:disabled):not(.disabled).active:focus,.show>.btn-secondary-alt.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(60,88,125,0.5)}.btn-outline-primary{color:#175DDC;border-color:#175DDC}.btn-outline-primary:hover{color:#fff;background-color:#175DDC;border-color:#175DDC}.btn-outline-primary:focus,.btn-outline-primary.focus{box-shadow:0 0 0 .2rem rgba(23,93,220,0.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#175DDC;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled):active,.btn-outline-primary:not(:disabled):not(.disabled).active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#175DDC;border-color:#175DDC}.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,93,220,0.5)}.btn-outline-secondary,.swal2-popup .swal2-actions button.swal2-cancel{color:#ced4da;border-color:#ced4da}.btn-outline-secondary:hover,.swal2-popup .swal2-actions button.swal2-cancel:hover{color:#212529;background-color:#ced4da;border-color:#ced4da}.btn-outline-secondary:focus,.swal2-popup .swal2-actions button.swal2-cancel:focus,.btn-outline-secondary.focus,.swal2-popup .swal2-actions button.focus.swal2-cancel{box-shadow:0 0 0 .2rem rgba(206,212,218,0.5)}.btn-outline-secondary.disabled,.swal2-popup .swal2-actions button.disabled.swal2-cancel,.btn-outline-secondary:disabled,.swal2-popup .swal2-actions button.swal2-cancel:disabled{color:#ced4da;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled):active,.swal2-popup .swal2-actions button.swal2-cancel:not(:disabled):not(.disabled):active,.btn-outline-secondary:not(:disabled):not(.disabled).active,.swal2-popup .swal2-actions button.swal2-cancel:not(:disabled):not(.disabled).active,.show>.btn-outline-secondary.dropdown-toggle,.swal2-popup .swal2-actions .show>button.dropdown-toggle.swal2-cancel{color:#212529;background-color:#ced4da;border-color:#ced4da}.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.swal2-popup .swal2-actions button.swal2-cancel:not(:disabled):not(.disabled):active:focus,.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.swal2-popup .swal2-actions button.swal2-cancel:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus,.swal2-popup .swal2-actions .show>button.dropdown-toggle.swal2-cancel:focus{box-shadow:0 0 0 .2rem rgba(206,212,218,0.5)}.btn-outline-success{color:#00a65a;border-color:#00a65a}.btn-outline-success:hover{color:#fff;background-color:#00a65a;border-color:#00a65a}.btn-outline-success:focus,.btn-outline-success.focus{box-shadow:0 0 0 .2rem rgba(0,166,90,0.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#00a65a;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled):active,.btn-outline-success:not(:disabled):not(.disabled).active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#00a65a;border-color:#00a65a}.btn-outline-success:not(:disabled):not(.disabled):active:focus,.btn-outline-success:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,166,90,0.5)}.btn-outline-info{color:#555;border-color:#555}.btn-outline-info:hover{color:#fff;background-color:#555;border-color:#555}.btn-outline-info:focus,.btn-outline-info.focus{box-shadow:0 0 0 .2rem rgba(85,85,85,0.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#555;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled):active,.btn-outline-info:not(:disabled):not(.disabled).active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#555;border-color:#555}.btn-outline-info:not(:disabled):not(.disabled):active:focus,.btn-outline-info:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(85,85,85,0.5)}.btn-outline-warning{color:#bf7e16;border-color:#bf7e16}.btn-outline-warning:hover{color:#fff;background-color:#bf7e16;border-color:#bf7e16}.btn-outline-warning:focus,.btn-outline-warning.focus{box-shadow:0 0 0 .2rem rgba(191,126,22,0.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#bf7e16;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled):active,.btn-outline-warning:not(:disabled):not(.disabled).active,.show>.btn-outline-warning.dropdown-toggle{color:#fff;background-color:#bf7e16;border-color:#bf7e16}.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(191,126,22,0.5)}.btn-outline-danger{color:#dd4b39;border-color:#dd4b39}.btn-outline-danger:hover{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.btn-outline-danger:focus,.btn-outline-danger.focus{box-shadow:0 0 0 .2rem rgba(221,75,57,0.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dd4b39;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled):active,.btn-outline-danger:not(:disabled):not(.disabled).active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(221,75,57,0.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:focus,.btn-outline-light.focus{box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled):active,.btn-outline-light:not(:disabled):not(.disabled).active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled):active:focus,.btn-outline-light:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:focus,.btn-outline-dark.focus{box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled):active,.btn-outline-dark:not(:disabled):not(.disabled).active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.btn-outline-primary-accent{color:#1252A3;border-color:#1252A3}.btn-outline-primary-accent:hover{color:#fff;background-color:#1252A3;border-color:#1252A3}.btn-outline-primary-accent:focus,.btn-outline-primary-accent.focus{box-shadow:0 0 0 .2rem rgba(18,82,163,0.5)}.btn-outline-primary-accent.disabled,.btn-outline-primary-accent:disabled{color:#1252A3;background-color:transparent}.btn-outline-primary-accent:not(:disabled):not(.disabled):active,.btn-outline-primary-accent:not(:disabled):not(.disabled).active,.show>.btn-outline-primary-accent.dropdown-toggle{color:#fff;background-color:#1252A3;border-color:#1252A3}.btn-outline-primary-accent:not(:disabled):not(.disabled):active:focus,.btn-outline-primary-accent:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-primary-accent.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(18,82,163,0.5)}.btn-outline-secondary-alt{color:#1A3B66;border-color:#1A3B66}.btn-outline-secondary-alt:hover{color:#fff;background-color:#1A3B66;border-color:#1A3B66}.btn-outline-secondary-alt:focus,.btn-outline-secondary-alt.focus{box-shadow:0 0 0 .2rem rgba(26,59,102,0.5)}.btn-outline-secondary-alt.disabled,.btn-outline-secondary-alt:disabled{color:#1A3B66;background-color:transparent}.btn-outline-secondary-alt:not(:disabled):not(.disabled):active,.btn-outline-secondary-alt:not(:disabled):not(.disabled).active,.show>.btn-outline-secondary-alt.dropdown-toggle{color:#fff;background-color:#1A3B66;border-color:#1A3B66}.btn-outline-secondary-alt:not(:disabled):not(.disabled):active:focus,.btn-outline-secondary-alt:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-secondary-alt.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(26,59,102,0.5)}.btn-link{font-weight:400;color:#175DDC;text-decoration:none}.btn-link:hover{color:#104097;text-decoration:underline}.btn-link:focus,.btn-link.focus{text-decoration:underline;box-shadow:none}.btn-link:disabled,.btn-link.disabled{color:#6c757d;pointer-events:none}.btn-lg,.btn-group-lg>.btn,.swal2-popup .swal2-actions .btn-group-lg>button{padding:.5rem 1rem;font-size:1.15rem;line-height:1.5;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn,.swal2-popup .swal2-actions .btn-group-sm>button{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{transition:opacity 0.15s linear}@media (prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height 0.35s ease}@media (prefers-reduced-motion: reduce){.collapsing{transition:none}}.dropup,.dropright,.dropdown,.dropleft{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#333;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width: 1px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width: 2px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width: 3px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width: 4px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^="top"],.dropdown-menu[x-placement^="right"],.dropdown-menu[x-placement^="bottom"],.dropdown-menu[x-placement^="left"]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#333;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:hover,.dropdown-item:focus{color:#16181b;text-decoration:none;background-color:rgba(0,0,0,0.06)}.dropdown-item.active,.dropdown-item:active{color:#333;text-decoration:none;background-color:rgba(0,0,0,0.1)}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#333}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.swal2-popup .swal2-actions .btn-group>button,.btn-group-vertical>.btn,.swal2-popup .swal2-actions .btn-group-vertical>button{position:relative;flex:1 1 auto}.btn-group>.btn:hover,.swal2-popup .swal2-actions .btn-group>button:hover,.btn-group-vertical>.btn:hover,.swal2-popup .swal2-actions .btn-group-vertical>button:hover{z-index:1}.btn-group>.btn:focus,.swal2-popup .swal2-actions .btn-group>button:focus,.btn-group>.btn:active,.swal2-popup .swal2-actions .btn-group>button:active,.btn-group>.btn.active,.swal2-popup .swal2-actions .btn-group>button.active,.btn-group-vertical>.btn:focus,.swal2-popup .swal2-actions .btn-group-vertical>button:focus,.btn-group-vertical>.btn:active,.swal2-popup .swal2-actions .btn-group-vertical>button:active,.btn-group-vertical>.btn.active,.swal2-popup .swal2-actions .btn-group-vertical>button.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.swal2-popup .swal2-actions .btn-group>button:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-left:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.swal2-popup .swal2-actions .btn-group>button:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn,.swal2-popup .swal2-actions .btn-group>.btn-group:not(:last-child)>button{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:not(:first-child),.swal2-popup .swal2-actions .btn-group>button:not(:first-child),.btn-group>.btn-group:not(:first-child)>.btn,.swal2-popup .swal2-actions .btn-group>.btn-group:not(:first-child)>button{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split,.swal2-popup .swal2-actions .btn-group-sm>button+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split,.swal2-popup .swal2-actions .btn-group-lg>button+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.swal2-popup .swal2-actions .btn-group-vertical>button,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.swal2-popup .swal2-actions .btn-group-vertical>button:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.swal2-popup .swal2-actions .btn-group-vertical>button:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn,.swal2-popup .swal2-actions .btn-group-vertical>.btn-group:not(:last-child)>button{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:not(:first-child),.swal2-popup .swal2-actions .btn-group-vertical>button:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child)>.btn,.swal2-popup .swal2-actions .btn-group-vertical>.btn-group:not(:first-child)>button{border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.swal2-popup .swal2-actions .btn-group-toggle>button,.btn-group-toggle>.btn-group>.btn,.swal2-popup .swal2-actions .btn-group-toggle>.btn-group>button{margin-bottom:0}.btn-group-toggle>.btn input[type="radio"],.swal2-popup .swal2-actions .btn-group-toggle>button input[type="radio"],.btn-group-toggle>.btn input[type="checkbox"],.swal2-popup .swal2-actions .btn-group-toggle>button input[type="checkbox"],.btn-group-toggle>.btn-group>.btn input[type="radio"],.swal2-popup .swal2-actions .btn-group-toggle>.btn-group>button input[type="radio"],.btn-group-toggle>.btn-group>.btn input[type="checkbox"],.swal2-popup .swal2-actions .btn-group-toggle>.btn-group>button input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-control-plaintext,.input-group>.custom-select,.input-group>.custom-file{position:relative;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.form-control+.form-control,.input-group>.form-control+.custom-select,.input-group>.form-control+.custom-file,.input-group>.form-control-plaintext+.form-control,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.custom-file,.input-group>.custom-select+.form-control,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.custom-file,.input-group>.custom-file+.form-control,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.custom-file{margin-left:-1px}.input-group>.form-control:focus,.input-group>.custom-select:focus,.input-group>.custom-file .custom-file-input:focus ~ .custom-file-label{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.form-control:not(:last-child),.input-group>.custom-select:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.form-control:not(:first-child),.input-group>.custom-select:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-prepend,.input-group-append{display:flex}.input-group-prepend .btn,.input-group-prepend .swal2-popup .swal2-actions button,.swal2-popup .swal2-actions .input-group-prepend button,.input-group-append .btn,.input-group-append .swal2-popup .swal2-actions button,.swal2-popup .swal2-actions .input-group-append button{position:relative;z-index:2}.input-group-prepend .btn:focus,.input-group-prepend .swal2-popup .swal2-actions button:focus,.swal2-popup .swal2-actions .input-group-prepend button:focus,.input-group-append .btn:focus,.input-group-append .swal2-popup .swal2-actions button:focus,.swal2-popup .swal2-actions .input-group-append button:focus{z-index:3}.input-group-prepend .btn+.btn,.input-group-prepend .swal2-popup .swal2-actions button+.btn,.swal2-popup .swal2-actions .input-group-prepend button+.btn,.input-group-prepend .swal2-popup .swal2-actions .btn+button,.swal2-popup .swal2-actions .input-group-prepend .btn+button,.input-group-prepend .swal2-popup .swal2-actions button+button,.swal2-popup .swal2-actions .input-group-prepend button+button,.input-group-prepend .btn+.input-group-text,.input-group-prepend .swal2-popup .swal2-actions button+.input-group-text,.swal2-popup .swal2-actions .input-group-prepend button+.input-group-text,.input-group-prepend .input-group-text+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .swal2-popup .swal2-actions .input-group-text+button,.swal2-popup .swal2-actions .input-group-prepend .input-group-text+button,.input-group-append .btn+.btn,.input-group-append .swal2-popup .swal2-actions button+.btn,.swal2-popup .swal2-actions .input-group-append button+.btn,.input-group-append .swal2-popup .swal2-actions .btn+button,.swal2-popup .swal2-actions .input-group-append .btn+button,.input-group-append .swal2-popup .swal2-actions button+button,.swal2-popup .swal2-actions .input-group-append button+button,.input-group-append .btn+.input-group-text,.input-group-append .swal2-popup .swal2-actions button+.input-group-text,.swal2-popup .swal2-actions .input-group-append button+.input-group-text,.input-group-append .input-group-text+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .swal2-popup .swal2-actions .input-group-text+button,.swal2-popup .swal2-actions .input-group-append .input-group-text+button{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type="radio"],.input-group-text input[type="checkbox"]{margin-top:0}.input-group-lg>.form-control:not(textarea),.input-group-lg>.custom-select{height:calc(1.5em + 1rem + 2px)}.input-group-lg>.form-control,.input-group-lg>.custom-select,.input-group-lg>.input-group-prepend>.input-group-text,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.swal2-popup .swal2-actions .input-group-lg>.input-group-prepend>button,.input-group-lg>.input-group-append>.btn,.swal2-popup .swal2-actions .input-group-lg>.input-group-append>button{padding:.5rem 1rem;font-size:1.15rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.form-control:not(textarea),.input-group-sm>.custom-select{height:calc(1.5em + .5rem + 2px)}.input-group-sm>.form-control,.input-group-sm>.custom-select,.input-group-sm>.input-group-prepend>.input-group-text,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.swal2-popup .swal2-actions .input-group-sm>.input-group-prepend>button,.input-group-sm>.input-group-append>.btn,.swal2-popup .swal2-actions .input-group-sm>.input-group-append>button{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-prepend>.btn,.swal2-popup .swal2-actions .input-group>.input-group-prepend>button,.input-group>.input-group-prepend>.input-group-text,.input-group>.input-group-append:not(:last-child)>.btn,.swal2-popup .swal2-actions .input-group>.input-group-append:not(:last-child)>button,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.swal2-popup .swal2-actions .input-group>.input-group-append:last-child>button:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.swal2-popup .swal2-actions .input-group>.input-group-append>button,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:not(:first-child)>.btn,.swal2-popup .swal2-actions .input-group>.input-group-prepend:not(:first-child)>button,.input-group>.input-group-prepend:not(:first-child)>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.swal2-popup .swal2-actions .input-group>.input-group-prepend:first-child>button:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked ~ .custom-control-label::before{color:#fff;border-color:#175DDC;background-color:#175DDC}.custom-control-input:focus ~ .custom-control-label::before{box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.custom-control-input:focus:not(:checked) ~ .custom-control-label::before{border-color:#81a9f2}.custom-control-input:not(:disabled):active ~ .custom-control-label::before{color:#fff;background-color:#afc8f7;border-color:#afc8f7}.custom-control-input:disabled ~ .custom-control-label{color:#6c757d}.custom-control-input:disabled ~ .custom-control-label::before{background-color:#e0e0e0}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fbfbfb;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50% / 50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before{border-color:#175DDC;background-color:#175DDC}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(23,93,220,0.5)}.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before{background-color:rgba(23,93,220,0.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked ~ .custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(23,93,220,0.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked ~ .custom-control-label::after{background-color:#fbfbfb;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(23,93,220,0.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;background-color:#fbfbfb;border:1px solid #ced4da;border-radius:.25rem;appearance:none}.custom-select:focus{border-color:#81a9f2;outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fbfbfb}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.15rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus ~ .custom-file-label{border-color:#81a9f2;box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.custom-file-input:disabled ~ .custom-file-label{background-color:#e0e0e0}.custom-file-input:lang(en) ~ .custom-file-label::after{content:"Browse"}.custom-file-input ~ .custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fbfbfb;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:calc(1rem + .4rem);padding:0;background-color:transparent;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(23,93,220,0.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(23,93,220,0.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(23,93,220,0.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#175DDC;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#afc8f7}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#175DDC;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#afc8f7}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#175DDC;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#afc8f7}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:hover,.nav-link:focus{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#175DDC}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:.75rem 1rem}.navbar>.container,.navbar>.container-fluid{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:0;padding-bottom:0;margin-right:1rem;font-size:2.1875rem;line-height:inherit;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.15rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:hover,.navbar-toggler:focus{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width: 0.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 1px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width: 1.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 2px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width: 2.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 3px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width: 3.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 4px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,0.9)}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:rgba(0,0,0,0.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,0.5)}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:rgba(0,0,0,0.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,0.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .nav-link.active{color:rgba(0,0,0,0.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,0.5);border-color:rgba(0,0,0,0.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0,0,0,0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,0.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,0.9)}.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:rgba(0,0,0,0.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,0.7)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,0.9)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,0.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,0.7);border-color:rgba(255,255,255,0.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255,255,255,0.7)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,0.7)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,0.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.6rem}.card-subtitle{margin-top:-.3rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.6rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,0.03);border-bottom:1px solid rgba(0,0,0,0.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.6rem 1.25rem;background-color:rgba(0,0,0,0.03);border-top:1px solid rgba(0,0,0,0.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.6rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:flex;flex-direction:column}.card-deck .card{margin-bottom:10px}@media (min-width: 1px){.card-deck{flex-flow:row wrap;margin-right:-10px;margin-left:-10px}.card-deck .card{display:flex;flex:1 0 0%;flex-direction:column;margin-right:10px;margin-bottom:0;margin-left:10px}}.card-group{display:flex;flex-direction:column}.card-group>.card{margin-bottom:10px}@media (min-width: 1px){.card-group{flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.6rem}@media (min-width: 1px){.card-columns{column-count:3;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#175DDC;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#104097;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#175DDC;border-color:#175DDC}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.15rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.badge{transition:none}}a.badge:hover,a.badge:focus{text-decoration:none}.badge:empty{display:none}.btn .badge,.swal2-popup .swal2-actions button .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#175DDC}a.badge-primary:hover,a.badge-primary:focus{color:#fff;background-color:#1249ae}a.badge-primary:focus,a.badge-primary.focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,0.5)}.badge-secondary{color:#212529;background-color:#ced4da}a.badge-secondary:hover,a.badge-secondary:focus{color:#212529;background-color:#b1bbc4}a.badge-secondary:focus,a.badge-secondary.focus{outline:0;box-shadow:0 0 0 .2rem rgba(206,212,218,0.5)}.badge-success{color:#fff;background-color:#00a65a}a.badge-success:hover,a.badge-success:focus{color:#fff;background-color:#00733e}a.badge-success:focus,a.badge-success.focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,166,90,0.5)}.badge-info{color:#fff;background-color:#555}a.badge-info:hover,a.badge-info:focus{color:#fff;background-color:#3c3c3c}a.badge-info:focus,a.badge-info.focus{outline:0;box-shadow:0 0 0 .2rem rgba(85,85,85,0.5)}.badge-warning{color:#fff;background-color:#bf7e16}a.badge-warning:hover,a.badge-warning:focus{color:#fff;background-color:#916011}a.badge-warning:focus,a.badge-warning.focus{outline:0;box-shadow:0 0 0 .2rem rgba(191,126,22,0.5)}.badge-danger{color:#fff;background-color:#dd4b39}a.badge-danger:hover,a.badge-danger:focus{color:#fff;background-color:#c23321}a.badge-danger:focus,a.badge-danger.focus{outline:0;box-shadow:0 0 0 .2rem rgba(221,75,57,0.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:hover,a.badge-light:focus{color:#212529;background-color:#dae0e5}a.badge-light:focus,a.badge-light.focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:hover,a.badge-dark:focus{color:#fff;background-color:#1d2124}a.badge-dark:focus,a.badge-dark.focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.badge-primary-accent{color:#fff;background-color:#1252A3}a.badge-primary-accent:hover,a.badge-primary-accent:focus{color:#fff;background-color:#0d3b75}a.badge-primary-accent:focus,a.badge-primary-accent.focus{outline:0;box-shadow:0 0 0 .2rem rgba(18,82,163,0.5)}.badge-secondary-alt{color:#fff;background-color:#1A3B66}a.badge-secondary-alt:hover,a.badge-secondary-alt:focus{color:#fff;background-color:#10233d}a.badge-secondary-alt:focus,a.badge-secondary-alt.focus{outline:0;box-shadow:0 0 0 .2rem rgba(26,59,102,0.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width: 1px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#0c3072;background-color:#d1dff8;border-color:#bed2f5}.alert-primary hr{border-top-color:#a8c3f2}.alert-primary .alert-link{color:#071d44}.alert-secondary{color:#6b6e71;background-color:#f5f6f8;border-color:#f1f3f5}.alert-secondary hr{border-top-color:#e2e6ea}.alert-secondary .alert-link{color:#525557}.alert-success{color:#00562f;background-color:#ccedde;border-color:#b8e6d1}.alert-success hr{border-top-color:#a5dfc5}.alert-success .alert-link{color:#002313}.alert-info{color:#2c2c2c;background-color:#ddd;border-color:#cfcfcf}.alert-info hr{border-top-color:#c2c2c2}.alert-info .alert-link{color:#131313}.alert-warning{color:#63420b;background-color:#f2e5d0;border-color:#eddbbe}.alert-warning hr{border-top-color:#e7d0aa}.alert-warning .alert-link{color:#352306}.alert-danger{color:#73271e;background-color:#f8dbd7;border-color:#f5cdc8}.alert-danger hr{border-top-color:#f1b9b2}.alert-danger .alert-link{color:#4b1913}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}.alert-primary-accent{color:#092b55;background-color:#d0dced;border-color:#bdcfe5}.alert-primary-accent hr{border-top-color:#abc2de}.alert-primary-accent .alert-link{color:#041427}.alert-secondary-alt{color:#0e1f35;background-color:#d1d8e0;border-color:#bfc8d4}.alert-secondary-alt hr{border-top-color:#b0bbca}.alert-secondary-alt .alert-link{color:#03070d}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#175DDC;transition:width 0.6s ease}@media (prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:1rem 1rem}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#333;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.6rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,0.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#333;background-color:#fff;border-color:rgba(0,0,0,0.125)}.list-group-horizontal{flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}@media (min-width: 1px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width: 2px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width: 3px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width: 4px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#0c3072;background-color:#bed2f5}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#0c3072;background-color:#a8c3f2}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#0c3072;border-color:#0c3072}.list-group-item-secondary{color:#6b6e71;background-color:#f1f3f5}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#6b6e71;background-color:#e2e6ea}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#6b6e71;border-color:#6b6e71}.list-group-item-success{color:#00562f;background-color:#b8e6d1}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#00562f;background-color:#a5dfc5}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#00562f;border-color:#00562f}.list-group-item-info{color:#2c2c2c;background-color:#cfcfcf}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#2c2c2c;background-color:#c2c2c2}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#2c2c2c;border-color:#2c2c2c}.list-group-item-warning{color:#63420b;background-color:#eddbbe}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#63420b;background-color:#e7d0aa}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#63420b;border-color:#63420b}.list-group-item-danger{color:#73271e;background-color:#f5cdc8}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#73271e;background-color:#f1b9b2}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#73271e;border-color:#73271e}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.list-group-item-primary-accent{color:#092b55;background-color:#bdcfe5}.list-group-item-primary-accent.list-group-item-action:hover,.list-group-item-primary-accent.list-group-item-action:focus{color:#092b55;background-color:#abc2de}.list-group-item-primary-accent.list-group-item-action.active{color:#fff;background-color:#092b55;border-color:#092b55}.list-group-item-secondary-alt{color:#0e1f35;background-color:#bfc8d4}.list-group-item-secondary-alt.list-group-item-action:hover,.list-group-item-secondary-alt.list-group-item-action:focus{color:#0e1f35;background-color:#b0bbca}.list-group-item-secondary-alt.list-group-item-action.active{color:#fff;background-color:#0e1f35;border-color:#0e1f35}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):hover,.close:not(:disabled):not(.disabled):focus{opacity:.75}button.close{padding:0;background-color:transparent;border:0;appearance:none}a.close.disabled{pointer-events:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform 0.3s ease-out;transform:translate(0, -50px)}@media (prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-header,.modal-dialog-scrollable .modal-footer{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.3}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;align-items:center;justify-content:flex-end;padding:1rem;border-top:1px solid #dee2e6;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 1px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width: 3px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width: 4px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top,.bs-tooltip-auto[x-placement^="top"]{padding:.4rem 0}.bs-tooltip-top .arrow,.bs-tooltip-auto[x-placement^="top"] .arrow{bottom:0}.bs-tooltip-top .arrow::before,.bs-tooltip-auto[x-placement^="top"] .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-right,.bs-tooltip-auto[x-placement^="right"]{padding:0 .4rem}.bs-tooltip-right .arrow,.bs-tooltip-auto[x-placement^="right"] .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-right .arrow::before,.bs-tooltip-auto[x-placement^="right"] .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-bottom,.bs-tooltip-auto[x-placement^="bottom"]{padding:.4rem 0}.bs-tooltip-bottom .arrow,.bs-tooltip-auto[x-placement^="bottom"] .arrow{top:0}.bs-tooltip-bottom .arrow::before,.bs-tooltip-auto[x-placement^="bottom"] .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-left,.bs-tooltip-auto[x-placement^="left"]{padding:0 .4rem}.bs-tooltip-left .arrow,.bs-tooltip-auto[x-placement^="left"] .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-left .arrow::before,.bs-tooltip-auto[x-placement^="left"] .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::before,.popover .arrow::after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-top,.bs-popover-auto[x-placement^="top"]{margin-bottom:.5rem}.bs-popover-top>.arrow,.bs-popover-auto[x-placement^="top"]>.arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-top>.arrow::before,.bs-popover-auto[x-placement^="top"]>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,0.25)}.bs-popover-top>.arrow::after,.bs-popover-auto[x-placement^="top"]>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-right,.bs-popover-auto[x-placement^="right"]{margin-left:.5rem}.bs-popover-right>.arrow,.bs-popover-auto[x-placement^="right"]>.arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-right>.arrow::before,.bs-popover-auto[x-placement^="right"]>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,0.25)}.bs-popover-right>.arrow::after,.bs-popover-auto[x-placement^="right"]>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-bottom,.bs-popover-auto[x-placement^="bottom"]{margin-top:.5rem}.bs-popover-bottom>.arrow,.bs-popover-auto[x-placement^="bottom"]>.arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-bottom>.arrow::before,.bs-popover-auto[x-placement^="bottom"]>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,0.25)}.bs-popover-bottom>.arrow::after,.bs-popover-auto[x-placement^="bottom"]>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-bottom .popover-header::before,.bs-popover-auto[x-placement^="bottom"] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-left,.bs-popover-auto[x-placement^="left"]{margin-right:.5rem}.bs-popover-left>.arrow,.bs-popover-auto[x-placement^="left"]>.arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-left>.arrow::before,.bs-popover-auto[x-placement^="left"]>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,0.25)}.bs-popover-left>.arrow::after,.bs-popover-auto[x-placement^="left"]>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#333}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-left),.active.carousel-item-right{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-right),.active.carousel-item-left{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:0s .6s opacity}@media (prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity 0.15s ease}@media (prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50% / 100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity 0.6s ease}@media (prefers-reduced-motion: reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.bg-primary{background-color:#175DDC !important}a.bg-primary:hover,a.bg-primary:focus,button.bg-primary:hover,button.bg-primary:focus{background-color:#1249ae !important}.bg-secondary{background-color:#ced4da !important}a.bg-secondary:hover,a.bg-secondary:focus,button.bg-secondary:hover,button.bg-secondary:focus{background-color:#b1bbc4 !important}.bg-success{background-color:#00a65a !important}a.bg-success:hover,a.bg-success:focus,button.bg-success:hover,button.bg-success:focus{background-color:#00733e !important}.bg-info{background-color:#555 !important}a.bg-info:hover,a.bg-info:focus,button.bg-info:hover,button.bg-info:focus{background-color:#3c3c3c !important}.bg-warning{background-color:#bf7e16 !important}a.bg-warning:hover,a.bg-warning:focus,button.bg-warning:hover,button.bg-warning:focus{background-color:#916011 !important}.bg-danger{background-color:#dd4b39 !important}a.bg-danger:hover,a.bg-danger:focus,button.bg-danger:hover,button.bg-danger:focus{background-color:#c23321 !important}.bg-light{background-color:#f8f9fa !important}a.bg-light:hover,a.bg-light:focus,button.bg-light:hover,button.bg-light:focus{background-color:#dae0e5 !important}.bg-dark{background-color:#343a40 !important}a.bg-dark:hover,a.bg-dark:focus,button.bg-dark:hover,button.bg-dark:focus{background-color:#1d2124 !important}.bg-primary-accent{background-color:#1252A3 !important}a.bg-primary-accent:hover,a.bg-primary-accent:focus,button.bg-primary-accent:hover,button.bg-primary-accent:focus{background-color:#0d3b75 !important}.bg-secondary-alt{background-color:#1A3B66 !important}a.bg-secondary-alt:hover,a.bg-secondary-alt:focus,button.bg-secondary-alt:hover,button.bg-secondary-alt:focus{background-color:#10233d !important}.bg-white{background-color:#fff !important}.bg-transparent{background-color:transparent !important}.border{border:1px solid #dee2e6 !important}.border-top{border-top:1px solid #dee2e6 !important}.border-right{border-right:1px solid #dee2e6 !important}.border-bottom{border-bottom:1px solid #dee2e6 !important}.border-left{border-left:1px solid #dee2e6 !important}.border-0{border:0 !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.border-primary{border-color:#175DDC !important}.border-secondary{border-color:#ced4da !important}.border-success{border-color:#00a65a !important}.border-info{border-color:#555 !important}.border-warning{border-color:#bf7e16 !important}.border-danger{border-color:#dd4b39 !important}.border-light{border-color:#f8f9fa !important}.border-dark{border-color:#343a40 !important}.border-primary-accent{border-color:#1252A3 !important}.border-secondary-alt{border-color:#1A3B66 !important}.border-white{border-color:#fff !important}.rounded-sm{border-radius:.2rem !important}.rounded,.table.table-list td.table-list-icon img,app-avatar img{border-radius:.25rem !important}.rounded-top{border-top-left-radius:.25rem !important;border-top-right-radius:.25rem !important}.rounded-right{border-top-right-radius:.25rem !important;border-bottom-right-radius:.25rem !important}.rounded-bottom{border-bottom-right-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-left{border-top-left-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-lg{border-radius:.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-0{border-radius:0 !important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}@media (min-width: 1px){.d-sm-none{display:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}}@media (min-width: 2px){.d-md-none{display:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}}@media (min-width: 3px){.d-lg-none{display:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}}@media (min-width: 4px){.d-xl-none{display:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}}@media print{.d-print-none{display:none !important}.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.85714%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-fill{flex:1 1 auto !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}@media (min-width: 1px){.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}}@media (min-width: 2px){.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}}@media (min-width: 3px){.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}}@media (min-width: 4px){.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}}.float-left{float:left !important}.float-right{float:right !important}.float-none{float:none !important}@media (min-width: 1px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media (min-width: 2px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media (min-width: 3px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media (min-width: 4px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports (position: sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only,.table.table-list tr:not(:hover) td.table-list-options>.dropdown:not(.show) button:not(:focus):not(:active),.table.table-list tr:not(:hover) td.table-list-options>button:not(:focus):not(:active){position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important}.shadow{box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important}.shadow-none{box-shadow:none !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mw-100{max-width:100% !important}.mh-100{max-height:100% !important}.min-vw-100{min-width:100vw !important}.min-vh-100{min-height:100vh !important}.vw-100{width:100vw !important}.vh-100{height:100vh !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:.25rem !important}.mt-1,.my-1{margin-top:.25rem !important}.mr-1,.mx-1{margin-right:.25rem !important}.mb-1,.my-1{margin-bottom:.25rem !important}.ml-1,.mx-1{margin-left:.25rem !important}.m-2{margin:.5rem !important}.mt-2,.form-check-block .form-check-label>span,.my-2{margin-top:.5rem !important}.mr-2,.mx-2{margin-right:.5rem !important}.mb-2,.my-2{margin-bottom:.5rem !important}.ml-2,.mx-2{margin-left:.5rem !important}.m-3{margin:1rem !important}.mt-3,.form-check-block+.form-check-block:not(.mt-2),.my-3{margin-top:1rem !important}.mr-3,.mx-3{margin-right:1rem !important}.mb-3,.my-3{margin-bottom:1rem !important}.ml-3,.mx-3{margin-left:1rem !important}.m-4{margin:1.5rem !important}.mt-4,.my-4{margin-top:1.5rem !important}.mr-4,.mx-4{margin-right:1.5rem !important}.mb-4,.card-body-header,.my-4{margin-bottom:1.5rem !important}.ml-4,.mx-4{margin-left:1.5rem !important}.m-5{margin:3rem !important}.mt-5,.my-5{margin-top:3rem !important}.mr-5,.mx-5{margin-right:3rem !important}.mb-5,.my-5{margin-bottom:3rem !important}.ml-5,.mx-5{margin-left:3rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:.25rem !important}.pt-1,.py-1{padding-top:.25rem !important}.pr-1,.px-1{padding-right:.25rem !important}.pb-1,.py-1{padding-bottom:.25rem !important}.pl-1,.px-1{padding-left:.25rem !important}.p-2{padding:.5rem !important}.pt-2,.py-2{padding-top:.5rem !important}.pr-2,.px-2{padding-right:.5rem !important}.pb-2,.py-2{padding-bottom:.5rem !important}.pl-2,.px-2{padding-left:.5rem !important}.p-3{padding:1rem !important}.pt-3,.py-3{padding-top:1rem !important}.pr-3,.px-3{padding-right:1rem !important}.pb-3,.py-3{padding-bottom:1rem !important}.pl-3,.px-3{padding-left:1rem !important}.p-4{padding:1.5rem !important}.pt-4,.py-4{padding-top:1.5rem !important}.pr-4,.px-4{padding-right:1.5rem !important}.pb-4,.py-4{padding-bottom:1.5rem !important}.pl-4,.px-4{padding-left:1.5rem !important}.p-5{padding:3rem !important}.pt-5,.py-5{padding-top:3rem !important}.pr-5,.px-5{padding-right:3rem !important}.pb-5,.py-5{padding-bottom:3rem !important}.pl-5,.px-5{padding-left:3rem !important}.m-n1{margin:-.25rem !important}.mt-n1,.my-n1{margin-top:-.25rem !important}.mr-n1,.mx-n1{margin-right:-.25rem !important}.mb-n1,.my-n1{margin-bottom:-.25rem !important}.ml-n1,.mx-n1{margin-left:-.25rem !important}.m-n2{margin:-.5rem !important}.mt-n2,.my-n2{margin-top:-.5rem !important}.mr-n2,.mx-n2{margin-right:-.5rem !important}.mb-n2,.my-n2{margin-bottom:-.5rem !important}.ml-n2,.mx-n2{margin-left:-.5rem !important}.m-n3{margin:-1rem !important}.mt-n3,.my-n3{margin-top:-1rem !important}.mr-n3,.mx-n3{margin-right:-1rem !important}.mb-n3,.my-n3{margin-bottom:-1rem !important}.ml-n3,.mx-n3{margin-left:-1rem !important}.m-n4{margin:-1.5rem !important}.mt-n4,.my-n4{margin-top:-1.5rem !important}.mr-n4,.mx-n4{margin-right:-1.5rem !important}.mb-n4,.my-n4{margin-bottom:-1.5rem !important}.ml-n4,.mx-n4{margin-left:-1.5rem !important}.m-n5{margin:-3rem !important}.mt-n5,.my-n5{margin-top:-3rem !important}.mr-n5,.mx-n5{margin-right:-3rem !important}.mb-n5,.my-n5{margin-bottom:-3rem !important}.ml-n5,.mx-n5{margin-left:-3rem !important}.m-auto{margin:auto !important}.mt-auto,.my-auto{margin-top:auto !important}.mr-auto,.mx-auto{margin-right:auto !important}.mb-auto,.my-auto{margin-bottom:auto !important}.ml-auto,.mx-auto{margin-left:auto !important}@media (min-width: 1px){.m-sm-0{margin:0 !important}.mt-sm-0,.my-sm-0{margin-top:0 !important}.mr-sm-0,.mx-sm-0{margin-right:0 !important}.mb-sm-0,.my-sm-0{margin-bottom:0 !important}.ml-sm-0,.mx-sm-0{margin-left:0 !important}.m-sm-1{margin:.25rem !important}.mt-sm-1,.my-sm-1{margin-top:.25rem !important}.mr-sm-1,.mx-sm-1{margin-right:.25rem !important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem !important}.ml-sm-1,.mx-sm-1{margin-left:.25rem !important}.m-sm-2{margin:.5rem !important}.mt-sm-2,.my-sm-2{margin-top:.5rem !important}.mr-sm-2,.mx-sm-2{margin-right:.5rem !important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem !important}.ml-sm-2,.mx-sm-2{margin-left:.5rem !important}.m-sm-3{margin:1rem !important}.mt-sm-3,.my-sm-3{margin-top:1rem !important}.mr-sm-3,.mx-sm-3{margin-right:1rem !important}.mb-sm-3,.my-sm-3{margin-bottom:1rem !important}.ml-sm-3,.mx-sm-3{margin-left:1rem !important}.m-sm-4{margin:1.5rem !important}.mt-sm-4,.my-sm-4{margin-top:1.5rem !important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem !important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem !important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem !important}.m-sm-5{margin:3rem !important}.mt-sm-5,.my-sm-5{margin-top:3rem !important}.mr-sm-5,.mx-sm-5{margin-right:3rem !important}.mb-sm-5,.my-sm-5{margin-bottom:3rem !important}.ml-sm-5,.mx-sm-5{margin-left:3rem !important}.p-sm-0{padding:0 !important}.pt-sm-0,.py-sm-0{padding-top:0 !important}.pr-sm-0,.px-sm-0{padding-right:0 !important}.pb-sm-0,.py-sm-0{padding-bottom:0 !important}.pl-sm-0,.px-sm-0{padding-left:0 !important}.p-sm-1{padding:.25rem !important}.pt-sm-1,.py-sm-1{padding-top:.25rem !important}.pr-sm-1,.px-sm-1{padding-right:.25rem !important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem !important}.pl-sm-1,.px-sm-1{padding-left:.25rem !important}.p-sm-2{padding:.5rem !important}.pt-sm-2,.py-sm-2{padding-top:.5rem !important}.pr-sm-2,.px-sm-2{padding-right:.5rem !important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem !important}.pl-sm-2,.px-sm-2{padding-left:.5rem !important}.p-sm-3{padding:1rem !important}.pt-sm-3,.py-sm-3{padding-top:1rem !important}.pr-sm-3,.px-sm-3{padding-right:1rem !important}.pb-sm-3,.py-sm-3{padding-bottom:1rem !important}.pl-sm-3,.px-sm-3{padding-left:1rem !important}.p-sm-4{padding:1.5rem !important}.pt-sm-4,.py-sm-4{padding-top:1.5rem !important}.pr-sm-4,.px-sm-4{padding-right:1.5rem !important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem !important}.pl-sm-4,.px-sm-4{padding-left:1.5rem !important}.p-sm-5{padding:3rem !important}.pt-sm-5,.py-sm-5{padding-top:3rem !important}.pr-sm-5,.px-sm-5{padding-right:3rem !important}.pb-sm-5,.py-sm-5{padding-bottom:3rem !important}.pl-sm-5,.px-sm-5{padding-left:3rem !important}.m-sm-n1{margin:-.25rem !important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem !important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem !important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem !important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem !important}.m-sm-n2{margin:-.5rem !important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem !important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem !important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem !important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem !important}.m-sm-n3{margin:-1rem !important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem !important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem !important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem !important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem !important}.m-sm-n4{margin:-1.5rem !important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem !important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem !important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem !important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem !important}.m-sm-n5{margin:-3rem !important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem !important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem !important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem !important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem !important}.m-sm-auto{margin:auto !important}.mt-sm-auto,.my-sm-auto{margin-top:auto !important}.mr-sm-auto,.mx-sm-auto{margin-right:auto !important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto !important}.ml-sm-auto,.mx-sm-auto{margin-left:auto !important}}@media (min-width: 2px){.m-md-0{margin:0 !important}.mt-md-0,.my-md-0{margin-top:0 !important}.mr-md-0,.mx-md-0{margin-right:0 !important}.mb-md-0,.my-md-0{margin-bottom:0 !important}.ml-md-0,.mx-md-0{margin-left:0 !important}.m-md-1{margin:.25rem !important}.mt-md-1,.my-md-1{margin-top:.25rem !important}.mr-md-1,.mx-md-1{margin-right:.25rem !important}.mb-md-1,.my-md-1{margin-bottom:.25rem !important}.ml-md-1,.mx-md-1{margin-left:.25rem !important}.m-md-2{margin:.5rem !important}.mt-md-2,.my-md-2{margin-top:.5rem !important}.mr-md-2,.mx-md-2{margin-right:.5rem !important}.mb-md-2,.my-md-2{margin-bottom:.5rem !important}.ml-md-2,.mx-md-2{margin-left:.5rem !important}.m-md-3{margin:1rem !important}.mt-md-3,.my-md-3{margin-top:1rem !important}.mr-md-3,.mx-md-3{margin-right:1rem !important}.mb-md-3,.my-md-3{margin-bottom:1rem !important}.ml-md-3,.mx-md-3{margin-left:1rem !important}.m-md-4{margin:1.5rem !important}.mt-md-4,.my-md-4{margin-top:1.5rem !important}.mr-md-4,.mx-md-4{margin-right:1.5rem !important}.mb-md-4,.my-md-4{margin-bottom:1.5rem !important}.ml-md-4,.mx-md-4{margin-left:1.5rem !important}.m-md-5{margin:3rem !important}.mt-md-5,.my-md-5{margin-top:3rem !important}.mr-md-5,.mx-md-5{margin-right:3rem !important}.mb-md-5,.my-md-5{margin-bottom:3rem !important}.ml-md-5,.mx-md-5{margin-left:3rem !important}.p-md-0{padding:0 !important}.pt-md-0,.py-md-0{padding-top:0 !important}.pr-md-0,.px-md-0{padding-right:0 !important}.pb-md-0,.py-md-0{padding-bottom:0 !important}.pl-md-0,.px-md-0{padding-left:0 !important}.p-md-1{padding:.25rem !important}.pt-md-1,.py-md-1{padding-top:.25rem !important}.pr-md-1,.px-md-1{padding-right:.25rem !important}.pb-md-1,.py-md-1{padding-bottom:.25rem !important}.pl-md-1,.px-md-1{padding-left:.25rem !important}.p-md-2{padding:.5rem !important}.pt-md-2,.py-md-2{padding-top:.5rem !important}.pr-md-2,.px-md-2{padding-right:.5rem !important}.pb-md-2,.py-md-2{padding-bottom:.5rem !important}.pl-md-2,.px-md-2{padding-left:.5rem !important}.p-md-3{padding:1rem !important}.pt-md-3,.py-md-3{padding-top:1rem !important}.pr-md-3,.px-md-3{padding-right:1rem !important}.pb-md-3,.py-md-3{padding-bottom:1rem !important}.pl-md-3,.px-md-3{padding-left:1rem !important}.p-md-4{padding:1.5rem !important}.pt-md-4,.py-md-4{padding-top:1.5rem !important}.pr-md-4,.px-md-4{padding-right:1.5rem !important}.pb-md-4,.py-md-4{padding-bottom:1.5rem !important}.pl-md-4,.px-md-4{padding-left:1.5rem !important}.p-md-5{padding:3rem !important}.pt-md-5,.py-md-5{padding-top:3rem !important}.pr-md-5,.px-md-5{padding-right:3rem !important}.pb-md-5,.py-md-5{padding-bottom:3rem !important}.pl-md-5,.px-md-5{padding-left:3rem !important}.m-md-n1{margin:-.25rem !important}.mt-md-n1,.my-md-n1{margin-top:-.25rem !important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem !important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem !important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem !important}.m-md-n2{margin:-.5rem !important}.mt-md-n2,.my-md-n2{margin-top:-.5rem !important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem !important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem !important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem !important}.m-md-n3{margin:-1rem !important}.mt-md-n3,.my-md-n3{margin-top:-1rem !important}.mr-md-n3,.mx-md-n3{margin-right:-1rem !important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem !important}.ml-md-n3,.mx-md-n3{margin-left:-1rem !important}.m-md-n4{margin:-1.5rem !important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem !important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem !important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem !important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem !important}.m-md-n5{margin:-3rem !important}.mt-md-n5,.my-md-n5{margin-top:-3rem !important}.mr-md-n5,.mx-md-n5{margin-right:-3rem !important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem !important}.ml-md-n5,.mx-md-n5{margin-left:-3rem !important}.m-md-auto{margin:auto !important}.mt-md-auto,.my-md-auto{margin-top:auto !important}.mr-md-auto,.mx-md-auto{margin-right:auto !important}.mb-md-auto,.my-md-auto{margin-bottom:auto !important}.ml-md-auto,.mx-md-auto{margin-left:auto !important}}@media (min-width: 3px){.m-lg-0{margin:0 !important}.mt-lg-0,.my-lg-0{margin-top:0 !important}.mr-lg-0,.mx-lg-0{margin-right:0 !important}.mb-lg-0,.my-lg-0{margin-bottom:0 !important}.ml-lg-0,.mx-lg-0{margin-left:0 !important}.m-lg-1{margin:.25rem !important}.mt-lg-1,.my-lg-1{margin-top:.25rem !important}.mr-lg-1,.mx-lg-1{margin-right:.25rem !important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem !important}.ml-lg-1,.mx-lg-1{margin-left:.25rem !important}.m-lg-2{margin:.5rem !important}.mt-lg-2,.my-lg-2{margin-top:.5rem !important}.mr-lg-2,.mx-lg-2{margin-right:.5rem !important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem !important}.ml-lg-2,.mx-lg-2{margin-left:.5rem !important}.m-lg-3{margin:1rem !important}.mt-lg-3,.my-lg-3{margin-top:1rem !important}.mr-lg-3,.mx-lg-3{margin-right:1rem !important}.mb-lg-3,.my-lg-3{margin-bottom:1rem !important}.ml-lg-3,.mx-lg-3{margin-left:1rem !important}.m-lg-4{margin:1.5rem !important}.mt-lg-4,.my-lg-4{margin-top:1.5rem !important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem !important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem !important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem !important}.m-lg-5{margin:3rem !important}.mt-lg-5,.my-lg-5{margin-top:3rem !important}.mr-lg-5,.mx-lg-5{margin-right:3rem !important}.mb-lg-5,.my-lg-5{margin-bottom:3rem !important}.ml-lg-5,.mx-lg-5{margin-left:3rem !important}.p-lg-0{padding:0 !important}.pt-lg-0,.py-lg-0{padding-top:0 !important}.pr-lg-0,.px-lg-0{padding-right:0 !important}.pb-lg-0,.py-lg-0{padding-bottom:0 !important}.pl-lg-0,.px-lg-0{padding-left:0 !important}.p-lg-1{padding:.25rem !important}.pt-lg-1,.py-lg-1{padding-top:.25rem !important}.pr-lg-1,.px-lg-1{padding-right:.25rem !important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem !important}.pl-lg-1,.px-lg-1{padding-left:.25rem !important}.p-lg-2{padding:.5rem !important}.pt-lg-2,.py-lg-2{padding-top:.5rem !important}.pr-lg-2,.px-lg-2{padding-right:.5rem !important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem !important}.pl-lg-2,.px-lg-2{padding-left:.5rem !important}.p-lg-3{padding:1rem !important}.pt-lg-3,.py-lg-3{padding-top:1rem !important}.pr-lg-3,.px-lg-3{padding-right:1rem !important}.pb-lg-3,.py-lg-3{padding-bottom:1rem !important}.pl-lg-3,.px-lg-3{padding-left:1rem !important}.p-lg-4{padding:1.5rem !important}.pt-lg-4,.py-lg-4{padding-top:1.5rem !important}.pr-lg-4,.px-lg-4{padding-right:1.5rem !important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem !important}.pl-lg-4,.px-lg-4{padding-left:1.5rem !important}.p-lg-5{padding:3rem !important}.pt-lg-5,.py-lg-5{padding-top:3rem !important}.pr-lg-5,.px-lg-5{padding-right:3rem !important}.pb-lg-5,.py-lg-5{padding-bottom:3rem !important}.pl-lg-5,.px-lg-5{padding-left:3rem !important}.m-lg-n1{margin:-.25rem !important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem !important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem !important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem !important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem !important}.m-lg-n2{margin:-.5rem !important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem !important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem !important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem !important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem !important}.m-lg-n3{margin:-1rem !important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem !important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem !important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem !important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem !important}.m-lg-n4{margin:-1.5rem !important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem !important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem !important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem !important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem !important}.m-lg-n5{margin:-3rem !important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem !important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem !important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem !important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem !important}.m-lg-auto{margin:auto !important}.mt-lg-auto,.my-lg-auto{margin-top:auto !important}.mr-lg-auto,.mx-lg-auto{margin-right:auto !important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto !important}.ml-lg-auto,.mx-lg-auto{margin-left:auto !important}}@media (min-width: 4px){.m-xl-0{margin:0 !important}.mt-xl-0,.my-xl-0{margin-top:0 !important}.mr-xl-0,.mx-xl-0{margin-right:0 !important}.mb-xl-0,.my-xl-0{margin-bottom:0 !important}.ml-xl-0,.mx-xl-0{margin-left:0 !important}.m-xl-1{margin:.25rem !important}.mt-xl-1,.my-xl-1{margin-top:.25rem !important}.mr-xl-1,.mx-xl-1{margin-right:.25rem !important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem !important}.ml-xl-1,.mx-xl-1{margin-left:.25rem !important}.m-xl-2{margin:.5rem !important}.mt-xl-2,.my-xl-2{margin-top:.5rem !important}.mr-xl-2,.mx-xl-2{margin-right:.5rem !important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem !important}.ml-xl-2,.mx-xl-2{margin-left:.5rem !important}.m-xl-3{margin:1rem !important}.mt-xl-3,.my-xl-3{margin-top:1rem !important}.mr-xl-3,.mx-xl-3{margin-right:1rem !important}.mb-xl-3,.my-xl-3{margin-bottom:1rem !important}.ml-xl-3,.mx-xl-3{margin-left:1rem !important}.m-xl-4{margin:1.5rem !important}.mt-xl-4,.my-xl-4{margin-top:1.5rem !important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem !important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem !important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem !important}.m-xl-5{margin:3rem !important}.mt-xl-5,.my-xl-5{margin-top:3rem !important}.mr-xl-5,.mx-xl-5{margin-right:3rem !important}.mb-xl-5,.my-xl-5{margin-bottom:3rem !important}.ml-xl-5,.mx-xl-5{margin-left:3rem !important}.p-xl-0{padding:0 !important}.pt-xl-0,.py-xl-0{padding-top:0 !important}.pr-xl-0,.px-xl-0{padding-right:0 !important}.pb-xl-0,.py-xl-0{padding-bottom:0 !important}.pl-xl-0,.px-xl-0{padding-left:0 !important}.p-xl-1{padding:.25rem !important}.pt-xl-1,.py-xl-1{padding-top:.25rem !important}.pr-xl-1,.px-xl-1{padding-right:.25rem !important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem !important}.pl-xl-1,.px-xl-1{padding-left:.25rem !important}.p-xl-2{padding:.5rem !important}.pt-xl-2,.py-xl-2{padding-top:.5rem !important}.pr-xl-2,.px-xl-2{padding-right:.5rem !important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem !important}.pl-xl-2,.px-xl-2{padding-left:.5rem !important}.p-xl-3{padding:1rem !important}.pt-xl-3,.py-xl-3{padding-top:1rem !important}.pr-xl-3,.px-xl-3{padding-right:1rem !important}.pb-xl-3,.py-xl-3{padding-bottom:1rem !important}.pl-xl-3,.px-xl-3{padding-left:1rem !important}.p-xl-4{padding:1.5rem !important}.pt-xl-4,.py-xl-4{padding-top:1.5rem !important}.pr-xl-4,.px-xl-4{padding-right:1.5rem !important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem !important}.pl-xl-4,.px-xl-4{padding-left:1.5rem !important}.p-xl-5{padding:3rem !important}.pt-xl-5,.py-xl-5{padding-top:3rem !important}.pr-xl-5,.px-xl-5{padding-right:3rem !important}.pb-xl-5,.py-xl-5{padding-bottom:3rem !important}.pl-xl-5,.px-xl-5{padding-left:3rem !important}.m-xl-n1{margin:-.25rem !important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem !important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem !important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem !important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem !important}.m-xl-n2{margin:-.5rem !important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem !important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem !important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem !important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem !important}.m-xl-n3{margin:-1rem !important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem !important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem !important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem !important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem !important}.m-xl-n4{margin:-1.5rem !important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem !important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem !important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem !important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem !important}.m-xl-n5{margin:-3rem !important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem !important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem !important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem !important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem !important}.m-xl-auto{margin:auto !important}.mt-xl-auto,.my-xl-auto{margin-top:auto !important}.mr-xl-auto,.mx-xl-auto{margin-right:auto !important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto !important}.ml-xl-auto,.mx-xl-auto{margin-left:auto !important}}.text-monospace,.totp .totp-code{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace !important}.text-justify{text-align:justify !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}@media (min-width: 1px){.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 2px){.text-md-left{text-align:left !important}.text-md-right{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 3px){.text-lg-left{text-align:left !important}.text-lg-right{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 4px){.text-xl-left{text-align:left !important}.text-xl-right{text-align:right !important}.text-xl-center{text-align:center !important}}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.font-weight-light{font-weight:300 !important}.font-weight-lighter{font-weight:lighter !important}.font-weight-normal{font-weight:400 !important}.font-weight-bold{font-weight:700 !important}.font-weight-bolder{font-weight:bolder !important}.font-italic{font-style:italic !important}.text-white{color:#fff !important}.text-primary{color:#175DDC !important}a.text-primary:hover,a.text-primary:focus{color:#104097 !important}.text-secondary{color:#ced4da !important}a.text-secondary:hover,a.text-secondary:focus{color:#a2aeb9 !important}.text-success{color:#00a65a !important}a.text-success:hover,a.text-success:focus{color:#005a31 !important}.text-info{color:#555 !important}a.text-info:hover,a.text-info:focus{color:#2f2f2f !important}.text-warning{color:#bf7e16 !important}a.text-warning:hover,a.text-warning:focus{color:#7a510e !important}.text-danger{color:#dd4b39 !important}a.text-danger:hover,a.text-danger:focus{color:#ac2d1e !important}.text-light{color:#f8f9fa !important}a.text-light:hover,a.text-light:focus{color:#cbd3da !important}.text-dark{color:#343a40 !important}a.text-dark:hover,a.text-dark:focus{color:#121416 !important}.text-primary-accent{color:#1252A3 !important}a.text-primary-accent:hover,a.text-primary-accent:focus{color:#0a2f5e !important}.text-secondary-alt{color:#1A3B66 !important}a.text-secondary-alt:hover,a.text-secondary-alt:focus{color:#0a1829 !important}.text-body{color:#333 !important}.text-muted,.card-header small,.modal-header small{color:#6c757d !important}.text-black-50{color:rgba(0,0,0,0.5) !important}.text-white-50{color:rgba(255,255,255,0.5) !important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none !important}.text-break{word-break:break-word !important;overflow-wrap:break-word !important}.text-reset{color:inherit !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media print{*,*::before,*::after{text-shadow:none !important;box-shadow:none !important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap !important}pre,blockquote{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:3px !important}.container{min-width:3px !important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #dee2e6 !important}.table-dark{color:inherit}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}/*! - * 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:'FontAwesome';src:url(../fonts/fontawesome-webfont.eot);src:url(../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0) format("embedded-opentype"),url(../fonts/fontawesome-webfont.woff2) format("woff2"),url(../fonts/fontawesome-webfont.woff) format("woff"),url(../fonts/fontawesome-webfont.ttf) format("truetype"),url(../fonts/fontawesome-webfont.svg#fontawesomeregular) format("svg");font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\F000"}.fa-music:before{content:"\F001"}.fa-search:before{content:"\F002"}.fa-envelope-o:before{content:"\F003"}.fa-heart:before{content:"\F004"}.fa-star:before{content:"\F005"}.fa-star-o:before{content:"\F006"}.fa-user:before{content:"\F007"}.fa-film:before{content:"\F008"}.fa-th-large:before{content:"\F009"}.fa-th:before{content:"\F00A"}.fa-th-list:before{content:"\F00B"}.fa-check:before{content:"\F00C"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\F00D"}.fa-search-plus:before{content:"\F00E"}.fa-search-minus:before{content:"\F010"}.fa-power-off:before{content:"\F011"}.fa-signal:before{content:"\F012"}.fa-gear:before,.fa-cog:before{content:"\F013"}.fa-trash-o:before{content:"\F014"}.fa-home:before{content:"\F015"}.fa-file-o:before{content:"\F016"}.fa-clock-o:before{content:"\F017"}.fa-road:before{content:"\F018"}.fa-download:before{content:"\F019"}.fa-arrow-circle-o-down:before{content:"\F01A"}.fa-arrow-circle-o-up:before{content:"\F01B"}.fa-inbox:before{content:"\F01C"}.fa-play-circle-o:before{content:"\F01D"}.fa-rotate-right:before,.fa-repeat:before{content:"\F01E"}.fa-refresh:before{content:"\F021"}.fa-list-alt:before{content:"\F022"}.fa-lock:before{content:"\F023"}.fa-flag:before{content:"\F024"}.fa-headphones:before{content:"\F025"}.fa-volume-off:before{content:"\F026"}.fa-volume-down:before{content:"\F027"}.fa-volume-up:before{content:"\F028"}.fa-qrcode:before{content:"\F029"}.fa-barcode:before{content:"\F02A"}.fa-tag:before{content:"\F02B"}.fa-tags:before{content:"\F02C"}.fa-book:before{content:"\F02D"}.fa-bookmark:before{content:"\F02E"}.fa-print:before{content:"\F02F"}.fa-camera:before{content:"\F030"}.fa-font:before{content:"\F031"}.fa-bold:before{content:"\F032"}.fa-italic:before{content:"\F033"}.fa-text-height:before{content:"\F034"}.fa-text-width:before{content:"\F035"}.fa-align-left:before{content:"\F036"}.fa-align-center:before{content:"\F037"}.fa-align-right:before{content:"\F038"}.fa-align-justify:before{content:"\F039"}.fa-list:before{content:"\F03A"}.fa-dedent:before,.fa-outdent:before{content:"\F03B"}.fa-indent:before{content:"\F03C"}.fa-video-camera:before{content:"\F03D"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\F03E"}.fa-pencil:before{content:"\F040"}.fa-map-marker:before{content:"\F041"}.fa-adjust:before{content:"\F042"}.fa-tint:before{content:"\F043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\F044"}.fa-share-square-o:before{content:"\F045"}.fa-check-square-o:before{content:"\F046"}.fa-arrows:before{content:"\F047"}.fa-step-backward:before{content:"\F048"}.fa-fast-backward:before{content:"\F049"}.fa-backward:before{content:"\F04A"}.fa-play:before{content:"\F04B"}.fa-pause:before{content:"\F04C"}.fa-stop:before{content:"\F04D"}.fa-forward:before{content:"\F04E"}.fa-fast-forward:before{content:"\F050"}.fa-step-forward:before{content:"\F051"}.fa-eject:before{content:"\F052"}.fa-chevron-left:before{content:"\F053"}.fa-chevron-right:before{content:"\F054"}.fa-plus-circle:before{content:"\F055"}.fa-minus-circle:before{content:"\F056"}.fa-times-circle:before{content:"\F057"}.fa-check-circle:before{content:"\F058"}.fa-question-circle:before{content:"\F059"}.fa-info-circle:before{content:"\F05A"}.fa-crosshairs:before{content:"\F05B"}.fa-times-circle-o:before{content:"\F05C"}.fa-check-circle-o:before{content:"\F05D"}.fa-ban:before{content:"\F05E"}.fa-arrow-left:before{content:"\F060"}.fa-arrow-right:before{content:"\F061"}.fa-arrow-up:before{content:"\F062"}.fa-arrow-down:before{content:"\F063"}.fa-mail-forward:before,.fa-share:before{content:"\F064"}.fa-expand:before{content:"\F065"}.fa-compress:before{content:"\F066"}.fa-plus:before{content:"\F067"}.fa-minus:before{content:"\F068"}.fa-asterisk:before{content:"\F069"}.fa-exclamation-circle:before{content:"\F06A"}.fa-gift:before{content:"\F06B"}.fa-leaf:before{content:"\F06C"}.fa-fire:before{content:"\F06D"}.fa-eye:before{content:"\F06E"}.fa-eye-slash:before{content:"\F070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\F071"}.fa-plane:before{content:"\F072"}.fa-calendar:before{content:"\F073"}.fa-random:before{content:"\F074"}.fa-comment:before{content:"\F075"}.fa-magnet:before{content:"\F076"}.fa-chevron-up:before{content:"\F077"}.fa-chevron-down:before{content:"\F078"}.fa-retweet:before{content:"\F079"}.fa-shopping-cart:before{content:"\F07A"}.fa-folder:before{content:"\F07B"}.fa-folder-open:before{content:"\F07C"}.fa-arrows-v:before{content:"\F07D"}.fa-arrows-h:before{content:"\F07E"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\F080"}.fa-twitter-square:before{content:"\F081"}.fa-facebook-square:before{content:"\F082"}.fa-camera-retro:before{content:"\F083"}.fa-key:before{content:"\F084"}.fa-gears:before,.fa-cogs:before{content:"\F085"}.fa-comments:before{content:"\F086"}.fa-thumbs-o-up:before{content:"\F087"}.fa-thumbs-o-down:before{content:"\F088"}.fa-star-half:before{content:"\F089"}.fa-heart-o:before{content:"\F08A"}.fa-sign-out:before{content:"\F08B"}.fa-linkedin-square:before{content:"\F08C"}.fa-thumb-tack:before{content:"\F08D"}.fa-external-link:before{content:"\F08E"}.fa-sign-in:before{content:"\F090"}.fa-trophy:before{content:"\F091"}.fa-github-square:before{content:"\F092"}.fa-upload:before{content:"\F093"}.fa-lemon-o:before{content:"\F094"}.fa-phone:before{content:"\F095"}.fa-square-o:before{content:"\F096"}.fa-bookmark-o:before{content:"\F097"}.fa-phone-square:before{content:"\F098"}.fa-twitter:before{content:"\F099"}.fa-facebook-f:before,.fa-facebook:before{content:"\F09A"}.fa-github:before{content:"\F09B"}.fa-unlock:before{content:"\F09C"}.fa-credit-card:before{content:"\F09D"}.fa-feed:before,.fa-rss:before{content:"\F09E"}.fa-hdd-o:before{content:"\F0A0"}.fa-bullhorn:before{content:"\F0A1"}.fa-bell:before{content:"\F0F3"}.fa-certificate:before{content:"\F0A3"}.fa-hand-o-right:before{content:"\F0A4"}.fa-hand-o-left:before{content:"\F0A5"}.fa-hand-o-up:before{content:"\F0A6"}.fa-hand-o-down:before{content:"\F0A7"}.fa-arrow-circle-left:before{content:"\F0A8"}.fa-arrow-circle-right:before{content:"\F0A9"}.fa-arrow-circle-up:before{content:"\F0AA"}.fa-arrow-circle-down:before{content:"\F0AB"}.fa-globe:before{content:"\F0AC"}.fa-wrench:before{content:"\F0AD"}.fa-tasks:before{content:"\F0AE"}.fa-filter:before{content:"\F0B0"}.fa-briefcase:before{content:"\F0B1"}.fa-arrows-alt:before{content:"\F0B2"}.fa-group:before,.fa-users:before{content:"\F0C0"}.fa-chain:before,.fa-link:before{content:"\F0C1"}.fa-cloud:before{content:"\F0C2"}.fa-flask:before{content:"\F0C3"}.fa-cut:before,.fa-scissors:before{content:"\F0C4"}.fa-copy:before,.fa-files-o:before{content:"\F0C5"}.fa-paperclip:before{content:"\F0C6"}.fa-save:before,.fa-floppy-o:before{content:"\F0C7"}.fa-square:before{content:"\F0C8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\F0C9"}.fa-list-ul:before{content:"\F0CA"}.fa-list-ol:before{content:"\F0CB"}.fa-strikethrough:before{content:"\F0CC"}.fa-underline:before{content:"\F0CD"}.fa-table:before{content:"\F0CE"}.fa-magic:before{content:"\F0D0"}.fa-truck:before{content:"\F0D1"}.fa-pinterest:before{content:"\F0D2"}.fa-pinterest-square:before{content:"\F0D3"}.fa-google-plus-square:before{content:"\F0D4"}.fa-google-plus:before{content:"\F0D5"}.fa-money:before{content:"\F0D6"}.fa-caret-down:before{content:"\F0D7"}.fa-caret-up:before{content:"\F0D8"}.fa-caret-left:before{content:"\F0D9"}.fa-caret-right:before{content:"\F0DA"}.fa-columns:before{content:"\F0DB"}.fa-unsorted:before,.fa-sort:before{content:"\F0DC"}.fa-sort-down:before,.fa-sort-desc:before{content:"\F0DD"}.fa-sort-up:before,.fa-sort-asc:before{content:"\F0DE"}.fa-envelope:before{content:"\F0E0"}.fa-linkedin:before{content:"\F0E1"}.fa-rotate-left:before,.fa-undo:before{content:"\F0E2"}.fa-legal:before,.fa-gavel:before{content:"\F0E3"}.fa-dashboard:before,.fa-tachometer:before{content:"\F0E4"}.fa-comment-o:before{content:"\F0E5"}.fa-comments-o:before{content:"\F0E6"}.fa-flash:before,.fa-bolt:before{content:"\F0E7"}.fa-sitemap:before{content:"\F0E8"}.fa-umbrella:before{content:"\F0E9"}.fa-paste:before,.fa-clipboard:before{content:"\F0EA"}.fa-lightbulb-o:before{content:"\F0EB"}.fa-exchange:before{content:"\F0EC"}.fa-cloud-download:before{content:"\F0ED"}.fa-cloud-upload:before{content:"\F0EE"}.fa-user-md:before{content:"\F0F0"}.fa-stethoscope:before{content:"\F0F1"}.fa-suitcase:before{content:"\F0F2"}.fa-bell-o:before{content:"\F0A2"}.fa-coffee:before{content:"\F0F4"}.fa-cutlery:before{content:"\F0F5"}.fa-file-text-o:before{content:"\F0F6"}.fa-building-o:before{content:"\F0F7"}.fa-hospital-o:before{content:"\F0F8"}.fa-ambulance:before{content:"\F0F9"}.fa-medkit:before{content:"\F0FA"}.fa-fighter-jet:before{content:"\F0FB"}.fa-beer:before{content:"\F0FC"}.fa-h-square:before{content:"\F0FD"}.fa-plus-square:before{content:"\F0FE"}.fa-angle-double-left:before{content:"\F100"}.fa-angle-double-right:before{content:"\F101"}.fa-angle-double-up:before{content:"\F102"}.fa-angle-double-down:before{content:"\F103"}.fa-angle-left:before{content:"\F104"}.fa-angle-right:before{content:"\F105"}.fa-angle-up:before{content:"\F106"}.fa-angle-down:before{content:"\F107"}.fa-desktop:before{content:"\F108"}.fa-laptop:before{content:"\F109"}.fa-tablet:before{content:"\F10A"}.fa-mobile-phone:before,.fa-mobile:before{content:"\F10B"}.fa-circle-o:before{content:"\F10C"}.fa-quote-left:before{content:"\F10D"}.fa-quote-right:before{content:"\F10E"}.fa-spinner:before{content:"\F110"}.fa-circle:before{content:"\F111"}.fa-mail-reply:before,.fa-reply:before{content:"\F112"}.fa-github-alt:before{content:"\F113"}.fa-folder-o:before{content:"\F114"}.fa-folder-open-o:before{content:"\F115"}.fa-smile-o:before{content:"\F118"}.fa-frown-o:before{content:"\F119"}.fa-meh-o:before{content:"\F11A"}.fa-gamepad:before{content:"\F11B"}.fa-keyboard-o:before{content:"\F11C"}.fa-flag-o:before{content:"\F11D"}.fa-flag-checkered:before{content:"\F11E"}.fa-terminal:before{content:"\F120"}.fa-code:before{content:"\F121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\F122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\F123"}.fa-location-arrow:before{content:"\F124"}.fa-crop:before{content:"\F125"}.fa-code-fork:before{content:"\F126"}.fa-unlink:before,.fa-chain-broken:before{content:"\F127"}.fa-question:before{content:"\F128"}.fa-info:before{content:"\F129"}.fa-exclamation:before{content:"\F12A"}.fa-superscript:before{content:"\F12B"}.fa-subscript:before{content:"\F12C"}.fa-eraser:before{content:"\F12D"}.fa-puzzle-piece:before{content:"\F12E"}.fa-microphone:before{content:"\F130"}.fa-microphone-slash:before{content:"\F131"}.fa-shield:before{content:"\F132"}.fa-calendar-o:before{content:"\F133"}.fa-fire-extinguisher:before{content:"\F134"}.fa-rocket:before{content:"\F135"}.fa-maxcdn:before{content:"\F136"}.fa-chevron-circle-left:before{content:"\F137"}.fa-chevron-circle-right:before{content:"\F138"}.fa-chevron-circle-up:before{content:"\F139"}.fa-chevron-circle-down:before{content:"\F13A"}.fa-html5:before{content:"\F13B"}.fa-css3:before{content:"\F13C"}.fa-anchor:before{content:"\F13D"}.fa-unlock-alt:before{content:"\F13E"}.fa-bullseye:before{content:"\F140"}.fa-ellipsis-h:before{content:"\F141"}.fa-ellipsis-v:before{content:"\F142"}.fa-rss-square:before{content:"\F143"}.fa-play-circle:before{content:"\F144"}.fa-ticket:before{content:"\F145"}.fa-minus-square:before{content:"\F146"}.fa-minus-square-o:before{content:"\F147"}.fa-level-up:before{content:"\F148"}.fa-level-down:before{content:"\F149"}.fa-check-square:before{content:"\F14A"}.fa-pencil-square:before{content:"\F14B"}.fa-external-link-square:before{content:"\F14C"}.fa-share-square:before{content:"\F14D"}.fa-compass:before{content:"\F14E"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\F150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\F151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\F152"}.fa-euro:before,.fa-eur:before{content:"\F153"}.fa-gbp:before{content:"\F154"}.fa-dollar:before,.fa-usd:before{content:"\F155"}.fa-rupee:before,.fa-inr:before{content:"\F156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\F157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\F158"}.fa-won:before,.fa-krw:before{content:"\F159"}.fa-bitcoin:before,.fa-btc:before{content:"\F15A"}.fa-file:before{content:"\F15B"}.fa-file-text:before{content:"\F15C"}.fa-sort-alpha-asc:before{content:"\F15D"}.fa-sort-alpha-desc:before{content:"\F15E"}.fa-sort-amount-asc:before{content:"\F160"}.fa-sort-amount-desc:before{content:"\F161"}.fa-sort-numeric-asc:before{content:"\F162"}.fa-sort-numeric-desc:before{content:"\F163"}.fa-thumbs-up:before{content:"\F164"}.fa-thumbs-down:before{content:"\F165"}.fa-youtube-square:before{content:"\F166"}.fa-youtube:before{content:"\F167"}.fa-xing:before{content:"\F168"}.fa-xing-square:before{content:"\F169"}.fa-youtube-play:before{content:"\F16A"}.fa-dropbox:before{content:"\F16B"}.fa-stack-overflow:before{content:"\F16C"}.fa-instagram:before{content:"\F16D"}.fa-flickr:before{content:"\F16E"}.fa-adn:before{content:"\F170"}.fa-bitbucket:before{content:"\F171"}.fa-bitbucket-square:before{content:"\F172"}.fa-tumblr:before{content:"\F173"}.fa-tumblr-square:before{content:"\F174"}.fa-long-arrow-down:before{content:"\F175"}.fa-long-arrow-up:before{content:"\F176"}.fa-long-arrow-left:before{content:"\F177"}.fa-long-arrow-right:before{content:"\F178"}.fa-apple:before{content:"\F179"}.fa-windows:before{content:"\F17A"}.fa-android:before{content:"\F17B"}.fa-linux:before{content:"\F17C"}.fa-dribbble:before{content:"\F17D"}.fa-skype:before{content:"\F17E"}.fa-foursquare:before{content:"\F180"}.fa-trello:before{content:"\F181"}.fa-female:before{content:"\F182"}.fa-male:before{content:"\F183"}.fa-gittip:before,.fa-gratipay:before{content:"\F184"}.fa-sun-o:before{content:"\F185"}.fa-moon-o:before{content:"\F186"}.fa-archive:before{content:"\F187"}.fa-bug:before{content:"\F188"}.fa-vk:before{content:"\F189"}.fa-weibo:before{content:"\F18A"}.fa-renren:before{content:"\F18B"}.fa-pagelines:before{content:"\F18C"}.fa-stack-exchange:before{content:"\F18D"}.fa-arrow-circle-o-right:before{content:"\F18E"}.fa-arrow-circle-o-left:before{content:"\F190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\F191"}.fa-dot-circle-o:before{content:"\F192"}.fa-wheelchair:before{content:"\F193"}.fa-vimeo-square:before{content:"\F194"}.fa-turkish-lira:before,.fa-try:before{content:"\F195"}.fa-plus-square-o:before{content:"\F196"}.fa-space-shuttle:before{content:"\F197"}.fa-slack:before{content:"\F198"}.fa-envelope-square:before{content:"\F199"}.fa-wordpress:before{content:"\F19A"}.fa-openid:before{content:"\F19B"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\F19C"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\F19D"}.fa-yahoo:before{content:"\F19E"}.fa-google:before{content:"\F1A0"}.fa-reddit:before{content:"\F1A1"}.fa-reddit-square:before{content:"\F1A2"}.fa-stumbleupon-circle:before{content:"\F1A3"}.fa-stumbleupon:before{content:"\F1A4"}.fa-delicious:before{content:"\F1A5"}.fa-digg:before{content:"\F1A6"}.fa-pied-piper-pp:before{content:"\F1A7"}.fa-pied-piper-alt:before{content:"\F1A8"}.fa-drupal:before{content:"\F1A9"}.fa-joomla:before{content:"\F1AA"}.fa-language:before{content:"\F1AB"}.fa-fax:before{content:"\F1AC"}.fa-building:before{content:"\F1AD"}.fa-child:before{content:"\F1AE"}.fa-paw:before{content:"\F1B0"}.fa-spoon:before{content:"\F1B1"}.fa-cube:before{content:"\F1B2"}.fa-cubes:before{content:"\F1B3"}.fa-behance:before{content:"\F1B4"}.fa-behance-square:before{content:"\F1B5"}.fa-steam:before{content:"\F1B6"}.fa-steam-square:before{content:"\F1B7"}.fa-recycle:before{content:"\F1B8"}.fa-automobile:before,.fa-car:before{content:"\F1B9"}.fa-cab:before,.fa-taxi:before{content:"\F1BA"}.fa-tree:before{content:"\F1BB"}.fa-spotify:before{content:"\F1BC"}.fa-deviantart:before{content:"\F1BD"}.fa-soundcloud:before{content:"\F1BE"}.fa-database:before{content:"\F1C0"}.fa-file-pdf-o:before{content:"\F1C1"}.fa-file-word-o:before{content:"\F1C2"}.fa-file-excel-o:before{content:"\F1C3"}.fa-file-powerpoint-o:before{content:"\F1C4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\F1C5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\F1C6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\F1C7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\F1C8"}.fa-file-code-o:before{content:"\F1C9"}.fa-vine:before{content:"\F1CA"}.fa-codepen:before{content:"\F1CB"}.fa-jsfiddle:before{content:"\F1CC"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\F1CD"}.fa-circle-o-notch:before{content:"\F1CE"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\F1D0"}.fa-ge:before,.fa-empire:before{content:"\F1D1"}.fa-git-square:before{content:"\F1D2"}.fa-git:before{content:"\F1D3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\F1D4"}.fa-tencent-weibo:before{content:"\F1D5"}.fa-qq:before{content:"\F1D6"}.fa-wechat:before,.fa-weixin:before{content:"\F1D7"}.fa-send:before,.fa-paper-plane:before{content:"\F1D8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\F1D9"}.fa-history:before{content:"\F1DA"}.fa-circle-thin:before{content:"\F1DB"}.fa-header:before{content:"\F1DC"}.fa-paragraph:before{content:"\F1DD"}.fa-sliders:before{content:"\F1DE"}.fa-share-alt:before{content:"\F1E0"}.fa-share-alt-square:before{content:"\F1E1"}.fa-bomb:before{content:"\F1E2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\F1E3"}.fa-tty:before{content:"\F1E4"}.fa-binoculars:before{content:"\F1E5"}.fa-plug:before{content:"\F1E6"}.fa-slideshare:before{content:"\F1E7"}.fa-twitch:before{content:"\F1E8"}.fa-yelp:before{content:"\F1E9"}.fa-newspaper-o:before{content:"\F1EA"}.fa-wifi:before{content:"\F1EB"}.fa-calculator:before{content:"\F1EC"}.fa-paypal:before{content:"\F1ED"}.fa-google-wallet:before{content:"\F1EE"}.fa-cc-visa:before{content:"\F1F0"}.fa-cc-mastercard:before{content:"\F1F1"}.fa-cc-discover:before{content:"\F1F2"}.fa-cc-amex:before{content:"\F1F3"}.fa-cc-paypal:before{content:"\F1F4"}.fa-cc-stripe:before{content:"\F1F5"}.fa-bell-slash:before{content:"\F1F6"}.fa-bell-slash-o:before{content:"\F1F7"}.fa-trash:before{content:"\F1F8"}.fa-copyright:before{content:"\F1F9"}.fa-at:before{content:"\F1FA"}.fa-eyedropper:before{content:"\F1FB"}.fa-paint-brush:before{content:"\F1FC"}.fa-birthday-cake:before{content:"\F1FD"}.fa-area-chart:before{content:"\F1FE"}.fa-pie-chart:before{content:"\F200"}.fa-line-chart:before{content:"\F201"}.fa-lastfm:before{content:"\F202"}.fa-lastfm-square:before{content:"\F203"}.fa-toggle-off:before{content:"\F204"}.fa-toggle-on:before{content:"\F205"}.fa-bicycle:before{content:"\F206"}.fa-bus:before{content:"\F207"}.fa-ioxhost:before{content:"\F208"}.fa-angellist:before{content:"\F209"}.fa-cc:before{content:"\F20A"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\F20B"}.fa-meanpath:before{content:"\F20C"}.fa-buysellads:before{content:"\F20D"}.fa-connectdevelop:before{content:"\F20E"}.fa-dashcube:before{content:"\F210"}.fa-forumbee:before{content:"\F211"}.fa-leanpub:before{content:"\F212"}.fa-sellsy:before{content:"\F213"}.fa-shirtsinbulk:before{content:"\F214"}.fa-simplybuilt:before{content:"\F215"}.fa-skyatlas:before{content:"\F216"}.fa-cart-plus:before{content:"\F217"}.fa-cart-arrow-down:before{content:"\F218"}.fa-diamond:before{content:"\F219"}.fa-ship:before{content:"\F21A"}.fa-user-secret:before{content:"\F21B"}.fa-motorcycle:before{content:"\F21C"}.fa-street-view:before{content:"\F21D"}.fa-heartbeat:before{content:"\F21E"}.fa-venus:before{content:"\F221"}.fa-mars:before{content:"\F222"}.fa-mercury:before{content:"\F223"}.fa-intersex:before,.fa-transgender:before{content:"\F224"}.fa-transgender-alt:before{content:"\F225"}.fa-venus-double:before{content:"\F226"}.fa-mars-double:before{content:"\F227"}.fa-venus-mars:before{content:"\F228"}.fa-mars-stroke:before{content:"\F229"}.fa-mars-stroke-v:before{content:"\F22A"}.fa-mars-stroke-h:before{content:"\F22B"}.fa-neuter:before{content:"\F22C"}.fa-genderless:before{content:"\F22D"}.fa-facebook-official:before{content:"\F230"}.fa-pinterest-p:before{content:"\F231"}.fa-whatsapp:before{content:"\F232"}.fa-server:before{content:"\F233"}.fa-user-plus:before{content:"\F234"}.fa-user-times:before{content:"\F235"}.fa-hotel:before,.fa-bed:before{content:"\F236"}.fa-viacoin:before{content:"\F237"}.fa-train:before{content:"\F238"}.fa-subway:before{content:"\F239"}.fa-medium:before{content:"\F23A"}.fa-yc:before,.fa-y-combinator:before{content:"\F23B"}.fa-optin-monster:before{content:"\F23C"}.fa-opencart:before{content:"\F23D"}.fa-expeditedssl:before{content:"\F23E"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\F240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\F241"}.fa-battery-2:before,.fa-battery-half:before{content:"\F242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\F243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\F244"}.fa-mouse-pointer:before{content:"\F245"}.fa-i-cursor:before{content:"\F246"}.fa-object-group:before{content:"\F247"}.fa-object-ungroup:before{content:"\F248"}.fa-sticky-note:before{content:"\F249"}.fa-sticky-note-o:before{content:"\F24A"}.fa-cc-jcb:before{content:"\F24B"}.fa-cc-diners-club:before{content:"\F24C"}.fa-clone:before{content:"\F24D"}.fa-balance-scale:before{content:"\F24E"}.fa-hourglass-o:before{content:"\F250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\F251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\F252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\F253"}.fa-hourglass:before{content:"\F254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\F255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\F256"}.fa-hand-scissors-o:before{content:"\F257"}.fa-hand-lizard-o:before{content:"\F258"}.fa-hand-spock-o:before{content:"\F259"}.fa-hand-pointer-o:before{content:"\F25A"}.fa-hand-peace-o:before{content:"\F25B"}.fa-trademark:before{content:"\F25C"}.fa-registered:before{content:"\F25D"}.fa-creative-commons:before{content:"\F25E"}.fa-gg:before{content:"\F260"}.fa-gg-circle:before{content:"\F261"}.fa-tripadvisor:before{content:"\F262"}.fa-odnoklassniki:before{content:"\F263"}.fa-odnoklassniki-square:before{content:"\F264"}.fa-get-pocket:before{content:"\F265"}.fa-wikipedia-w:before{content:"\F266"}.fa-safari:before{content:"\F267"}.fa-chrome:before{content:"\F268"}.fa-firefox:before{content:"\F269"}.fa-opera:before{content:"\F26A"}.fa-internet-explorer:before{content:"\F26B"}.fa-tv:before,.fa-television:before{content:"\F26C"}.fa-contao:before{content:"\F26D"}.fa-500px:before{content:"\F26E"}.fa-amazon:before{content:"\F270"}.fa-calendar-plus-o:before{content:"\F271"}.fa-calendar-minus-o:before{content:"\F272"}.fa-calendar-times-o:before{content:"\F273"}.fa-calendar-check-o:before{content:"\F274"}.fa-industry:before{content:"\F275"}.fa-map-pin:before{content:"\F276"}.fa-map-signs:before{content:"\F277"}.fa-map-o:before{content:"\F278"}.fa-map:before{content:"\F279"}.fa-commenting:before{content:"\F27A"}.fa-commenting-o:before{content:"\F27B"}.fa-houzz:before{content:"\F27C"}.fa-vimeo:before{content:"\F27D"}.fa-black-tie:before{content:"\F27E"}.fa-fonticons:before{content:"\F280"}.fa-reddit-alien:before{content:"\F281"}.fa-edge:before{content:"\F282"}.fa-credit-card-alt:before{content:"\F283"}.fa-codiepie:before{content:"\F284"}.fa-modx:before{content:"\F285"}.fa-fort-awesome:before{content:"\F286"}.fa-usb:before{content:"\F287"}.fa-product-hunt:before{content:"\F288"}.fa-mixcloud:before{content:"\F289"}.fa-scribd:before{content:"\F28A"}.fa-pause-circle:before{content:"\F28B"}.fa-pause-circle-o:before{content:"\F28C"}.fa-stop-circle:before{content:"\F28D"}.fa-stop-circle-o:before{content:"\F28E"}.fa-shopping-bag:before{content:"\F290"}.fa-shopping-basket:before{content:"\F291"}.fa-hashtag:before{content:"\F292"}.fa-bluetooth:before{content:"\F293"}.fa-bluetooth-b:before{content:"\F294"}.fa-percent:before{content:"\F295"}.fa-gitlab:before{content:"\F296"}.fa-wpbeginner:before{content:"\F297"}.fa-wpforms:before{content:"\F298"}.fa-envira:before{content:"\F299"}.fa-universal-access:before{content:"\F29A"}.fa-wheelchair-alt:before{content:"\F29B"}.fa-question-circle-o:before{content:"\F29C"}.fa-blind:before{content:"\F29D"}.fa-audio-description:before{content:"\F29E"}.fa-volume-control-phone:before{content:"\F2A0"}.fa-braille:before{content:"\F2A1"}.fa-assistive-listening-systems:before{content:"\F2A2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\F2A3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\F2A4"}.fa-glide:before{content:"\F2A5"}.fa-glide-g:before{content:"\F2A6"}.fa-signing:before,.fa-sign-language:before{content:"\F2A7"}.fa-low-vision:before{content:"\F2A8"}.fa-viadeo:before{content:"\F2A9"}.fa-viadeo-square:before{content:"\F2AA"}.fa-snapchat:before{content:"\F2AB"}.fa-snapchat-ghost:before{content:"\F2AC"}.fa-snapchat-square:before{content:"\F2AD"}.fa-pied-piper:before{content:"\F2AE"}.fa-first-order:before{content:"\F2B0"}.fa-yoast:before{content:"\F2B1"}.fa-themeisle:before{content:"\F2B2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\F2B3"}.fa-fa:before,.fa-font-awesome:before{content:"\F2B4"}.fa-handshake-o:before{content:"\F2B5"}.fa-envelope-open:before{content:"\F2B6"}.fa-envelope-open-o:before{content:"\F2B7"}.fa-linode:before{content:"\F2B8"}.fa-address-book:before{content:"\F2B9"}.fa-address-book-o:before{content:"\F2BA"}.fa-vcard:before,.fa-address-card:before{content:"\F2BB"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\F2BC"}.fa-user-circle:before{content:"\F2BD"}.fa-user-circle-o:before{content:"\F2BE"}.fa-user-o:before{content:"\F2C0"}.fa-id-badge:before{content:"\F2C1"}.fa-drivers-license:before,.fa-id-card:before{content:"\F2C2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\F2C3"}.fa-quora:before{content:"\F2C4"}.fa-free-code-camp:before{content:"\F2C5"}.fa-telegram:before{content:"\F2C6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\F2C7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\F2C8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\F2C9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\F2CA"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\F2CB"}.fa-shower:before{content:"\F2CC"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\F2CD"}.fa-podcast:before{content:"\F2CE"}.fa-window-maximize:before{content:"\F2D0"}.fa-window-minimize:before{content:"\F2D1"}.fa-window-restore:before{content:"\F2D2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\F2D3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\F2D4"}.fa-bandcamp:before{content:"\F2D5"}.fa-grav:before{content:"\F2D6"}.fa-etsy:before{content:"\F2D7"}.fa-imdb:before{content:"\F2D8"}.fa-ravelry:before{content:"\F2D9"}.fa-eercast:before{content:"\F2DA"}.fa-microchip:before{content:"\F2DB"}.fa-snowflake-o:before{content:"\F2DC"}.fa-superpowers:before{content:"\F2DD"}.fa-wpexplorer:before{content:"\F2DE"}.fa-meetup:before{content:"\F2E0"}.sr-only,.table.table-list tr:not(:hover) td.table-list-options>.dropdown:not(.show) button:not(:focus):not(:active),.table.table-list tr:not(:hover) td.table-list-options>button:not(:focus):not(:active){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.toaster-icon{position:absolute;left:0.0em;top:0.0em;font-weight:normal;color:#ffffff}.toast-title{font-weight:bold}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#ffffff}.toast-message a:hover{color:#cccccc;text-decoration:none}.toast-close-button{position:relative;right:-0.3em;top:-0.3em;float:right;font-size:20px;font-weight:bold;color:#ffffff;-webkit-text-shadow:0 1px 0 #ffffff;text-shadow:0 1px 0 #ffffff;opacity:0.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80);z-index:999}.toast-close-button:hover,.toast-close-button:focus{color:#000000;text-decoration:none;cursor:pointer;opacity:0.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}button.toast-close-button{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.toast-content{display:inline-block;width:95%}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-center{top:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-center{bottom:12px}.toast-bottom-left{bottom:12px;left:12px}.toast-center{top:45%}#toast-container{position:fixed;z-index:999999;pointer-events:auto}#toast-container.toast-center,#toast-container.toast-top-center,#toast-container.toast-bottom-center{width:100%;pointer-events:none;left:0;right:0}#toast-container.toast-center>div,#toast-container.toast-top-center>div,#toast-container.toast-bottom-center>div{margin:6px auto;pointer-events:auto}#toast-container.toast-center>button,#toast-container.toast-top-center>button,#toast-container.toast-bottom-center>button{pointer-events:auto}#toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;-moz-border-radius:3px 3px 3px 3px;-webkit-border-radius:3px 3px 3px 3px;border-radius:3px 3px 3px 3px;background-position:15px center;background-repeat:no-repeat;-moz-box-shadow:0 0 12px #999999;-webkit-box-shadow:0 0 12px #999999;box-shadow:0 0 12px #999999;color:#ffffff;opacity:0.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80)}#toast-container>:hover{-moz-box-shadow:0 0 12px #000000;-webkit-box-shadow:0 0 12px #000000;box-shadow:0 0 12px #000000;opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100);cursor:pointer}.icon-success{width:35px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:100% 50%;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important}.icon-error{width:35px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:100% 50%;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important}.icon-info{width:35px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:100% 50%;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=") !important}.icon-wait{width:35px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:100% 50%;background-image:url("data:image/gif;base64,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") !important}.icon-warning{width:35px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:100% 50%;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important}#toast-container.toast-top-full-width>div,#toast-container.toast-bottom-full-width>div{width:96%;margin:auto}.toast{position:relative;background-color:#030303}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-wait{background-color:#2f96b4}.toast-warning{background-color:#f89406}@media all and (max-width: 240px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container .toast-close-button{right:-0.1em;top:-0.2em}.toast-content{width:94%}}@media all and (min-width: 241px) and (max-width: 480px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container .toast-close-button{right:-0.1em;top:-0.2em}.toast-content{width:94%}}@media all and (min-width: 481px) and (max-width: 768px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}}.swal2-popup.swal2-toast{flex-direction:row;align-items:center;width:auto;padding:.625em;overflow-y:hidden;background:#fff;box-shadow:0 0 0.625em #d9d9d9}.swal2-popup.swal2-toast .swal2-header{flex-direction:row;padding:0}.swal2-popup.swal2-toast .swal2-title{flex-grow:1;justify-content:flex-start;margin:0 0.6em;font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:0.5em 0 0;padding:0.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{position:static;width:.8em;height:.8em;line-height:.8}.swal2-popup.swal2-toast .swal2-content{justify-content:flex-start;padding:0;font-size:1em}.swal2-popup.swal2-toast .swal2-icon{width:2em;min-width:2em;height:2em;margin:0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}@media all and (-ms-high-contrast: none), (-ms-high-contrast: active){.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{font-size:.25em}}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^='swal2-x-mark-line']{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^='swal2-x-mark-line'][class$='left']{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^='swal2-x-mark-line'][class$='right']{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{flex-basis:auto !important;width:auto;height:auto;margin:0 .3125em;padding:0}.swal2-popup.swal2-toast .swal2-styled{margin:.125em .3125em;padding:.3125em .625em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(100,150,200,0.5)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^='swal2-success-circular-line']{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^='swal2-success-circular-line'][class$='left']{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^='swal2-success-circular-line'][class$='right']{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^='swal2-success-line']{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^='swal2-success-line'][class$='tip']{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^='swal2-success-line'][class$='long']{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{animation:swal2-toast-show 0.5s}.swal2-popup.swal2-toast.swal2-hide{animation:swal2-toast-hide 0.1s forwards}.swal2-container{display:flex;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;flex-direction:row;align-items:center;justify-content:center;padding:.625em;overflow-x:hidden;transition:background-color 0.1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,0.4)}.swal2-container.swal2-backdrop-hide{background:transparent !important}.swal2-container.swal2-top{align-items:flex-start}.swal2-container.swal2-top-start,.swal2-container.swal2-top-left{align-items:flex-start;justify-content:flex-start}.swal2-container.swal2-top-end,.swal2-container.swal2-top-right{align-items:flex-start;justify-content:flex-end}.swal2-container.swal2-center{align-items:center}.swal2-container.swal2-center-start,.swal2-container.swal2-center-left{align-items:center;justify-content:flex-start}.swal2-container.swal2-center-end,.swal2-container.swal2-center-right{align-items:center;justify-content:flex-end}.swal2-container.swal2-bottom{align-items:flex-end}.swal2-container.swal2-bottom-start,.swal2-container.swal2-bottom-left{align-items:flex-end;justify-content:flex-start}.swal2-container.swal2-bottom-end,.swal2-container.swal2-bottom-right{align-items:flex-end;justify-content:flex-end}.swal2-container.swal2-bottom>:first-child,.swal2-container.swal2-bottom-start>:first-child,.swal2-container.swal2-bottom-left>:first-child,.swal2-container.swal2-bottom-end>:first-child,.swal2-container.swal2-bottom-right>:first-child{margin-top:auto}.swal2-container.swal2-grow-fullscreen>.swal2-modal{display:flex !important;flex:1;align-self:stretch;justify-content:center}.swal2-container.swal2-grow-row>.swal2-modal{display:flex !important;flex:1;align-content:center;justify-content:center}.swal2-container.swal2-grow-column{flex:1;flex-direction:column}.swal2-container.swal2-grow-column.swal2-top,.swal2-container.swal2-grow-column.swal2-center,.swal2-container.swal2-grow-column.swal2-bottom{align-items:center}.swal2-container.swal2-grow-column.swal2-top-start,.swal2-container.swal2-grow-column.swal2-center-start,.swal2-container.swal2-grow-column.swal2-bottom-start,.swal2-container.swal2-grow-column.swal2-top-left,.swal2-container.swal2-grow-column.swal2-center-left,.swal2-container.swal2-grow-column.swal2-bottom-left{align-items:flex-start}.swal2-container.swal2-grow-column.swal2-top-end,.swal2-container.swal2-grow-column.swal2-center-end,.swal2-container.swal2-grow-column.swal2-bottom-end,.swal2-container.swal2-grow-column.swal2-top-right,.swal2-container.swal2-grow-column.swal2-center-right,.swal2-container.swal2-grow-column.swal2-bottom-right{align-items:flex-end}.swal2-container.swal2-grow-column>.swal2-modal{display:flex !important;flex:1;align-content:center;justify-content:center}.swal2-container.swal2-no-transition{transition:none !important}.swal2-container:not(.swal2-top):not(.swal2-top-start):not(.swal2-top-end):not(.swal2-top-left):not(.swal2-top-right):not(.swal2-center-start):not(.swal2-center-end):not(.swal2-center-left):not(.swal2-center-right):not(.swal2-bottom):not(.swal2-bottom-start):not(.swal2-bottom-end):not(.swal2-bottom-left):not(.swal2-bottom-right):not(.swal2-grow-fullscreen)>.swal2-modal{margin:auto}@media all and (-ms-high-contrast: none), (-ms-high-contrast: active){.swal2-container .swal2-modal{margin:0 !important}}.swal2-popup{display:none;position:relative;box-sizing:border-box;flex-direction:column;justify-content:center;width:32em;max-width:100%;padding:1.25em;border:none;border-radius:5px;background:#fff;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:none}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-header{display:flex;flex-direction:column;align-items:center;padding:0 1.8em}.swal2-title{position:relative;max-width:100%;margin:0 0 0.4em;padding:0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:100%;margin:1.25em auto 0;padding:0 1.6em}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,0.1), rgba(0,0,0,0.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,0.2), rgba(0,0,0,0.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:0.625em 1.1em;box-shadow:none;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#2778c4;color:#fff;font-size:1.0625em}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#d14529;color:#fff;font-size:1.0625em}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#757575;color:#fff;font-size:1.0625em}.swal2-styled:focus{outline:none;box-shadow:0 0 0 3px rgba(100,150,200,0.5)}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1.25em 0 0;padding:1em 0 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;height:.25em;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,0.2)}.swal2-image{max-width:100%;margin:1.25em auto}.swal2-close{position:absolute;z-index:2;top:0;right:0;align-items:center;justify-content:center;width:1.2em;height:1.2em;padding:0;overflow:hidden;transition:color 0.1s ease-out;border:none;border-radius:5px;background:rgba(0,0,0,0);color:#ccc;font-family:serif;font-size:2.5em;line-height:1.2;cursor:pointer}.swal2-close:hover{transform:none;background:rgba(0,0,0,0);color:#f27474}.swal2-close:focus{outline:none;box-shadow:inset 0 0 0 3px rgba(100,150,200,0.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-content{z-index:1;justify-content:center;margin:0;padding:0 1.6em;color:#545454;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;word-wrap:break-word}.swal2-input,.swal2-file,.swal2-textarea,.swal2-select,.swal2-radio,.swal2-checkbox{margin:1em auto}.swal2-input,.swal2-file,.swal2-textarea{box-sizing:border-box;width:100%;transition:border-color 0.3s,box-shadow 0.3s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,0.06);color:inherit;font-size:1.125em}.swal2-input.swal2-inputerror,.swal2-file.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}.swal2-input:focus,.swal2-file:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:none;box-shadow:0 0 0 3px rgba(100,150,200,0.5)}.swal2-input::placeholder,.swal2-file::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em auto;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 0.75em}.swal2-input[type='number']{max-width:10em}.swal2-file{background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-radio,.swal2-checkbox{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-radio label,.swal2-checkbox label{margin:0 .6em;font-size:1.125em}.swal2-radio input,.swal2-checkbox input{margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto}.swal2-validation-message{display:none;align-items:center;justify-content:center;margin:0 -2.7em;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:'!';display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:1.25em auto 1.875em;border:0.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^='swal2-x-mark-line']{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^='swal2-x-mark-line'][class$='left']{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^='swal2-x-mark-line'][class$='right']{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^='swal2-success-circular-line']{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^='swal2-success-circular-line'][class$='left']{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^='swal2-success-circular-line'][class$='right']{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:0.25em solid rgba(165,220,134,0.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^='swal2-success-line']{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^='swal2-success-line'][class$='tip']{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^='swal2-success-line'][class$='long']{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:0 0 1.25em;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^='swal2']{-webkit-tap-highlight-color:transparent}.swal2-show{animation:swal2-show 0.3s}.swal2-hide{animation:swal2-hide 0.15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{right:auto;left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@supports (-ms-accelerator: true){.swal2-range input{width:100% !important}.swal2-range output{display:none}}@media all and (-ms-high-contrast: none), (-ms-high-contrast: active){.swal2-range input{width:100% !important}.swal2-range output{display:none}}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-show{0%{transform:scale(0.7)}45%{transform:scale(1.05)}80%{transform:scale(0.95)}100%{transform:scale(1)}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(0.5);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{top:auto;right:auto;bottom:auto;left:auto;max-width:calc(100% - .625em * 2);background-color:transparent !important}body.swal2-no-backdrop .swal2-container>.swal2-modal{box-shadow:0 0 10px rgba(0,0,0,0.4)}body.swal2-no-backdrop .swal2-container.swal2-top{top:0;left:50%;transform:translateX(-50%)}body.swal2-no-backdrop .swal2-container.swal2-top-start,body.swal2-no-backdrop .swal2-container.swal2-top-left{top:0;left:0}body.swal2-no-backdrop .swal2-container.swal2-top-end,body.swal2-no-backdrop .swal2-container.swal2-top-right{top:0;right:0}body.swal2-no-backdrop .swal2-container.swal2-center{top:50%;left:50%;transform:translate(-50%, -50%)}body.swal2-no-backdrop .swal2-container.swal2-center-start,body.swal2-no-backdrop .swal2-container.swal2-center-left{top:50%;left:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-container.swal2-center-end,body.swal2-no-backdrop .swal2-container.swal2-center-right{top:50%;right:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-container.swal2-bottom{bottom:0;left:50%;transform:translateX(-50%)}body.swal2-no-backdrop .swal2-container.swal2-bottom-start,body.swal2-no-backdrop .swal2-container.swal2-bottom-left{bottom:0;left:0}body.swal2-no-backdrop .swal2-container.swal2-bottom-end,body.swal2-no-backdrop .swal2-container.swal2-bottom-right{right:0;bottom:0}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden='true']{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static !important}}body.swal2-toast-shown .swal2-container{background-color:transparent}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}body.swal2-toast-column .swal2-toast{flex-direction:column;align-items:stretch}body.swal2-toast-column .swal2-toast .swal2-actions{flex:1;align-self:stretch;height:2.2em;margin-top:.3125em}body.swal2-toast-column .swal2-toast .swal2-loading{justify-content:center}body.swal2-toast-column .swal2-toast .swal2-input{height:2em;margin:.3125em auto;font-size:1em}body.swal2-toast-column .swal2-toast .swal2-validation-message{font-size:1em}#toast-container.toast-top-right{top:76px}#toast-container .toast-close-button{right:-0.15em}#toast-container .toast{opacity:1 !important;background-image:none !important;border-radius:.25rem;box-shadow:0 0 8px rgba(0,0,0,0.35);display:flex;align-items:center}#toast-container .toast:hover{box-shadow:0 0 10px rgba(0,0,0,0.6)}#toast-container .toast:before{font-family:FontAwesome;font-size:25px;line-height:20px;float:left;color:#ffffff;padding-right:10px;margin:auto 0 auto -36px}#toast-container .toast .toaster-icon{display:none}#toast-container .toast .toast-message p{margin-bottom:0.5rem}#toast-container .toast .toast-message p:last-child{margin-bottom:0}#toast-container .toast.toast-danger,#toast-container .toast.toast-error{background-image:none !important;background-color:#dd4b39}#toast-container .toast.toast-danger:before,#toast-container .toast.toast-error:before{content:"\F0E7";margin-left:-30px}#toast-container .toast.toast-warning{background-image:none !important;background-color:#bf7e16}#toast-container .toast.toast-warning:before{content:"\F071"}#toast-container .toast.toast-info{background-image:none !important;background-color:#555}#toast-container .toast.toast-info:before{content:"\F05A"}#toast-container .toast.toast-success{background-image:none !important;background-color:#00a65a}#toast-container .toast.toast-success:before{content:"\F00C"}.swal2-container{background-color:rgba(0,0,0,0.3)}.swal2-popup{padding:15px 0 0;background-color:#fff;color:#333;border:1px solid #9a9a9a;border-radius:.3rem;width:34em}.swal2-popup .swal2-header{padding:0 15px}.swal2-popup .swal2-icon{margin:0 auto;width:auto;height:auto;border:none}.swal2-popup .swal2-content{padding-bottom:15px;font-size:1rem;border-bottom:1px solid #dee2e6}.swal2-popup i.swal-custom-icon{display:block;margin:0 auto;font-size:35px}.swal2-popup .swal2-title{padding:10px 0 15px;margin:0;font-size:1.15rem;color:#333}.swal2-popup .swal2-content{font-size:1rem;color:#333;padding:0 15px 15px}.swal2-popup .swal2-actions{padding:15px;margin:0;background-color:#fbfbfb;border-radius:.3rem;display:flex;flex-direction:row;justify-content:flex-start;font-size:1rem}.swal2-popup .swal2-actions button{margin-right:10px}.swal2-popup .swal2-actions button.swal2-confirm{font-weight:bold}.swal2-popup .swal2-actions button.swal2-cancel{background-color:#ffffff}date-input-polyfill[data-open="true"]{z-index:10000 !important}html{font-size:14px}body{min-width:1010px}body.layout_frontend{background-color:#ecf0f5}body.full-width:not(.layout_frontend) .container{min-width:980px;width:90%}.page-header,.secondary-header{border-bottom:1px solid #dee2e6;padding-bottom:0.6rem;margin-bottom:0.5rem}.page-header h1,.page-header h2,.page-header h3,.page-header h4,.secondary-header h1,.secondary-header h2,.secondary-header h3,.secondary-header h4{margin:0}h1 small,h2 small,h3 small,h4 small,h5 small{font-size:80%}input:required,select:required,textarea:required{box-shadow:none}.secondary-header,.spaced-header{margin-top:4rem}.navbar{padding-left:0;padding-right:0}.navbar .dropdown-menu{min-width:200px;max-width:300px}.navbar .dropdown-menu .dropdown-item-text{line-height:1.3}.navbar .dropdown-menu .dropdown-item-text span,.navbar .dropdown-menu .dropdown-item-text small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.navbar .nav-link{font-weight:600}.navbar-brand{margin-top:-20px;margin-bottom:-20px}.dropdown-menu button{cursor:pointer}.container{width:980px;max-width:none !important;margin:0 auto;padding:0}.page-content{margin-top:20px}.footer{margin-top:40px;padding:40px 0 40px 0;border-top:1px solid #dee2e6}.list-group-item.active{border-left:3px solid #175DDC;font-weight:bold;padding-left:calc(1.25rem - 3px)}.card-header,.modal-header{font-weight:bold;text-transform:uppercase}.card-header small,.modal-header small{font-weight:normal;text-transform:none}.card-body-header{font-size:1.15rem}.card ul.fa-ul.card-ul{margin-left:1.9em}.card ul.fa-ul.card-ul li{word-break:break-all}.card ul.fa-ul.card-ul .fa-li{top:4px}.card ul.fa-ul.card-ul.carets{margin-left:1.1em}.card ul.fa-ul.card-ul.carets .fa-li{left:-17px;width:1.1em}.card ul.fa-ul.card-ul ul.carets{margin-left:0.85em}.card-org-plans h2{font-size:1.15rem}.modal-dialog{width:500px}.modal-sm{width:300px}.modal-lg{width:800px}.modal-body h3,.modal-body .section-header>*{font-weight:normal;text-transform:uppercase;color:#6c757d}.modal .list-group-flush :first-child{border-top:none}.modal .list-group-flush :last-child{border-bottom:none}.modal-footer{justify-content:flex-start;background-color:#fbfbfb;border-radius:.3rem}label:not(.form-check-label):not(.btn),label.bold{font-weight:600}input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:searchfield-cancel-button}.btn[class*="btn-outline-"]:not(:hover),.swal2-popup .swal2-actions button[class*="btn-outline-"]:not(:hover){border-color:#ced4da;background-color:#fbfbfb}.btn-link:focus,.btn-link.focus{outline-color:-webkit-focus-ring-color;outline-offset:1px;outline-style:auto;outline-width:1px}.btn-outline-secondary,.swal2-popup .swal2-actions button.swal2-cancel{color:#6c757d}.btn-outline-secondary:hover:not(:disabled),.swal2-popup .swal2-actions button.swal2-cancel:hover:not(:disabled){color:#333}.btn-outline-secondary:disabled,.swal2-popup .swal2-actions button.swal2-cancel:disabled{opacity:1}.btn-outline-secondary:focus,.swal2-popup .swal2-actions button.swal2-cancel:focus,.btn-outline-secondary.focus,.swal2-popup .swal2-actions button.focus.swal2-cancel{box-shadow:0 0 0 .2rem rgba(58,117,225,0.5)}.btn-submit{position:relative}.btn-submit .fa-spinner{position:absolute;display:none;align-items:center;justify-content:center;bottom:0;top:0;left:0;right:0}.btn-submit:disabled:not(.manual) .fa-spinner,.btn-submit.loading .fa-spinner{display:flex}.btn-submit:disabled:not(.manual) span,.btn-submit.loading span{visibility:hidden}.list-group-item:focus,.list-group-item.focus{z-index:100}.fa-icon-above-input{height:1.5em}.table.table-list thead th{border-top:none}.table.table-list tr:first-child td{border:none}.table.table-list td{vertical-align:middle}.table.table-list td.reduced-lh{line-height:1}.table.table-list td.reduced-lh small{font-size:80%}.table.table-list td small,.table.table-list td>.fa,.table.table-list td .icon{color:#6c757d}.table.table-list td.wrap{word-break:break-all}.table.table-list td.table-list-options{width:76px;max-width:76px;text-align:right;height:50px}.table.table-list td.table-list-options.wider{width:100px;max-width:100px}.table.table-list td.table-list-options .btn,.table.table-list td.table-list-options .swal2-popup .swal2-actions button,.swal2-popup .swal2-actions .table.table-list td.table-list-options button{line-height:1;transition:initial}.table.table-list td.table-list-options .dropdown-menu{line-height:1.5}.table.table-list td.table-list-icon{width:45px;max-width:45px;text-align:center}.table.table-list td.table-list-icon img{max-height:24px}.table.table-list td.table-list-checkbox{width:35px;max-width:35px}.table.table-list td.table-list-strike{color:#6c757d;text-decoration:line-through}.text-lg{font-size:1.15rem}.text-strike{text-decoration:line-through}.font-weight-semibold{font-weight:600}.password-wrapper{word-break:break-all;white-space:pre-wrap;min-width:0}.password-row{min-width:0}.password-number{color:#007fde}.password-special{color:#c40800}app-vault-groupings .card #search,app-org-vault-groupings .card #search,.groupings .card #search{margin-bottom:1rem}app-vault-groupings .card h3,app-org-vault-groupings .card h3,.groupings .card h3{font-weight:normal;text-transform:uppercase;color:#6c757d}app-vault-groupings .card ul:last-child,app-org-vault-groupings .card ul:last-child,.groupings .card ul:last-child{margin-bottom:0}app-vault-groupings .card .card-body a,app-org-vault-groupings .card .card-body a,.groupings .card .card-body a{color:#333}app-vault-groupings .card .card-body a:hover.text-muted,app-org-vault-groupings .card .card-body a:hover.text-muted,.groupings .card .card-body a:hover.text-muted{color:#333 !important}app-vault-groupings .card .show-active,app-org-vault-groupings .card .show-active,.groupings .card .show-active{display:none}app-vault-groupings .card li>.fa,app-vault-groupings .card li>div>.fa,app-org-vault-groupings .card li>.fa,app-org-vault-groupings .card li>div>.fa,.groupings .card li>.fa,.groupings .card li>div>.fa{cursor:pointer}app-vault-groupings .card li.active>.show-active,app-vault-groupings .card li.active>div .show-active,app-org-vault-groupings .card li.active>.show-active,app-org-vault-groupings .card li.active>div .show-active,.groupings .card li.active>.show-active,.groupings .card li.active>div .show-active{display:inline}app-vault-groupings .card li.active>a:first-of-type,app-vault-groupings .card li.active>div a:first-of-type,app-org-vault-groupings .card li.active>a:first-of-type,app-org-vault-groupings .card li.active>div a:first-of-type,.groupings .card li.active>a:first-of-type,.groupings .card li.active>div a:first-of-type{font-weight:bold;color:#175DDC}app-vault-groupings .card li.active>.fa,app-vault-groupings .card li.active>div>.fa,app-org-vault-groupings .card li.active>.fa,app-org-vault-groupings .card li.active>div>.fa,.groupings .card li.active>.fa,.groupings .card li.active>div>.fa{color:#175DDC}app-password-generator #lengthRange{width:100%}app-password-generator .card-password .card-body{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;text-align:center;font-size:1.15rem;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}app-password-generator-history .list-group-item{line-height:1}app-password-generator-history .list-group-item .password{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}app-import textarea{height:150px}app-user-billing .progress{height:20px}app-user-billing .progress .progress-bar{min-width:50px}#duo-frame{background:url(../images/loading.svg) 0 0 no-repeat;height:330px}#duo-frame iframe{width:100%;height:100%;border:none}#web-authn-frame{background:url(../images/loading.svg) 0 0 no-repeat;height:290px}#web-authn-frame iframe{width:100%;height:100%;border:none}#bt-dropin-container{background:url(../images/loading.svg) 0 0 no-repeat;min-height:50px}.braintree-placeholder,.braintree-sheet__header{display:none}.braintree-sheet__content--button{text-align:left;padding:0;min-height:0}.braintree-sheet__container{margin-bottom:0}.braintree-sheet{border:none}.totp .totp-code{font-size:1.2rem}.totp .totp-countdown{margin:3px 3px 0 0;display:block;user-select:none}.totp .totp-countdown .totp-sec{font-size:0.85em;position:absolute;line-height:32px;width:32px;text-align:center}.totp .totp-countdown svg{width:32px;height:32px;transform:rotate(-90deg)}.totp .totp-countdown .totp-circle{fill:none;stroke:#175DDC}.totp .totp-countdown .totp-circle.inner{stroke-width:3;stroke-dasharray:78.6;stroke-dashoffset:0}.totp .totp-countdown .totp-circle.outer{stroke-width:2;stroke-dasharray:88;stroke-dashoffset:0}.totp>.align-items-center{margin-bottom:-5px}.totp.low .totp-sec,.totp.low .totp-code{color:#dd4b39}.totp.low .totp-circle{stroke:#dd4b39}.callout{padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid rgba(0,0,0,0.125);border-left-width:5px;border-radius:calc(.25rem - 1px);background-color:#fafafa}.callout .callout-heading{margin-top:0}.callout h3.callout-heading{font-weight:bold;text-transform:uppercase}.callout.callout-primary{border-left-color:#175DDC}.callout.callout-primary .callout-heading{color:#175DDC}.callout.callout-info{border-left-color:#343a40}.callout.callout-info .callout-heading{color:#343a40}.callout.callout-danger{border-left-color:#dd4b39}.callout.callout-danger .callout-heading{color:#dd4b39}.callout.callout-success{border-left-color:#00a65a}.callout.callout-success .callout-heading{color:#00a65a}.callout.callout-warning{border-left-color:#bf7e16}.callout.callout-warning .callout-heading{color:#bf7e16}.list-group-2fa .logo-2fa{min-width:100px}.form-check-block .form-check-label{font-weight:600}.form-check-block .form-check-label>small{display:block;color:#6c757d;font-weight:normal}.form-check-block .form-check-label>span{display:block;font-weight:normal}.form-inline input[type='datetime-local']{width:200px}.form-control.stripe-form-control{padding-top:0.55rem}.form-control.stripe-form-control.is-focused{color:#495057;background-color:#fff;border-color:#81a9f2;outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.form-control.stripe-form-control.is-focused.is-invalid{box-shadow:0 0 0 .2rem rgba(221,75,57,0.25)}.form-control.stripe-form-control.is-invalid{border-color:#dd4b39}.org-nav{background-color:#fbfbfb;border-bottom:1px solid #dee2e6;height:100px;min-height:100px}.org-nav .container{height:100%}.org-nav .nav-tabs{border-bottom:none}.org-nav .nav-tabs a{color:#333}.org-nav .nav-tabs a:not(.active){border-color:transparent}.org-nav .nav-tabs a.active{border-top:3px solid #175DDC;font-weight:bold;padding-top:calc(.5rem - 2px)}.org-nav .nav-tabs a.disabled{color:#b4b4b4}.org-nav .org-name{line-height:1}.org-nav .org-name span{font-size:1.15rem;display:block}img.logo{width:284px;height:43px;margin:0 auto;display:block}.min-height-fix{min-height:1px}.overflow-hidden{overflow:hidden}.cdk-drag-preview{z-index:1070 !important;opacity:0.8;background-color:#fff;border-radius:.25rem}.cursor-move{cursor:move !important}.layout.enterprise2 header{color:#ced4da;background-color:#175DDC}.layout.enterprise2 header:before{content:"";position:absolute;z-index:-1;width:100%;height:340px;left:0;transform:skewY(-3deg);background:#175DDC}.layout.enterprise2 header img.logo{margin:12px 0 0;width:284px;max-width:284px;height:auto}.layout.enterprise2 h2{color:#ffffff;font-size:1.8rem;margin:100px 0 150px 0}.layout.enterprise2 p{margin:20px 0 40px 0;font-size:1.4rem}.layout.enterprise2 p:before{content:"/";padding-right:12px}.layout.enterprise2 p:not(.highlight):before{color:#1252A3}.layout.enterprise2 p b:after{content:"\27F6";font-size:2rem;padding-left:6px}.layout.enterprise2 blockquote{margin:20px 0 0 0;font-size:1.4rem;padding-right:40px} - - -/*# sourceMappingURL=main.6edbb1cdf4d2e063961a.css.map*/ \ No newline at end of file diff --git a/app/main.6edbb1cdf4d2e063961a.css.map b/app/main.6edbb1cdf4d2e063961a.css.map deleted file mode 100644 index 01446e1b..00000000 --- a/app/main.6edbb1cdf4d2e063961a.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./src/css/webfonts.css","webpack:///./src/scss/styles.scss"],"names":[],"mappings":"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","file":"app/main.6edbb1cdf4d2e063961a.css","sourcesContent":["@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: italic;\n\tfont-weight: 300;\n\tsrc: url(../fonts/Open_Sans-italic-300.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: italic;\n\tfont-weight: 400;\n\tsrc: url(../fonts/Open_Sans-italic-400.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: italic;\n\tfont-weight: 600;\n\tsrc: url(../fonts/Open_Sans-italic-600.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: italic;\n\tfont-weight: 700;\n\tsrc: url(../fonts/Open_Sans-italic-700.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: italic;\n\tfont-weight: 800;\n\tsrc: url(../fonts/Open_Sans-italic-800.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: normal;\n\tfont-weight: 300;\n\tsrc: url(../fonts/Open_Sans-normal-300.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: normal;\n\tfont-weight: 400;\n\tsrc: url(../fonts/Open_Sans-normal-400.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: normal;\n\tfont-weight: 600;\n\tsrc: url(../fonts/Open_Sans-normal-600.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: normal;\n\tfont-weight: 700;\n\tsrc: url(../fonts/Open_Sans-normal-700.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: normal;\n\tfont-weight: 800;\n\tsrc: url(../fonts/Open_Sans-normal-800.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n",":root{--blue: #007bff;--indigo: #6610f2;--purple: #6f42c1;--pink: #e83e8c;--red: #dc3545;--orange: #fd7e14;--yellow: #ffc107;--green: #28a745;--teal: #20c997;--cyan: #17a2b8;--white: #fff;--gray: #6c757d;--gray-dark: #343a40;--primary: #175DDC;--secondary: #ced4da;--success: #00a65a;--info: #555;--warning: #bf7e16;--danger: #dd4b39;--light: #f8f9fa;--dark: #343a40;--primary-accent: #1252A3;--secondary-alt: #1A3B66;--breakpoint-xs: 0;--breakpoint-sm: 1px;--breakpoint-md: 2px;--breakpoint-lg: 3px;--breakpoint-xl: 4px;--font-family-sans-serif: \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace}*,*::before,*::after{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:\"Open Sans\",\"Helvetica Neue\",Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-size:1rem;font-weight:400;line-height:1.5;color:#333;text-align:left;background-color:#fff}[tabindex=\"-1\"]:focus{outline:0 !important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#175DDC;text-decoration:none;background-color:transparent}a:hover{color:#104097;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):hover,a:not([href]):not([tabindex]):focus{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}pre,code,kbd,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}button,[type=\"button\"],[type=\"reset\"],[type=\"submit\"]{-webkit-appearance:button}button:not(:disabled),[type=\"button\"]:not(:disabled),[type=\"reset\"]:not(:disabled),[type=\"submit\"]:not(:disabled){cursor:pointer}button::-moz-focus-inner,[type=\"button\"]::-moz-focus-inner,[type=\"reset\"]::-moz-focus-inner,[type=\"submit\"]::-moz-focus-inner{padding:0;border-style:none}input[type=\"radio\"],input[type=\"checkbox\"]{box-sizing:border-box;padding:0}input[type=\"date\"],input[type=\"time\"],input[type=\"datetime-local\"],input[type=\"month\"]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=\"number\"]::-webkit-inner-spin-button,[type=\"number\"]::-webkit-outer-spin-button{height:auto}[type=\"search\"]{outline-offset:-2px;-webkit-appearance:none}[type=\"search\"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none !important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1{font-size:1.7rem}h2,.h2{font-size:1.3rem}h3,.h3{font-size:1rem}h4,.h4{font-size:1rem}h5,.h5{font-size:1rem}h6,.h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:normal}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,0.1)}small,.small{font-size:90%;font-weight:400}mark,.mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:90%;color:#6c757d}.blockquote-footer::before{content:\"\\2014\\A0\"}.img-fluid,.table.table-list td.table-list-icon img{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:100%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:100%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:100%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:10px;padding-left:10px;margin-right:auto;margin-left:auto}@media (min-width: 1px){.container{max-width:540px}}@media (min-width: 2px){.container{max-width:720px}}@media (min-width: 3px){.container{max-width:960px}}@media (min-width: 4px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:10px;padding-left:10px;margin-right:auto;margin-left:auto}.row{display:flex;flex-wrap:wrap;margin-right:-10px;margin-left:-10px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=\"col-\"]{padding-right:0;padding-left:0}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col,.col-auto,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm,.col-sm-auto,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md,.col-md-auto,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg,.col-lg-auto,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl,.col-xl-auto{position:relative;width:100%;padding-right:10px;padding-left:10px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.33333%;max-width:8.33333%}.col-2{flex:0 0 16.66667%;max-width:16.66667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.33333%;max-width:33.33333%}.col-5{flex:0 0 41.66667%;max-width:41.66667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.33333%;max-width:58.33333%}.col-8{flex:0 0 66.66667%;max-width:66.66667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.33333%;max-width:83.33333%}.col-11{flex:0 0 91.66667%;max-width:91.66667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}@media (min-width: 1px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.33333%;max-width:8.33333%}.col-sm-2{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.33333%;max-width:33.33333%}.col-sm-5{flex:0 0 41.66667%;max-width:41.66667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.33333%;max-width:58.33333%}.col-sm-8{flex:0 0 66.66667%;max-width:66.66667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.33333%;max-width:83.33333%}.col-sm-11{flex:0 0 91.66667%;max-width:91.66667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width: 2px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.33333%;max-width:8.33333%}.col-md-2{flex:0 0 16.66667%;max-width:16.66667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.33333%;max-width:33.33333%}.col-md-5{flex:0 0 41.66667%;max-width:41.66667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.33333%;max-width:58.33333%}.col-md-8{flex:0 0 66.66667%;max-width:66.66667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.33333%;max-width:83.33333%}.col-md-11{flex:0 0 91.66667%;max-width:91.66667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width: 3px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.33333%;max-width:8.33333%}.col-lg-2{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.33333%;max-width:33.33333%}.col-lg-5{flex:0 0 41.66667%;max-width:41.66667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}.col-lg-8{flex:0 0 66.66667%;max-width:66.66667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.33333%;max-width:83.33333%}.col-lg-11{flex:0 0 91.66667%;max-width:91.66667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width: 4px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.33333%;max-width:8.33333%}.col-xl-2{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.33333%;max-width:33.33333%}.col-xl-5{flex:0 0 41.66667%;max-width:41.66667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.33333%;max-width:58.33333%}.col-xl-8{flex:0 0 66.66667%;max-width:66.66667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.33333%;max-width:83.33333%}.col-xl-11{flex:0 0 91.66667%;max-width:91.66667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.table{width:100%;margin-bottom:1rem;color:#333}.table th,.table td{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm th,.table-sm td{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered th,.table-bordered td{border:1px solid #dee2e6}.table-bordered thead th,.table-bordered thead td{border-bottom-width:2px}.table-borderless th,.table-borderless td,.table-borderless thead th,.table-borderless tbody+tbody{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,0.02)}.table-hover tbody tr:hover{color:#333;background-color:rgba(0,0,0,0.03)}.table-primary,.table-primary>th,.table-primary>td{background-color:#bed2f5}.table-primary th,.table-primary td,.table-primary thead th,.table-primary tbody+tbody{border-color:#86abed}.table-hover .table-primary:hover{background-color:#a8c3f2}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#a8c3f2}.table-secondary,.table-secondary>th,.table-secondary>td{background-color:#f1f3f5}.table-secondary th,.table-secondary td,.table-secondary thead th,.table-secondary tbody+tbody{border-color:#e6e9ec}.table-hover .table-secondary:hover{background-color:#e2e6ea}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#e2e6ea}.table-success,.table-success>th,.table-success>td{background-color:#b8e6d1}.table-success th,.table-success td,.table-success thead th,.table-success tbody+tbody{border-color:#7ad1a9}.table-hover .table-success:hover{background-color:#a5dfc5}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#a5dfc5}.table-info,.table-info>th,.table-info>td{background-color:#cfcfcf}.table-info th,.table-info td,.table-info thead th,.table-info tbody+tbody{border-color:#a7a7a7}.table-hover .table-info:hover{background-color:#c2c2c2}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#c2c2c2}.table-warning,.table-warning>th,.table-warning>td{background-color:#eddbbe}.table-warning th,.table-warning td,.table-warning thead th,.table-warning tbody+tbody{border-color:#debc86}.table-hover .table-warning:hover{background-color:#e7d0aa}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#e7d0aa}.table-danger,.table-danger>th,.table-danger>td{background-color:#f5cdc8}.table-danger th,.table-danger td,.table-danger thead th,.table-danger tbody+tbody{border-color:#eda198}.table-hover .table-danger:hover{background-color:#f1b9b2}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b9b2}.table-light,.table-light>th,.table-light>td{background-color:#fdfdfe}.table-light th,.table-light td,.table-light thead th,.table-light tbody+tbody{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>th,.table-dark>td{background-color:#c6c8ca}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-primary-accent,.table-primary-accent>th,.table-primary-accent>td{background-color:#bdcfe5}.table-primary-accent th,.table-primary-accent td,.table-primary-accent thead th,.table-primary-accent tbody+tbody{border-color:#84a5cf}.table-hover .table-primary-accent:hover{background-color:#abc2de}.table-hover .table-primary-accent:hover>td,.table-hover .table-primary-accent:hover>th{background-color:#abc2de}.table-secondary-alt,.table-secondary-alt>th,.table-secondary-alt>td{background-color:#bfc8d4}.table-secondary-alt th,.table-secondary-alt td,.table-secondary-alt thead th,.table-secondary-alt tbody+tbody{border-color:#8899af}.table-hover .table-secondary-alt:hover{background-color:#b0bbca}.table-hover .table-secondary-alt:hover>td,.table-hover .table-secondary-alt:hover>th{background-color:#b0bbca}.table-active,.table-active>th,.table-active>td{background-color:rgba(0,0,0,0.03)}.table-hover .table-active:hover{background-color:rgba(0,0,0,0.03)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,0.03)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark th,.table-dark td,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,0.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,0.075)}@media (max-width: 0.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width: 1.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width: 2.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width: 3.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fbfbfb;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#81a9f2;outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.form-control::placeholder{color:#b4b4b4;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e0e0e0;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fbfbfb}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.15rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#333;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.15rem;line-height:1.5;border-radius:.3rem}select.form-control[size],select.form-control[multiple]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=\"col-\"]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled ~ .form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:90%;color:#00a65a}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(0,166,90,0.9);border-radius:.25rem}.was-validated .form-control:valid,.form-control.is-valid{border-color:#00a65a;padding-right:calc(1.5em + .75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2300a65a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#00a65a;box-shadow:0 0 0 .2rem rgba(0,166,90,0.25)}.was-validated .form-control:valid ~ .valid-feedback,.was-validated .form-control:valid ~ .valid-tooltip,.form-control.is-valid ~ .valid-feedback,.form-control.is-valid ~ .valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .custom-select:valid,.custom-select.is-valid{border-color:#00a65a;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right .75rem center/8px 10px,url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2300a65a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") #fbfbfb no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .custom-select:valid:focus,.custom-select.is-valid:focus{border-color:#00a65a;box-shadow:0 0 0 .2rem rgba(0,166,90,0.25)}.was-validated .custom-select:valid ~ .valid-feedback,.was-validated .custom-select:valid ~ .valid-tooltip,.custom-select.is-valid ~ .valid-feedback,.custom-select.is-valid ~ .valid-tooltip{display:block}.was-validated .form-control-file:valid ~ .valid-feedback,.was-validated .form-control-file:valid ~ .valid-tooltip,.form-control-file.is-valid ~ .valid-feedback,.form-control-file.is-valid ~ .valid-tooltip{display:block}.was-validated .form-check-input:valid ~ .form-check-label,.form-check-input.is-valid ~ .form-check-label{color:#00a65a}.was-validated .form-check-input:valid ~ .valid-feedback,.was-validated .form-check-input:valid ~ .valid-tooltip,.form-check-input.is-valid ~ .valid-feedback,.form-check-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-control-input:valid ~ .custom-control-label,.custom-control-input.is-valid ~ .custom-control-label{color:#00a65a}.was-validated .custom-control-input:valid ~ .custom-control-label::before,.custom-control-input.is-valid ~ .custom-control-label::before{border-color:#00a65a}.was-validated .custom-control-input:valid ~ .valid-feedback,.was-validated .custom-control-input:valid ~ .valid-tooltip,.custom-control-input.is-valid ~ .valid-feedback,.custom-control-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before,.custom-control-input.is-valid:checked ~ .custom-control-label::before{border-color:#00d976;background-color:#00d976}.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before,.custom-control-input.is-valid:focus ~ .custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,166,90,0.25)}.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before,.custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before{border-color:#00a65a}.was-validated .custom-file-input:valid ~ .custom-file-label,.custom-file-input.is-valid ~ .custom-file-label{border-color:#00a65a}.was-validated .custom-file-input:valid ~ .valid-feedback,.was-validated .custom-file-input:valid ~ .valid-tooltip,.custom-file-input.is-valid ~ .valid-feedback,.custom-file-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-file-input:valid:focus ~ .custom-file-label,.custom-file-input.is-valid:focus ~ .custom-file-label{border-color:#00a65a;box-shadow:0 0 0 .2rem rgba(0,166,90,0.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:90%;color:#dd4b39}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(221,75,57,0.9);border-radius:.25rem}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#dd4b39;padding-right:calc(1.5em + .75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dd4b39' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dd4b39' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dd4b39;box-shadow:0 0 0 .2rem rgba(221,75,57,0.25)}.was-validated .form-control:invalid ~ .invalid-feedback,.was-validated .form-control:invalid ~ .invalid-tooltip,.form-control.is-invalid ~ .invalid-feedback,.form-control.is-invalid ~ .invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .custom-select:invalid,.custom-select.is-invalid{border-color:#dd4b39;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right .75rem center/8px 10px,url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dd4b39' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dd4b39' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\") #fbfbfb no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .custom-select:invalid:focus,.custom-select.is-invalid:focus{border-color:#dd4b39;box-shadow:0 0 0 .2rem rgba(221,75,57,0.25)}.was-validated .custom-select:invalid ~ .invalid-feedback,.was-validated .custom-select:invalid ~ .invalid-tooltip,.custom-select.is-invalid ~ .invalid-feedback,.custom-select.is-invalid ~ .invalid-tooltip{display:block}.was-validated .form-control-file:invalid ~ .invalid-feedback,.was-validated .form-control-file:invalid ~ .invalid-tooltip,.form-control-file.is-invalid ~ .invalid-feedback,.form-control-file.is-invalid ~ .invalid-tooltip{display:block}.was-validated .form-check-input:invalid ~ .form-check-label,.form-check-input.is-invalid ~ .form-check-label{color:#dd4b39}.was-validated .form-check-input:invalid ~ .invalid-feedback,.was-validated .form-check-input:invalid ~ .invalid-tooltip,.form-check-input.is-invalid ~ .invalid-feedback,.form-check-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-control-input:invalid ~ .custom-control-label,.custom-control-input.is-invalid ~ .custom-control-label{color:#dd4b39}.was-validated .custom-control-input:invalid ~ .custom-control-label::before,.custom-control-input.is-invalid ~ .custom-control-label::before{border-color:#dd4b39}.was-validated .custom-control-input:invalid ~ .invalid-feedback,.was-validated .custom-control-input:invalid ~ .invalid-tooltip,.custom-control-input.is-invalid ~ .invalid-feedback,.custom-control-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before,.custom-control-input.is-invalid:checked ~ .custom-control-label::before{border-color:#e47365;background-color:#e47365}.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before,.custom-control-input.is-invalid:focus ~ .custom-control-label::before{box-shadow:0 0 0 .2rem rgba(221,75,57,0.25)}.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before,.custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before{border-color:#dd4b39}.was-validated .custom-file-input:invalid ~ .custom-file-label,.custom-file-input.is-invalid ~ .custom-file-label{border-color:#dd4b39}.was-validated .custom-file-input:invalid ~ .invalid-feedback,.was-validated .custom-file-input:invalid ~ .invalid-tooltip,.custom-file-input.is-invalid ~ .invalid-feedback,.custom-file-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-file-input:invalid:focus ~ .custom-file-label,.custom-file-input.is-invalid:focus ~ .custom-file-label{border-color:#dd4b39;box-shadow:0 0 0 .2rem rgba(221,75,57,0.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width: 1px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group,.form-inline .custom-select{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn,.swal2-popup .swal2-actions button{display:inline-block;font-weight:600;color:#333;text-align:center;vertical-align:middle;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn,.swal2-popup .swal2-actions button{transition:none}}.btn:hover,.swal2-popup .swal2-actions button:hover{color:#333;text-decoration:none}.btn:focus,.swal2-popup .swal2-actions button:focus,.btn.focus,.swal2-popup .swal2-actions button.focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.btn.disabled,.swal2-popup .swal2-actions button.disabled,.btn:disabled,.swal2-popup .swal2-actions button:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary,.swal2-popup .swal2-actions button.swal2-confirm{color:#fff;background-color:#175DDC;border-color:#175DDC}.btn-primary:hover,.swal2-popup .swal2-actions button.swal2-confirm:hover{color:#fff;background-color:#134eb9;border-color:#1249ae}.btn-primary:focus,.swal2-popup .swal2-actions button.swal2-confirm:focus,.btn-primary.focus,.swal2-popup .swal2-actions button.focus.swal2-confirm{box-shadow:0 0 0 .2rem rgba(58,117,225,0.5)}.btn-primary.disabled,.swal2-popup .swal2-actions button.disabled.swal2-confirm,.btn-primary:disabled,.swal2-popup .swal2-actions button.swal2-confirm:disabled{color:#fff;background-color:#175DDC;border-color:#175DDC}.btn-primary:not(:disabled):not(.disabled):active,.swal2-popup .swal2-actions button.swal2-confirm:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.swal2-popup .swal2-actions button.swal2-confirm:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle,.swal2-popup .swal2-actions .show>button.dropdown-toggle.swal2-confirm{color:#fff;background-color:#1249ae;border-color:#1145a2}.btn-primary:not(:disabled):not(.disabled):active:focus,.swal2-popup .swal2-actions button.swal2-confirm:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.swal2-popup .swal2-actions button.swal2-confirm:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus,.swal2-popup .swal2-actions .show>button.dropdown-toggle.swal2-confirm:focus{box-shadow:0 0 0 .2rem rgba(58,117,225,0.5)}.btn-secondary{color:#212529;background-color:#ced4da;border-color:#ced4da}.btn-secondary:hover{color:#212529;background-color:#b8c1ca;border-color:#b1bbc4}.btn-secondary:focus,.btn-secondary.focus{box-shadow:0 0 0 .2rem rgba(180,186,191,0.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#212529;background-color:#ced4da;border-color:#ced4da}.btn-secondary:not(:disabled):not(.disabled):active,.btn-secondary:not(:disabled):not(.disabled).active,.show>.btn-secondary.dropdown-toggle{color:#212529;background-color:#b1bbc4;border-color:#aab4bf}.btn-secondary:not(:disabled):not(.disabled):active:focus,.btn-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(180,186,191,0.5)}.btn-success{color:#fff;background-color:#00a65a;border-color:#00a65a}.btn-success:hover{color:#fff;background-color:#008045;border-color:#00733e}.btn-success:focus,.btn-success.focus{box-shadow:0 0 0 .2rem rgba(38,179,115,0.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#00a65a;border-color:#00a65a}.btn-success:not(:disabled):not(.disabled):active,.btn-success:not(:disabled):not(.disabled).active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#00733e;border-color:#006637}.btn-success:not(:disabled):not(.disabled):active:focus,.btn-success:not(:disabled):not(.disabled).active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,179,115,0.5)}.btn-info{color:#fff;background-color:#555;border-color:#555}.btn-info:hover{color:#fff;background-color:#424242;border-color:#3c3c3c}.btn-info:focus,.btn-info.focus{box-shadow:0 0 0 .2rem rgba(111,111,111,0.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#555;border-color:#555}.btn-info:not(:disabled):not(.disabled):active,.btn-info:not(:disabled):not(.disabled).active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#3c3c3c;border-color:#353535}.btn-info:not(:disabled):not(.disabled):active:focus,.btn-info:not(:disabled):not(.disabled).active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(111,111,111,0.5)}.btn-warning{color:#fff;background-color:#bf7e16;border-color:#bf7e16}.btn-warning:hover{color:#fff;background-color:#9d6712;border-color:#916011}.btn-warning:focus,.btn-warning.focus{box-shadow:0 0 0 .2rem rgba(201,145,57,0.5)}.btn-warning.disabled,.btn-warning:disabled{color:#fff;background-color:#bf7e16;border-color:#bf7e16}.btn-warning:not(:disabled):not(.disabled):active,.btn-warning:not(:disabled):not(.disabled).active,.show>.btn-warning.dropdown-toggle{color:#fff;background-color:#916011;border-color:#86580f}.btn-warning:not(:disabled):not(.disabled):active:focus,.btn-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(201,145,57,0.5)}.btn-danger{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.btn-danger:hover{color:#fff;background-color:#cd3623;border-color:#c23321}.btn-danger:focus,.btn-danger.focus{box-shadow:0 0 0 .2rem rgba(226,102,87,0.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.btn-danger:not(:disabled):not(.disabled):active,.btn-danger:not(:disabled):not(.disabled).active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#c23321;border-color:#b7301f}.btn-danger:not(:disabled):not(.disabled):active:focus,.btn-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(226,102,87,0.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light:focus,.btn-light.focus{box-shadow:0 0 0 .2rem rgba(216,217,219,0.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled):active,.btn-light:not(:disabled):not(.disabled).active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled):active:focus,.btn-light:not(:disabled):not(.disabled).active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,0.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark:focus,.btn-dark.focus{box-shadow:0 0 0 .2rem rgba(82,88,93,0.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled):active,.btn-dark:not(:disabled):not(.disabled).active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled):active:focus,.btn-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,0.5)}.btn-primary-accent{color:#fff;background-color:#1252A3;border-color:#1252A3}.btn-primary-accent:hover{color:#fff;background-color:#0e4181;border-color:#0d3b75}.btn-primary-accent:focus,.btn-primary-accent.focus{box-shadow:0 0 0 .2rem rgba(54,108,177,0.5)}.btn-primary-accent.disabled,.btn-primary-accent:disabled{color:#fff;background-color:#1252A3;border-color:#1252A3}.btn-primary-accent:not(:disabled):not(.disabled):active,.btn-primary-accent:not(:disabled):not(.disabled).active,.show>.btn-primary-accent.dropdown-toggle{color:#fff;background-color:#0d3b75;border-color:#0c356a}.btn-primary-accent:not(:disabled):not(.disabled):active:focus,.btn-primary-accent:not(:disabled):not(.disabled).active:focus,.show>.btn-primary-accent.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(54,108,177,0.5)}.btn-secondary-alt{color:#fff;background-color:#1A3B66;border-color:#1A3B66}.btn-secondary-alt:hover{color:#fff;background-color:#122948;border-color:#10233d}.btn-secondary-alt:focus,.btn-secondary-alt.focus{box-shadow:0 0 0 .2rem rgba(60,88,125,0.5)}.btn-secondary-alt.disabled,.btn-secondary-alt:disabled{color:#fff;background-color:#1A3B66;border-color:#1A3B66}.btn-secondary-alt:not(:disabled):not(.disabled):active,.btn-secondary-alt:not(:disabled):not(.disabled).active,.show>.btn-secondary-alt.dropdown-toggle{color:#fff;background-color:#10233d;border-color:#0d1e33}.btn-secondary-alt:not(:disabled):not(.disabled):active:focus,.btn-secondary-alt:not(:disabled):not(.disabled).active:focus,.show>.btn-secondary-alt.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(60,88,125,0.5)}.btn-outline-primary{color:#175DDC;border-color:#175DDC}.btn-outline-primary:hover{color:#fff;background-color:#175DDC;border-color:#175DDC}.btn-outline-primary:focus,.btn-outline-primary.focus{box-shadow:0 0 0 .2rem rgba(23,93,220,0.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#175DDC;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled):active,.btn-outline-primary:not(:disabled):not(.disabled).active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#175DDC;border-color:#175DDC}.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,93,220,0.5)}.btn-outline-secondary,.swal2-popup .swal2-actions button.swal2-cancel{color:#ced4da;border-color:#ced4da}.btn-outline-secondary:hover,.swal2-popup .swal2-actions button.swal2-cancel:hover{color:#212529;background-color:#ced4da;border-color:#ced4da}.btn-outline-secondary:focus,.swal2-popup .swal2-actions button.swal2-cancel:focus,.btn-outline-secondary.focus,.swal2-popup .swal2-actions button.focus.swal2-cancel{box-shadow:0 0 0 .2rem rgba(206,212,218,0.5)}.btn-outline-secondary.disabled,.swal2-popup .swal2-actions button.disabled.swal2-cancel,.btn-outline-secondary:disabled,.swal2-popup .swal2-actions button.swal2-cancel:disabled{color:#ced4da;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled):active,.swal2-popup .swal2-actions button.swal2-cancel:not(:disabled):not(.disabled):active,.btn-outline-secondary:not(:disabled):not(.disabled).active,.swal2-popup .swal2-actions button.swal2-cancel:not(:disabled):not(.disabled).active,.show>.btn-outline-secondary.dropdown-toggle,.swal2-popup .swal2-actions .show>button.dropdown-toggle.swal2-cancel{color:#212529;background-color:#ced4da;border-color:#ced4da}.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.swal2-popup .swal2-actions button.swal2-cancel:not(:disabled):not(.disabled):active:focus,.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.swal2-popup .swal2-actions button.swal2-cancel:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus,.swal2-popup .swal2-actions .show>button.dropdown-toggle.swal2-cancel:focus{box-shadow:0 0 0 .2rem rgba(206,212,218,0.5)}.btn-outline-success{color:#00a65a;border-color:#00a65a}.btn-outline-success:hover{color:#fff;background-color:#00a65a;border-color:#00a65a}.btn-outline-success:focus,.btn-outline-success.focus{box-shadow:0 0 0 .2rem rgba(0,166,90,0.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#00a65a;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled):active,.btn-outline-success:not(:disabled):not(.disabled).active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#00a65a;border-color:#00a65a}.btn-outline-success:not(:disabled):not(.disabled):active:focus,.btn-outline-success:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,166,90,0.5)}.btn-outline-info{color:#555;border-color:#555}.btn-outline-info:hover{color:#fff;background-color:#555;border-color:#555}.btn-outline-info:focus,.btn-outline-info.focus{box-shadow:0 0 0 .2rem rgba(85,85,85,0.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#555;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled):active,.btn-outline-info:not(:disabled):not(.disabled).active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#555;border-color:#555}.btn-outline-info:not(:disabled):not(.disabled):active:focus,.btn-outline-info:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(85,85,85,0.5)}.btn-outline-warning{color:#bf7e16;border-color:#bf7e16}.btn-outline-warning:hover{color:#fff;background-color:#bf7e16;border-color:#bf7e16}.btn-outline-warning:focus,.btn-outline-warning.focus{box-shadow:0 0 0 .2rem rgba(191,126,22,0.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#bf7e16;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled):active,.btn-outline-warning:not(:disabled):not(.disabled).active,.show>.btn-outline-warning.dropdown-toggle{color:#fff;background-color:#bf7e16;border-color:#bf7e16}.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(191,126,22,0.5)}.btn-outline-danger{color:#dd4b39;border-color:#dd4b39}.btn-outline-danger:hover{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.btn-outline-danger:focus,.btn-outline-danger.focus{box-shadow:0 0 0 .2rem rgba(221,75,57,0.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dd4b39;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled):active,.btn-outline-danger:not(:disabled):not(.disabled).active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(221,75,57,0.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:focus,.btn-outline-light.focus{box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled):active,.btn-outline-light:not(:disabled):not(.disabled).active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled):active:focus,.btn-outline-light:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:focus,.btn-outline-dark.focus{box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled):active,.btn-outline-dark:not(:disabled):not(.disabled).active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.btn-outline-primary-accent{color:#1252A3;border-color:#1252A3}.btn-outline-primary-accent:hover{color:#fff;background-color:#1252A3;border-color:#1252A3}.btn-outline-primary-accent:focus,.btn-outline-primary-accent.focus{box-shadow:0 0 0 .2rem rgba(18,82,163,0.5)}.btn-outline-primary-accent.disabled,.btn-outline-primary-accent:disabled{color:#1252A3;background-color:transparent}.btn-outline-primary-accent:not(:disabled):not(.disabled):active,.btn-outline-primary-accent:not(:disabled):not(.disabled).active,.show>.btn-outline-primary-accent.dropdown-toggle{color:#fff;background-color:#1252A3;border-color:#1252A3}.btn-outline-primary-accent:not(:disabled):not(.disabled):active:focus,.btn-outline-primary-accent:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-primary-accent.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(18,82,163,0.5)}.btn-outline-secondary-alt{color:#1A3B66;border-color:#1A3B66}.btn-outline-secondary-alt:hover{color:#fff;background-color:#1A3B66;border-color:#1A3B66}.btn-outline-secondary-alt:focus,.btn-outline-secondary-alt.focus{box-shadow:0 0 0 .2rem rgba(26,59,102,0.5)}.btn-outline-secondary-alt.disabled,.btn-outline-secondary-alt:disabled{color:#1A3B66;background-color:transparent}.btn-outline-secondary-alt:not(:disabled):not(.disabled):active,.btn-outline-secondary-alt:not(:disabled):not(.disabled).active,.show>.btn-outline-secondary-alt.dropdown-toggle{color:#fff;background-color:#1A3B66;border-color:#1A3B66}.btn-outline-secondary-alt:not(:disabled):not(.disabled):active:focus,.btn-outline-secondary-alt:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-secondary-alt.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(26,59,102,0.5)}.btn-link{font-weight:400;color:#175DDC;text-decoration:none}.btn-link:hover{color:#104097;text-decoration:underline}.btn-link:focus,.btn-link.focus{text-decoration:underline;box-shadow:none}.btn-link:disabled,.btn-link.disabled{color:#6c757d;pointer-events:none}.btn-lg,.btn-group-lg>.btn,.swal2-popup .swal2-actions .btn-group-lg>button{padding:.5rem 1rem;font-size:1.15rem;line-height:1.5;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn,.swal2-popup .swal2-actions .btn-group-sm>button{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=\"submit\"].btn-block,input[type=\"reset\"].btn-block,input[type=\"button\"].btn-block{width:100%}.fade{transition:opacity 0.15s linear}@media (prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height 0.35s ease}@media (prefers-reduced-motion: reduce){.collapsing{transition:none}}.dropup,.dropright,.dropdown,.dropleft{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#333;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width: 1px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width: 2px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width: 3px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width: 4px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\"}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=\"top\"],.dropdown-menu[x-placement^=\"right\"],.dropdown-menu[x-placement^=\"bottom\"],.dropdown-menu[x-placement^=\"left\"]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#333;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:hover,.dropdown-item:focus{color:#16181b;text-decoration:none;background-color:rgba(0,0,0,0.06)}.dropdown-item.active,.dropdown-item:active{color:#333;text-decoration:none;background-color:rgba(0,0,0,0.1)}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#333}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.swal2-popup .swal2-actions .btn-group>button,.btn-group-vertical>.btn,.swal2-popup .swal2-actions .btn-group-vertical>button{position:relative;flex:1 1 auto}.btn-group>.btn:hover,.swal2-popup .swal2-actions .btn-group>button:hover,.btn-group-vertical>.btn:hover,.swal2-popup .swal2-actions .btn-group-vertical>button:hover{z-index:1}.btn-group>.btn:focus,.swal2-popup .swal2-actions .btn-group>button:focus,.btn-group>.btn:active,.swal2-popup .swal2-actions .btn-group>button:active,.btn-group>.btn.active,.swal2-popup .swal2-actions .btn-group>button.active,.btn-group-vertical>.btn:focus,.swal2-popup .swal2-actions .btn-group-vertical>button:focus,.btn-group-vertical>.btn:active,.swal2-popup .swal2-actions .btn-group-vertical>button:active,.btn-group-vertical>.btn.active,.swal2-popup .swal2-actions .btn-group-vertical>button.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.swal2-popup .swal2-actions .btn-group>button:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-left:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.swal2-popup .swal2-actions .btn-group>button:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn,.swal2-popup .swal2-actions .btn-group>.btn-group:not(:last-child)>button{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:not(:first-child),.swal2-popup .swal2-actions .btn-group>button:not(:first-child),.btn-group>.btn-group:not(:first-child)>.btn,.swal2-popup .swal2-actions .btn-group>.btn-group:not(:first-child)>button{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split,.swal2-popup .swal2-actions .btn-group-sm>button+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split,.swal2-popup .swal2-actions .btn-group-lg>button+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.swal2-popup .swal2-actions .btn-group-vertical>button,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.swal2-popup .swal2-actions .btn-group-vertical>button:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.swal2-popup .swal2-actions .btn-group-vertical>button:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn,.swal2-popup .swal2-actions .btn-group-vertical>.btn-group:not(:last-child)>button{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:not(:first-child),.swal2-popup .swal2-actions .btn-group-vertical>button:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child)>.btn,.swal2-popup .swal2-actions .btn-group-vertical>.btn-group:not(:first-child)>button{border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.swal2-popup .swal2-actions .btn-group-toggle>button,.btn-group-toggle>.btn-group>.btn,.swal2-popup .swal2-actions .btn-group-toggle>.btn-group>button{margin-bottom:0}.btn-group-toggle>.btn input[type=\"radio\"],.swal2-popup .swal2-actions .btn-group-toggle>button input[type=\"radio\"],.btn-group-toggle>.btn input[type=\"checkbox\"],.swal2-popup .swal2-actions .btn-group-toggle>button input[type=\"checkbox\"],.btn-group-toggle>.btn-group>.btn input[type=\"radio\"],.swal2-popup .swal2-actions .btn-group-toggle>.btn-group>button input[type=\"radio\"],.btn-group-toggle>.btn-group>.btn input[type=\"checkbox\"],.swal2-popup .swal2-actions .btn-group-toggle>.btn-group>button input[type=\"checkbox\"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-control-plaintext,.input-group>.custom-select,.input-group>.custom-file{position:relative;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.form-control+.form-control,.input-group>.form-control+.custom-select,.input-group>.form-control+.custom-file,.input-group>.form-control-plaintext+.form-control,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.custom-file,.input-group>.custom-select+.form-control,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.custom-file,.input-group>.custom-file+.form-control,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.custom-file{margin-left:-1px}.input-group>.form-control:focus,.input-group>.custom-select:focus,.input-group>.custom-file .custom-file-input:focus ~ .custom-file-label{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.form-control:not(:last-child),.input-group>.custom-select:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.form-control:not(:first-child),.input-group>.custom-select:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-prepend,.input-group-append{display:flex}.input-group-prepend .btn,.input-group-prepend .swal2-popup .swal2-actions button,.swal2-popup .swal2-actions .input-group-prepend button,.input-group-append .btn,.input-group-append .swal2-popup .swal2-actions button,.swal2-popup .swal2-actions .input-group-append button{position:relative;z-index:2}.input-group-prepend .btn:focus,.input-group-prepend .swal2-popup .swal2-actions button:focus,.swal2-popup .swal2-actions .input-group-prepend button:focus,.input-group-append .btn:focus,.input-group-append .swal2-popup .swal2-actions button:focus,.swal2-popup .swal2-actions .input-group-append button:focus{z-index:3}.input-group-prepend .btn+.btn,.input-group-prepend .swal2-popup .swal2-actions button+.btn,.swal2-popup .swal2-actions .input-group-prepend button+.btn,.input-group-prepend .swal2-popup .swal2-actions .btn+button,.swal2-popup .swal2-actions .input-group-prepend .btn+button,.input-group-prepend .swal2-popup .swal2-actions button+button,.swal2-popup .swal2-actions .input-group-prepend button+button,.input-group-prepend .btn+.input-group-text,.input-group-prepend .swal2-popup .swal2-actions button+.input-group-text,.swal2-popup .swal2-actions .input-group-prepend button+.input-group-text,.input-group-prepend .input-group-text+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .swal2-popup .swal2-actions .input-group-text+button,.swal2-popup .swal2-actions .input-group-prepend .input-group-text+button,.input-group-append .btn+.btn,.input-group-append .swal2-popup .swal2-actions button+.btn,.swal2-popup .swal2-actions .input-group-append button+.btn,.input-group-append .swal2-popup .swal2-actions .btn+button,.swal2-popup .swal2-actions .input-group-append .btn+button,.input-group-append .swal2-popup .swal2-actions button+button,.swal2-popup .swal2-actions .input-group-append button+button,.input-group-append .btn+.input-group-text,.input-group-append .swal2-popup .swal2-actions button+.input-group-text,.swal2-popup .swal2-actions .input-group-append button+.input-group-text,.input-group-append .input-group-text+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .swal2-popup .swal2-actions .input-group-text+button,.swal2-popup .swal2-actions .input-group-append .input-group-text+button{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=\"radio\"],.input-group-text input[type=\"checkbox\"]{margin-top:0}.input-group-lg>.form-control:not(textarea),.input-group-lg>.custom-select{height:calc(1.5em + 1rem + 2px)}.input-group-lg>.form-control,.input-group-lg>.custom-select,.input-group-lg>.input-group-prepend>.input-group-text,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.swal2-popup .swal2-actions .input-group-lg>.input-group-prepend>button,.input-group-lg>.input-group-append>.btn,.swal2-popup .swal2-actions .input-group-lg>.input-group-append>button{padding:.5rem 1rem;font-size:1.15rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.form-control:not(textarea),.input-group-sm>.custom-select{height:calc(1.5em + .5rem + 2px)}.input-group-sm>.form-control,.input-group-sm>.custom-select,.input-group-sm>.input-group-prepend>.input-group-text,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.swal2-popup .swal2-actions .input-group-sm>.input-group-prepend>button,.input-group-sm>.input-group-append>.btn,.swal2-popup .swal2-actions .input-group-sm>.input-group-append>button{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-prepend>.btn,.swal2-popup .swal2-actions .input-group>.input-group-prepend>button,.input-group>.input-group-prepend>.input-group-text,.input-group>.input-group-append:not(:last-child)>.btn,.swal2-popup .swal2-actions .input-group>.input-group-append:not(:last-child)>button,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.swal2-popup .swal2-actions .input-group>.input-group-append:last-child>button:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.swal2-popup .swal2-actions .input-group>.input-group-append>button,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:not(:first-child)>.btn,.swal2-popup .swal2-actions .input-group>.input-group-prepend:not(:first-child)>button,.input-group>.input-group-prepend:not(:first-child)>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.swal2-popup .swal2-actions .input-group>.input-group-prepend:first-child>button:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked ~ .custom-control-label::before{color:#fff;border-color:#175DDC;background-color:#175DDC}.custom-control-input:focus ~ .custom-control-label::before{box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.custom-control-input:focus:not(:checked) ~ .custom-control-label::before{border-color:#81a9f2}.custom-control-input:not(:disabled):active ~ .custom-control-label::before{color:#fff;background-color:#afc8f7;border-color:#afc8f7}.custom-control-input:disabled ~ .custom-control-label{color:#6c757d}.custom-control-input:disabled ~ .custom-control-label::before{background-color:#e0e0e0}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:\"\";background-color:#fbfbfb;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:\"\";background:no-repeat 50% / 50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e\")}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before{border-color:#175DDC;background-color:#175DDC}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\")}.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(23,93,220,0.5)}.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before{background-color:rgba(23,93,220,0.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked ~ .custom-control-label::after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\")}.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(23,93,220,0.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked ~ .custom-control-label::after{background-color:#fbfbfb;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(23,93,220,0.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right .75rem center/8px 10px;background-color:#fbfbfb;border:1px solid #ced4da;border-radius:.25rem;appearance:none}.custom-select:focus{border-color:#81a9f2;outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fbfbfb}.custom-select[multiple],.custom-select[size]:not([size=\"1\"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.15rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus ~ .custom-file-label{border-color:#81a9f2;box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.custom-file-input:disabled ~ .custom-file-label{background-color:#e0e0e0}.custom-file-input:lang(en) ~ .custom-file-label::after{content:\"Browse\"}.custom-file-input ~ .custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fbfbfb;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:\"Browse\";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:calc(1rem + .4rem);padding:0;background-color:transparent;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(23,93,220,0.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(23,93,220,0.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(23,93,220,0.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#175DDC;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#afc8f7}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#175DDC;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#afc8f7}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#175DDC;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#afc8f7}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:hover,.nav-link:focus{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#175DDC}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:.75rem 1rem}.navbar>.container,.navbar>.container-fluid{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:0;padding-bottom:0;margin-right:1rem;font-size:2.1875rem;line-height:inherit;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.15rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:hover,.navbar-toggler:focus{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:\"\";background:no-repeat center center;background-size:100% 100%}@media (max-width: 0.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 1px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width: 1.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 2px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width: 2.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 3px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width: 3.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 4px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,0.9)}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:rgba(0,0,0,0.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,0.5)}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:rgba(0,0,0,0.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,0.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .nav-link.active{color:rgba(0,0,0,0.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,0.5);border-color:rgba(0,0,0,0.1)}.navbar-light .navbar-toggler-icon{background-image:url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0,0,0,0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\")}.navbar-light .navbar-text{color:rgba(0,0,0,0.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,0.9)}.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:rgba(0,0,0,0.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,0.7)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,0.9)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,0.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,0.7);border-color:rgba(255,255,255,0.1)}.navbar-dark .navbar-toggler-icon{background-image:url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255,255,255,0.7)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\")}.navbar-dark .navbar-text{color:rgba(255,255,255,0.7)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,0.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.6rem}.card-subtitle{margin-top:-.3rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.6rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,0.03);border-bottom:1px solid rgba(0,0,0,0.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.6rem 1.25rem;background-color:rgba(0,0,0,0.03);border-top:1px solid rgba(0,0,0,0.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.6rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:flex;flex-direction:column}.card-deck .card{margin-bottom:10px}@media (min-width: 1px){.card-deck{flex-flow:row wrap;margin-right:-10px;margin-left:-10px}.card-deck .card{display:flex;flex:1 0 0%;flex-direction:column;margin-right:10px;margin-bottom:0;margin-left:10px}}.card-group{display:flex;flex-direction:column}.card-group>.card{margin-bottom:10px}@media (min-width: 1px){.card-group{flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.6rem}@media (min-width: 1px){.card-columns{column-count:3;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:\"/\"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#175DDC;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#104097;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#175DDC;border-color:#175DDC}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.15rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.badge{transition:none}}a.badge:hover,a.badge:focus{text-decoration:none}.badge:empty{display:none}.btn .badge,.swal2-popup .swal2-actions button .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#175DDC}a.badge-primary:hover,a.badge-primary:focus{color:#fff;background-color:#1249ae}a.badge-primary:focus,a.badge-primary.focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,0.5)}.badge-secondary{color:#212529;background-color:#ced4da}a.badge-secondary:hover,a.badge-secondary:focus{color:#212529;background-color:#b1bbc4}a.badge-secondary:focus,a.badge-secondary.focus{outline:0;box-shadow:0 0 0 .2rem rgba(206,212,218,0.5)}.badge-success{color:#fff;background-color:#00a65a}a.badge-success:hover,a.badge-success:focus{color:#fff;background-color:#00733e}a.badge-success:focus,a.badge-success.focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,166,90,0.5)}.badge-info{color:#fff;background-color:#555}a.badge-info:hover,a.badge-info:focus{color:#fff;background-color:#3c3c3c}a.badge-info:focus,a.badge-info.focus{outline:0;box-shadow:0 0 0 .2rem rgba(85,85,85,0.5)}.badge-warning{color:#fff;background-color:#bf7e16}a.badge-warning:hover,a.badge-warning:focus{color:#fff;background-color:#916011}a.badge-warning:focus,a.badge-warning.focus{outline:0;box-shadow:0 0 0 .2rem rgba(191,126,22,0.5)}.badge-danger{color:#fff;background-color:#dd4b39}a.badge-danger:hover,a.badge-danger:focus{color:#fff;background-color:#c23321}a.badge-danger:focus,a.badge-danger.focus{outline:0;box-shadow:0 0 0 .2rem rgba(221,75,57,0.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:hover,a.badge-light:focus{color:#212529;background-color:#dae0e5}a.badge-light:focus,a.badge-light.focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:hover,a.badge-dark:focus{color:#fff;background-color:#1d2124}a.badge-dark:focus,a.badge-dark.focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.badge-primary-accent{color:#fff;background-color:#1252A3}a.badge-primary-accent:hover,a.badge-primary-accent:focus{color:#fff;background-color:#0d3b75}a.badge-primary-accent:focus,a.badge-primary-accent.focus{outline:0;box-shadow:0 0 0 .2rem rgba(18,82,163,0.5)}.badge-secondary-alt{color:#fff;background-color:#1A3B66}a.badge-secondary-alt:hover,a.badge-secondary-alt:focus{color:#fff;background-color:#10233d}a.badge-secondary-alt:focus,a.badge-secondary-alt.focus{outline:0;box-shadow:0 0 0 .2rem rgba(26,59,102,0.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width: 1px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#0c3072;background-color:#d1dff8;border-color:#bed2f5}.alert-primary hr{border-top-color:#a8c3f2}.alert-primary .alert-link{color:#071d44}.alert-secondary{color:#6b6e71;background-color:#f5f6f8;border-color:#f1f3f5}.alert-secondary hr{border-top-color:#e2e6ea}.alert-secondary .alert-link{color:#525557}.alert-success{color:#00562f;background-color:#ccedde;border-color:#b8e6d1}.alert-success hr{border-top-color:#a5dfc5}.alert-success .alert-link{color:#002313}.alert-info{color:#2c2c2c;background-color:#ddd;border-color:#cfcfcf}.alert-info hr{border-top-color:#c2c2c2}.alert-info .alert-link{color:#131313}.alert-warning{color:#63420b;background-color:#f2e5d0;border-color:#eddbbe}.alert-warning hr{border-top-color:#e7d0aa}.alert-warning .alert-link{color:#352306}.alert-danger{color:#73271e;background-color:#f8dbd7;border-color:#f5cdc8}.alert-danger hr{border-top-color:#f1b9b2}.alert-danger .alert-link{color:#4b1913}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}.alert-primary-accent{color:#092b55;background-color:#d0dced;border-color:#bdcfe5}.alert-primary-accent hr{border-top-color:#abc2de}.alert-primary-accent .alert-link{color:#041427}.alert-secondary-alt{color:#0e1f35;background-color:#d1d8e0;border-color:#bfc8d4}.alert-secondary-alt hr{border-top-color:#b0bbca}.alert-secondary-alt .alert-link{color:#03070d}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#175DDC;transition:width 0.6s ease}@media (prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:1rem 1rem}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#333;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.6rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,0.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#333;background-color:#fff;border-color:rgba(0,0,0,0.125)}.list-group-horizontal{flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}@media (min-width: 1px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width: 2px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width: 3px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width: 4px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#0c3072;background-color:#bed2f5}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#0c3072;background-color:#a8c3f2}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#0c3072;border-color:#0c3072}.list-group-item-secondary{color:#6b6e71;background-color:#f1f3f5}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#6b6e71;background-color:#e2e6ea}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#6b6e71;border-color:#6b6e71}.list-group-item-success{color:#00562f;background-color:#b8e6d1}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#00562f;background-color:#a5dfc5}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#00562f;border-color:#00562f}.list-group-item-info{color:#2c2c2c;background-color:#cfcfcf}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#2c2c2c;background-color:#c2c2c2}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#2c2c2c;border-color:#2c2c2c}.list-group-item-warning{color:#63420b;background-color:#eddbbe}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#63420b;background-color:#e7d0aa}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#63420b;border-color:#63420b}.list-group-item-danger{color:#73271e;background-color:#f5cdc8}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#73271e;background-color:#f1b9b2}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#73271e;border-color:#73271e}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.list-group-item-primary-accent{color:#092b55;background-color:#bdcfe5}.list-group-item-primary-accent.list-group-item-action:hover,.list-group-item-primary-accent.list-group-item-action:focus{color:#092b55;background-color:#abc2de}.list-group-item-primary-accent.list-group-item-action.active{color:#fff;background-color:#092b55;border-color:#092b55}.list-group-item-secondary-alt{color:#0e1f35;background-color:#bfc8d4}.list-group-item-secondary-alt.list-group-item-action:hover,.list-group-item-secondary-alt.list-group-item-action:focus{color:#0e1f35;background-color:#b0bbca}.list-group-item-secondary-alt.list-group-item-action.active{color:#fff;background-color:#0e1f35;border-color:#0e1f35}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):hover,.close:not(:disabled):not(.disabled):focus{opacity:.75}button.close{padding:0;background-color:transparent;border:0;appearance:none}a.close.disabled{pointer-events:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform 0.3s ease-out;transform:translate(0, -50px)}@media (prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-header,.modal-dialog-scrollable .modal-footer{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:\"\"}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.3}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;align-items:center;justify-content:flex-end;padding:1rem;border-top:1px solid #dee2e6;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 1px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width: 3px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width: 4px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:\"Open Sans\",\"Helvetica Neue\",Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:\"\";border-color:transparent;border-style:solid}.bs-tooltip-top,.bs-tooltip-auto[x-placement^=\"top\"]{padding:.4rem 0}.bs-tooltip-top .arrow,.bs-tooltip-auto[x-placement^=\"top\"] .arrow{bottom:0}.bs-tooltip-top .arrow::before,.bs-tooltip-auto[x-placement^=\"top\"] .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-right,.bs-tooltip-auto[x-placement^=\"right\"]{padding:0 .4rem}.bs-tooltip-right .arrow,.bs-tooltip-auto[x-placement^=\"right\"] .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-right .arrow::before,.bs-tooltip-auto[x-placement^=\"right\"] .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-bottom,.bs-tooltip-auto[x-placement^=\"bottom\"]{padding:.4rem 0}.bs-tooltip-bottom .arrow,.bs-tooltip-auto[x-placement^=\"bottom\"] .arrow{top:0}.bs-tooltip-bottom .arrow::before,.bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-left,.bs-tooltip-auto[x-placement^=\"left\"]{padding:0 .4rem}.bs-tooltip-left .arrow,.bs-tooltip-auto[x-placement^=\"left\"] .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-left .arrow::before,.bs-tooltip-auto[x-placement^=\"left\"] .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:\"Open Sans\",\"Helvetica Neue\",Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::before,.popover .arrow::after{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid}.bs-popover-top,.bs-popover-auto[x-placement^=\"top\"]{margin-bottom:.5rem}.bs-popover-top>.arrow,.bs-popover-auto[x-placement^=\"top\"]>.arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-top>.arrow::before,.bs-popover-auto[x-placement^=\"top\"]>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,0.25)}.bs-popover-top>.arrow::after,.bs-popover-auto[x-placement^=\"top\"]>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-right,.bs-popover-auto[x-placement^=\"right\"]{margin-left:.5rem}.bs-popover-right>.arrow,.bs-popover-auto[x-placement^=\"right\"]>.arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-right>.arrow::before,.bs-popover-auto[x-placement^=\"right\"]>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,0.25)}.bs-popover-right>.arrow::after,.bs-popover-auto[x-placement^=\"right\"]>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-bottom,.bs-popover-auto[x-placement^=\"bottom\"]{margin-top:.5rem}.bs-popover-bottom>.arrow,.bs-popover-auto[x-placement^=\"bottom\"]>.arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-bottom>.arrow::before,.bs-popover-auto[x-placement^=\"bottom\"]>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,0.25)}.bs-popover-bottom>.arrow::after,.bs-popover-auto[x-placement^=\"bottom\"]>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-bottom .popover-header::before,.bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\"\";border-bottom:1px solid #f7f7f7}.bs-popover-left,.bs-popover-auto[x-placement^=\"left\"]{margin-right:.5rem}.bs-popover-left>.arrow,.bs-popover-auto[x-placement^=\"left\"]>.arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-left>.arrow::before,.bs-popover-auto[x-placement^=\"left\"]>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,0.25)}.bs-popover-left>.arrow::after,.bs-popover-auto[x-placement^=\"left\"]>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#333}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:\"\"}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-left),.active.carousel-item-right{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-right),.active.carousel-item-left{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:0s .6s opacity}@media (prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity 0.15s ease}@media (prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50% / 100% 100%}.carousel-control-prev-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e\")}.carousel-control-next-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e\")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity 0.6s ease}@media (prefers-reduced-motion: reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.bg-primary{background-color:#175DDC !important}a.bg-primary:hover,a.bg-primary:focus,button.bg-primary:hover,button.bg-primary:focus{background-color:#1249ae !important}.bg-secondary{background-color:#ced4da !important}a.bg-secondary:hover,a.bg-secondary:focus,button.bg-secondary:hover,button.bg-secondary:focus{background-color:#b1bbc4 !important}.bg-success{background-color:#00a65a !important}a.bg-success:hover,a.bg-success:focus,button.bg-success:hover,button.bg-success:focus{background-color:#00733e !important}.bg-info{background-color:#555 !important}a.bg-info:hover,a.bg-info:focus,button.bg-info:hover,button.bg-info:focus{background-color:#3c3c3c !important}.bg-warning{background-color:#bf7e16 !important}a.bg-warning:hover,a.bg-warning:focus,button.bg-warning:hover,button.bg-warning:focus{background-color:#916011 !important}.bg-danger{background-color:#dd4b39 !important}a.bg-danger:hover,a.bg-danger:focus,button.bg-danger:hover,button.bg-danger:focus{background-color:#c23321 !important}.bg-light{background-color:#f8f9fa !important}a.bg-light:hover,a.bg-light:focus,button.bg-light:hover,button.bg-light:focus{background-color:#dae0e5 !important}.bg-dark{background-color:#343a40 !important}a.bg-dark:hover,a.bg-dark:focus,button.bg-dark:hover,button.bg-dark:focus{background-color:#1d2124 !important}.bg-primary-accent{background-color:#1252A3 !important}a.bg-primary-accent:hover,a.bg-primary-accent:focus,button.bg-primary-accent:hover,button.bg-primary-accent:focus{background-color:#0d3b75 !important}.bg-secondary-alt{background-color:#1A3B66 !important}a.bg-secondary-alt:hover,a.bg-secondary-alt:focus,button.bg-secondary-alt:hover,button.bg-secondary-alt:focus{background-color:#10233d !important}.bg-white{background-color:#fff !important}.bg-transparent{background-color:transparent !important}.border{border:1px solid #dee2e6 !important}.border-top{border-top:1px solid #dee2e6 !important}.border-right{border-right:1px solid #dee2e6 !important}.border-bottom{border-bottom:1px solid #dee2e6 !important}.border-left{border-left:1px solid #dee2e6 !important}.border-0{border:0 !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.border-primary{border-color:#175DDC !important}.border-secondary{border-color:#ced4da !important}.border-success{border-color:#00a65a !important}.border-info{border-color:#555 !important}.border-warning{border-color:#bf7e16 !important}.border-danger{border-color:#dd4b39 !important}.border-light{border-color:#f8f9fa !important}.border-dark{border-color:#343a40 !important}.border-primary-accent{border-color:#1252A3 !important}.border-secondary-alt{border-color:#1A3B66 !important}.border-white{border-color:#fff !important}.rounded-sm{border-radius:.2rem !important}.rounded,.table.table-list td.table-list-icon img,app-avatar img{border-radius:.25rem !important}.rounded-top{border-top-left-radius:.25rem !important;border-top-right-radius:.25rem !important}.rounded-right{border-top-right-radius:.25rem !important;border-bottom-right-radius:.25rem !important}.rounded-bottom{border-bottom-right-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-left{border-top-left-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-lg{border-radius:.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-0{border-radius:0 !important}.clearfix::after{display:block;clear:both;content:\"\"}.d-none{display:none !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}@media (min-width: 1px){.d-sm-none{display:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}}@media (min-width: 2px){.d-md-none{display:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}}@media (min-width: 3px){.d-lg-none{display:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}}@media (min-width: 4px){.d-xl-none{display:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}}@media print{.d-print-none{display:none !important}.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:\"\"}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.85714%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-fill{flex:1 1 auto !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}@media (min-width: 1px){.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}}@media (min-width: 2px){.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}}@media (min-width: 3px){.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}}@media (min-width: 4px){.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}}.float-left{float:left !important}.float-right{float:right !important}.float-none{float:none !important}@media (min-width: 1px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media (min-width: 2px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media (min-width: 3px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media (min-width: 4px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports (position: sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only,.table.table-list tr:not(:hover) td.table-list-options>.dropdown:not(.show) button:not(:focus):not(:active),.table.table-list tr:not(:hover) td.table-list-options>button:not(:focus):not(:active){position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important}.shadow{box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important}.shadow-none{box-shadow:none !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mw-100{max-width:100% !important}.mh-100{max-height:100% !important}.min-vw-100{min-width:100vw !important}.min-vh-100{min-height:100vh !important}.vw-100{width:100vw !important}.vh-100{height:100vh !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:\"\";background-color:rgba(0,0,0,0)}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:.25rem !important}.mt-1,.my-1{margin-top:.25rem !important}.mr-1,.mx-1{margin-right:.25rem !important}.mb-1,.my-1{margin-bottom:.25rem !important}.ml-1,.mx-1{margin-left:.25rem !important}.m-2{margin:.5rem !important}.mt-2,.form-check-block .form-check-label>span,.my-2{margin-top:.5rem !important}.mr-2,.mx-2{margin-right:.5rem !important}.mb-2,.my-2{margin-bottom:.5rem !important}.ml-2,.mx-2{margin-left:.5rem !important}.m-3{margin:1rem !important}.mt-3,.form-check-block+.form-check-block:not(.mt-2),.my-3{margin-top:1rem !important}.mr-3,.mx-3{margin-right:1rem !important}.mb-3,.my-3{margin-bottom:1rem !important}.ml-3,.mx-3{margin-left:1rem !important}.m-4{margin:1.5rem !important}.mt-4,.my-4{margin-top:1.5rem !important}.mr-4,.mx-4{margin-right:1.5rem !important}.mb-4,.card-body-header,.my-4{margin-bottom:1.5rem !important}.ml-4,.mx-4{margin-left:1.5rem !important}.m-5{margin:3rem !important}.mt-5,.my-5{margin-top:3rem !important}.mr-5,.mx-5{margin-right:3rem !important}.mb-5,.my-5{margin-bottom:3rem !important}.ml-5,.mx-5{margin-left:3rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:.25rem !important}.pt-1,.py-1{padding-top:.25rem !important}.pr-1,.px-1{padding-right:.25rem !important}.pb-1,.py-1{padding-bottom:.25rem !important}.pl-1,.px-1{padding-left:.25rem !important}.p-2{padding:.5rem !important}.pt-2,.py-2{padding-top:.5rem !important}.pr-2,.px-2{padding-right:.5rem !important}.pb-2,.py-2{padding-bottom:.5rem !important}.pl-2,.px-2{padding-left:.5rem !important}.p-3{padding:1rem !important}.pt-3,.py-3{padding-top:1rem !important}.pr-3,.px-3{padding-right:1rem !important}.pb-3,.py-3{padding-bottom:1rem !important}.pl-3,.px-3{padding-left:1rem !important}.p-4{padding:1.5rem !important}.pt-4,.py-4{padding-top:1.5rem !important}.pr-4,.px-4{padding-right:1.5rem !important}.pb-4,.py-4{padding-bottom:1.5rem !important}.pl-4,.px-4{padding-left:1.5rem !important}.p-5{padding:3rem !important}.pt-5,.py-5{padding-top:3rem !important}.pr-5,.px-5{padding-right:3rem !important}.pb-5,.py-5{padding-bottom:3rem !important}.pl-5,.px-5{padding-left:3rem !important}.m-n1{margin:-.25rem !important}.mt-n1,.my-n1{margin-top:-.25rem !important}.mr-n1,.mx-n1{margin-right:-.25rem !important}.mb-n1,.my-n1{margin-bottom:-.25rem !important}.ml-n1,.mx-n1{margin-left:-.25rem !important}.m-n2{margin:-.5rem !important}.mt-n2,.my-n2{margin-top:-.5rem !important}.mr-n2,.mx-n2{margin-right:-.5rem !important}.mb-n2,.my-n2{margin-bottom:-.5rem !important}.ml-n2,.mx-n2{margin-left:-.5rem !important}.m-n3{margin:-1rem !important}.mt-n3,.my-n3{margin-top:-1rem !important}.mr-n3,.mx-n3{margin-right:-1rem !important}.mb-n3,.my-n3{margin-bottom:-1rem !important}.ml-n3,.mx-n3{margin-left:-1rem !important}.m-n4{margin:-1.5rem !important}.mt-n4,.my-n4{margin-top:-1.5rem !important}.mr-n4,.mx-n4{margin-right:-1.5rem !important}.mb-n4,.my-n4{margin-bottom:-1.5rem !important}.ml-n4,.mx-n4{margin-left:-1.5rem !important}.m-n5{margin:-3rem !important}.mt-n5,.my-n5{margin-top:-3rem !important}.mr-n5,.mx-n5{margin-right:-3rem !important}.mb-n5,.my-n5{margin-bottom:-3rem !important}.ml-n5,.mx-n5{margin-left:-3rem !important}.m-auto{margin:auto !important}.mt-auto,.my-auto{margin-top:auto !important}.mr-auto,.mx-auto{margin-right:auto !important}.mb-auto,.my-auto{margin-bottom:auto !important}.ml-auto,.mx-auto{margin-left:auto !important}@media (min-width: 1px){.m-sm-0{margin:0 !important}.mt-sm-0,.my-sm-0{margin-top:0 !important}.mr-sm-0,.mx-sm-0{margin-right:0 !important}.mb-sm-0,.my-sm-0{margin-bottom:0 !important}.ml-sm-0,.mx-sm-0{margin-left:0 !important}.m-sm-1{margin:.25rem !important}.mt-sm-1,.my-sm-1{margin-top:.25rem !important}.mr-sm-1,.mx-sm-1{margin-right:.25rem !important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem !important}.ml-sm-1,.mx-sm-1{margin-left:.25rem !important}.m-sm-2{margin:.5rem !important}.mt-sm-2,.my-sm-2{margin-top:.5rem !important}.mr-sm-2,.mx-sm-2{margin-right:.5rem !important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem !important}.ml-sm-2,.mx-sm-2{margin-left:.5rem !important}.m-sm-3{margin:1rem !important}.mt-sm-3,.my-sm-3{margin-top:1rem !important}.mr-sm-3,.mx-sm-3{margin-right:1rem !important}.mb-sm-3,.my-sm-3{margin-bottom:1rem !important}.ml-sm-3,.mx-sm-3{margin-left:1rem !important}.m-sm-4{margin:1.5rem !important}.mt-sm-4,.my-sm-4{margin-top:1.5rem !important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem !important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem !important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem !important}.m-sm-5{margin:3rem !important}.mt-sm-5,.my-sm-5{margin-top:3rem !important}.mr-sm-5,.mx-sm-5{margin-right:3rem !important}.mb-sm-5,.my-sm-5{margin-bottom:3rem !important}.ml-sm-5,.mx-sm-5{margin-left:3rem !important}.p-sm-0{padding:0 !important}.pt-sm-0,.py-sm-0{padding-top:0 !important}.pr-sm-0,.px-sm-0{padding-right:0 !important}.pb-sm-0,.py-sm-0{padding-bottom:0 !important}.pl-sm-0,.px-sm-0{padding-left:0 !important}.p-sm-1{padding:.25rem !important}.pt-sm-1,.py-sm-1{padding-top:.25rem !important}.pr-sm-1,.px-sm-1{padding-right:.25rem !important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem !important}.pl-sm-1,.px-sm-1{padding-left:.25rem !important}.p-sm-2{padding:.5rem !important}.pt-sm-2,.py-sm-2{padding-top:.5rem !important}.pr-sm-2,.px-sm-2{padding-right:.5rem !important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem !important}.pl-sm-2,.px-sm-2{padding-left:.5rem !important}.p-sm-3{padding:1rem !important}.pt-sm-3,.py-sm-3{padding-top:1rem !important}.pr-sm-3,.px-sm-3{padding-right:1rem !important}.pb-sm-3,.py-sm-3{padding-bottom:1rem !important}.pl-sm-3,.px-sm-3{padding-left:1rem !important}.p-sm-4{padding:1.5rem !important}.pt-sm-4,.py-sm-4{padding-top:1.5rem !important}.pr-sm-4,.px-sm-4{padding-right:1.5rem !important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem !important}.pl-sm-4,.px-sm-4{padding-left:1.5rem !important}.p-sm-5{padding:3rem !important}.pt-sm-5,.py-sm-5{padding-top:3rem !important}.pr-sm-5,.px-sm-5{padding-right:3rem !important}.pb-sm-5,.py-sm-5{padding-bottom:3rem !important}.pl-sm-5,.px-sm-5{padding-left:3rem !important}.m-sm-n1{margin:-.25rem !important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem !important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem !important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem !important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem !important}.m-sm-n2{margin:-.5rem !important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem !important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem !important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem !important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem !important}.m-sm-n3{margin:-1rem !important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem !important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem !important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem !important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem !important}.m-sm-n4{margin:-1.5rem !important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem !important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem !important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem !important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem !important}.m-sm-n5{margin:-3rem !important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem !important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem !important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem !important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem !important}.m-sm-auto{margin:auto !important}.mt-sm-auto,.my-sm-auto{margin-top:auto !important}.mr-sm-auto,.mx-sm-auto{margin-right:auto !important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto !important}.ml-sm-auto,.mx-sm-auto{margin-left:auto !important}}@media (min-width: 2px){.m-md-0{margin:0 !important}.mt-md-0,.my-md-0{margin-top:0 !important}.mr-md-0,.mx-md-0{margin-right:0 !important}.mb-md-0,.my-md-0{margin-bottom:0 !important}.ml-md-0,.mx-md-0{margin-left:0 !important}.m-md-1{margin:.25rem !important}.mt-md-1,.my-md-1{margin-top:.25rem !important}.mr-md-1,.mx-md-1{margin-right:.25rem !important}.mb-md-1,.my-md-1{margin-bottom:.25rem !important}.ml-md-1,.mx-md-1{margin-left:.25rem !important}.m-md-2{margin:.5rem !important}.mt-md-2,.my-md-2{margin-top:.5rem !important}.mr-md-2,.mx-md-2{margin-right:.5rem !important}.mb-md-2,.my-md-2{margin-bottom:.5rem !important}.ml-md-2,.mx-md-2{margin-left:.5rem !important}.m-md-3{margin:1rem !important}.mt-md-3,.my-md-3{margin-top:1rem !important}.mr-md-3,.mx-md-3{margin-right:1rem !important}.mb-md-3,.my-md-3{margin-bottom:1rem !important}.ml-md-3,.mx-md-3{margin-left:1rem !important}.m-md-4{margin:1.5rem !important}.mt-md-4,.my-md-4{margin-top:1.5rem !important}.mr-md-4,.mx-md-4{margin-right:1.5rem !important}.mb-md-4,.my-md-4{margin-bottom:1.5rem !important}.ml-md-4,.mx-md-4{margin-left:1.5rem !important}.m-md-5{margin:3rem !important}.mt-md-5,.my-md-5{margin-top:3rem !important}.mr-md-5,.mx-md-5{margin-right:3rem !important}.mb-md-5,.my-md-5{margin-bottom:3rem !important}.ml-md-5,.mx-md-5{margin-left:3rem !important}.p-md-0{padding:0 !important}.pt-md-0,.py-md-0{padding-top:0 !important}.pr-md-0,.px-md-0{padding-right:0 !important}.pb-md-0,.py-md-0{padding-bottom:0 !important}.pl-md-0,.px-md-0{padding-left:0 !important}.p-md-1{padding:.25rem !important}.pt-md-1,.py-md-1{padding-top:.25rem !important}.pr-md-1,.px-md-1{padding-right:.25rem !important}.pb-md-1,.py-md-1{padding-bottom:.25rem !important}.pl-md-1,.px-md-1{padding-left:.25rem !important}.p-md-2{padding:.5rem !important}.pt-md-2,.py-md-2{padding-top:.5rem !important}.pr-md-2,.px-md-2{padding-right:.5rem !important}.pb-md-2,.py-md-2{padding-bottom:.5rem !important}.pl-md-2,.px-md-2{padding-left:.5rem !important}.p-md-3{padding:1rem !important}.pt-md-3,.py-md-3{padding-top:1rem !important}.pr-md-3,.px-md-3{padding-right:1rem !important}.pb-md-3,.py-md-3{padding-bottom:1rem !important}.pl-md-3,.px-md-3{padding-left:1rem !important}.p-md-4{padding:1.5rem !important}.pt-md-4,.py-md-4{padding-top:1.5rem !important}.pr-md-4,.px-md-4{padding-right:1.5rem !important}.pb-md-4,.py-md-4{padding-bottom:1.5rem !important}.pl-md-4,.px-md-4{padding-left:1.5rem !important}.p-md-5{padding:3rem !important}.pt-md-5,.py-md-5{padding-top:3rem !important}.pr-md-5,.px-md-5{padding-right:3rem !important}.pb-md-5,.py-md-5{padding-bottom:3rem !important}.pl-md-5,.px-md-5{padding-left:3rem !important}.m-md-n1{margin:-.25rem !important}.mt-md-n1,.my-md-n1{margin-top:-.25rem !important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem !important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem !important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem !important}.m-md-n2{margin:-.5rem !important}.mt-md-n2,.my-md-n2{margin-top:-.5rem !important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem !important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem !important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem !important}.m-md-n3{margin:-1rem !important}.mt-md-n3,.my-md-n3{margin-top:-1rem !important}.mr-md-n3,.mx-md-n3{margin-right:-1rem !important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem !important}.ml-md-n3,.mx-md-n3{margin-left:-1rem !important}.m-md-n4{margin:-1.5rem !important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem !important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem !important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem !important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem !important}.m-md-n5{margin:-3rem !important}.mt-md-n5,.my-md-n5{margin-top:-3rem !important}.mr-md-n5,.mx-md-n5{margin-right:-3rem !important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem !important}.ml-md-n5,.mx-md-n5{margin-left:-3rem !important}.m-md-auto{margin:auto !important}.mt-md-auto,.my-md-auto{margin-top:auto !important}.mr-md-auto,.mx-md-auto{margin-right:auto !important}.mb-md-auto,.my-md-auto{margin-bottom:auto !important}.ml-md-auto,.mx-md-auto{margin-left:auto !important}}@media (min-width: 3px){.m-lg-0{margin:0 !important}.mt-lg-0,.my-lg-0{margin-top:0 !important}.mr-lg-0,.mx-lg-0{margin-right:0 !important}.mb-lg-0,.my-lg-0{margin-bottom:0 !important}.ml-lg-0,.mx-lg-0{margin-left:0 !important}.m-lg-1{margin:.25rem !important}.mt-lg-1,.my-lg-1{margin-top:.25rem !important}.mr-lg-1,.mx-lg-1{margin-right:.25rem !important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem !important}.ml-lg-1,.mx-lg-1{margin-left:.25rem !important}.m-lg-2{margin:.5rem !important}.mt-lg-2,.my-lg-2{margin-top:.5rem !important}.mr-lg-2,.mx-lg-2{margin-right:.5rem !important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem !important}.ml-lg-2,.mx-lg-2{margin-left:.5rem !important}.m-lg-3{margin:1rem !important}.mt-lg-3,.my-lg-3{margin-top:1rem !important}.mr-lg-3,.mx-lg-3{margin-right:1rem !important}.mb-lg-3,.my-lg-3{margin-bottom:1rem !important}.ml-lg-3,.mx-lg-3{margin-left:1rem !important}.m-lg-4{margin:1.5rem !important}.mt-lg-4,.my-lg-4{margin-top:1.5rem !important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem !important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem !important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem !important}.m-lg-5{margin:3rem !important}.mt-lg-5,.my-lg-5{margin-top:3rem !important}.mr-lg-5,.mx-lg-5{margin-right:3rem !important}.mb-lg-5,.my-lg-5{margin-bottom:3rem !important}.ml-lg-5,.mx-lg-5{margin-left:3rem !important}.p-lg-0{padding:0 !important}.pt-lg-0,.py-lg-0{padding-top:0 !important}.pr-lg-0,.px-lg-0{padding-right:0 !important}.pb-lg-0,.py-lg-0{padding-bottom:0 !important}.pl-lg-0,.px-lg-0{padding-left:0 !important}.p-lg-1{padding:.25rem !important}.pt-lg-1,.py-lg-1{padding-top:.25rem !important}.pr-lg-1,.px-lg-1{padding-right:.25rem !important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem !important}.pl-lg-1,.px-lg-1{padding-left:.25rem !important}.p-lg-2{padding:.5rem !important}.pt-lg-2,.py-lg-2{padding-top:.5rem !important}.pr-lg-2,.px-lg-2{padding-right:.5rem !important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem !important}.pl-lg-2,.px-lg-2{padding-left:.5rem !important}.p-lg-3{padding:1rem !important}.pt-lg-3,.py-lg-3{padding-top:1rem !important}.pr-lg-3,.px-lg-3{padding-right:1rem !important}.pb-lg-3,.py-lg-3{padding-bottom:1rem !important}.pl-lg-3,.px-lg-3{padding-left:1rem !important}.p-lg-4{padding:1.5rem !important}.pt-lg-4,.py-lg-4{padding-top:1.5rem !important}.pr-lg-4,.px-lg-4{padding-right:1.5rem !important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem !important}.pl-lg-4,.px-lg-4{padding-left:1.5rem !important}.p-lg-5{padding:3rem !important}.pt-lg-5,.py-lg-5{padding-top:3rem !important}.pr-lg-5,.px-lg-5{padding-right:3rem !important}.pb-lg-5,.py-lg-5{padding-bottom:3rem !important}.pl-lg-5,.px-lg-5{padding-left:3rem !important}.m-lg-n1{margin:-.25rem !important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem !important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem !important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem !important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem !important}.m-lg-n2{margin:-.5rem !important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem !important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem !important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem !important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem !important}.m-lg-n3{margin:-1rem !important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem !important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem !important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem !important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem !important}.m-lg-n4{margin:-1.5rem !important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem !important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem !important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem !important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem !important}.m-lg-n5{margin:-3rem !important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem !important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem !important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem !important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem !important}.m-lg-auto{margin:auto !important}.mt-lg-auto,.my-lg-auto{margin-top:auto !important}.mr-lg-auto,.mx-lg-auto{margin-right:auto !important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto !important}.ml-lg-auto,.mx-lg-auto{margin-left:auto !important}}@media (min-width: 4px){.m-xl-0{margin:0 !important}.mt-xl-0,.my-xl-0{margin-top:0 !important}.mr-xl-0,.mx-xl-0{margin-right:0 !important}.mb-xl-0,.my-xl-0{margin-bottom:0 !important}.ml-xl-0,.mx-xl-0{margin-left:0 !important}.m-xl-1{margin:.25rem !important}.mt-xl-1,.my-xl-1{margin-top:.25rem !important}.mr-xl-1,.mx-xl-1{margin-right:.25rem !important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem !important}.ml-xl-1,.mx-xl-1{margin-left:.25rem !important}.m-xl-2{margin:.5rem !important}.mt-xl-2,.my-xl-2{margin-top:.5rem !important}.mr-xl-2,.mx-xl-2{margin-right:.5rem !important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem !important}.ml-xl-2,.mx-xl-2{margin-left:.5rem !important}.m-xl-3{margin:1rem !important}.mt-xl-3,.my-xl-3{margin-top:1rem !important}.mr-xl-3,.mx-xl-3{margin-right:1rem !important}.mb-xl-3,.my-xl-3{margin-bottom:1rem !important}.ml-xl-3,.mx-xl-3{margin-left:1rem !important}.m-xl-4{margin:1.5rem !important}.mt-xl-4,.my-xl-4{margin-top:1.5rem !important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem !important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem !important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem !important}.m-xl-5{margin:3rem !important}.mt-xl-5,.my-xl-5{margin-top:3rem !important}.mr-xl-5,.mx-xl-5{margin-right:3rem !important}.mb-xl-5,.my-xl-5{margin-bottom:3rem !important}.ml-xl-5,.mx-xl-5{margin-left:3rem !important}.p-xl-0{padding:0 !important}.pt-xl-0,.py-xl-0{padding-top:0 !important}.pr-xl-0,.px-xl-0{padding-right:0 !important}.pb-xl-0,.py-xl-0{padding-bottom:0 !important}.pl-xl-0,.px-xl-0{padding-left:0 !important}.p-xl-1{padding:.25rem !important}.pt-xl-1,.py-xl-1{padding-top:.25rem !important}.pr-xl-1,.px-xl-1{padding-right:.25rem !important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem !important}.pl-xl-1,.px-xl-1{padding-left:.25rem !important}.p-xl-2{padding:.5rem !important}.pt-xl-2,.py-xl-2{padding-top:.5rem !important}.pr-xl-2,.px-xl-2{padding-right:.5rem !important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem !important}.pl-xl-2,.px-xl-2{padding-left:.5rem !important}.p-xl-3{padding:1rem !important}.pt-xl-3,.py-xl-3{padding-top:1rem !important}.pr-xl-3,.px-xl-3{padding-right:1rem !important}.pb-xl-3,.py-xl-3{padding-bottom:1rem !important}.pl-xl-3,.px-xl-3{padding-left:1rem !important}.p-xl-4{padding:1.5rem !important}.pt-xl-4,.py-xl-4{padding-top:1.5rem !important}.pr-xl-4,.px-xl-4{padding-right:1.5rem !important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem !important}.pl-xl-4,.px-xl-4{padding-left:1.5rem !important}.p-xl-5{padding:3rem !important}.pt-xl-5,.py-xl-5{padding-top:3rem !important}.pr-xl-5,.px-xl-5{padding-right:3rem !important}.pb-xl-5,.py-xl-5{padding-bottom:3rem !important}.pl-xl-5,.px-xl-5{padding-left:3rem !important}.m-xl-n1{margin:-.25rem !important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem !important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem !important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem !important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem !important}.m-xl-n2{margin:-.5rem !important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem !important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem !important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem !important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem !important}.m-xl-n3{margin:-1rem !important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem !important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem !important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem !important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem !important}.m-xl-n4{margin:-1.5rem !important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem !important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem !important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem !important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem !important}.m-xl-n5{margin:-3rem !important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem !important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem !important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem !important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem !important}.m-xl-auto{margin:auto !important}.mt-xl-auto,.my-xl-auto{margin-top:auto !important}.mr-xl-auto,.mx-xl-auto{margin-right:auto !important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto !important}.ml-xl-auto,.mx-xl-auto{margin-left:auto !important}}.text-monospace,.totp .totp-code{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace !important}.text-justify{text-align:justify !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}@media (min-width: 1px){.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 2px){.text-md-left{text-align:left !important}.text-md-right{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 3px){.text-lg-left{text-align:left !important}.text-lg-right{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 4px){.text-xl-left{text-align:left !important}.text-xl-right{text-align:right !important}.text-xl-center{text-align:center !important}}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.font-weight-light{font-weight:300 !important}.font-weight-lighter{font-weight:lighter !important}.font-weight-normal{font-weight:400 !important}.font-weight-bold{font-weight:700 !important}.font-weight-bolder{font-weight:bolder !important}.font-italic{font-style:italic !important}.text-white{color:#fff !important}.text-primary{color:#175DDC !important}a.text-primary:hover,a.text-primary:focus{color:#104097 !important}.text-secondary{color:#ced4da !important}a.text-secondary:hover,a.text-secondary:focus{color:#a2aeb9 !important}.text-success{color:#00a65a !important}a.text-success:hover,a.text-success:focus{color:#005a31 !important}.text-info{color:#555 !important}a.text-info:hover,a.text-info:focus{color:#2f2f2f !important}.text-warning{color:#bf7e16 !important}a.text-warning:hover,a.text-warning:focus{color:#7a510e !important}.text-danger{color:#dd4b39 !important}a.text-danger:hover,a.text-danger:focus{color:#ac2d1e !important}.text-light{color:#f8f9fa !important}a.text-light:hover,a.text-light:focus{color:#cbd3da !important}.text-dark{color:#343a40 !important}a.text-dark:hover,a.text-dark:focus{color:#121416 !important}.text-primary-accent{color:#1252A3 !important}a.text-primary-accent:hover,a.text-primary-accent:focus{color:#0a2f5e !important}.text-secondary-alt{color:#1A3B66 !important}a.text-secondary-alt:hover,a.text-secondary-alt:focus{color:#0a1829 !important}.text-body{color:#333 !important}.text-muted,.card-header small,.modal-header small{color:#6c757d !important}.text-black-50{color:rgba(0,0,0,0.5) !important}.text-white-50{color:rgba(255,255,255,0.5) !important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none !important}.text-break{word-break:break-word !important;overflow-wrap:break-word !important}.text-reset{color:inherit !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media print{*,*::before,*::after{text-shadow:none !important;box-shadow:none !important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:\" (\" attr(title) \")\"}pre{white-space:pre-wrap !important}pre,blockquote{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:3px !important}.container{min-width:3px !important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #dee2e6 !important}.table-dark{color:inherit}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}/*!\n * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */@font-face{font-family:'FontAwesome';src:url(../fonts/fontawesome-webfont.eot);src:url(../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0) format(\"embedded-opentype\"),url(../fonts/fontawesome-webfont.woff2) format(\"woff2\"),url(../fonts/fontawesome-webfont.woff) format(\"woff\"),url(../fonts/fontawesome-webfont.ttf) format(\"truetype\"),url(../fonts/fontawesome-webfont.svg#fontawesomeregular) format(\"svg\");font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:\"\\F000\"}.fa-music:before{content:\"\\F001\"}.fa-search:before{content:\"\\F002\"}.fa-envelope-o:before{content:\"\\F003\"}.fa-heart:before{content:\"\\F004\"}.fa-star:before{content:\"\\F005\"}.fa-star-o:before{content:\"\\F006\"}.fa-user:before{content:\"\\F007\"}.fa-film:before{content:\"\\F008\"}.fa-th-large:before{content:\"\\F009\"}.fa-th:before{content:\"\\F00A\"}.fa-th-list:before{content:\"\\F00B\"}.fa-check:before{content:\"\\F00C\"}.fa-remove:before,.fa-close:before,.fa-times:before{content:\"\\F00D\"}.fa-search-plus:before{content:\"\\F00E\"}.fa-search-minus:before{content:\"\\F010\"}.fa-power-off:before{content:\"\\F011\"}.fa-signal:before{content:\"\\F012\"}.fa-gear:before,.fa-cog:before{content:\"\\F013\"}.fa-trash-o:before{content:\"\\F014\"}.fa-home:before{content:\"\\F015\"}.fa-file-o:before{content:\"\\F016\"}.fa-clock-o:before{content:\"\\F017\"}.fa-road:before{content:\"\\F018\"}.fa-download:before{content:\"\\F019\"}.fa-arrow-circle-o-down:before{content:\"\\F01A\"}.fa-arrow-circle-o-up:before{content:\"\\F01B\"}.fa-inbox:before{content:\"\\F01C\"}.fa-play-circle-o:before{content:\"\\F01D\"}.fa-rotate-right:before,.fa-repeat:before{content:\"\\F01E\"}.fa-refresh:before{content:\"\\F021\"}.fa-list-alt:before{content:\"\\F022\"}.fa-lock:before{content:\"\\F023\"}.fa-flag:before{content:\"\\F024\"}.fa-headphones:before{content:\"\\F025\"}.fa-volume-off:before{content:\"\\F026\"}.fa-volume-down:before{content:\"\\F027\"}.fa-volume-up:before{content:\"\\F028\"}.fa-qrcode:before{content:\"\\F029\"}.fa-barcode:before{content:\"\\F02A\"}.fa-tag:before{content:\"\\F02B\"}.fa-tags:before{content:\"\\F02C\"}.fa-book:before{content:\"\\F02D\"}.fa-bookmark:before{content:\"\\F02E\"}.fa-print:before{content:\"\\F02F\"}.fa-camera:before{content:\"\\F030\"}.fa-font:before{content:\"\\F031\"}.fa-bold:before{content:\"\\F032\"}.fa-italic:before{content:\"\\F033\"}.fa-text-height:before{content:\"\\F034\"}.fa-text-width:before{content:\"\\F035\"}.fa-align-left:before{content:\"\\F036\"}.fa-align-center:before{content:\"\\F037\"}.fa-align-right:before{content:\"\\F038\"}.fa-align-justify:before{content:\"\\F039\"}.fa-list:before{content:\"\\F03A\"}.fa-dedent:before,.fa-outdent:before{content:\"\\F03B\"}.fa-indent:before{content:\"\\F03C\"}.fa-video-camera:before{content:\"\\F03D\"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:\"\\F03E\"}.fa-pencil:before{content:\"\\F040\"}.fa-map-marker:before{content:\"\\F041\"}.fa-adjust:before{content:\"\\F042\"}.fa-tint:before{content:\"\\F043\"}.fa-edit:before,.fa-pencil-square-o:before{content:\"\\F044\"}.fa-share-square-o:before{content:\"\\F045\"}.fa-check-square-o:before{content:\"\\F046\"}.fa-arrows:before{content:\"\\F047\"}.fa-step-backward:before{content:\"\\F048\"}.fa-fast-backward:before{content:\"\\F049\"}.fa-backward:before{content:\"\\F04A\"}.fa-play:before{content:\"\\F04B\"}.fa-pause:before{content:\"\\F04C\"}.fa-stop:before{content:\"\\F04D\"}.fa-forward:before{content:\"\\F04E\"}.fa-fast-forward:before{content:\"\\F050\"}.fa-step-forward:before{content:\"\\F051\"}.fa-eject:before{content:\"\\F052\"}.fa-chevron-left:before{content:\"\\F053\"}.fa-chevron-right:before{content:\"\\F054\"}.fa-plus-circle:before{content:\"\\F055\"}.fa-minus-circle:before{content:\"\\F056\"}.fa-times-circle:before{content:\"\\F057\"}.fa-check-circle:before{content:\"\\F058\"}.fa-question-circle:before{content:\"\\F059\"}.fa-info-circle:before{content:\"\\F05A\"}.fa-crosshairs:before{content:\"\\F05B\"}.fa-times-circle-o:before{content:\"\\F05C\"}.fa-check-circle-o:before{content:\"\\F05D\"}.fa-ban:before{content:\"\\F05E\"}.fa-arrow-left:before{content:\"\\F060\"}.fa-arrow-right:before{content:\"\\F061\"}.fa-arrow-up:before{content:\"\\F062\"}.fa-arrow-down:before{content:\"\\F063\"}.fa-mail-forward:before,.fa-share:before{content:\"\\F064\"}.fa-expand:before{content:\"\\F065\"}.fa-compress:before{content:\"\\F066\"}.fa-plus:before{content:\"\\F067\"}.fa-minus:before{content:\"\\F068\"}.fa-asterisk:before{content:\"\\F069\"}.fa-exclamation-circle:before{content:\"\\F06A\"}.fa-gift:before{content:\"\\F06B\"}.fa-leaf:before{content:\"\\F06C\"}.fa-fire:before{content:\"\\F06D\"}.fa-eye:before{content:\"\\F06E\"}.fa-eye-slash:before{content:\"\\F070\"}.fa-warning:before,.fa-exclamation-triangle:before{content:\"\\F071\"}.fa-plane:before{content:\"\\F072\"}.fa-calendar:before{content:\"\\F073\"}.fa-random:before{content:\"\\F074\"}.fa-comment:before{content:\"\\F075\"}.fa-magnet:before{content:\"\\F076\"}.fa-chevron-up:before{content:\"\\F077\"}.fa-chevron-down:before{content:\"\\F078\"}.fa-retweet:before{content:\"\\F079\"}.fa-shopping-cart:before{content:\"\\F07A\"}.fa-folder:before{content:\"\\F07B\"}.fa-folder-open:before{content:\"\\F07C\"}.fa-arrows-v:before{content:\"\\F07D\"}.fa-arrows-h:before{content:\"\\F07E\"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:\"\\F080\"}.fa-twitter-square:before{content:\"\\F081\"}.fa-facebook-square:before{content:\"\\F082\"}.fa-camera-retro:before{content:\"\\F083\"}.fa-key:before{content:\"\\F084\"}.fa-gears:before,.fa-cogs:before{content:\"\\F085\"}.fa-comments:before{content:\"\\F086\"}.fa-thumbs-o-up:before{content:\"\\F087\"}.fa-thumbs-o-down:before{content:\"\\F088\"}.fa-star-half:before{content:\"\\F089\"}.fa-heart-o:before{content:\"\\F08A\"}.fa-sign-out:before{content:\"\\F08B\"}.fa-linkedin-square:before{content:\"\\F08C\"}.fa-thumb-tack:before{content:\"\\F08D\"}.fa-external-link:before{content:\"\\F08E\"}.fa-sign-in:before{content:\"\\F090\"}.fa-trophy:before{content:\"\\F091\"}.fa-github-square:before{content:\"\\F092\"}.fa-upload:before{content:\"\\F093\"}.fa-lemon-o:before{content:\"\\F094\"}.fa-phone:before{content:\"\\F095\"}.fa-square-o:before{content:\"\\F096\"}.fa-bookmark-o:before{content:\"\\F097\"}.fa-phone-square:before{content:\"\\F098\"}.fa-twitter:before{content:\"\\F099\"}.fa-facebook-f:before,.fa-facebook:before{content:\"\\F09A\"}.fa-github:before{content:\"\\F09B\"}.fa-unlock:before{content:\"\\F09C\"}.fa-credit-card:before{content:\"\\F09D\"}.fa-feed:before,.fa-rss:before{content:\"\\F09E\"}.fa-hdd-o:before{content:\"\\F0A0\"}.fa-bullhorn:before{content:\"\\F0A1\"}.fa-bell:before{content:\"\\F0F3\"}.fa-certificate:before{content:\"\\F0A3\"}.fa-hand-o-right:before{content:\"\\F0A4\"}.fa-hand-o-left:before{content:\"\\F0A5\"}.fa-hand-o-up:before{content:\"\\F0A6\"}.fa-hand-o-down:before{content:\"\\F0A7\"}.fa-arrow-circle-left:before{content:\"\\F0A8\"}.fa-arrow-circle-right:before{content:\"\\F0A9\"}.fa-arrow-circle-up:before{content:\"\\F0AA\"}.fa-arrow-circle-down:before{content:\"\\F0AB\"}.fa-globe:before{content:\"\\F0AC\"}.fa-wrench:before{content:\"\\F0AD\"}.fa-tasks:before{content:\"\\F0AE\"}.fa-filter:before{content:\"\\F0B0\"}.fa-briefcase:before{content:\"\\F0B1\"}.fa-arrows-alt:before{content:\"\\F0B2\"}.fa-group:before,.fa-users:before{content:\"\\F0C0\"}.fa-chain:before,.fa-link:before{content:\"\\F0C1\"}.fa-cloud:before{content:\"\\F0C2\"}.fa-flask:before{content:\"\\F0C3\"}.fa-cut:before,.fa-scissors:before{content:\"\\F0C4\"}.fa-copy:before,.fa-files-o:before{content:\"\\F0C5\"}.fa-paperclip:before{content:\"\\F0C6\"}.fa-save:before,.fa-floppy-o:before{content:\"\\F0C7\"}.fa-square:before{content:\"\\F0C8\"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:\"\\F0C9\"}.fa-list-ul:before{content:\"\\F0CA\"}.fa-list-ol:before{content:\"\\F0CB\"}.fa-strikethrough:before{content:\"\\F0CC\"}.fa-underline:before{content:\"\\F0CD\"}.fa-table:before{content:\"\\F0CE\"}.fa-magic:before{content:\"\\F0D0\"}.fa-truck:before{content:\"\\F0D1\"}.fa-pinterest:before{content:\"\\F0D2\"}.fa-pinterest-square:before{content:\"\\F0D3\"}.fa-google-plus-square:before{content:\"\\F0D4\"}.fa-google-plus:before{content:\"\\F0D5\"}.fa-money:before{content:\"\\F0D6\"}.fa-caret-down:before{content:\"\\F0D7\"}.fa-caret-up:before{content:\"\\F0D8\"}.fa-caret-left:before{content:\"\\F0D9\"}.fa-caret-right:before{content:\"\\F0DA\"}.fa-columns:before{content:\"\\F0DB\"}.fa-unsorted:before,.fa-sort:before{content:\"\\F0DC\"}.fa-sort-down:before,.fa-sort-desc:before{content:\"\\F0DD\"}.fa-sort-up:before,.fa-sort-asc:before{content:\"\\F0DE\"}.fa-envelope:before{content:\"\\F0E0\"}.fa-linkedin:before{content:\"\\F0E1\"}.fa-rotate-left:before,.fa-undo:before{content:\"\\F0E2\"}.fa-legal:before,.fa-gavel:before{content:\"\\F0E3\"}.fa-dashboard:before,.fa-tachometer:before{content:\"\\F0E4\"}.fa-comment-o:before{content:\"\\F0E5\"}.fa-comments-o:before{content:\"\\F0E6\"}.fa-flash:before,.fa-bolt:before{content:\"\\F0E7\"}.fa-sitemap:before{content:\"\\F0E8\"}.fa-umbrella:before{content:\"\\F0E9\"}.fa-paste:before,.fa-clipboard:before{content:\"\\F0EA\"}.fa-lightbulb-o:before{content:\"\\F0EB\"}.fa-exchange:before{content:\"\\F0EC\"}.fa-cloud-download:before{content:\"\\F0ED\"}.fa-cloud-upload:before{content:\"\\F0EE\"}.fa-user-md:before{content:\"\\F0F0\"}.fa-stethoscope:before{content:\"\\F0F1\"}.fa-suitcase:before{content:\"\\F0F2\"}.fa-bell-o:before{content:\"\\F0A2\"}.fa-coffee:before{content:\"\\F0F4\"}.fa-cutlery:before{content:\"\\F0F5\"}.fa-file-text-o:before{content:\"\\F0F6\"}.fa-building-o:before{content:\"\\F0F7\"}.fa-hospital-o:before{content:\"\\F0F8\"}.fa-ambulance:before{content:\"\\F0F9\"}.fa-medkit:before{content:\"\\F0FA\"}.fa-fighter-jet:before{content:\"\\F0FB\"}.fa-beer:before{content:\"\\F0FC\"}.fa-h-square:before{content:\"\\F0FD\"}.fa-plus-square:before{content:\"\\F0FE\"}.fa-angle-double-left:before{content:\"\\F100\"}.fa-angle-double-right:before{content:\"\\F101\"}.fa-angle-double-up:before{content:\"\\F102\"}.fa-angle-double-down:before{content:\"\\F103\"}.fa-angle-left:before{content:\"\\F104\"}.fa-angle-right:before{content:\"\\F105\"}.fa-angle-up:before{content:\"\\F106\"}.fa-angle-down:before{content:\"\\F107\"}.fa-desktop:before{content:\"\\F108\"}.fa-laptop:before{content:\"\\F109\"}.fa-tablet:before{content:\"\\F10A\"}.fa-mobile-phone:before,.fa-mobile:before{content:\"\\F10B\"}.fa-circle-o:before{content:\"\\F10C\"}.fa-quote-left:before{content:\"\\F10D\"}.fa-quote-right:before{content:\"\\F10E\"}.fa-spinner:before{content:\"\\F110\"}.fa-circle:before{content:\"\\F111\"}.fa-mail-reply:before,.fa-reply:before{content:\"\\F112\"}.fa-github-alt:before{content:\"\\F113\"}.fa-folder-o:before{content:\"\\F114\"}.fa-folder-open-o:before{content:\"\\F115\"}.fa-smile-o:before{content:\"\\F118\"}.fa-frown-o:before{content:\"\\F119\"}.fa-meh-o:before{content:\"\\F11A\"}.fa-gamepad:before{content:\"\\F11B\"}.fa-keyboard-o:before{content:\"\\F11C\"}.fa-flag-o:before{content:\"\\F11D\"}.fa-flag-checkered:before{content:\"\\F11E\"}.fa-terminal:before{content:\"\\F120\"}.fa-code:before{content:\"\\F121\"}.fa-mail-reply-all:before,.fa-reply-all:before{content:\"\\F122\"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:\"\\F123\"}.fa-location-arrow:before{content:\"\\F124\"}.fa-crop:before{content:\"\\F125\"}.fa-code-fork:before{content:\"\\F126\"}.fa-unlink:before,.fa-chain-broken:before{content:\"\\F127\"}.fa-question:before{content:\"\\F128\"}.fa-info:before{content:\"\\F129\"}.fa-exclamation:before{content:\"\\F12A\"}.fa-superscript:before{content:\"\\F12B\"}.fa-subscript:before{content:\"\\F12C\"}.fa-eraser:before{content:\"\\F12D\"}.fa-puzzle-piece:before{content:\"\\F12E\"}.fa-microphone:before{content:\"\\F130\"}.fa-microphone-slash:before{content:\"\\F131\"}.fa-shield:before{content:\"\\F132\"}.fa-calendar-o:before{content:\"\\F133\"}.fa-fire-extinguisher:before{content:\"\\F134\"}.fa-rocket:before{content:\"\\F135\"}.fa-maxcdn:before{content:\"\\F136\"}.fa-chevron-circle-left:before{content:\"\\F137\"}.fa-chevron-circle-right:before{content:\"\\F138\"}.fa-chevron-circle-up:before{content:\"\\F139\"}.fa-chevron-circle-down:before{content:\"\\F13A\"}.fa-html5:before{content:\"\\F13B\"}.fa-css3:before{content:\"\\F13C\"}.fa-anchor:before{content:\"\\F13D\"}.fa-unlock-alt:before{content:\"\\F13E\"}.fa-bullseye:before{content:\"\\F140\"}.fa-ellipsis-h:before{content:\"\\F141\"}.fa-ellipsis-v:before{content:\"\\F142\"}.fa-rss-square:before{content:\"\\F143\"}.fa-play-circle:before{content:\"\\F144\"}.fa-ticket:before{content:\"\\F145\"}.fa-minus-square:before{content:\"\\F146\"}.fa-minus-square-o:before{content:\"\\F147\"}.fa-level-up:before{content:\"\\F148\"}.fa-level-down:before{content:\"\\F149\"}.fa-check-square:before{content:\"\\F14A\"}.fa-pencil-square:before{content:\"\\F14B\"}.fa-external-link-square:before{content:\"\\F14C\"}.fa-share-square:before{content:\"\\F14D\"}.fa-compass:before{content:\"\\F14E\"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:\"\\F150\"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:\"\\F151\"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:\"\\F152\"}.fa-euro:before,.fa-eur:before{content:\"\\F153\"}.fa-gbp:before{content:\"\\F154\"}.fa-dollar:before,.fa-usd:before{content:\"\\F155\"}.fa-rupee:before,.fa-inr:before{content:\"\\F156\"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:\"\\F157\"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:\"\\F158\"}.fa-won:before,.fa-krw:before{content:\"\\F159\"}.fa-bitcoin:before,.fa-btc:before{content:\"\\F15A\"}.fa-file:before{content:\"\\F15B\"}.fa-file-text:before{content:\"\\F15C\"}.fa-sort-alpha-asc:before{content:\"\\F15D\"}.fa-sort-alpha-desc:before{content:\"\\F15E\"}.fa-sort-amount-asc:before{content:\"\\F160\"}.fa-sort-amount-desc:before{content:\"\\F161\"}.fa-sort-numeric-asc:before{content:\"\\F162\"}.fa-sort-numeric-desc:before{content:\"\\F163\"}.fa-thumbs-up:before{content:\"\\F164\"}.fa-thumbs-down:before{content:\"\\F165\"}.fa-youtube-square:before{content:\"\\F166\"}.fa-youtube:before{content:\"\\F167\"}.fa-xing:before{content:\"\\F168\"}.fa-xing-square:before{content:\"\\F169\"}.fa-youtube-play:before{content:\"\\F16A\"}.fa-dropbox:before{content:\"\\F16B\"}.fa-stack-overflow:before{content:\"\\F16C\"}.fa-instagram:before{content:\"\\F16D\"}.fa-flickr:before{content:\"\\F16E\"}.fa-adn:before{content:\"\\F170\"}.fa-bitbucket:before{content:\"\\F171\"}.fa-bitbucket-square:before{content:\"\\F172\"}.fa-tumblr:before{content:\"\\F173\"}.fa-tumblr-square:before{content:\"\\F174\"}.fa-long-arrow-down:before{content:\"\\F175\"}.fa-long-arrow-up:before{content:\"\\F176\"}.fa-long-arrow-left:before{content:\"\\F177\"}.fa-long-arrow-right:before{content:\"\\F178\"}.fa-apple:before{content:\"\\F179\"}.fa-windows:before{content:\"\\F17A\"}.fa-android:before{content:\"\\F17B\"}.fa-linux:before{content:\"\\F17C\"}.fa-dribbble:before{content:\"\\F17D\"}.fa-skype:before{content:\"\\F17E\"}.fa-foursquare:before{content:\"\\F180\"}.fa-trello:before{content:\"\\F181\"}.fa-female:before{content:\"\\F182\"}.fa-male:before{content:\"\\F183\"}.fa-gittip:before,.fa-gratipay:before{content:\"\\F184\"}.fa-sun-o:before{content:\"\\F185\"}.fa-moon-o:before{content:\"\\F186\"}.fa-archive:before{content:\"\\F187\"}.fa-bug:before{content:\"\\F188\"}.fa-vk:before{content:\"\\F189\"}.fa-weibo:before{content:\"\\F18A\"}.fa-renren:before{content:\"\\F18B\"}.fa-pagelines:before{content:\"\\F18C\"}.fa-stack-exchange:before{content:\"\\F18D\"}.fa-arrow-circle-o-right:before{content:\"\\F18E\"}.fa-arrow-circle-o-left:before{content:\"\\F190\"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:\"\\F191\"}.fa-dot-circle-o:before{content:\"\\F192\"}.fa-wheelchair:before{content:\"\\F193\"}.fa-vimeo-square:before{content:\"\\F194\"}.fa-turkish-lira:before,.fa-try:before{content:\"\\F195\"}.fa-plus-square-o:before{content:\"\\F196\"}.fa-space-shuttle:before{content:\"\\F197\"}.fa-slack:before{content:\"\\F198\"}.fa-envelope-square:before{content:\"\\F199\"}.fa-wordpress:before{content:\"\\F19A\"}.fa-openid:before{content:\"\\F19B\"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:\"\\F19C\"}.fa-mortar-board:before,.fa-graduation-cap:before{content:\"\\F19D\"}.fa-yahoo:before{content:\"\\F19E\"}.fa-google:before{content:\"\\F1A0\"}.fa-reddit:before{content:\"\\F1A1\"}.fa-reddit-square:before{content:\"\\F1A2\"}.fa-stumbleupon-circle:before{content:\"\\F1A3\"}.fa-stumbleupon:before{content:\"\\F1A4\"}.fa-delicious:before{content:\"\\F1A5\"}.fa-digg:before{content:\"\\F1A6\"}.fa-pied-piper-pp:before{content:\"\\F1A7\"}.fa-pied-piper-alt:before{content:\"\\F1A8\"}.fa-drupal:before{content:\"\\F1A9\"}.fa-joomla:before{content:\"\\F1AA\"}.fa-language:before{content:\"\\F1AB\"}.fa-fax:before{content:\"\\F1AC\"}.fa-building:before{content:\"\\F1AD\"}.fa-child:before{content:\"\\F1AE\"}.fa-paw:before{content:\"\\F1B0\"}.fa-spoon:before{content:\"\\F1B1\"}.fa-cube:before{content:\"\\F1B2\"}.fa-cubes:before{content:\"\\F1B3\"}.fa-behance:before{content:\"\\F1B4\"}.fa-behance-square:before{content:\"\\F1B5\"}.fa-steam:before{content:\"\\F1B6\"}.fa-steam-square:before{content:\"\\F1B7\"}.fa-recycle:before{content:\"\\F1B8\"}.fa-automobile:before,.fa-car:before{content:\"\\F1B9\"}.fa-cab:before,.fa-taxi:before{content:\"\\F1BA\"}.fa-tree:before{content:\"\\F1BB\"}.fa-spotify:before{content:\"\\F1BC\"}.fa-deviantart:before{content:\"\\F1BD\"}.fa-soundcloud:before{content:\"\\F1BE\"}.fa-database:before{content:\"\\F1C0\"}.fa-file-pdf-o:before{content:\"\\F1C1\"}.fa-file-word-o:before{content:\"\\F1C2\"}.fa-file-excel-o:before{content:\"\\F1C3\"}.fa-file-powerpoint-o:before{content:\"\\F1C4\"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:\"\\F1C5\"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:\"\\F1C6\"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:\"\\F1C7\"}.fa-file-movie-o:before,.fa-file-video-o:before{content:\"\\F1C8\"}.fa-file-code-o:before{content:\"\\F1C9\"}.fa-vine:before{content:\"\\F1CA\"}.fa-codepen:before{content:\"\\F1CB\"}.fa-jsfiddle:before{content:\"\\F1CC\"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:\"\\F1CD\"}.fa-circle-o-notch:before{content:\"\\F1CE\"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:\"\\F1D0\"}.fa-ge:before,.fa-empire:before{content:\"\\F1D1\"}.fa-git-square:before{content:\"\\F1D2\"}.fa-git:before{content:\"\\F1D3\"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:\"\\F1D4\"}.fa-tencent-weibo:before{content:\"\\F1D5\"}.fa-qq:before{content:\"\\F1D6\"}.fa-wechat:before,.fa-weixin:before{content:\"\\F1D7\"}.fa-send:before,.fa-paper-plane:before{content:\"\\F1D8\"}.fa-send-o:before,.fa-paper-plane-o:before{content:\"\\F1D9\"}.fa-history:before{content:\"\\F1DA\"}.fa-circle-thin:before{content:\"\\F1DB\"}.fa-header:before{content:\"\\F1DC\"}.fa-paragraph:before{content:\"\\F1DD\"}.fa-sliders:before{content:\"\\F1DE\"}.fa-share-alt:before{content:\"\\F1E0\"}.fa-share-alt-square:before{content:\"\\F1E1\"}.fa-bomb:before{content:\"\\F1E2\"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:\"\\F1E3\"}.fa-tty:before{content:\"\\F1E4\"}.fa-binoculars:before{content:\"\\F1E5\"}.fa-plug:before{content:\"\\F1E6\"}.fa-slideshare:before{content:\"\\F1E7\"}.fa-twitch:before{content:\"\\F1E8\"}.fa-yelp:before{content:\"\\F1E9\"}.fa-newspaper-o:before{content:\"\\F1EA\"}.fa-wifi:before{content:\"\\F1EB\"}.fa-calculator:before{content:\"\\F1EC\"}.fa-paypal:before{content:\"\\F1ED\"}.fa-google-wallet:before{content:\"\\F1EE\"}.fa-cc-visa:before{content:\"\\F1F0\"}.fa-cc-mastercard:before{content:\"\\F1F1\"}.fa-cc-discover:before{content:\"\\F1F2\"}.fa-cc-amex:before{content:\"\\F1F3\"}.fa-cc-paypal:before{content:\"\\F1F4\"}.fa-cc-stripe:before{content:\"\\F1F5\"}.fa-bell-slash:before{content:\"\\F1F6\"}.fa-bell-slash-o:before{content:\"\\F1F7\"}.fa-trash:before{content:\"\\F1F8\"}.fa-copyright:before{content:\"\\F1F9\"}.fa-at:before{content:\"\\F1FA\"}.fa-eyedropper:before{content:\"\\F1FB\"}.fa-paint-brush:before{content:\"\\F1FC\"}.fa-birthday-cake:before{content:\"\\F1FD\"}.fa-area-chart:before{content:\"\\F1FE\"}.fa-pie-chart:before{content:\"\\F200\"}.fa-line-chart:before{content:\"\\F201\"}.fa-lastfm:before{content:\"\\F202\"}.fa-lastfm-square:before{content:\"\\F203\"}.fa-toggle-off:before{content:\"\\F204\"}.fa-toggle-on:before{content:\"\\F205\"}.fa-bicycle:before{content:\"\\F206\"}.fa-bus:before{content:\"\\F207\"}.fa-ioxhost:before{content:\"\\F208\"}.fa-angellist:before{content:\"\\F209\"}.fa-cc:before{content:\"\\F20A\"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:\"\\F20B\"}.fa-meanpath:before{content:\"\\F20C\"}.fa-buysellads:before{content:\"\\F20D\"}.fa-connectdevelop:before{content:\"\\F20E\"}.fa-dashcube:before{content:\"\\F210\"}.fa-forumbee:before{content:\"\\F211\"}.fa-leanpub:before{content:\"\\F212\"}.fa-sellsy:before{content:\"\\F213\"}.fa-shirtsinbulk:before{content:\"\\F214\"}.fa-simplybuilt:before{content:\"\\F215\"}.fa-skyatlas:before{content:\"\\F216\"}.fa-cart-plus:before{content:\"\\F217\"}.fa-cart-arrow-down:before{content:\"\\F218\"}.fa-diamond:before{content:\"\\F219\"}.fa-ship:before{content:\"\\F21A\"}.fa-user-secret:before{content:\"\\F21B\"}.fa-motorcycle:before{content:\"\\F21C\"}.fa-street-view:before{content:\"\\F21D\"}.fa-heartbeat:before{content:\"\\F21E\"}.fa-venus:before{content:\"\\F221\"}.fa-mars:before{content:\"\\F222\"}.fa-mercury:before{content:\"\\F223\"}.fa-intersex:before,.fa-transgender:before{content:\"\\F224\"}.fa-transgender-alt:before{content:\"\\F225\"}.fa-venus-double:before{content:\"\\F226\"}.fa-mars-double:before{content:\"\\F227\"}.fa-venus-mars:before{content:\"\\F228\"}.fa-mars-stroke:before{content:\"\\F229\"}.fa-mars-stroke-v:before{content:\"\\F22A\"}.fa-mars-stroke-h:before{content:\"\\F22B\"}.fa-neuter:before{content:\"\\F22C\"}.fa-genderless:before{content:\"\\F22D\"}.fa-facebook-official:before{content:\"\\F230\"}.fa-pinterest-p:before{content:\"\\F231\"}.fa-whatsapp:before{content:\"\\F232\"}.fa-server:before{content:\"\\F233\"}.fa-user-plus:before{content:\"\\F234\"}.fa-user-times:before{content:\"\\F235\"}.fa-hotel:before,.fa-bed:before{content:\"\\F236\"}.fa-viacoin:before{content:\"\\F237\"}.fa-train:before{content:\"\\F238\"}.fa-subway:before{content:\"\\F239\"}.fa-medium:before{content:\"\\F23A\"}.fa-yc:before,.fa-y-combinator:before{content:\"\\F23B\"}.fa-optin-monster:before{content:\"\\F23C\"}.fa-opencart:before{content:\"\\F23D\"}.fa-expeditedssl:before{content:\"\\F23E\"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:\"\\F240\"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:\"\\F241\"}.fa-battery-2:before,.fa-battery-half:before{content:\"\\F242\"}.fa-battery-1:before,.fa-battery-quarter:before{content:\"\\F243\"}.fa-battery-0:before,.fa-battery-empty:before{content:\"\\F244\"}.fa-mouse-pointer:before{content:\"\\F245\"}.fa-i-cursor:before{content:\"\\F246\"}.fa-object-group:before{content:\"\\F247\"}.fa-object-ungroup:before{content:\"\\F248\"}.fa-sticky-note:before{content:\"\\F249\"}.fa-sticky-note-o:before{content:\"\\F24A\"}.fa-cc-jcb:before{content:\"\\F24B\"}.fa-cc-diners-club:before{content:\"\\F24C\"}.fa-clone:before{content:\"\\F24D\"}.fa-balance-scale:before{content:\"\\F24E\"}.fa-hourglass-o:before{content:\"\\F250\"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:\"\\F251\"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:\"\\F252\"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:\"\\F253\"}.fa-hourglass:before{content:\"\\F254\"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:\"\\F255\"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:\"\\F256\"}.fa-hand-scissors-o:before{content:\"\\F257\"}.fa-hand-lizard-o:before{content:\"\\F258\"}.fa-hand-spock-o:before{content:\"\\F259\"}.fa-hand-pointer-o:before{content:\"\\F25A\"}.fa-hand-peace-o:before{content:\"\\F25B\"}.fa-trademark:before{content:\"\\F25C\"}.fa-registered:before{content:\"\\F25D\"}.fa-creative-commons:before{content:\"\\F25E\"}.fa-gg:before{content:\"\\F260\"}.fa-gg-circle:before{content:\"\\F261\"}.fa-tripadvisor:before{content:\"\\F262\"}.fa-odnoklassniki:before{content:\"\\F263\"}.fa-odnoklassniki-square:before{content:\"\\F264\"}.fa-get-pocket:before{content:\"\\F265\"}.fa-wikipedia-w:before{content:\"\\F266\"}.fa-safari:before{content:\"\\F267\"}.fa-chrome:before{content:\"\\F268\"}.fa-firefox:before{content:\"\\F269\"}.fa-opera:before{content:\"\\F26A\"}.fa-internet-explorer:before{content:\"\\F26B\"}.fa-tv:before,.fa-television:before{content:\"\\F26C\"}.fa-contao:before{content:\"\\F26D\"}.fa-500px:before{content:\"\\F26E\"}.fa-amazon:before{content:\"\\F270\"}.fa-calendar-plus-o:before{content:\"\\F271\"}.fa-calendar-minus-o:before{content:\"\\F272\"}.fa-calendar-times-o:before{content:\"\\F273\"}.fa-calendar-check-o:before{content:\"\\F274\"}.fa-industry:before{content:\"\\F275\"}.fa-map-pin:before{content:\"\\F276\"}.fa-map-signs:before{content:\"\\F277\"}.fa-map-o:before{content:\"\\F278\"}.fa-map:before{content:\"\\F279\"}.fa-commenting:before{content:\"\\F27A\"}.fa-commenting-o:before{content:\"\\F27B\"}.fa-houzz:before{content:\"\\F27C\"}.fa-vimeo:before{content:\"\\F27D\"}.fa-black-tie:before{content:\"\\F27E\"}.fa-fonticons:before{content:\"\\F280\"}.fa-reddit-alien:before{content:\"\\F281\"}.fa-edge:before{content:\"\\F282\"}.fa-credit-card-alt:before{content:\"\\F283\"}.fa-codiepie:before{content:\"\\F284\"}.fa-modx:before{content:\"\\F285\"}.fa-fort-awesome:before{content:\"\\F286\"}.fa-usb:before{content:\"\\F287\"}.fa-product-hunt:before{content:\"\\F288\"}.fa-mixcloud:before{content:\"\\F289\"}.fa-scribd:before{content:\"\\F28A\"}.fa-pause-circle:before{content:\"\\F28B\"}.fa-pause-circle-o:before{content:\"\\F28C\"}.fa-stop-circle:before{content:\"\\F28D\"}.fa-stop-circle-o:before{content:\"\\F28E\"}.fa-shopping-bag:before{content:\"\\F290\"}.fa-shopping-basket:before{content:\"\\F291\"}.fa-hashtag:before{content:\"\\F292\"}.fa-bluetooth:before{content:\"\\F293\"}.fa-bluetooth-b:before{content:\"\\F294\"}.fa-percent:before{content:\"\\F295\"}.fa-gitlab:before{content:\"\\F296\"}.fa-wpbeginner:before{content:\"\\F297\"}.fa-wpforms:before{content:\"\\F298\"}.fa-envira:before{content:\"\\F299\"}.fa-universal-access:before{content:\"\\F29A\"}.fa-wheelchair-alt:before{content:\"\\F29B\"}.fa-question-circle-o:before{content:\"\\F29C\"}.fa-blind:before{content:\"\\F29D\"}.fa-audio-description:before{content:\"\\F29E\"}.fa-volume-control-phone:before{content:\"\\F2A0\"}.fa-braille:before{content:\"\\F2A1\"}.fa-assistive-listening-systems:before{content:\"\\F2A2\"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:\"\\F2A3\"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:\"\\F2A4\"}.fa-glide:before{content:\"\\F2A5\"}.fa-glide-g:before{content:\"\\F2A6\"}.fa-signing:before,.fa-sign-language:before{content:\"\\F2A7\"}.fa-low-vision:before{content:\"\\F2A8\"}.fa-viadeo:before{content:\"\\F2A9\"}.fa-viadeo-square:before{content:\"\\F2AA\"}.fa-snapchat:before{content:\"\\F2AB\"}.fa-snapchat-ghost:before{content:\"\\F2AC\"}.fa-snapchat-square:before{content:\"\\F2AD\"}.fa-pied-piper:before{content:\"\\F2AE\"}.fa-first-order:before{content:\"\\F2B0\"}.fa-yoast:before{content:\"\\F2B1\"}.fa-themeisle:before{content:\"\\F2B2\"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:\"\\F2B3\"}.fa-fa:before,.fa-font-awesome:before{content:\"\\F2B4\"}.fa-handshake-o:before{content:\"\\F2B5\"}.fa-envelope-open:before{content:\"\\F2B6\"}.fa-envelope-open-o:before{content:\"\\F2B7\"}.fa-linode:before{content:\"\\F2B8\"}.fa-address-book:before{content:\"\\F2B9\"}.fa-address-book-o:before{content:\"\\F2BA\"}.fa-vcard:before,.fa-address-card:before{content:\"\\F2BB\"}.fa-vcard-o:before,.fa-address-card-o:before{content:\"\\F2BC\"}.fa-user-circle:before{content:\"\\F2BD\"}.fa-user-circle-o:before{content:\"\\F2BE\"}.fa-user-o:before{content:\"\\F2C0\"}.fa-id-badge:before{content:\"\\F2C1\"}.fa-drivers-license:before,.fa-id-card:before{content:\"\\F2C2\"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:\"\\F2C3\"}.fa-quora:before{content:\"\\F2C4\"}.fa-free-code-camp:before{content:\"\\F2C5\"}.fa-telegram:before{content:\"\\F2C6\"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:\"\\F2C7\"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:\"\\F2C8\"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:\"\\F2C9\"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:\"\\F2CA\"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:\"\\F2CB\"}.fa-shower:before{content:\"\\F2CC\"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:\"\\F2CD\"}.fa-podcast:before{content:\"\\F2CE\"}.fa-window-maximize:before{content:\"\\F2D0\"}.fa-window-minimize:before{content:\"\\F2D1\"}.fa-window-restore:before{content:\"\\F2D2\"}.fa-times-rectangle:before,.fa-window-close:before{content:\"\\F2D3\"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:\"\\F2D4\"}.fa-bandcamp:before{content:\"\\F2D5\"}.fa-grav:before{content:\"\\F2D6\"}.fa-etsy:before{content:\"\\F2D7\"}.fa-imdb:before{content:\"\\F2D8\"}.fa-ravelry:before{content:\"\\F2D9\"}.fa-eercast:before{content:\"\\F2DA\"}.fa-microchip:before{content:\"\\F2DB\"}.fa-snowflake-o:before{content:\"\\F2DC\"}.fa-superpowers:before{content:\"\\F2DD\"}.fa-wpexplorer:before{content:\"\\F2DE\"}.fa-meetup:before{content:\"\\F2E0\"}.sr-only,.table.table-list tr:not(:hover) td.table-list-options>.dropdown:not(.show) button:not(:focus):not(:active),.table.table-list tr:not(:hover) td.table-list-options>button:not(:focus):not(:active){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.toaster-icon{position:absolute;left:0.0em;top:0.0em;font-weight:normal;color:#ffffff}.toast-title{font-weight:bold}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#ffffff}.toast-message a:hover{color:#cccccc;text-decoration:none}.toast-close-button{position:relative;right:-0.3em;top:-0.3em;float:right;font-size:20px;font-weight:bold;color:#ffffff;-webkit-text-shadow:0 1px 0 #ffffff;text-shadow:0 1px 0 #ffffff;opacity:0.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80);z-index:999}.toast-close-button:hover,.toast-close-button:focus{color:#000000;text-decoration:none;cursor:pointer;opacity:0.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}button.toast-close-button{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.toast-content{display:inline-block;width:95%}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-center{top:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-center{bottom:12px}.toast-bottom-left{bottom:12px;left:12px}.toast-center{top:45%}#toast-container{position:fixed;z-index:999999;pointer-events:auto}#toast-container.toast-center,#toast-container.toast-top-center,#toast-container.toast-bottom-center{width:100%;pointer-events:none;left:0;right:0}#toast-container.toast-center>div,#toast-container.toast-top-center>div,#toast-container.toast-bottom-center>div{margin:6px auto;pointer-events:auto}#toast-container.toast-center>button,#toast-container.toast-top-center>button,#toast-container.toast-bottom-center>button{pointer-events:auto}#toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;-moz-border-radius:3px 3px 3px 3px;-webkit-border-radius:3px 3px 3px 3px;border-radius:3px 3px 3px 3px;background-position:15px center;background-repeat:no-repeat;-moz-box-shadow:0 0 12px #999999;-webkit-box-shadow:0 0 12px #999999;box-shadow:0 0 12px #999999;color:#ffffff;opacity:0.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80)}#toast-container>:hover{-moz-box-shadow:0 0 12px #000000;-webkit-box-shadow:0 0 12px #000000;box-shadow:0 0 12px #000000;opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100);cursor:pointer}.icon-success{width:35px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:100% 50%;background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==\") !important}.icon-error{width:35px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:100% 50%;background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=\") !important}.icon-info{width:35px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:100% 50%;background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=\") !important}.icon-wait{width:35px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:100% 50%;background-image:url(\"data:image/gif;base64,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\") !important}.icon-warning{width:35px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:100% 50%;background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=\") !important}#toast-container.toast-top-full-width>div,#toast-container.toast-bottom-full-width>div{width:96%;margin:auto}.toast{position:relative;background-color:#030303}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-wait{background-color:#2f96b4}.toast-warning{background-color:#f89406}@media all and (max-width: 240px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container .toast-close-button{right:-0.1em;top:-0.2em}.toast-content{width:94%}}@media all and (min-width: 241px) and (max-width: 480px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container .toast-close-button{right:-0.1em;top:-0.2em}.toast-content{width:94%}}@media all and (min-width: 481px) and (max-width: 768px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}}.swal2-popup.swal2-toast{flex-direction:row;align-items:center;width:auto;padding:.625em;overflow-y:hidden;background:#fff;box-shadow:0 0 0.625em #d9d9d9}.swal2-popup.swal2-toast .swal2-header{flex-direction:row;padding:0}.swal2-popup.swal2-toast .swal2-title{flex-grow:1;justify-content:flex-start;margin:0 0.6em;font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:0.5em 0 0;padding:0.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{position:static;width:.8em;height:.8em;line-height:.8}.swal2-popup.swal2-toast .swal2-content{justify-content:flex-start;padding:0;font-size:1em}.swal2-popup.swal2-toast .swal2-icon{width:2em;min-width:2em;height:2em;margin:0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}@media all and (-ms-high-contrast: none), (-ms-high-contrast: active){.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{font-size:.25em}}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^='swal2-x-mark-line']{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^='swal2-x-mark-line'][class$='left']{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^='swal2-x-mark-line'][class$='right']{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{flex-basis:auto !important;width:auto;height:auto;margin:0 .3125em;padding:0}.swal2-popup.swal2-toast .swal2-styled{margin:.125em .3125em;padding:.3125em .625em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(100,150,200,0.5)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^='swal2-success-circular-line']{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^='swal2-success-circular-line'][class$='left']{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^='swal2-success-circular-line'][class$='right']{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^='swal2-success-line']{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^='swal2-success-line'][class$='tip']{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^='swal2-success-line'][class$='long']{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{animation:swal2-toast-show 0.5s}.swal2-popup.swal2-toast.swal2-hide{animation:swal2-toast-hide 0.1s forwards}.swal2-container{display:flex;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;flex-direction:row;align-items:center;justify-content:center;padding:.625em;overflow-x:hidden;transition:background-color 0.1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,0.4)}.swal2-container.swal2-backdrop-hide{background:transparent !important}.swal2-container.swal2-top{align-items:flex-start}.swal2-container.swal2-top-start,.swal2-container.swal2-top-left{align-items:flex-start;justify-content:flex-start}.swal2-container.swal2-top-end,.swal2-container.swal2-top-right{align-items:flex-start;justify-content:flex-end}.swal2-container.swal2-center{align-items:center}.swal2-container.swal2-center-start,.swal2-container.swal2-center-left{align-items:center;justify-content:flex-start}.swal2-container.swal2-center-end,.swal2-container.swal2-center-right{align-items:center;justify-content:flex-end}.swal2-container.swal2-bottom{align-items:flex-end}.swal2-container.swal2-bottom-start,.swal2-container.swal2-bottom-left{align-items:flex-end;justify-content:flex-start}.swal2-container.swal2-bottom-end,.swal2-container.swal2-bottom-right{align-items:flex-end;justify-content:flex-end}.swal2-container.swal2-bottom>:first-child,.swal2-container.swal2-bottom-start>:first-child,.swal2-container.swal2-bottom-left>:first-child,.swal2-container.swal2-bottom-end>:first-child,.swal2-container.swal2-bottom-right>:first-child{margin-top:auto}.swal2-container.swal2-grow-fullscreen>.swal2-modal{display:flex !important;flex:1;align-self:stretch;justify-content:center}.swal2-container.swal2-grow-row>.swal2-modal{display:flex !important;flex:1;align-content:center;justify-content:center}.swal2-container.swal2-grow-column{flex:1;flex-direction:column}.swal2-container.swal2-grow-column.swal2-top,.swal2-container.swal2-grow-column.swal2-center,.swal2-container.swal2-grow-column.swal2-bottom{align-items:center}.swal2-container.swal2-grow-column.swal2-top-start,.swal2-container.swal2-grow-column.swal2-center-start,.swal2-container.swal2-grow-column.swal2-bottom-start,.swal2-container.swal2-grow-column.swal2-top-left,.swal2-container.swal2-grow-column.swal2-center-left,.swal2-container.swal2-grow-column.swal2-bottom-left{align-items:flex-start}.swal2-container.swal2-grow-column.swal2-top-end,.swal2-container.swal2-grow-column.swal2-center-end,.swal2-container.swal2-grow-column.swal2-bottom-end,.swal2-container.swal2-grow-column.swal2-top-right,.swal2-container.swal2-grow-column.swal2-center-right,.swal2-container.swal2-grow-column.swal2-bottom-right{align-items:flex-end}.swal2-container.swal2-grow-column>.swal2-modal{display:flex !important;flex:1;align-content:center;justify-content:center}.swal2-container.swal2-no-transition{transition:none !important}.swal2-container:not(.swal2-top):not(.swal2-top-start):not(.swal2-top-end):not(.swal2-top-left):not(.swal2-top-right):not(.swal2-center-start):not(.swal2-center-end):not(.swal2-center-left):not(.swal2-center-right):not(.swal2-bottom):not(.swal2-bottom-start):not(.swal2-bottom-end):not(.swal2-bottom-left):not(.swal2-bottom-right):not(.swal2-grow-fullscreen)>.swal2-modal{margin:auto}@media all and (-ms-high-contrast: none), (-ms-high-contrast: active){.swal2-container .swal2-modal{margin:0 !important}}.swal2-popup{display:none;position:relative;box-sizing:border-box;flex-direction:column;justify-content:center;width:32em;max-width:100%;padding:1.25em;border:none;border-radius:5px;background:#fff;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:none}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-header{display:flex;flex-direction:column;align-items:center;padding:0 1.8em}.swal2-title{position:relative;max-width:100%;margin:0 0 0.4em;padding:0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:100%;margin:1.25em auto 0;padding:0 1.6em}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,0.1), rgba(0,0,0,0.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,0.2), rgba(0,0,0,0.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:0.625em 1.1em;box-shadow:none;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#2778c4;color:#fff;font-size:1.0625em}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#d14529;color:#fff;font-size:1.0625em}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#757575;color:#fff;font-size:1.0625em}.swal2-styled:focus{outline:none;box-shadow:0 0 0 3px rgba(100,150,200,0.5)}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1.25em 0 0;padding:1em 0 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;height:.25em;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,0.2)}.swal2-image{max-width:100%;margin:1.25em auto}.swal2-close{position:absolute;z-index:2;top:0;right:0;align-items:center;justify-content:center;width:1.2em;height:1.2em;padding:0;overflow:hidden;transition:color 0.1s ease-out;border:none;border-radius:5px;background:rgba(0,0,0,0);color:#ccc;font-family:serif;font-size:2.5em;line-height:1.2;cursor:pointer}.swal2-close:hover{transform:none;background:rgba(0,0,0,0);color:#f27474}.swal2-close:focus{outline:none;box-shadow:inset 0 0 0 3px rgba(100,150,200,0.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-content{z-index:1;justify-content:center;margin:0;padding:0 1.6em;color:#545454;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;word-wrap:break-word}.swal2-input,.swal2-file,.swal2-textarea,.swal2-select,.swal2-radio,.swal2-checkbox{margin:1em auto}.swal2-input,.swal2-file,.swal2-textarea{box-sizing:border-box;width:100%;transition:border-color 0.3s,box-shadow 0.3s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,0.06);color:inherit;font-size:1.125em}.swal2-input.swal2-inputerror,.swal2-file.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}.swal2-input:focus,.swal2-file:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:none;box-shadow:0 0 0 3px rgba(100,150,200,0.5)}.swal2-input::placeholder,.swal2-file::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em auto;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 0.75em}.swal2-input[type='number']{max-width:10em}.swal2-file{background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-radio,.swal2-checkbox{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-radio label,.swal2-checkbox label{margin:0 .6em;font-size:1.125em}.swal2-radio input,.swal2-checkbox input{margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto}.swal2-validation-message{display:none;align-items:center;justify-content:center;margin:0 -2.7em;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:'!';display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:1.25em auto 1.875em;border:0.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^='swal2-x-mark-line']{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^='swal2-x-mark-line'][class$='left']{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^='swal2-x-mark-line'][class$='right']{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^='swal2-success-circular-line']{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^='swal2-success-circular-line'][class$='left']{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^='swal2-success-circular-line'][class$='right']{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:0.25em solid rgba(165,220,134,0.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^='swal2-success-line']{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^='swal2-success-line'][class$='tip']{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^='swal2-success-line'][class$='long']{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:0 0 1.25em;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^='swal2']{-webkit-tap-highlight-color:transparent}.swal2-show{animation:swal2-show 0.3s}.swal2-hide{animation:swal2-hide 0.15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{right:auto;left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@supports (-ms-accelerator: true){.swal2-range input{width:100% !important}.swal2-range output{display:none}}@media all and (-ms-high-contrast: none), (-ms-high-contrast: active){.swal2-range input{width:100% !important}.swal2-range output{display:none}}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-show{0%{transform:scale(0.7)}45%{transform:scale(1.05)}80%{transform:scale(0.95)}100%{transform:scale(1)}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(0.5);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{top:auto;right:auto;bottom:auto;left:auto;max-width:calc(100% - .625em * 2);background-color:transparent !important}body.swal2-no-backdrop .swal2-container>.swal2-modal{box-shadow:0 0 10px rgba(0,0,0,0.4)}body.swal2-no-backdrop .swal2-container.swal2-top{top:0;left:50%;transform:translateX(-50%)}body.swal2-no-backdrop .swal2-container.swal2-top-start,body.swal2-no-backdrop .swal2-container.swal2-top-left{top:0;left:0}body.swal2-no-backdrop .swal2-container.swal2-top-end,body.swal2-no-backdrop .swal2-container.swal2-top-right{top:0;right:0}body.swal2-no-backdrop .swal2-container.swal2-center{top:50%;left:50%;transform:translate(-50%, -50%)}body.swal2-no-backdrop .swal2-container.swal2-center-start,body.swal2-no-backdrop .swal2-container.swal2-center-left{top:50%;left:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-container.swal2-center-end,body.swal2-no-backdrop .swal2-container.swal2-center-right{top:50%;right:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-container.swal2-bottom{bottom:0;left:50%;transform:translateX(-50%)}body.swal2-no-backdrop .swal2-container.swal2-bottom-start,body.swal2-no-backdrop .swal2-container.swal2-bottom-left{bottom:0;left:0}body.swal2-no-backdrop .swal2-container.swal2-bottom-end,body.swal2-no-backdrop .swal2-container.swal2-bottom-right{right:0;bottom:0}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden='true']{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static !important}}body.swal2-toast-shown .swal2-container{background-color:transparent}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}body.swal2-toast-column .swal2-toast{flex-direction:column;align-items:stretch}body.swal2-toast-column .swal2-toast .swal2-actions{flex:1;align-self:stretch;height:2.2em;margin-top:.3125em}body.swal2-toast-column .swal2-toast .swal2-loading{justify-content:center}body.swal2-toast-column .swal2-toast .swal2-input{height:2em;margin:.3125em auto;font-size:1em}body.swal2-toast-column .swal2-toast .swal2-validation-message{font-size:1em}#toast-container.toast-top-right{top:76px}#toast-container .toast-close-button{right:-0.15em}#toast-container .toast{opacity:1 !important;background-image:none !important;border-radius:.25rem;box-shadow:0 0 8px rgba(0,0,0,0.35);display:flex;align-items:center}#toast-container .toast:hover{box-shadow:0 0 10px rgba(0,0,0,0.6)}#toast-container .toast:before{font-family:FontAwesome;font-size:25px;line-height:20px;float:left;color:#ffffff;padding-right:10px;margin:auto 0 auto -36px}#toast-container .toast .toaster-icon{display:none}#toast-container .toast .toast-message p{margin-bottom:0.5rem}#toast-container .toast .toast-message p:last-child{margin-bottom:0}#toast-container .toast.toast-danger,#toast-container .toast.toast-error{background-image:none !important;background-color:#dd4b39}#toast-container .toast.toast-danger:before,#toast-container .toast.toast-error:before{content:\"\\F0E7\";margin-left:-30px}#toast-container .toast.toast-warning{background-image:none !important;background-color:#bf7e16}#toast-container .toast.toast-warning:before{content:\"\\F071\"}#toast-container .toast.toast-info{background-image:none !important;background-color:#555}#toast-container .toast.toast-info:before{content:\"\\F05A\"}#toast-container .toast.toast-success{background-image:none !important;background-color:#00a65a}#toast-container .toast.toast-success:before{content:\"\\F00C\"}.swal2-container{background-color:rgba(0,0,0,0.3)}.swal2-popup{padding:15px 0 0;background-color:#fff;color:#333;border:1px solid #9a9a9a;border-radius:.3rem;width:34em}.swal2-popup .swal2-header{padding:0 15px}.swal2-popup .swal2-icon{margin:0 auto;width:auto;height:auto;border:none}.swal2-popup .swal2-content{padding-bottom:15px;font-size:1rem;border-bottom:1px solid #dee2e6}.swal2-popup i.swal-custom-icon{display:block;margin:0 auto;font-size:35px}.swal2-popup .swal2-title{padding:10px 0 15px;margin:0;font-size:1.15rem;color:#333}.swal2-popup .swal2-content{font-size:1rem;color:#333;padding:0 15px 15px}.swal2-popup .swal2-actions{padding:15px;margin:0;background-color:#fbfbfb;border-radius:.3rem;display:flex;flex-direction:row;justify-content:flex-start;font-size:1rem}.swal2-popup .swal2-actions button{margin-right:10px}.swal2-popup .swal2-actions button.swal2-confirm{font-weight:bold}.swal2-popup .swal2-actions button.swal2-cancel{background-color:#ffffff}date-input-polyfill[data-open=\"true\"]{z-index:10000 !important}html{font-size:14px}body{min-width:1010px}body.layout_frontend{background-color:#ecf0f5}body.full-width:not(.layout_frontend) .container{min-width:980px;width:90%}.page-header,.secondary-header{border-bottom:1px solid #dee2e6;padding-bottom:0.6rem;margin-bottom:0.5rem}.page-header h1,.page-header h2,.page-header h3,.page-header h4,.secondary-header h1,.secondary-header h2,.secondary-header h3,.secondary-header h4{margin:0}h1 small,h2 small,h3 small,h4 small,h5 small{font-size:80%}input:required,select:required,textarea:required{box-shadow:none}.secondary-header,.spaced-header{margin-top:4rem}.navbar{padding-left:0;padding-right:0}.navbar .dropdown-menu{min-width:200px;max-width:300px}.navbar .dropdown-menu .dropdown-item-text{line-height:1.3}.navbar .dropdown-menu .dropdown-item-text span,.navbar .dropdown-menu .dropdown-item-text small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.navbar .nav-link{font-weight:600}.navbar-brand{margin-top:-20px;margin-bottom:-20px}.dropdown-menu button{cursor:pointer}.container{width:980px;max-width:none !important;margin:0 auto;padding:0}.page-content{margin-top:20px}.footer{margin-top:40px;padding:40px 0 40px 0;border-top:1px solid #dee2e6}.list-group-item.active{border-left:3px solid #175DDC;font-weight:bold;padding-left:calc(1.25rem - 3px)}.card-header,.modal-header{font-weight:bold;text-transform:uppercase}.card-header small,.modal-header small{font-weight:normal;text-transform:none}.card-body-header{font-size:1.15rem}.card ul.fa-ul.card-ul{margin-left:1.9em}.card ul.fa-ul.card-ul li{word-break:break-all}.card ul.fa-ul.card-ul .fa-li{top:4px}.card ul.fa-ul.card-ul.carets{margin-left:1.1em}.card ul.fa-ul.card-ul.carets .fa-li{left:-17px;width:1.1em}.card ul.fa-ul.card-ul ul.carets{margin-left:0.85em}.card-org-plans h2{font-size:1.15rem}.modal-dialog{width:500px}.modal-sm{width:300px}.modal-lg{width:800px}.modal-body h3,.modal-body .section-header>*{font-weight:normal;text-transform:uppercase;color:#6c757d}.modal .list-group-flush :first-child{border-top:none}.modal .list-group-flush :last-child{border-bottom:none}.modal-footer{justify-content:flex-start;background-color:#fbfbfb;border-radius:.3rem}label:not(.form-check-label):not(.btn),label.bold{font-weight:600}input[type=\"search\"]::-webkit-search-cancel-button{-webkit-appearance:searchfield-cancel-button}.btn[class*=\"btn-outline-\"]:not(:hover),.swal2-popup .swal2-actions button[class*=\"btn-outline-\"]:not(:hover){border-color:#ced4da;background-color:#fbfbfb}.btn-link:focus,.btn-link.focus{outline-color:-webkit-focus-ring-color;outline-offset:1px;outline-style:auto;outline-width:1px}.btn-outline-secondary,.swal2-popup .swal2-actions button.swal2-cancel{color:#6c757d}.btn-outline-secondary:hover:not(:disabled),.swal2-popup .swal2-actions button.swal2-cancel:hover:not(:disabled){color:#333}.btn-outline-secondary:disabled,.swal2-popup .swal2-actions button.swal2-cancel:disabled{opacity:1}.btn-outline-secondary:focus,.swal2-popup .swal2-actions button.swal2-cancel:focus,.btn-outline-secondary.focus,.swal2-popup .swal2-actions button.focus.swal2-cancel{box-shadow:0 0 0 .2rem rgba(58,117,225,0.5)}.btn-submit{position:relative}.btn-submit .fa-spinner{position:absolute;display:none;align-items:center;justify-content:center;bottom:0;top:0;left:0;right:0}.btn-submit:disabled:not(.manual) .fa-spinner,.btn-submit.loading .fa-spinner{display:flex}.btn-submit:disabled:not(.manual) span,.btn-submit.loading span{visibility:hidden}.list-group-item:focus,.list-group-item.focus{z-index:100}.fa-icon-above-input{height:1.5em}.table.table-list thead th{border-top:none}.table.table-list tr:first-child td{border:none}.table.table-list td{vertical-align:middle}.table.table-list td.reduced-lh{line-height:1}.table.table-list td.reduced-lh small{font-size:80%}.table.table-list td small,.table.table-list td>.fa,.table.table-list td .icon{color:#6c757d}.table.table-list td.wrap{word-break:break-all}.table.table-list td.table-list-options{width:76px;max-width:76px;text-align:right;height:50px}.table.table-list td.table-list-options.wider{width:100px;max-width:100px}.table.table-list td.table-list-options .btn,.table.table-list td.table-list-options .swal2-popup .swal2-actions button,.swal2-popup .swal2-actions .table.table-list td.table-list-options button{line-height:1;transition:initial}.table.table-list td.table-list-options .dropdown-menu{line-height:1.5}.table.table-list td.table-list-icon{width:45px;max-width:45px;text-align:center}.table.table-list td.table-list-icon img{max-height:24px}.table.table-list td.table-list-checkbox{width:35px;max-width:35px}.table.table-list td.table-list-strike{color:#6c757d;text-decoration:line-through}.text-lg{font-size:1.15rem}.text-strike{text-decoration:line-through}.font-weight-semibold{font-weight:600}.password-wrapper{word-break:break-all;white-space:pre-wrap;min-width:0}.password-row{min-width:0}.password-number{color:#007fde}.password-special{color:#c40800}app-vault-groupings .card #search,app-org-vault-groupings .card #search,.groupings .card #search{margin-bottom:1rem}app-vault-groupings .card h3,app-org-vault-groupings .card h3,.groupings .card h3{font-weight:normal;text-transform:uppercase;color:#6c757d}app-vault-groupings .card ul:last-child,app-org-vault-groupings .card ul:last-child,.groupings .card ul:last-child{margin-bottom:0}app-vault-groupings .card .card-body a,app-org-vault-groupings .card .card-body a,.groupings .card .card-body a{color:#333}app-vault-groupings .card .card-body a:hover.text-muted,app-org-vault-groupings .card .card-body a:hover.text-muted,.groupings .card .card-body a:hover.text-muted{color:#333 !important}app-vault-groupings .card .show-active,app-org-vault-groupings .card .show-active,.groupings .card .show-active{display:none}app-vault-groupings .card li>.fa,app-vault-groupings .card li>div>.fa,app-org-vault-groupings .card li>.fa,app-org-vault-groupings .card li>div>.fa,.groupings .card li>.fa,.groupings .card li>div>.fa{cursor:pointer}app-vault-groupings .card li.active>.show-active,app-vault-groupings .card li.active>div .show-active,app-org-vault-groupings .card li.active>.show-active,app-org-vault-groupings .card li.active>div .show-active,.groupings .card li.active>.show-active,.groupings .card li.active>div .show-active{display:inline}app-vault-groupings .card li.active>a:first-of-type,app-vault-groupings .card li.active>div a:first-of-type,app-org-vault-groupings .card li.active>a:first-of-type,app-org-vault-groupings .card li.active>div a:first-of-type,.groupings .card li.active>a:first-of-type,.groupings .card li.active>div a:first-of-type{font-weight:bold;color:#175DDC}app-vault-groupings .card li.active>.fa,app-vault-groupings .card li.active>div>.fa,app-org-vault-groupings .card li.active>.fa,app-org-vault-groupings .card li.active>div>.fa,.groupings .card li.active>.fa,.groupings .card li.active>div>.fa{color:#175DDC}app-password-generator #lengthRange{width:100%}app-password-generator .card-password .card-body{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;text-align:center;font-size:1.15rem;font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}app-password-generator-history .list-group-item{line-height:1}app-password-generator-history .list-group-item .password{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}app-import textarea{height:150px}app-user-billing .progress{height:20px}app-user-billing .progress .progress-bar{min-width:50px}#duo-frame{background:url(../images/loading.svg) 0 0 no-repeat;height:330px}#duo-frame iframe{width:100%;height:100%;border:none}#web-authn-frame{background:url(../images/loading.svg) 0 0 no-repeat;height:290px}#web-authn-frame iframe{width:100%;height:100%;border:none}#bt-dropin-container{background:url(../images/loading.svg) 0 0 no-repeat;min-height:50px}.braintree-placeholder,.braintree-sheet__header{display:none}.braintree-sheet__content--button{text-align:left;padding:0;min-height:0}.braintree-sheet__container{margin-bottom:0}.braintree-sheet{border:none}.totp .totp-code{font-size:1.2rem}.totp .totp-countdown{margin:3px 3px 0 0;display:block;user-select:none}.totp .totp-countdown .totp-sec{font-size:0.85em;position:absolute;line-height:32px;width:32px;text-align:center}.totp .totp-countdown svg{width:32px;height:32px;transform:rotate(-90deg)}.totp .totp-countdown .totp-circle{fill:none;stroke:#175DDC}.totp .totp-countdown .totp-circle.inner{stroke-width:3;stroke-dasharray:78.6;stroke-dashoffset:0}.totp .totp-countdown .totp-circle.outer{stroke-width:2;stroke-dasharray:88;stroke-dashoffset:0}.totp>.align-items-center{margin-bottom:-5px}.totp.low .totp-sec,.totp.low .totp-code{color:#dd4b39}.totp.low .totp-circle{stroke:#dd4b39}.callout{padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid rgba(0,0,0,0.125);border-left-width:5px;border-radius:calc(.25rem - 1px);background-color:#fafafa}.callout .callout-heading{margin-top:0}.callout h3.callout-heading{font-weight:bold;text-transform:uppercase}.callout.callout-primary{border-left-color:#175DDC}.callout.callout-primary .callout-heading{color:#175DDC}.callout.callout-info{border-left-color:#343a40}.callout.callout-info .callout-heading{color:#343a40}.callout.callout-danger{border-left-color:#dd4b39}.callout.callout-danger .callout-heading{color:#dd4b39}.callout.callout-success{border-left-color:#00a65a}.callout.callout-success .callout-heading{color:#00a65a}.callout.callout-warning{border-left-color:#bf7e16}.callout.callout-warning .callout-heading{color:#bf7e16}.list-group-2fa .logo-2fa{min-width:100px}.form-check-block .form-check-label{font-weight:600}.form-check-block .form-check-label>small{display:block;color:#6c757d;font-weight:normal}.form-check-block .form-check-label>span{display:block;font-weight:normal}.form-inline input[type='datetime-local']{width:200px}.form-control.stripe-form-control{padding-top:0.55rem}.form-control.stripe-form-control.is-focused{color:#495057;background-color:#fff;border-color:#81a9f2;outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.form-control.stripe-form-control.is-focused.is-invalid{box-shadow:0 0 0 .2rem rgba(221,75,57,0.25)}.form-control.stripe-form-control.is-invalid{border-color:#dd4b39}.org-nav{background-color:#fbfbfb;border-bottom:1px solid #dee2e6;height:100px;min-height:100px}.org-nav .container{height:100%}.org-nav .nav-tabs{border-bottom:none}.org-nav .nav-tabs a{color:#333}.org-nav .nav-tabs a:not(.active){border-color:transparent}.org-nav .nav-tabs a.active{border-top:3px solid #175DDC;font-weight:bold;padding-top:calc(.5rem - 2px)}.org-nav .nav-tabs a.disabled{color:#b4b4b4}.org-nav .org-name{line-height:1}.org-nav .org-name span{font-size:1.15rem;display:block}img.logo{width:284px;height:43px;margin:0 auto;display:block}.min-height-fix{min-height:1px}.overflow-hidden{overflow:hidden}.cdk-drag-preview{z-index:1070 !important;opacity:0.8;background-color:#fff;border-radius:.25rem}.cursor-move{cursor:move !important}.layout.enterprise2 header{color:#ced4da;background-color:#175DDC}.layout.enterprise2 header:before{content:\"\";position:absolute;z-index:-1;width:100%;height:340px;left:0;transform:skewY(-3deg);background:#175DDC}.layout.enterprise2 header img.logo{margin:12px 0 0;width:284px;max-width:284px;height:auto}.layout.enterprise2 h2{color:#ffffff;font-size:1.8rem;margin:100px 0 150px 0}.layout.enterprise2 p{margin:20px 0 40px 0;font-size:1.4rem}.layout.enterprise2 p:before{content:\"/\";padding-right:12px}.layout.enterprise2 p:not(.highlight):before{color:#1252A3}.layout.enterprise2 p b:after{content:\"\\27F6\";font-size:2rem;padding-left:6px}.layout.enterprise2 blockquote{margin:20px 0 0 0;font-size:1.4rem;padding-right:40px}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/app/main.6edbb1cdf4d2e063961a.js b/app/main.6edbb1cdf4d2e063961a.js deleted file mode 100644 index 8edb7517..00000000 --- a/app/main.6edbb1cdf4d2e063961a.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(e){function t(t){for(var r,a,s=t[0],l=t[1],c=t[2],u=0,d=[];u1&&(r+=e.slice(1)),void 0===t[e=r]&&(e=e.toLowerCase()),void 0===t[e]&&(e=e.toUpperCase())}return t[e]},e}();t.BaseResponse=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(0),n(3);var r=n(0),i=n(3),o=n(4);function a(e,t){if(1&e&&r.ɵɵelement(0,"i",4),2&e){var n=r.ɵɵnextContext(2);r.ɵɵclassMapInterpolate1("fa ",n.icon,"")}}function s(e,t){if(1&e&&(r.ɵɵelementStart(0,"h3",2),r.ɵɵtext(1,"\n "),r.ɵɵtemplate(2,a,1,3,"i",3),r.ɵɵtext(3),r.ɵɵelementEnd()),2&e){var n=r.ɵɵnextContext();r.ɵɵadvance(2),r.ɵɵproperty("ngIf",n.icon),r.ɵɵadvance(1),r.ɵɵtextInterpolate1("\n ",n.title,"\n ")}}var l=function(e){return{clickable:e}},c=["*"],p=function(){function e(e){this.i18nService=e,this.type="info"}return e.prototype.ngOnInit=function(){this.calloutStyle=this.type,"warning"===this.type||"danger"===this.type?("danger"===this.type&&(this.calloutStyle="danger"),void 0===this.title&&(this.title=this.i18nService.t("warning")),void 0===this.icon&&(this.icon="fa-warning")):"error"===this.type?(this.calloutStyle="danger",void 0===this.title&&(this.title=this.i18nService.t("error")),void 0===this.icon&&(this.icon="fa-bolt")):"tip"===this.type&&(this.calloutStyle="success",void 0===this.title&&(this.title=this.i18nService.t("tip")),void 0===this.icon&&(this.icon="fa-lightbulb-o"))},e.ɵfac=function(t){return new(t||e)(r.ɵɵdirectiveInject(i.I18nService))},e.ɵcmp=r.ɵɵdefineComponent({type:e,selectors:[["app-callout"]],inputs:{type:"type",icon:"icon",title:"title",clickable:"clickable"},ngContentSelectors:c,decls:7,vars:7,consts:[["role","alert",3,"ngClass"],["class","callout-heading",4,"ngIf"],[1,"callout-heading"],["aria-hidden","true",3,"class",4,"ngIf"],["aria-hidden","true"]],template:function(e,t){1&e&&(r.ɵɵprojectionDef(),r.ɵɵelementStart(0,"div",0),r.ɵɵtext(1,"\n "),r.ɵɵtemplate(2,s,4,2,"h3",1),r.ɵɵtext(3,"\n "),r.ɵɵprojection(4),r.ɵɵtext(5,"\n"),r.ɵɵelementEnd(),r.ɵɵtext(6,"\n")),2&e&&(r.ɵɵclassMapInterpolate1("callout callout-",t.calloutStyle,""),r.ɵɵproperty("ngClass",r.ɵɵpureFunction1(5,l,t.clickable)),r.ɵɵadvance(2),r.ɵɵproperty("ngIf",t.title))},directives:[o.NgClass,o.NgIf],encapsulation:2}),e}();t.CalloutComponent=p},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(711),i=n(143),o=n(156),a=n(258),s=n(30),l=n(209),c=n(127),p=n(159),u=n(94),d=n(39),m=n(118),h=n(106),f=n(709),v=function(){function e(){this.organizationId=null,this.logService=new f.ConsoleLogService(!1),this.newLineRegex=/(?:\r\n|\r|\n)/,this.passwordFieldNames=["password","pass word","passphrase","pass phrase","pass","code","code word","codeword","secret","secret word","personpwd","key","keyword","key word","keyphrase","key phrase","form_pw","wppassword","pin","pwd","pw","pword","passwd","p","serial","serial#","license key","reg #","passwort"],this.usernameFieldNames=["user","name","user name","username","login name","email","e-mail","id","userid","user id","login","form_loginname","wpname","mail","loginid","login id","log","personlogin","first name","last name","card#","account #","member","member #","nom","benutzername"],this.notesFieldNames=["note","notes","comment","comments","memo","description","free form","freeform","free text","freetext","free","kommentar"],this.uriFieldNames=["url","hyper link","hyperlink","link","host","hostname","host name","server","address","hyper ref","href","web","website","web site","site","web-site","uri","ort","adresse"],this.parseCsvOptions={encoding:"UTF-8",skipEmptyLines:!1}}return Object.defineProperty(e.prototype,"organization",{get:function(){return null!=this.organizationId},enumerable:!0,configurable:!0}),e.prototype.parseXml=function(e){var t=(new DOMParser).parseFromString(e,"application/xml");return null!=t&&null==t.querySelector("parsererror")?t:null},e.prototype.parseCsv=function(e,t,n){var i=this;void 0===n&&(n={});var o=Object.assign({header:t},this.parseCsvOptions,n);e=this.splitNewLine(e).join("\n").trim();var a=r.parse(e,o);return null!=a.errors&&a.errors.length>0&&a.errors.forEach((function(e){null!=e.row&&i.logService.warning("Error parsing row "+e.row+": "+e.message)})),a.data&&a.data.length>0?a.data:null},e.prototype.parseSingleRowCsv=function(e){if(this.isNullOrWhitespace(e))return null;var t=this.parseCsv(e,!1);return null!=t&&t.length>0&&t[0].length>0?t[0]:null},e.prototype.makeUriArray=function(e){var t=this;if(null==e)return null;if("string"==typeof e){var n=new a.LoginUriView;return n.uri=this.fixUri(e),this.isNullOrWhitespace(n.uri)?null:(n.match=null,[n])}if(e.length>0){var r=[];return e.forEach((function(e){var n=new a.LoginUriView;n.uri=t.fixUri(e),t.isNullOrWhitespace(n.uri)||(n.match=null,r.push(n))})),0===r.length?null:r}return null},e.prototype.fixUri=function(e){return null==e?null:(-1===(e=e.trim()).indexOf("://")&&e.indexOf(".")>=0&&(e="http://"+e),e.length>1e3?e.substring(0,1e3):e)},e.prototype.nameFromUrl=function(e){var t=s.Utils.getHostname(e);return this.isNullOrWhitespace(t)?null:t.startsWith("www.")?t.replace("www.",""):t},e.prototype.isNullOrWhitespace=function(e){return s.Utils.isNullOrWhitespace(e)},e.prototype.getValueOrDefault=function(e,t){return void 0===t&&(t=null),this.isNullOrWhitespace(e)?t:e},e.prototype.splitNewLine=function(e){return e.split(this.newLineRegex)},e.prototype.getCardBrand=function(e){if(this.isNullOrWhitespace(e))return null;var t=new RegExp("^4");return null!=e.match(t)?"Visa":/^(5[1-5][0-9]{14}|2(22[1-9][0-9]{12}|2[3-9][0-9]{13}|[3-6][0-9]{14}|7[0-1][0-9]{13}|720[0-9]{12}))$/.test(e)?"Mastercard":(t=new RegExp("^3[47]"),null!=e.match(t)?"Amex":(t=new RegExp("^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)"),null!=e.match(t)?"Discover":(t=new RegExp("^36"),null!=e.match(t)?"Diners Club":(t=new RegExp("^30[0-5]"),null!=e.match(t)?"Diners Club":(t=new RegExp("^35(2[89]|[3-8][0-9])"),null!=e.match(t)?"JCB":(t=new RegExp("^(4026|417500|4508|4844|491(3|7))"),null!=e.match(t)?"Visa":null))))))},e.prototype.setCardExpiration=function(e,t){if(!this.isNullOrWhitespace(t)){var n=t.split("/");if(2===n.length){var r=null,i=null;if(1!==n[0].length&&2!==n[0].length||2===(r=n[0]).length&&"0"===r[0]&&(r=r.substr(1,1)),2!==n[1].length&&4!==n[1].length||(i=2===r.length?"20"+n[1]:n[1]),null!=r&&null!=i)return e.card.expMonth=r,e.card.expYear=i,!0}}return!1},e.prototype.moveFoldersToCollections=function(e){e.folderRelationships.forEach((function(t){return e.collectionRelationships.push(t)})),e.collections=e.folders.map((function(e){var t=new o.CollectionView;return t.name=e.name,t})),e.folderRelationships=[],e.folders=[]},e.prototype.querySelectorDirectChild=function(e,t){var n=this.querySelectorAllDirectChild(e,t);return 0===n.length?null:n[0]},e.prototype.querySelectorAllDirectChild=function(e,t){return Array.from(e.querySelectorAll(t)).filter((function(t){return t.parentNode===e}))},e.prototype.initLoginCipher=function(){var e=new i.CipherView;return e.favorite=!1,e.notes="",e.fields=[],e.login=new p.LoginView,e.type=d.CipherType.Login,e},e.prototype.cleanupCipher=function(e){null!=e&&(e.type!==d.CipherType.Login&&(e.login=null),this.isNullOrWhitespace(e.name)&&(e.name="--"),this.isNullOrWhitespace(e.notes)?e.notes=null:e.notes=e.notes.trim(),null!=e.fields&&0===e.fields.length&&(e.fields=null))},e.prototype.processKvp=function(e,t,n,r){if(void 0===r&&(r=m.FieldType.Text),!this.isNullOrWhitespace(n))if(this.isNullOrWhitespace(t)&&(t=""),n.length>200||n.trim().search(this.newLineRegex)>-1)null==e.notes&&(e.notes=""),e.notes+=t+": "+this.splitNewLine(n).join("\n")+"\n";else{null==e.fields&&(e.fields=[]);var i=new l.FieldView;i.type=r,i.name=t,i.value=n,e.fields.push(i)}},e.prototype.processFolder=function(e,t){var n=e.folders.length,r=!this.isNullOrWhitespace(t),i=r;if(r)for(var o=0;o-1&&(n=t.getUrlObject("http://"+e)));return n},t.validIpAddress=function(e){return/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(e)},t.isMobile=function(e){var t,n=!1;return t=e.navigator.userAgent||e.navigator.vendor||e.opera,(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4)))&&(n=!0),n||null!=e.navigator.userAgent.match(/iPad/i)},t.isAppleMobile=function(e){return null!=e.navigator.userAgent.match(/iPhone/i)||null!=e.navigator.userAgent.match(/iPad/i)},t.getUrlObject=function(e){try{if(null!=a)return a.URL?new a.URL(e):a.parse(e);if("function"==typeof URL)return new URL(e);if(null!=window){var t=e.indexOf("://")>-1;if(!t&&e.indexOf(".")>-1)e="http://"+e;else if(!t)return null;var n=window.document.createElement("a");return n.href=e,n}}catch(r){}return null},t.inited=!1,t.isNativeScript=!1,t.isNode=!1,t.isBrowser=!0,t.isMobileBrowser=!1,t.isAppleMobileBrowser=!1,t.global=null,t.tldEndingRegex=/.*\.(com|net|org|edu|uk|gov|ca|de|jp|fr|au|ru|ch|io|es|us|co|xyz|info|ly|mil)$/,t}();t.Utils=s,s.init()}).call(this,n(126),n(102),n(95).Buffer)},,,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.PasswordGenerationService=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(0);var r=n(0),i=function(){function e(){}return e.prototype.onClick=function(e){e.preventDefault()},e.ɵfac=function(t){return new(t||e)},e.ɵdir=r.ɵɵdefineDirective({type:e,selectors:[["","appStopClick",""]],hostBindings:function(e,t){1&e&&r.ɵɵlistener("click",(function(e){return t.onClick(e)}))}}),e}();t.StopClickDirective=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.StateService=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.Login=1]="Login",e[e.SecureNote=2]="SecureNote",e[e.Card=3]="Card",e[e.Identity=4]="Identity"}(t.CipherType||(t.CipherType={}))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.CollectionService=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.StorageService=r},,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.PolicyService=r},,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(0);var r=n(0),i=function(){function e(e,t){this.el=e,this.renderer=t}return Object.defineProperty(e.prototype,"appInputVerbatim",{set:function(e){this.disableComplete=""===e||!0===e},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){this.disableComplete&&!this.el.nativeElement.hasAttribute("autocomplete")&&this.renderer.setAttribute(this.el.nativeElement,"autocomplete","off"),this.el.nativeElement.hasAttribute("autocapitalize")||this.renderer.setAttribute(this.el.nativeElement,"autocapitalize","none"),this.el.nativeElement.hasAttribute("autocorrect")||this.renderer.setAttribute(this.el.nativeElement,"autocorrect","none"),this.el.nativeElement.hasAttribute("spellcheck")||this.renderer.setAttribute(this.el.nativeElement,"spellcheck","false"),this.el.nativeElement.hasAttribute("inputmode")||this.renderer.setAttribute(this.el.nativeElement,"inputmode","verbatim")},e.ɵfac=function(t){return new(t||e)(r.ɵɵdirectiveInject(r.ElementRef),r.ɵɵdirectiveInject(r.Renderer2))},e.ɵdir=r.ɵɵdefineDirective({type:e,selectors:[["","appInputVerbatim",""]],inputs:{appInputVerbatim:"appInputVerbatim"}}),e}();t.InputVerbatimDirective=i},,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.FolderService=r},,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(0);var r=n(0),i=function(){function e(){}return e.prototype.onClick=function(e){e.stopPropagation()},e.ɵfac=function(t){return new(t||e)},e.ɵdir=r.ɵɵdefineDirective({type:e,selectors:[["","appStopProp",""]],hostBindings:function(e,t){1&e&&r.ɵɵlistener("click",(function(e){return t.onClick(e)}))}}),e}();t.StopPropDirective=i},,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.AuthService=r},,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.SyncService=r},,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.EnvironmentService=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(0);var r=n(30),i=n(0),o=function(){function e(e){this.el=e}return Object.defineProperty(e.prototype,"appAutofocus",{set:function(e){this.autofocus=""===e||!0===e},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){!r.Utils.isMobileBrowser&&this.autofocus&&this.el.nativeElement.focus()},e.ɵfac=function(t){return new(t||e)(i.ɵɵdirectiveInject(i.ElementRef))},e.ɵdir=i.ɵɵdefineDirective({type:e,selectors:[["","appAutofocus",""]],inputs:{appAutofocus:"appAutofocus"}}),e}();t.AutofocusDirective=o},,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(){this.environmentUrlsKey=e.environmentUrlsKey,this.disableGaKey=e.disableGaKey,this.disableAddLoginNotificationKey=e.disableAddLoginNotificationKey,this.disableContextMenuItemKey=e.disableContextMenuItemKey,this.disableFaviconKey=e.disableFaviconKey,this.disableBadgeCounterKey=e.disableBadgeCounterKey,this.disableAutoTotpCopyKey=e.disableAutoTotpCopyKey,this.enableAutoFillOnPageLoadKey=e.enableAutoFillOnPageLoadKey,this.vaultTimeoutKey=e.vaultTimeoutKey,this.vaultTimeoutActionKey=e.vaultTimeoutActionKey,this.lastActiveKey=e.lastActiveKey,this.neverDomainsKey=e.neverDomainsKey,this.installedVersionKey=e.installedVersionKey,this.localeKey=e.localeKey,this.themeKey=e.themeKey,this.collapsedGroupingsKey=e.collapsedGroupingsKey,this.autoConfirmFingerprints=e.autoConfirmFingerprints,this.dontShowCardsCurrentTab=e.dontShowCardsCurrentTab,this.dontShowIdentitiesCurrentTab=e.dontShowIdentitiesCurrentTab,this.defaultUriMatch=e.defaultUriMatch,this.pinProtectedKey=e.pinProtectedKey,this.protectedPin=e.protectedPin,this.clearClipboardKey=e.clearClipboardKey,this.eventCollectionKey=e.eventCollectionKey,this.ssoCodeVerifierKey=e.ssoCodeVerifierKey,this.ssoStateKey=e.ssoStateKey,this.biometricUnlockKey=e.biometricUnlockKey,this.biometricText=e.biometricText,this.biometricAwaitingAcceptance=e.biometricAwaitingAcceptance,this.biometricFingerprintValidated=e.biometricFingerprintValidated}return e.environmentUrlsKey="environmentUrls",e.disableGaKey="disableGa",e.disableAddLoginNotificationKey="disableAddLoginNotification",e.disableChangedPasswordNotificationKey="disableChangedPasswordNotification",e.disableContextMenuItemKey="disableContextMenuItem",e.disableFaviconKey="disableFavicon",e.disableBadgeCounterKey="disableBadgeCounter",e.disableAutoTotpCopyKey="disableAutoTotpCopy",e.enableAutoFillOnPageLoadKey="enableAutoFillOnPageLoad",e.vaultTimeoutKey="lockOption",e.vaultTimeoutActionKey="vaultTimeoutAction",e.lastActiveKey="lastActive",e.neverDomainsKey="neverDomains",e.installedVersionKey="installedVersion",e.localeKey="locale",e.themeKey="theme",e.collapsedGroupingsKey="collapsedGroupings",e.autoConfirmFingerprints="autoConfirmFingerprints",e.dontShowCardsCurrentTab="dontShowCardsCurrentTab",e.dontShowIdentitiesCurrentTab="dontShowIdentitiesCurrentTab",e.defaultUriMatch="defaultUriMatch",e.pinProtectedKey="pinProtectedKey",e.protectedPin="protectedPin",e.clearClipboardKey="clearClipboardKey",e.eventCollectionKey="eventCollection",e.ssoCodeVerifierKey="ssoCodeVerifier",e.ssoStateKey="ssoState",e.biometricUnlockKey="biometric",e.biometricText="biometricText",e.biometricAwaitingAcceptance="biometricAwaitingAcceptance",e.biometricFingerprintValidated="biometricFingerprintValidated",e}();t.ConstantsService=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.EventService=r},,,,,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.PasswordVerificationRequest=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){this.indexedEntityId=null};t.SearchService=r},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]-1?e[a]=s||null:e[a]=s?new o.EncString(s):null}},e.prototype.buildDataModel=function(e,t,n,r){for(var i in void 0===r&&(r=[]),n)if(n.hasOwnProperty(i)){var o=e[n[i]||i];r.indexOf(i)>-1?t[i]=null!=o?o:null:t[i]=null!=o?o.encryptedString:null}},e.prototype.decryptObj=function(e,t,n,o){return void 0===o&&(o=null),r(this,void 0,void 0,(function(){var r,a,s;return i(this,(function(i){switch(i.label){case 0:for(s in r=[],a=this,t)t.hasOwnProperty(s)&&function(i){var s=Promise.resolve().then((function(){var e=t[i]||i;return a[e]?a[e].decrypt(n,o):null})).then((function(t){e[i]=t}));r.push(s)}(s);return[4,Promise.all(r)];case 1:return i.sent(),[2,e]}}))}))},e}();t.default=a},,,function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(273),a=(n(0),n(847)),s=n(30),l=(n(14),n(0)),c=n(14);function p(e,t){}var u=function(e){function t(t,n){var r=e.call(this,t,n)||this;return r.el=null,r}return i(t,e),t.prototype.ngOnDestroy=function(){},t.prototype.show=function(e,t,n,r){var i=this;void 0===n&&(n=!0),void 0===r&&(r=null),this.parentContainer=t,this.fade=n;var a=this.componentFactoryResolver.resolveComponentFactory(e),l=this.container.createComponent(a);null!=r&&r(l.instance);var c=Array.from(document.querySelectorAll(".modal"));return c.length>0&&(this.el=o(c[0]),this.el.modal("show"),this.el.on("show.bs.modal",(function(){i.onShow.emit(),i.messagingService.send("modalShow")})),this.el.on("shown.bs.modal",(function(){i.onShown.emit(),i.messagingService.send("modalShown"),s.Utils.isMobileBrowser||i.el.find("*[appAutoFocus]").focus()})),this.el.on("hide.bs.modal",(function(){i.onClose.emit(),i.messagingService.send("modalClose")})),this.el.on("hidden.bs.modal",(function(){i.onClosed.emit(),i.messagingService.send("modalClosed"),null!=i.parentContainer&&i.parentContainer.clear()}))),l.instance},t.prototype.close=function(){null!=this.el&&this.el.modal("hide")},t.ɵfac=function(e){return new(e||t)(l.ɵɵdirectiveInject(l.ComponentFactoryResolver),l.ɵɵdirectiveInject(c.MessagingService))},t.ɵcmp=l.ɵɵdefineComponent({type:t,selectors:[["app-modal"]],features:[l.ɵɵInheritDefinitionFeature],decls:2,vars:0,consts:[["container",""]],template:function(e,t){1&e&&l.ɵɵtemplate(0,p,0,0,"ng-template",null,0,l.ɵɵtemplateRefExtractor)},encapsulation:2}),t}(a.ModalComponent);t.ModalComponent=u},,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.AuditService=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e){this.cardholderName=null,this.expMonth=null,this.expYear=null,this.code=null,this._brand=null,this._number=null,this._subTitle=null}return Object.defineProperty(e.prototype,"maskedCode",{get:function(){return null!=this.code?"•".repeat(this.code.length):null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"brand",{get:function(){return this._brand},set:function(e){this._brand=e,this._subTitle=null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"number",{get:function(){return this._number},set:function(e){this._number=e,this._subTitle=null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"subTitle",{get:function(){if(null==this._subTitle&&(this._subTitle=this.brand,null!=this.number&&this.number.length>=4)){null!=this._subTitle&&""!==this._subTitle?this._subTitle+=", ":this._subTitle="";var e=this.number.length>=5&&null!=this.number.match(new RegExp("^3[47]"))?5:4;this._subTitle+="*"+this.number.substr(this.number.length-e)}return this._subTitle},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"expiration",{get:function(){if(!this.expMonth&&!this.expYear)return null;var e=null!=this.expMonth?("0"+this.expMonth).slice(-2):"__";return e+=" / "+(null!=this.expYear?this.formatYear(this.expYear):"____")},enumerable:!0,configurable:!0}),e.prototype.formatYear=function(e){return 2===e.length?"20"+e:e},e}();t.CardView=r},,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.VaultTimeoutService=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e){this.type=null,e&&(this.type=e.type)}return Object.defineProperty(e.prototype,"subTitle",{get:function(){return null},enumerable:!0,configurable:!0}),e}();t.SecureNoteView=r},,,,,,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.TokenService=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.CryptoFunctionService=r},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]-1?(e="http://"+e,t=!0):this.imageEnabled&&(t=0===e.indexOf("http")&&e.indexOf(".")>-1),this.imageEnabled&&t)try{this.image=this.iconsUrl+"/"+s.Utils.getHostname(e)+"/icon.png",this.fallbackImage="images/fa-globe.png"}catch(n){}}else this.image=null},e.ɵfac=function(t){return new(t||e)(l.ɵɵdirectiveInject(c.EnvironmentService),l.ɵɵdirectiveInject(p.StateService))},e.ɵcmp=l.ɵɵdefineComponent({type:e,selectors:[["app-vault-icon"]],inputs:{cipher:"cipher"},features:[l.ɵɵNgOnChangesFeature],decls:7,vars:2,consts:[["aria-hidden","true",1,"icon"],["alt","",3,"src","appFallbackSrc",4,"ngIf"],[3,"class",4,"ngIf"],["alt","",3,"src","appFallbackSrc"]],template:function(e,t){1&e&&(l.ɵɵelementStart(0,"div",0),l.ɵɵtext(1,"\n "),l.ɵɵtemplate(2,m,1,2,"img",1),l.ɵɵtext(3,"\n "),l.ɵɵtemplate(4,h,1,3,"i",2),l.ɵɵtext(5,"\n"),l.ɵɵelementEnd(),l.ɵɵtext(6,"\n")),2&e&&(l.ɵɵadvance(2),l.ɵɵproperty("ngIf",t.imageEnabled&&t.image),l.ɵɵadvance(2),l.ɵɵproperty("ngIf",!t.imageEnabled||!t.image))},directives:[u.NgIf,d.FallbackSrcDirective],encapsulation:2}),e}();t.IconComponent=v},,,,,function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});n(0);var o=n(823),a=n(0),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.ɵfac=function(e){return l(e||t)},t.ɵprov=a.ɵɵdefineInjectable({token:t,factory:t.ɵfac}),t}(o.BroadcasterService);t.BroadcasterService=s;var l=a.ɵɵgetInheritedFactory(s)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.Authenticator=0]="Authenticator",e[e.Email=1]="Email",e[e.Duo=2]="Duo",e[e.Yubikey=3]="Yubikey",e[e.U2f=4]="U2f",e[e.Remember=5]="Remember",e[e.OrganizationDuo=6]="OrganizationDuo",e[e.WebAuthn=7]="WebAuthn"}(t.TwoFactorProviderType||(t.TwoFactorProviderType={}))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.TotpService=r},,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]-1)try{window.document.body.removeChild(e)}catch(t){}}))}),500),this.hidePaypal||(window.document.head.removeChild(this.btScript),window.setTimeout((function(){Array.from(window.document.head.querySelectorAll("script")).forEach((function(e){if(null!=e.src&&e.src.indexOf("paypal")>-1)try{window.document.head.removeChild(e)}catch(t){}}));var e=window.document.head.querySelector("#braintree-dropin-stylesheet");if(null!=e)try{window.document.head.removeChild(e)}catch(t){}}),500))},e.prototype.changeMethod=function(){var e=this;this.btInstance=null,this.method===o.PaymentMethodType.PayPal?window.setTimeout((function(){window.braintree.dropin.create({authorization:e.platformUtilsService.isDev()?a.WebConstants.btSandboxKey:a.WebConstants.btProductionKey,container:"#bt-dropin-container",paymentOptionPriority:["paypal"],paypal:{flow:"vault",buttonStyle:{label:"pay",size:"medium",shape:"pill",color:"blue"}}},(function(t,n){null==t?e.btInstance=n:console.error(t)}))}),250):this.setStripeElement()},e.prototype.createPaymentToken=function(){var e=this;return new Promise((function(t,n){e.method===o.PaymentMethodType.Credit?t([null,e.method]):e.method===o.PaymentMethodType.PayPal?e.btInstance.requestPaymentMethod().then((function(n){t([n.nonce,e.method])})).catch((function(e){n(e.message)})):e.method!==o.PaymentMethodType.Card&&e.method!==o.PaymentMethodType.BankAccount||(e.method===o.PaymentMethodType.Card?e.apiService.postSetupPayment().then((function(t){return e.stripe.handleCardSetup(t,e.stripeCardNumberElement)})).then((function(r){r.error?n(r.error.message):r.setupIntent&&"succeeded"===r.setupIntent.status?t([r.setupIntent.payment_method,e.method]):n()})):e.stripe.createToken("bank_account",e.bank).then((function(r){r.error?n(r.error.message):r.token&&null!=r.token.id?t([r.token.id,e.method]):n()})))}))},e.prototype.handleStripeCardPayment=function(e,t){var n=this;return new Promise((function(o,a){if(!n.showMethods||null!=n.stripeCardNumberElement){return(n.showMethods?n.stripe.handleCardSetup(e,n.stripeCardNumberElement):n.stripe.handleCardSetup(e)).then((function(e){return r(n,void 0,void 0,(function(){return i(this,(function(n){switch(n.label){case 0:return e.error?(a(e.error.message),[3,5]):[3,1];case 1:return e.paymentIntent&&"succeeded"===e.paymentIntent.status?null==t?[3,3]:[4,t()]:[3,4];case 2:n.sent(),n.label=3;case 3:return o(),[3,5];case 4:a(),n.label=5;case 5:return[2]}}))}))}))}a()}))},e.prototype.setStripeElement=function(){var e=this;window.setTimeout((function(){e.showMethods&&e.method===o.PaymentMethodType.Card&&(null==e.stripeCardNumberElement&&(e.stripeCardNumberElement=e.stripeElements.create("cardNumber",{style:I,classes:E,placeholder:""})),null==e.stripeCardExpiryElement&&(e.stripeCardExpiryElement=e.stripeElements.create("cardExpiry",{style:I,classes:E})),null==e.stripeCardCvcElement&&(e.stripeCardCvcElement=e.stripeElements.create("cardCvc",{style:I,classes:E,placeholder:""})),e.stripeCardNumberElement.mount("#stripe-card-number-element"),e.stripeCardExpiryElement.mount("#stripe-card-expiry-element"),e.stripeCardCvcElement.mount("#stripe-card-cvc-element"))}),50)},e.ɵfac=function(t){return new(t||e)(s.ɵɵdirectiveInject(l.PlatformUtilsService),s.ɵɵdirectiveInject(c.ApiService))},e.ɵcmp=s.ɵɵdefineComponent({type:e,selectors:[["app-payment"]],inputs:{showMethods:"showMethods",showOptions:"showOptions",method:"method",hideBank:"hideBank",hidePaypal:"hidePaypal",hideCredit:"hideCredit"},decls:10,vars:5,consts:[["class","mb-4 text-lg",4,"ngIf"],[4,"ngIf"],[1,"mb-4","text-lg"],[1,"form-check","form-check-inline","mr-4"],["type","radio","name","Method","id","method-card",1,"form-check-input",3,"value","ngModel","ngModelChange","change"],["for","method-card",1,"form-check-label"],["aria-hidden","true",1,"fa","fa-fw","fa-credit-card"],["class","form-check form-check-inline mr-4",4,"ngIf"],["class","form-check form-check-inline",4,"ngIf"],["type","radio","name","Method","id","method-bank",1,"form-check-input",3,"value","ngModel","ngModelChange","change"],["for","method-bank",1,"form-check-label"],["aria-hidden","true",1,"fa","fa-fw","fa-university"],[1,"form-check","form-check-inline"],["type","radio","name","Method","id","method-paypal",1,"form-check-input",3,"value","ngModel","ngModelChange","change"],["for","method-paypal",1,"form-check-label"],["aria-hidden","true",1,"fa","fa-fw","fa-paypal"],["type","radio","name","Method","id","method-credit",1,"form-check-input",3,"value","ngModel","ngModelChange","change"],["for","method-credit",1,"form-check-label"],["aria-hidden","true",1,"fa","fa-fw","fa-dollar"],[1,"row"],[1,"form-group","col-4"],["for","stripe-card-number-element"],["id","stripe-card-number-element",1,"form-control","stripe-form-control"],[1,"form-group","col-8","d-flex","align-items-end"],["src","images/cards.png","alt","Visa, MasterCard, Discover, AmEx, JCB, Diners Club, UnionPay","width","323","height","32"],["for","stripe-card-expiry-element"],["id","stripe-card-expiry-element",1,"form-control","stripe-form-control"],[1,"d-flex"],["for","stripe-card-cvc-element"],["href","https://www.cvvnumber.com/cvv.html","tabindex","-1","target","_blank","rel","noopener noreferrer",1,"ml-auto",3,"appA11yTitle"],["aria-hidden","true",1,"fa","fa-question-circle-o"],["id","stripe-card-cvc-element",1,"form-control","stripe-form-control"],["type","warning",3,"title"],[1,"form-group","col-6"],["for","routing_number"],["id","routing_number","type","text","name","routing_number","required","","appInputVerbatim","",1,"form-control",3,"ngModel","ngModelChange"],["for","account_number"],["id","account_number","type","text","name","account_number","required","","appInputVerbatim","",1,"form-control",3,"ngModel","ngModelChange"],["for","account_holder_name"],["id","account_holder_name","type","text","name","account_holder_name","required","",1,"form-control",3,"ngModel","ngModelChange"],["for","account_holder_type"],["id","account_holder_type","name","account_holder_type","required","",1,"form-control",3,"ngModel","ngModelChange"],["value",""],["value","company"],["value","individual"],[1,"mb-3"],["id","bt-dropin-container",1,"mb-1"],[1,"text-muted"],["type","note"]],template:function(e,t){1&e&&(s.ɵɵtemplate(0,x,19,8,"div",0),s.ɵɵtext(1,"\n"),s.ɵɵtemplate(2,b,46,12,"ng-container",1),s.ɵɵtext(3,"\n"),s.ɵɵtemplate(4,S,60,34,"ng-container",1),s.ɵɵtext(5,"\n"),s.ɵɵtemplate(6,w,11,3,"ng-container",1),s.ɵɵtext(7,"\n"),s.ɵɵtemplate(8,C,6,3,"ng-container",1),s.ɵɵtext(9,"\n")),2&e&&(s.ɵɵproperty("ngIf",t.showOptions&&t.showMethods),s.ɵɵadvance(2),s.ɵɵproperty("ngIf",t.showMethods&&t.method===t.paymentMethodType.Card),s.ɵɵadvance(2),s.ɵɵproperty("ngIf",t.showMethods&&t.method===t.paymentMethodType.BankAccount),s.ɵɵadvance(2),s.ɵɵproperty("ngIf",t.showMethods&&t.method===t.paymentMethodType.PayPal),s.ɵɵadvance(2),s.ɵɵproperty("ngIf",t.showMethods&&t.method===t.paymentMethodType.Credit))},directives:[p.NgIf,u.RadioControlValueAccessor,u.DefaultValueAccessor,u.NgControlStatus,u.NgModel,d.A11yTitleDirective,m.CalloutComponent,u.RequiredValidator,h.InputVerbatimDirective,u.SelectControlValueAccessor,u.NgSelectOption,u.ɵangular_packages_forms_forms_x],pipes:[f.I18nPipe],encapsulation:2}),e}();t.PaymentComponent=P},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.Text=0]="Text",e[e.Hidden=1]="Hidden",e[e.Boolean=2]="Boolean"}(t.FieldType||(t.FieldType={}))},,,,,,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){this.id=null,this.name=null,this.revisionDate=null,e&&(this.id=e.id,this.revisionDate=e.revisionDate)};t.FolderView=r},,,,,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]1&&(n=this.getFirstLetters(r,this.charCount)),null==n&&(n=r.substr(0,this.charCount)),a=this.getCharText(n),s=this.stringToColor(r),(l=this.getSvg(this.size,s)).appendChild(a),c=window.document.createElement("div").appendChild(l).outerHTML,p=window.btoa(unescape(encodeURIComponent(c))),this.src="data:image/svg+xml;base64,"+p,i.label=4;case 4:return[2]}}))}))},e.prototype.stringToColor=function(e){for(var t=0,n=0;n>8*n&255).toString(16)).substr(-2)}return r},e.prototype.getFirstLetters=function(e,t){var n=e.split(" ");if(n.length>1){for(var r="",i=0;i0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hasAttachments",{get:function(){return this.attachments&&this.attachments.length>0},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hasOldAttachments",{get:function(){if(this.hasAttachments)for(var e=0;e0},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"passwordRevisionDisplayDate",{get:function(){return this.type!==r.CipherType.Login||null==this.login||null==this.login.password||""===this.login.password?null:this.login.passwordRevisionDate},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isDeleted",{get:function(){return null!=this.deletedDate},enumerable:!0,configurable:!0}),e}();t.CipherView=l},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(30),i=function(){function e(e){this.title=null,this.middleName=null,this.address1=null,this.address2=null,this.address3=null,this.city=null,this.state=null,this.postalCode=null,this.country=null,this.company=null,this.email=null,this.phone=null,this.ssn=null,this.username=null,this.passportNumber=null,this.licenseNumber=null,this._firstName=null,this._lastName=null,this._subTitle=null}return Object.defineProperty(e.prototype,"firstName",{get:function(){return this._firstName},set:function(e){this._firstName=e,this._subTitle=null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"lastName",{get:function(){return this._lastName},set:function(e){this._lastName=e,this._subTitle=null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"subTitle",{get:function(){return null!=this._subTitle||null==this.firstName&&null==this.lastName||(this._subTitle="",null!=this.firstName&&(this._subTitle=this.firstName),null!=this.lastName&&(""!==this._subTitle&&(this._subTitle+=" "),this._subTitle+=this.lastName)),this._subTitle},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"fullName",{get:function(){if(null!=this.title||null!=this.firstName||null!=this.middleName||null!=this.lastName){var e="";return null!=this.title&&(e+=this.title+" "),null!=this.firstName&&(e+=this.firstName+" "),null!=this.middleName&&(e+=this.middleName+" "),null!=this.lastName&&(e+=this.lastName),e.trim()}return null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"fullAddress",{get:function(){var e=this.address1;return r.Utils.isNullOrWhitespace(this.address2)||(r.Utils.isNullOrWhitespace(e)||(e+=", "),e+=this.address2),r.Utils.isNullOrWhitespace(this.address3)||(r.Utils.isNullOrWhitespace(e)||(e+=", "),e+=this.address3),e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"fullAddressPart2",{get:function(){if(null==this.city&&null==this.state&&null==this.postalCode)return null;var e=this.city||"-",t=this.state,n=this.postalCode||"-",i=e;return r.Utils.isNullOrWhitespace(t)||(i+=", "+t),i+=", "+n},enumerable:!0,configurable:!0}),e}();t.IdentityView=i},,,,,,,,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){this.id=e.id,this.organizationId=e.organizationId,this.name=e.name,this.externalId=e.externalId,this.readOnly=e.readOnly};t.CollectionData=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(140),i=function(e){this.id=null,this.organizationId=null,this.name=null,this.externalId=null,this.readOnly=null,this.hidePasswords=null,e&&(this.id=e.id,this.organizationId=e.organizationId,this.externalId=e.externalId,e instanceof r.Collection&&(this.readOnly=e.readOnly,this.hidePasswords=e.hidePasswords))};t.CollectionView=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.Invited=0]="Invited",e[e.Accepted=1]="Accepted",e[e.Confirmed=2]="Confirmed"}(t.OrganizationUserStatusType||(t.OrganizationUserStatusType={}))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(39),i=n(482),o=n(483),a=n(484),s=n(485),l=n(486),c=n(595),p=n(488),u=function(e,t,n){if(null!=e){switch(this.id=e.id,this.organizationId=e.organizationId,this.folderId=e.folderId,this.userId=t,this.edit=e.edit,this.viewPassword=e.viewPassword,this.organizationUseTotp=e.organizationUseTotp,this.favorite=e.favorite,this.revisionDate=e.revisionDate,this.type=e.type,this.name=e.name,this.notes=e.notes,this.collectionIds=null!=n?n:e.collectionIds,this.deletedDate=e.deletedDate,this.type){case r.CipherType.Login:this.login=new l.LoginData(e.login);break;case r.CipherType.SecureNote:this.secureNote=new p.SecureNoteData(e.secureNote);break;case r.CipherType.Card:this.card=new o.CardData(e.card);break;case r.CipherType.Identity:this.identity=new s.IdentityData(e.identity)}null!=e.fields&&(this.fields=e.fields.map((function(e){return new a.FieldData(e)}))),null!=e.attachments&&(this.attachments=e.attachments.map((function(e){return new i.AttachmentData(e)}))),null!=e.passwordHistory&&(this.passwordHistory=e.passwordHistory.map((function(e){return new c.PasswordHistoryData(e)})))}};t.CipherData=u},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(30),i=function(){function e(e){this.username=null,this.password=null,this.passwordRevisionDate=null,this.totp=null,this.uris=null,e&&(this.passwordRevisionDate=e.passwordRevisionDate)}return Object.defineProperty(e.prototype,"uri",{get:function(){return this.hasUris?this.uris[0].uri:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"maskedPassword",{get:function(){return null!=this.password?"••••••••":null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"subTitle",{get:function(){return this.username},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"canLaunch",{get:function(){return this.hasUris&&this.uris.some((function(e){return e.canLaunch}))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hasTotp",{get:function(){return!r.Utils.isNullOrWhitespace(this.totp)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"launchUri",{get:function(){if(this.hasUris){var e=this.uris.find((function(e){return e.canLaunch}));if(null!=e)return e.launchUri}return null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hasUris",{get:function(){return null!=this.uris&&this.uris.length>0},enumerable:!0,configurable:!0}),e}();t.LoginView=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.Text=0]="Text",e[e.File=1]="File"}(t.SendType||(t.SendType={}))},,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0?(p=[],[4,this.attachments.reduce((function(t,n){return t.then((function(){return n.decrypt(l,e)})).then((function(e){p.push(e)}))}),Promise.resolve())]):[3,13];case 12:a.sent(),t.attachments=p,a.label=13;case 13:return null!=this.fields&&this.fields.length>0?(u=[],[4,this.fields.reduce((function(t,n){return t.then((function(){return n.decrypt(l,e)})).then((function(e){u.push(e)}))}),Promise.resolve())]):[3,15];case 14:a.sent(),t.fields=u,a.label=15;case 15:return null!=this.passwordHistory&&this.passwordHistory.length>0?(d=[],[4,this.passwordHistory.reduce((function(t,n){return t.then((function(){return n.decrypt(l,e)})).then((function(e){d.push(e)}))}),Promise.resolve())]):[3,17];case 16:a.sent(),t.passwordHistory=d,a.label=17;case 17:return[2,t]}}))}))},t.prototype.toCipherData=function(e){var t=new l.CipherData;switch(t.id=this.id,t.organizationId=this.organizationId,t.folderId=this.folderId,t.userId=null!=this.organizationId?e:null,t.edit=this.edit,t.viewPassword=this.viewPassword,t.organizationUseTotp=this.organizationUseTotp,t.favorite=this.favorite,t.revisionDate=null!=this.revisionDate?this.revisionDate.toISOString():null,t.type=this.type,t.collectionIds=this.collectionIds,t.deletedDate=null!=this.deletedDate?this.deletedDate.toISOString():null,this.buildDataModel(this,t,{name:null,notes:null}),t.type){case s.CipherType.Login:t.login=this.login.toLoginData();break;case s.CipherType.SecureNote:t.secureNote=this.secureNote.toSecureNoteData();break;case s.CipherType.Card:t.card=this.card.toCardData();break;case s.CipherType.Identity:t.identity=this.identity.toIdentityData()}return null!=this.fields&&(t.fields=this.fields.map((function(e){return e.toFieldData()}))),null!=this.attachments&&(t.attachments=this.attachments.map((function(e){return e.toAttachmentData()}))),null!=this.passwordHistory&&(t.passwordHistory=this.passwordHistory.map((function(e){return e.toPasswordHistoryData()}))),t},t}(d.default);t.Cipher=g},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.SendService=r},,,,,,,,,,,,,,,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e){this.name=null,this.value=null,this.type=null,this.newField=!1,this.showValue=!1,e&&(this.type=e.type)}return Object.defineProperty(e.prototype,"maskedValue",{get:function(){return null!=this.value?"••••••••":null},enumerable:!0,configurable:!0}),e}();t.FieldView=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(39),i=n(599),o=n(600),a=n(601),s=n(602),l=n(603),c=n(604),p=n(880),u=function(e){var t=this;switch(this.type=e.type,this.folderId=e.folderId,this.organizationId=e.organizationId,this.name=e.name?e.name.encryptedString:null,this.notes=e.notes?e.notes.encryptedString:null,this.favorite=e.favorite,this.lastKnownRevisionDate=e.revisionDate,this.type){case r.CipherType.Login:this.login=new s.LoginApi,this.login.uris=null,this.login.username=e.login.username?e.login.username.encryptedString:null,this.login.password=e.login.password?e.login.password.encryptedString:null,this.login.passwordRevisionDate=null!=e.login.passwordRevisionDate?e.login.passwordRevisionDate.toISOString():null,this.login.totp=e.login.totp?e.login.totp.encryptedString:null,null!=e.login.uris&&(this.login.uris=e.login.uris.map((function(e){var t=new l.LoginUriApi;return t.uri=null!=e.uri?e.uri.encryptedString:null,t.match=null!=e.match?e.match:null,t})));break;case r.CipherType.SecureNote:this.secureNote=new c.SecureNoteApi,this.secureNote.type=e.secureNote.type;break;case r.CipherType.Card:this.card=new i.CardApi,this.card.cardholderName=null!=e.card.cardholderName?e.card.cardholderName.encryptedString:null,this.card.brand=null!=e.card.brand?e.card.brand.encryptedString:null,this.card.number=null!=e.card.number?e.card.number.encryptedString:null,this.card.expMonth=null!=e.card.expMonth?e.card.expMonth.encryptedString:null,this.card.expYear=null!=e.card.expYear?e.card.expYear.encryptedString:null,this.card.code=null!=e.card.code?e.card.code.encryptedString:null;break;case r.CipherType.Identity:this.identity=new a.IdentityApi,this.identity.title=null!=e.identity.title?e.identity.title.encryptedString:null,this.identity.firstName=null!=e.identity.firstName?e.identity.firstName.encryptedString:null,this.identity.middleName=null!=e.identity.middleName?e.identity.middleName.encryptedString:null,this.identity.lastName=null!=e.identity.lastName?e.identity.lastName.encryptedString:null,this.identity.address1=null!=e.identity.address1?e.identity.address1.encryptedString:null,this.identity.address2=null!=e.identity.address2?e.identity.address2.encryptedString:null,this.identity.address3=null!=e.identity.address3?e.identity.address3.encryptedString:null,this.identity.city=null!=e.identity.city?e.identity.city.encryptedString:null,this.identity.state=null!=e.identity.state?e.identity.state.encryptedString:null,this.identity.postalCode=null!=e.identity.postalCode?e.identity.postalCode.encryptedString:null,this.identity.country=null!=e.identity.country?e.identity.country.encryptedString:null,this.identity.company=null!=e.identity.company?e.identity.company.encryptedString:null,this.identity.email=null!=e.identity.email?e.identity.email.encryptedString:null,this.identity.phone=null!=e.identity.phone?e.identity.phone.encryptedString:null,this.identity.ssn=null!=e.identity.ssn?e.identity.ssn.encryptedString:null,this.identity.username=null!=e.identity.username?e.identity.username.encryptedString:null,this.identity.passportNumber=null!=e.identity.passportNumber?e.identity.passportNumber.encryptedString:null,this.identity.licenseNumber=null!=e.identity.licenseNumber?e.identity.licenseNumber.encryptedString:null}null!=e.fields&&(this.fields=e.fields.map((function(e){var t=new o.FieldApi;return t.type=e.type,t.name=e.name?e.name.encryptedString:null,t.value=e.value?e.value.encryptedString:null,t}))),null!=e.passwordHistory&&(this.passwordHistory=[],e.passwordHistory.forEach((function(e){t.passwordHistory.push({lastUsedDate:e.lastUsedDate,password:e.password?e.password.encryptedString:null})}))),null!=e.attachments&&(this.attachments={},this.attachments2={},e.attachments.forEach((function(e){var n=e.fileName?e.fileName.encryptedString:null;t.attachments[e.id]=n;var r=new p.AttachmentRequest;r.fileName=n,null!=e.key&&(r.key=e.key.encryptedString),t.attachments2[e.id]=r})))};t.CipherRequest=u},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(t,n,r){var i=e.call(this,t)||this,o=null;if(null!=t){var a=i.getResponseProperty("ErrorModel");o=a&&r?a:t}return o?(i.message=i.getResponseProperty("Message",o),i.validationErrors=i.getResponseProperty("ValidationErrors",o)):429===n&&(i.message="Rate limit exceeded. Try again later."),i.statusCode=n,i}return i(t,e),t.prototype.getSingleMessage=function(){if(null==this.validationErrors)return this.message;for(var e in this.validationErrors)if(this.validationErrors.hasOwnProperty(e)&&this.validationErrors[e].length)return this.validationErrors[e][0];return this.message},t.prototype.getAllMessages=function(){var e=[];if(null==this.validationErrors)return e;var t=function(t){if(!n.validationErrors.hasOwnProperty(t))return"continue";n.validationErrors[t].forEach((function(n){var r="";if(t.indexOf("[")>-1&&t.indexOf("]")>-1){var i=t.lastIndexOf(".");r=t.substr(0,i>-1?i:t.length)+": "}e.push(r+n)}))},n=this;for(var r in this.validationErrors)t(r);return e},t}(n(23).BaseResponse);t.ErrorResponse=o},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(0),n(3),n(5);var r=n(0),i=n(3),o=n(5),a=function(){function e(e,t){this.i18nService=e,this.platformUtilsService=t}return e.prototype.showError=function(e){var t=this.i18nService.t("unexpectedError"),n=[];return null!=e&&"string"==typeof e?n.push(e):null==e||"object"!=typeof e?n.push(t):null!=e.validationErrors?n=n.concat(e.getAllMessages()):n.push(e.message?e.message:t),1===n.length?this.platformUtilsService.showToast("error",this.i18nService.t("errorOccurred"),n[0]):n.length>1&&this.platformUtilsService.showToast("error",this.i18nService.t("errorOccurred"),n,{timeout:5e3*n.length}),n},e.ɵfac=function(t){return new(t||e)(r.ɵɵinject(i.I18nService),r.ɵɵinject(o.PlatformUtilsService))},e.ɵprov=r.ɵɵdefineInjectable({token:e,factory:e.ɵfac}),e}();t.ValidationService=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(0),n(72);var r=n(8),i=(n(3),n(0)),o=n(8),a=n(72),s=n(3),l=function(){function e(e,t,n,i){var o=this;this.router=e,this.activatedRoute=t,this.titleService=n,this.previousUrl=void 0,this.currentUrl=void 0,this.currentUrl=this.router.url,e.events.subscribe((function(e){if(e instanceof r.NavigationEnd){o.previousUrl=o.currentUrl,o.currentUrl=e.url;for(var t=i.t("pageTitle","Bitwarden"),n=null,a=null,s=o.activatedRoute.firstChild;null!=s;){if(null==s.firstChild){if(null!=s.snapshot.data&&null!=s.snapshot.data.title){a=s.snapshot.data.title;break}if(null!=s.snapshot.data&&null!=s.snapshot.data.titleId){n=s.snapshot.data.titleId;break}n=null,a=null;break}s=s.firstChild}if(null!=n||null!=a){var l=null!=a?a:i.t(n);null!=l&&""!==l&&(t=l+" | "+t)}o.titleService.setTitle(t)}}))}return e.prototype.getPreviousUrl=function(){return this.previousUrl},e.prototype.setPreviousUrl=function(e){this.previousUrl=e},e.ɵfac=function(t){return new(t||e)(i.ɵɵinject(o.Router),i.ɵɵinject(o.ActivatedRoute),i.ɵɵinject(a.Title),i.ɵɵinject(s.I18nService))},e.ɵprov=i.ɵɵdefineInjectable({token:e,factory:e.ɵfac}),e}();t.RouterService=l},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.PBKDF2_SHA256=0]="PBKDF2_SHA256"}(t.KdfType||(t.KdfType={}))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(0),n(3);var r=n(0),i=n(3),o=n(4);function a(e,t){if(1&e&&(r.ɵɵelementContainerStart(0),r.ɵɵtext(1),r.ɵɵelementContainerEnd()),2&e){var n=r.ɵɵnextContext();r.ɵɵadvance(1),r.ɵɵtextInterpolate1("\n ",n.text,"\n ")}}var s=function(e){return{width:e}},l=function(){function e(e){this.i18nService=e,this.showText=!1,this.scoreWidth=0,this.color="bg-danger"}return e.prototype.ngOnChanges=function(){switch(this.scoreWidth=null==this.score?0:20*(this.score+1),this.score){case 4:this.color="bg-success",this.text=this.i18nService.t("strong");break;case 3:this.color="bg-primary",this.text=this.i18nService.t("good");break;case 2:this.color="bg-warning",this.text=this.i18nService.t("weak");break;default:this.color="bg-danger",this.text=null!=this.score?this.i18nService.t("weak"):null}},e.ɵfac=function(t){return new(t||e)(r.ɵɵdirectiveInject(i.I18nService))},e.ɵcmp=r.ɵɵdefineComponent({type:e,selectors:[["app-password-strength"]],inputs:{score:"score",showText:"showText"},features:[r.ɵɵNgOnChangesFeature],decls:8,vars:8,consts:[[1,"progress"],["role","progressbar","aria-valuemin","0","aria-valuemax","100",3,"ngStyle"],[4,"ngIf"]],template:function(e,t){1&e&&(r.ɵɵelementStart(0,"div",0),r.ɵɵtext(1,"\n "),r.ɵɵelementStart(2,"div",1),r.ɵɵtext(3,"\n "),r.ɵɵtemplate(4,a,2,1,"ng-container",2),r.ɵɵtext(5,"\n "),r.ɵɵelementEnd(),r.ɵɵtext(6,"\n"),r.ɵɵelementEnd(),r.ɵɵtext(7,"\n")),2&e&&(r.ɵɵadvance(2),r.ɵɵclassMapInterpolate1("progress-bar ",t.color,""),r.ɵɵproperty("ngStyle",r.ɵɵpureFunction1(6,s,t.scoreWidth+"%")),r.ɵɵattribute("aria-valuenow",t.scoreWidth),r.ɵɵadvance(2),r.ɵɵproperty("ngIf",t.showText&&t.text))},directives:[o.NgStyle,o.NgIf],encapsulation:2}),e}();t.PasswordStrengthComponent=l},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.Owner=0]="Owner",e[e.Admin=1]="Admin",e[e.User=2]="User",e[e.Manager=3]="Manager",e[e.Custom=4]="Custom"}(t.OrganizationUserType||(t.OrganizationUserType={}))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(0);var r=n(0),i=function(){function e(){}return e.prototype.transform=function(e,t,n,r,i){return null==e||0===e.length?[]:null==t||t.length<2?e:(t=t.trim().toLowerCase(),e.filter((function(e){return null!=n&&null!=e[n]&&e[n].toString().toLowerCase().indexOf(t)>-1||(null!=r&&null!=e[r]&&e[r].toString().toLowerCase().indexOf(t)>-1||null!=i&&null!=e[i]&&e[i].toString().toLowerCase().indexOf(t)>-1)})))},e.ɵfac=function(t){return new(t||e)},e.ɵpipe=r.ɵɵdefinePipe({name:"search",type:e,pure:!0}),e}();t.SearchPipe=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(0),n(3);var r=n(280),i=n(254),o=n(0),a=n(3),s=function(){function e(e){this.i18nService=e}return e.prototype.getDefaultDateFilters=function(){var e=new Date,t=new Date(e.getFullYear(),e.getMonth(),e.getDate(),23,59);e.setDate(e.getDate()-30);var n=new Date(e.getFullYear(),e.getMonth(),e.getDate(),0,0);return[this.toDateTimeLocalString(n),this.toDateTimeLocalString(t)]},e.prototype.formatDateFilters=function(e,t){var n=new Date(e),r=new Date(t+":59.999");if(isNaN(n.getTime())||isNaN(r.getTime())||r"+n+"";var r=this.makeAnchor(n);return r.setAttribute("href","#/organizations/"+e.organizationId+"/vault?search="+n+"&viewEvents="+e.cipherId),r.outerHTML},e.prototype.formatGroupId=function(e){var t=this.getShortId(e.groupId),n=this.makeAnchor(t);return n.setAttribute("href","#/organizations/"+e.organizationId+"/manage/groups?search="+t),n.outerHTML},e.prototype.formatCollectionId=function(e){var t=this.getShortId(e.collectionId),n=this.makeAnchor(t);return n.setAttribute("href","#/organizations/"+e.organizationId+"/manage/collections?search="+t),n.outerHTML},e.prototype.formatOrgUserId=function(e){var t=this.getShortId(e.organizationUserId),n=this.makeAnchor(t);return n.setAttribute("href","#/organizations/"+e.organizationId+"/manage/people?search="+t+"&viewEvents="+e.organizationUserId),n.outerHTML},e.prototype.formatPolicyId=function(e){var t=this.getShortId(e.policyId),n=this.makeAnchor(t);return n.setAttribute("href","#/organizations/"+e.organizationId+"/manage/policies?policyId="+e.policyId),n.outerHTML},e.prototype.makeAnchor=function(e){var t=document.createElement("a");return t.title=this.i18nService.t("view"),t.innerHTML=""+e+"",t},e.prototype.getShortId=function(e){return e.substring(0,8)},e.prototype.toDateTimeLocalString=function(e){return e.getFullYear()+"-"+this.pad(e.getMonth()+1)+"-"+this.pad(e.getDate())+"T"+this.pad(e.getHours())+":"+this.pad(e.getMinutes())},e.prototype.pad=function(e){var t=Math.floor(Math.abs(e));return(t<10?"0":"")+t},e.ɵfac=function(t){return new(t||e)(o.ɵɵinject(a.I18nService))},e.ɵprov=o.ɵɵdefineInjectable({token:e,factory:e.ɵfac}),e}();t.EventService=s;var l=function(){};t.EventInfo=l;var c=function(){this.cipherInfo=!0};t.EventOptions=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.User_LoggedIn=1e3]="User_LoggedIn",e[e.User_ChangedPassword=1001]="User_ChangedPassword",e[e.User_Updated2fa=1002]="User_Updated2fa",e[e.User_Disabled2fa=1003]="User_Disabled2fa",e[e.User_Recovered2fa=1004]="User_Recovered2fa",e[e.User_FailedLogIn=1005]="User_FailedLogIn",e[e.User_FailedLogIn2fa=1006]="User_FailedLogIn2fa",e[e.User_ClientExportedVault=1007]="User_ClientExportedVault",e[e.Cipher_Created=1100]="Cipher_Created",e[e.Cipher_Updated=1101]="Cipher_Updated",e[e.Cipher_Deleted=1102]="Cipher_Deleted",e[e.Cipher_AttachmentCreated=1103]="Cipher_AttachmentCreated",e[e.Cipher_AttachmentDeleted=1104]="Cipher_AttachmentDeleted",e[e.Cipher_Shared=1105]="Cipher_Shared",e[e.Cipher_UpdatedCollections=1106]="Cipher_UpdatedCollections",e[e.Cipher_ClientViewed=1107]="Cipher_ClientViewed",e[e.Cipher_ClientToggledPasswordVisible=1108]="Cipher_ClientToggledPasswordVisible",e[e.Cipher_ClientToggledHiddenFieldVisible=1109]="Cipher_ClientToggledHiddenFieldVisible",e[e.Cipher_ClientToggledCardCodeVisible=1110]="Cipher_ClientToggledCardCodeVisible",e[e.Cipher_ClientCopiedPassword=1111]="Cipher_ClientCopiedPassword",e[e.Cipher_ClientCopiedHiddenField=1112]="Cipher_ClientCopiedHiddenField",e[e.Cipher_ClientCopiedCardCode=1113]="Cipher_ClientCopiedCardCode",e[e.Cipher_ClientAutofilled=1114]="Cipher_ClientAutofilled",e[e.Cipher_SoftDeleted=1115]="Cipher_SoftDeleted",e[e.Cipher_Restored=1116]="Cipher_Restored",e[e.Collection_Created=1300]="Collection_Created",e[e.Collection_Updated=1301]="Collection_Updated",e[e.Collection_Deleted=1302]="Collection_Deleted",e[e.Group_Created=1400]="Group_Created",e[e.Group_Updated=1401]="Group_Updated",e[e.Group_Deleted=1402]="Group_Deleted",e[e.OrganizationUser_Invited=1500]="OrganizationUser_Invited",e[e.OrganizationUser_Confirmed=1501]="OrganizationUser_Confirmed",e[e.OrganizationUser_Updated=1502]="OrganizationUser_Updated",e[e.OrganizationUser_Removed=1503]="OrganizationUser_Removed",e[e.OrganizationUser_UpdatedGroups=1504]="OrganizationUser_UpdatedGroups",e[e.OrganizationUser_UnlinkedSso=1505]="OrganizationUser_UnlinkedSso",e[e.OrganizationUser_ResetPassword_Enroll=1506]="OrganizationUser_ResetPassword_Enroll",e[e.OrganizationUser_ResetPassword_Withdraw=1507]="OrganizationUser_ResetPassword_Withdraw",e[e.Organization_Updated=1600]="Organization_Updated",e[e.Organization_PurgedVault=1601]="Organization_PurgedVault",e[e.Policy_Updated=1700]="Policy_Updated"}(t.EventType||(t.EventType={}))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.Card=0]="Card",e[e.BankAccount=1]="BankAccount",e[e.PayPal=2]="PayPal",e[e.BitPay=3]="BitPay",e[e.Credit=4]="Credit",e[e.WireTransfer=5]="WireTransfer",e[e.AppleInApp=6]="AppleInApp",e[e.GoogleInApp=7]="GoogleInApp",e[e.Check=8]="Check"}(t.PaymentMethodType||(t.PaymentMethodType={}))},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]4?(t=Math.floor(this.totpCode.length/2),this.totpCodeFormatted=this.totpCode.substring(0,t)+" "+this.totpCode.substring(t)):this.totpCodeFormatted=this.totpCode:(this.totpCodeFormatted=null,this.totpInterval&&window.clearInterval(this.totpInterval)),[2]}}))}))},t.prototype.allowOwnershipAssignment=function(){return(!this.editMode||this.cloneMode)&&null!=this.ownershipOptions&&(this.ownershipOptions.length>1||!this.allowPersonal)},t.prototype.totpTick=function(e){return o(this,void 0,void 0,(function(){var t,n;return a(this,(function(r){switch(r.label){case 0:return t=Math.round((new Date).getTime()/1e3),n=t%e,this.totpSec=e-n,this.totpDash=+(Math.round(78.6/e*n+"e+2")+"e-2"),this.totpLow=this.totpSec<=7,0!==n?[3,2]:[4,this.totpUpdateCode()];case 1:r.sent(),r.label=2;case 2:return[2]}}))}))},t.ɵfac=function(e){return new(e||t)(p.ɵɵdirectiveInject(u.CipherService),p.ɵɵdirectiveInject(d.FolderService),p.ɵɵdirectiveInject(m.I18nService),p.ɵɵdirectiveInject(h.PlatformUtilsService),p.ɵɵdirectiveInject(f.AuditService),p.ɵɵdirectiveInject(v.StateService),p.ɵɵdirectiveInject(y.UserService),p.ɵɵdirectiveInject(g.CollectionService),p.ɵɵdirectiveInject(x.TotpService),p.ɵɵdirectiveInject(b.PasswordGenerationService),p.ɵɵdirectiveInject(S.MessagingService),p.ɵɵdirectiveInject(w.EventService),p.ɵɵdirectiveInject(C.PolicyService))},t.ɵcmp=p.ɵɵdefineComponent({type:t,selectors:[["app-vault-add-edit"]],features:[p.ɵɵInheritDefinitionFeature],decls:36,vars:11,consts:[["tabindex","-1","role","dialog","aria-modal","true","aria-labelledby","cipherAddEditTitle",1,"modal","fade"],["role","document",1,"modal-dialog","modal-lg"],["ngNativeValidate","","autocomplete","off",1,"modal-content",3,"appApiAction","ngSubmit"],["form",""],[1,"modal-header"],["id","cipherAddEditTitle",1,"modal-title"],["type","button","data-dismiss","modal",1,"close",3,"appA11yTitle"],["aria-hidden","true"],["class","modal-body",4,"ngIf"],[1,"modal-footer"],["type","submit","class","btn btn-primary btn-submit",3,"disabled",4,"ngIf"],["type","button","data-dismiss","modal",1,"btn","btn-outline-secondary"],["class","ml-auto",4,"ngIf"],[1,"modal-body"],["type","info",4,"ngIf"],["class","row",4,"ngIf"],[1,"row"],[1,"col-6","form-group"],["for","name"],["id","name","type","text","name","Name","required","",1,"form-control",3,"ngModel","disabled","ngModelChange"],["class","col-6 form-group",4,"ngIf"],[4,"ngIf"],[1,"form-group"],["for","notes"],["id","notes","name","Notes","rows","6",1,"form-control",3,"ngModel","disabled","ngModelChange"],[1,"mt-4"],["cdkDropList","",3,"cdkDropListDropped",4,"ngIf"],["href","#","appStopClick","","class","d-inline-block mb-2",3,"click",4,"ngIf"],["type","info"],["for","type"],["id","type","name","Type","appAutofocus","",1,"form-control",3,"ngModel","disabled","ngModelChange"],[3,"ngValue",4,"ngFor","ngForOf"],[3,"ngValue"],["for","folder"],["id","folder","name","FolderId",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","loginUsername"],[1,"input-group"],["id","loginUsername","type","text","name","Login.Username","appInputVerbatim","",1,"form-control",3,"ngModel","disabled","ngModelChange"],["class","input-group-append",4,"ngIf"],[1,"d-flex"],["for","loginPassword"],["class","ml-auto d-flex",4,"ngIf"],["id","loginPassword","name","Login.Password","appInputVerbatim","","autocomplete","new-password",1,"form-control","text-monospace",3,"type","ngModel","disabled","ngModelChange"],[1,"input-group-append"],["type","button",1,"btn","btn-outline-secondary",3,"appA11yTitle","disabled","click"],["aria-hidden","true",1,"fa","fa-lg",3,"ngClass"],["aria-hidden","true",1,"fa","fa-lg","fa-clone"],["for","loginTotp"],["id","loginTotp","name","Login.Totp","appInputVerbatim","",1,"form-control","text-monospace",3,"type","ngModel","disabled","ngModelChange"],[1,"col-6","form-group","totp","d-flex","align-items-end",3,"ngClass"],["class","d-flex align-items-center",4,"ngIf"],["href","#","appStopClick","","class","d-inline-block mb-3",3,"click",4,"ngIf"],["type","button",1,"btn","btn-outline-secondary",3,"appA11yTitle","click"],[1,"ml-auto","d-flex"],["href","#","class","d-block mr-2 fa-icon-above-input","appStopClick","",3,"appA11yTitle","click",4,"ngIf"],["href","#","appStopClick","",1,"d-block","fa-icon-above-input",3,"appA11yTitle","appApiAction","click"],["checkPasswordBtn",""],["aria-hidden","true",1,"fa","fa-lg","fa-fw","fa-check-circle",3,"hidden"],["aria-hidden","true",1,"fa","fa-lg","fa-fw","fa-spinner","fa-spin",3,"hidden","title"],["href","#","appStopClick","",1,"d-block","mr-2","fa-icon-above-input",3,"appA11yTitle","click"],["aria-hidden","true",1,"fa","fa-lg","fa-fw","fa-refresh"],["src","images/totp-countdown.png",1,"ml-2",3,"title"],["href","#","appStopClick","","class","badge badge-primary ml-3",3,"click",4,"ngIf"],["href","#","appStopClick","",1,"badge","badge-primary","ml-3",3,"click"],[1,"d-flex","align-items-center"],[1,"totp-countdown","mr-3","ml-2"],[1,"totp-sec"],["r","12.6","cy","16","cx","16",1,"totp-circle","inner",3,"ngStyle"],["r","14","cy","16","cx","16",1,"totp-circle","outer"],[1,"totp-code","mr-2",3,"title"],["type","button",1,"btn","btn-link",3,"appA11yTitle","click"],["aria-hidden","true",1,"fa","fa-clone"],["class","row",4,"ngFor","ngForOf","ngForTrackBy"],[1,"col-7","form-group"],[3,"for"],["type","text","appInputVerbatim","",1,"form-control",3,"id","name","ngModel","disabled","placeholder","ngModelChange"],["aria-hidden","true",1,"fa","fa-lg","fa-share"],[1,"col-5","form-group"],["href","https://help.bitwarden.com/article/uri-match-detection/","target","_blank","rel","noopener",1,"ml-auto",3,"appA11yTitle"],["aria-hidden","true",1,"fa","fa-question-circle-o"],[1,"form-control","overflow-hidden",3,"id","name","ngModel","disabled","ngModelChange","change"],["type","button","class","btn btn-link text-danger ml-2",3,"appA11yTitle","click",4,"ngIf"],["type","button",1,"btn","btn-link","text-danger","ml-2",3,"appA11yTitle","click"],["aria-hidden","true",1,"fa","fa-minus-circle","fa-lg"],["href","#","appStopClick","",1,"d-inline-block","mb-3",3,"click"],["aria-hidden","true",1,"fa","fa-plus-circle","fa-fw"],["for","cardCardholderName"],["id","cardCardholderName","type","text","name","Card.CardCardholderName",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","cardBrand"],["id","cardBrand","name","Card.Brand",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","cardNumber"],["id","cardNumber","type","text","name","Card.Number","appInputVerbatim","",1,"form-control",3,"ngModel","disabled","ngModelChange"],[1,"col","form-group"],["for","cardExpMonth"],["id","cardExpMonth","name","Card.ExpMonth",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","cardExpYear"],["id","cardExpYear","type","text","name","Card.ExpYear",1,"form-control",3,"ngModel","placeholder","disabled","ngModelChange"],["for","cardCode"],["id","cardCode","name","Card.Code","appInputVerbatim","","autocomplete","new-password",1,"form-control","text-monospace",3,"type","ngModel","disabled","ngModelChange"],[1,"col-4","form-group"],["for","idTitle"],["id","idTitle","name","Identity.Title",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idFirstName"],["id","idFirstName","type","text","name","Identity.FirstName",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idMiddleName"],["id","idMiddleName","type","text","name","Identity.MiddleName",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idLastName"],["id","idLastName","type","text","name","Identity.LastName",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idUsername"],["id","idUsername","type","text","name","Identity.Username","appInputVerbatim","",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idCompany"],["id","idCompany","type","text","name","Identity.Company",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idSsn"],["id","idSsn","type","text","name","Identity.SSN","appInputVerbatim","",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idPassportNumber"],["id","idPassportNumber","type","text","name","Identity.PassportNumber","appInputVerbatim","",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idLicenseNumber"],["id","idLicenseNumber","type","text","name","Identity.LicenseNumber","appInputVerbatim","",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idEmail"],["id","idEmail","type","text","name","Identity.Email","appInputVerbatim","",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idPhone"],["id","idPhone","type","text","name","Identity.Phone",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idAddress1"],["id","idAddress1","type","text","name","Identity.Address1",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idAddress2"],["id","idAddress2","type","text","name","Identity.Address2",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idAddress3"],["id","idAddress3","type","text","name","Identity.Address3",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idCity"],["id","idCity","type","text","name","Identity.City",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idState"],["id","idState","type","text","name","Identity.State",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idPostalCode"],["id","idPostalCode","type","text","name","Identity.PostalCode",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idCountry"],["id","idCountry","type","text","name","Identity.Country",1,"form-control",3,"ngModel","disabled","ngModelChange"],["cdkDropList","",3,"cdkDropListDropped"],["class","row","cdkDrag","",4,"ngFor","ngForOf","ngForTrackBy"],["cdkDrag","",1,"row"],["href","https://help.bitwarden.com/article/custom-fields/","target","_blank","rel","noopener",1,"ml-auto",3,"appA11yTitle"],["type","text","appInputVerbatim","",1,"form-control",3,"id","name","ngModel","disabled","ngModelChange"],["class","input-group",4,"ngIf"],[1,"flex-fill"],["type","checkbox","appTrueFalseValue","","trueValue","true","falseValue","false",3,"id","name","ngModel","disabled","ngModelChange",4,"ngIf"],["type","button","class","btn btn-link text-muted cursor-move",3,"appA11yTitle",4,"ngIf"],["appInputVerbatim","","autocomplete","new-password",1,"form-control","text-monospace",3,"id","type","name","ngModel","disabled","ngModelChange"],["type","checkbox","appTrueFalseValue","","trueValue","true","falseValue","false",3,"id","name","ngModel","disabled","ngModelChange"],["type","button",1,"btn","btn-link","text-muted","cursor-move",3,"appA11yTitle"],["aria-hidden","true",1,"fa","fa-bars","fa-lg"],["href","#","appStopClick","",1,"d-inline-block","mb-2",3,"click"],[1,"col-5"],["for","addFieldType",1,"sr-only"],["id","addFieldType","name","AddFieldType",1,"form-control",3,"ngModel","ngModelChange"],["for","organizationId"],["id","organizationId","name","OrganizationId",1,"form-control",3,"ngModel","disabled","ngModelChange","change"],["class","form-check",4,"ngFor","ngForOf"],[1,"form-check"],["type","checkbox",1,"form-check-input",3,"ngModel","id","name","disabled","ngModelChange"],[1,"form-check-label",3,"for"],[1,"small","text-muted","mt-4"],[1,"font-weight-semibold"],["class","ml-3",4,"ngIf"],["href","#","appStopClick","",3,"title","click"],[1,"ml-3"],[4,"ngFor","ngForOf"],[1,"password-wrapper","text-monospace","ml-2"],["type","submit",1,"btn","btn-primary","btn-submit",3,"disabled"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin",3,"title"],[1,"ml-auto"],["type","button","class","btn btn-link",3,"appA11yTitle","click",4,"ngIf"],["type","button","class","btn btn-outline-danger",3,"appA11yTitle","disabled","appApiAction","click",4,"ngIf"],["type","button",1,"btn","btn-outline-danger",3,"appA11yTitle","disabled","appApiAction","click"],["deleteBtn",""],["aria-hidden","true",1,"fa","fa-trash-o","fa-lg","fa-fw",3,"hidden"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin","fa-lg","fa-fw",3,"hidden","title"]],template:function(e,t){1&e&&(p.ɵɵelementStart(0,"div",0),p.ɵɵtext(1,"\n "),p.ɵɵelementStart(2,"div",1),p.ɵɵtext(3,"\n "),p.ɵɵelementStart(4,"form",2,3),p.ɵɵlistener("ngSubmit",(function(){return t.submit()})),p.ɵɵtext(6,"\n "),p.ɵɵelementStart(7,"div",4),p.ɵɵtext(8,"\n "),p.ɵɵelementStart(9,"h2",5),p.ɵɵtext(10),p.ɵɵelementEnd(),p.ɵɵtext(11,"\n "),p.ɵɵelementStart(12,"button",6),p.ɵɵpipe(13,"i18n"),p.ɵɵtext(14,"\n "),p.ɵɵelementStart(15,"span",7),p.ɵɵtext(16,"×"),p.ɵɵelementEnd(),p.ɵɵtext(17,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(18,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(19,"\n "),p.ɵɵtemplate(20,_e,54,25,"div",8),p.ɵɵtext(21,"\n "),p.ɵɵelementStart(22,"div",9),p.ɵɵtext(23,"\n "),p.ɵɵtemplate(24,Ae,9,7,"button",10),p.ɵɵtext(25,"\n "),p.ɵɵelementStart(26,"button",11),p.ɵɵtext(27),p.ɵɵpipe(28,"i18n"),p.ɵɵelementEnd(),p.ɵɵtext(29,"\n "),p.ɵɵtemplate(30,Be,6,2,"div",12),p.ɵɵtext(31,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(32,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(33,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(34,"\n"),p.ɵɵelementEnd(),p.ɵɵtext(35,"\n")),2&e&&(p.ɵɵadvance(4),p.ɵɵproperty("appApiAction",t.formPromise),p.ɵɵadvance(6),p.ɵɵtextInterpolate(t.title),p.ɵɵadvance(2),p.ɵɵpropertyInterpolate("appA11yTitle",p.ɵɵpipeBind1(13,7,"close")),p.ɵɵadvance(8),p.ɵɵproperty("ngIf",t.cipher),p.ɵɵadvance(4),p.ɵɵproperty("ngIf",!t.viewOnly),p.ɵɵadvance(3),p.ɵɵtextInterpolate1("\n ",p.ɵɵpipeBind1(28,9,t.viewOnly?"close":"cancel"),"\n "),p.ɵɵadvance(3),p.ɵɵproperty("ngIf",t.cipher&&!t.viewOnly))},directives:[I.NgControlStatusGroup,I.NgForm,E.ApiActionDirective,P.A11yTitleDirective,k.NgIf,I.DefaultValueAccessor,I.RequiredValidator,I.NgControlStatus,I.NgModel,_.CalloutComponent,I.SelectControlValueAccessor,A.AutofocusDirective,k.NgForOf,I.NgSelectOption,I.ɵangular_packages_forms_forms_x,O.InputVerbatimDirective,k.NgClass,T.StopClickDirective,k.NgStyle,M.CdkDropList,M.CdkDrag,B.TrueFalseValueDirective,I.CheckboxControlValueAccessor],pipes:[D.I18nPipe,k.DatePipe],encapsulation:2}),t}(c.AddEditComponent);t.AddEditComponent=De},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.ImportService=r},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(498),a=n(23),s=n(883),l=n(599),c=n(600),p=n(601),u=n(602),d=n(604),m=function(e){function t(t){var n=e.call(this,t)||this;n.id=n.getResponseProperty("Id"),n.organizationId=n.getResponseProperty("OrganizationId"),n.folderId=n.getResponseProperty("FolderId")||null,n.type=n.getResponseProperty("Type"),n.name=n.getResponseProperty("Name"),n.notes=n.getResponseProperty("Notes"),n.favorite=n.getResponseProperty("Favorite")||!1,n.edit=!!n.getResponseProperty("Edit"),null==n.getResponseProperty("ViewPassword")?n.viewPassword=!0:n.viewPassword=n.getResponseProperty("ViewPassword"),n.organizationUseTotp=n.getResponseProperty("OrganizationUseTotp"),n.revisionDate=n.getResponseProperty("RevisionDate"),n.collectionIds=n.getResponseProperty("CollectionIds"),n.deletedDate=n.getResponseProperty("DeletedDate");var r=n.getResponseProperty("Login");null!=r&&(n.login=new u.LoginApi(r));var i=n.getResponseProperty("Card");null!=i&&(n.card=new l.CardApi(i));var a=n.getResponseProperty("Identity");null!=a&&(n.identity=new p.IdentityApi(a));var m=n.getResponseProperty("SecureNote");null!=m&&(n.secureNote=new d.SecureNoteApi(m));var h=n.getResponseProperty("Fields");null!=h&&(n.fields=h.map((function(e){return new c.FieldApi(e)})));var f=n.getResponseProperty("Attachments");null!=f&&(n.attachments=f.map((function(e){return new o.AttachmentResponse(e)})));var v=n.getResponseProperty("PasswordHistory");return null!=v&&(n.passwordHistory=v.map((function(e){return new s.PasswordHistoryResponse(e)}))),n}return i(t,e),t}(a.BaseResponse);t.CipherResponse=m},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},a=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]500?500:this.ciphers.length,n=0;n0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]r){if(o===a.TwoFactorProviderType.WebAuthn&&!e)return;n=o,r=s.priority}})),n},e.prototype.makePreloginKey=function(e,t){return i(this,void 0,void 0,(function(){var n,r,i,a;return o(this,(function(o){switch(o.label){case 0:t=t.trim().toLowerCase(),n=null,r=null,o.label=1;case 1:return o.trys.push([1,3,,4]),[4,this.apiService.postPrelogin(new p.PreloginRequest(t))];case 2:return null!=(i=o.sent())&&(n=i.kdf,r=i.kdfIterations),[3,4];case 3:if(null==(a=o.sent())||404!==a.statusCode)throw a;return[3,4];case 4:return[2,this.cryptoService.makeKey(e,t,n,r)]}}))}))},e.prototype.authingWithApiKey=function(){return null!=this.clientId&&null!=this.clientSecret},e.prototype.authingWithSso=function(){return null!=this.code&&null!=this.codeVerifier&&null!=this.ssoRedirectUrl},e.prototype.authingWithPassword=function(){return null!=this.email&&null!=this.masterPasswordHash},e.prototype.logInHelper=function(e,t,n,r,p,d,m,h,f,v,y){return i(this,void 0,void 0,(function(){var i,g,x,b,S,w,C,I,E,P,k,_,A;return o(this,(function(o){switch(o.label){case 0:return[4,this.tokenService.getTwoFactorToken(e)];case 1:return i=o.sent(),[4,this.appIdService.getAppId()];case 2:return g=o.sent(),x=new l.DeviceRequest(g,this.platformUtilsService),b=[],S=[],w=[],b=null!=e&&null!=t?[e,t]:null,S=null!=n&&null!=r&&null!=p?[n,r,p]:null,w=null!=d&&null!=m?[d,m]:null,C=null!=v&&null!=f?new u.TokenRequest(b,S,w,f,v,y,x):null!=i?new u.TokenRequest(b,S,w,a.TwoFactorProviderType.Remember,i,!1,x):new u.TokenRequest(b,S,w,null,null,!1,x),[4,this.apiService.postIdentityToken(C)];case 3:return I=o.sent(),this.clearState(),(E=new s.AuthResult).twoFactor=!I.accessToken,E.twoFactor?(P=I,this.email=e,this.masterPasswordHash=t,this.code=n,this.codeVerifier=r,this.ssoRedirectUrl=p,this.clientId=d,this.clientSecret=m,this.key=this.setCryptoKeys?h:null,this.twoFactorProvidersData=P.twoFactorProviders2,E.twoFactorProviders=P.twoFactorProviders2,[2,E]):(k=I,E.resetMasterPassword=k.resetMasterPassword,null==k.twoFactorToken?[3,5]:[4,this.tokenService.setTwoFactorToken(k.twoFactorToken,e)]);case 4:o.sent(),o.label=5;case 5:return[4,this.tokenService.setTokens(k.accessToken,k.refreshToken)];case 6:return o.sent(),[4,this.userService.setInformation(this.tokenService.getUserId(),this.tokenService.getEmail(),k.kdf,k.kdfIterations)];case 7:return o.sent(),this.setCryptoKeys?null==h?[3,9]:[4,this.cryptoService.setKey(h)]:[3,19];case 8:o.sent(),o.label=9;case 9:return null==t?[3,11]:[4,this.cryptoService.setKeyHash(t)];case 10:o.sent(),o.label=11;case 11:return null!=n&&null==k.key?[3,19]:[4,this.cryptoService.setEncKey(k.key)];case 12:if(o.sent(),null!=k.privateKey)return[3,17];o.label=13;case 13:return o.trys.push([13,16,,17]),[4,this.cryptoService.makeKeyPair()];case 14:return _=o.sent(),[4,this.apiService.postAccountKeys(new c.KeysRequest(_[0],_[1].encryptedString))];case 15:return o.sent(),k.privateKey=_[1].encryptedString,[3,17];case 16:return A=o.sent(),this.logService.error(A),[3,17];case 17:return[4,this.cryptoService.setEncPrivateKey(k.privateKey)];case 18:o.sent(),o.label=19;case 19:return null!=this.vaultTimeoutService&&(this.vaultTimeoutService.biometricLocked=!1),this.messagingService.send("loggedIn"),[2,E]}}))}))},e.prototype.clearState=function(){this.key=null,this.email=null,this.masterPasswordHash=null,this.code=null,this.codeVerifier=null,this.ssoRedirectUrl=null,this.clientId=null,this.clientSecret=null,this.twoFactorProvidersData=null,this.selectedTwoFactorProviderType=null},e}();t.AuthService=d},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e,t,n){this.id=e,this.readOnly=t,this.hidePasswords=n};t.SelectionReadOnlyRequest=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.Android=0]="Android",e[e.iOS=1]="iOS",e[e.ChromeExtension=2]="ChromeExtension",e[e.FirefoxExtension=3]="FirefoxExtension",e[e.OperaExtension=4]="OperaExtension",e[e.EdgeExtension=5]="EdgeExtension",e[e.WindowsDesktop=6]="WindowsDesktop",e[e.MacOsDesktop=7]="MacOsDesktop",e[e.LinuxDesktop=8]="LinuxDesktop",e[e.ChromeBrowser=9]="ChromeBrowser",e[e.FirefoxBrowser=10]="FirefoxBrowser",e[e.OperaBrowser=11]="OperaBrowser",e[e.EdgeBrowser=12]="EdgeBrowser",e[e.IEBrowser=13]="IEBrowser",e[e.UnknownBrowser=14]="UnknownBrowser",e[e.AndroidAmazon=15]="AndroidAmazon",e[e.UWP=16]="UWP",e[e.SafariBrowser=17]="SafariBrowser",e[e.VivaldiBrowser=18]="VivaldiBrowser",e[e.VivaldiExtension=19]="VivaldiExtension",e[e.SafariExtension=20]="SafariExtension"}(t.DeviceType||(t.DeviceType={}))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.SettingsService=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.Free=0]="Free",e[e.FamiliesAnnually2019=1]="FamiliesAnnually2019",e[e.TeamsMonthly2019=2]="TeamsMonthly2019",e[e.TeamsAnnually2019=3]="TeamsAnnually2019",e[e.EnterpriseMonthly2019=4]="EnterpriseMonthly2019",e[e.EnterpriseAnnually2019=5]="EnterpriseAnnually2019",e[e.Custom=6]="Custom",e[e.FamiliesAnnually=7]="FamiliesAnnually",e[e.TeamsMonthly=8]="TeamsMonthly",e[e.TeamsAnnually=9]="TeamsAnnually",e[e.EnterpriseMonthly=10]="EnterpriseMonthly",e[e.EnterpriseAnnually=11]="EnterpriseAnnually"}(t.PlanType||(t.PlanType={}))},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&(e.uris=[],this.uris.forEach((function(t){e.uris.push(t.toLoginUriData())}))),e},t}(n(81).default);t.Login=p},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(487),a=n(258),s=function(e){function t(t,n){void 0===n&&(n=!1);var r=e.call(this)||this;return null==t||(r.match=t.match,r.buildDomainModel(r,t,{uri:null},n,[])),r}return i(t,e),t.prototype.decrypt=function(e,t){return this.decryptObj(new a.LoginUriView(this),{uri:null},e,t)},t.prototype.toLoginUriData=function(){var e=new o.LoginUriData;return this.buildDataModel(this,e,{uri:null},["match"]),e},t}(n(81).default);t.LoginUri=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(488),a=n(81),s=n(94),l=function(e){function t(t,n){void 0===n&&(n=!1);var r=e.call(this)||this;return null==t||(r.type=t.type),r}return i(t,e),t.prototype.decrypt=function(e,t){return Promise.resolve(new s.SecureNoteView(this))},t.prototype.toSecureNoteData=function(){var e=new o.SecureNoteData;return e.type=this.type,e},t}(a.default);t.SecureNote=l},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(0),i=n(13),o=n(0),a=function(){function e(e,t){this.elementRef=e,this.renderer=t,this.trueValue=!0,this.falseValue=!1,this.propagateChange=function(e){}}return e.prototype.onHostChange=function(e){this.propagateChange(e.target.checked?this.trueValue:this.falseValue)},e.prototype.writeValue=function(e){e===this.trueValue?this.renderer.setProperty(this.elementRef.nativeElement,"checked",!0):this.renderer.setProperty(this.elementRef.nativeElement,"checked",!1)},e.prototype.registerOnChange=function(e){this.propagateChange=e},e.prototype.registerOnTouched=function(e){},e.prototype.setDisabledState=function(e){},e.ɵfac=function(t){return new(t||e)(o.ɵɵdirectiveInject(o.ElementRef),o.ɵɵdirectiveInject(o.Renderer2))},e.ɵdir=o.ɵɵdefineDirective({type:e,selectors:[["input","type","checkbox","appTrueFalseValue",""]],hostBindings:function(e,t){1&e&&o.ɵɵlistener("change",(function(e){return t.onHostChange(e)}))},inputs:{trueValue:"trueValue",falseValue:"falseValue"},features:[o.ɵɵProvidersFeature([{provide:i.NG_VALUE_ACCESSOR,useExisting:r.forwardRef((function(){return e})),multi:!0}])]}),e}();t.TrueFalseValueDirective=a},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(t){var n=e.call(this,t)||this;return n.id=n.getResponseProperty("Id"),n.readOnly=n.getResponseProperty("ReadOnly"),n.hidePasswords=n.getResponseProperty("HidePasswords"),n}return i(t,e),t}(n(23).BaseResponse);t.SelectionReadOnlyResponse=o},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(23),a=n(619),s=function(e){function t(t){var n=e.call(this,t)||this;n.organizations=[],n.id=n.getResponseProperty("Id"),n.name=n.getResponseProperty("Name"),n.email=n.getResponseProperty("Email"),n.emailVerified=n.getResponseProperty("EmailVerified"),n.masterPasswordHint=n.getResponseProperty("MasterPasswordHint"),n.premium=n.getResponseProperty("Premium"),n.culture=n.getResponseProperty("Culture"),n.twoFactorEnabled=n.getResponseProperty("TwoFactorEnabled"),n.key=n.getResponseProperty("Key"),n.privateKey=n.getResponseProperty("PrivateKey"),n.securityStamp=n.getResponseProperty("SecurityStamp");var r=n.getResponseProperty("Organizations");return null!=r&&(n.organizations=r.map((function(e){return new a.ProfileOrganizationResponse(e)}))),n}return i(t,e),t}(o.BaseResponse);t.ProfileResponse=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),a=(n(40),n(48),n(41),n(7),n(888)),s=n(0),l=n(40),c=n(48),p=n(41),u=n(7),d=n(17),m=n(13),h=n(65),f=n(4),v=n(37),y=n(10),g=function(e){return{active:e}};function x(e,t){if(1&e){var n=s.ɵɵgetCurrentView();s.ɵɵelementStart(0,"li",7),s.ɵɵtext(1,"\n "),s.ɵɵelementStart(2,"a",8),s.ɵɵlistener("click",(function(){return s.ɵɵrestoreView(n),s.ɵɵnextContext().selectFavorites()})),s.ɵɵtext(3,"\n "),s.ɵɵelement(4,"i",17),s.ɵɵtext(5),s.ɵɵpipe(6,"i18n"),s.ɵɵelementEnd(),s.ɵɵtext(7,"\n "),s.ɵɵelementEnd()}if(2&e){var r=s.ɵɵnextContext();s.ɵɵproperty("ngClass",s.ɵɵpureFunction1(4,g,r.selectedFavorites)),s.ɵɵadvance(5),s.ɵɵtextInterpolate1("",s.ɵɵpipeBind1(6,2,"favorites"),"\n ")}}function b(e,t){if(1&e){var n=s.ɵɵgetCurrentView();s.ɵɵelementStart(0,"li",7),s.ɵɵtext(1,"\n "),s.ɵɵelementStart(2,"a",8),s.ɵɵlistener("click",(function(){return s.ɵɵrestoreView(n),s.ɵɵnextContext().selectTrash()})),s.ɵɵtext(3,"\n "),s.ɵɵelement(4,"i",18),s.ɵɵtext(5),s.ɵɵpipe(6,"i18n"),s.ɵɵelementEnd(),s.ɵɵtext(7,"\n "),s.ɵɵelementEnd()}if(2&e){var r=s.ɵɵnextContext();s.ɵɵproperty("ngClass",s.ɵɵpureFunction1(4,g,r.selectedTrash)),s.ɵɵadvance(5),s.ɵɵtextInterpolate1("",s.ɵɵpipeBind1(6,2,"trash"),"\n ")}}function S(e,t){1&e&&(s.ɵɵelementStart(0,"p",19),s.ɵɵtext(1,"\n "),s.ɵɵelement(2,"i",20),s.ɵɵpipe(3,"i18n"),s.ɵɵtext(4,"\n "),s.ɵɵelementStart(5,"span",21),s.ɵɵtext(6),s.ɵɵpipe(7,"i18n"),s.ɵɵelementEnd(),s.ɵɵtext(8,"\n "),s.ɵɵelementEnd()),2&e&&(s.ɵɵadvance(2),s.ɵɵpropertyInterpolate("title",s.ɵɵpipeBind1(3,2,"loading")),s.ɵɵadvance(4),s.ɵɵtextInterpolate(s.ɵɵpipeBind1(7,4,"loading")))}var w=function(e,t){return{"fa-caret-right":e,"fa-caret-down":t}};function C(e,t){if(1&e){var n=s.ɵɵgetCurrentView();s.ɵɵelementStart(0,"i",32),s.ɵɵlistener("click",(function(){s.ɵɵrestoreView(n);var e=s.ɵɵnextContext().$implicit;return s.ɵɵnextContext(4).collapse(e.node)})),s.ɵɵpipe(1,"i18n"),s.ɵɵelementEnd()}if(2&e){var r=s.ɵɵnextContext().$implicit,i=s.ɵɵnextContext(4);s.ɵɵpropertyInterpolate("title",s.ɵɵpipeBind1(1,2,"toggleCollapse")),s.ɵɵproperty("ngClass",s.ɵɵpureFunction2(4,w,i.isCollapsed(r.node),!i.isCollapsed(r.node)))}}function I(e,t){1&e&&s.ɵɵelement(0,"i",33)}function E(e,t){if(1&e){var n=s.ɵɵgetCurrentView();s.ɵɵelementStart(0,"a",34),s.ɵɵlistener("click",(function(){s.ɵɵrestoreView(n);var e=s.ɵɵnextContext().$implicit;return s.ɵɵnextContext(4).editFolder(e.node)})),s.ɵɵpipe(1,"i18n"),s.ɵɵtext(2,"\n "),s.ɵɵelement(3,"i",35),s.ɵɵtext(4,"\n "),s.ɵɵelementEnd()}2&e&&s.ɵɵpropertyInterpolate("appA11yTitle",s.ɵɵpipeBind1(1,1,"editFolder"))}function P(e,t){1&e&&(s.ɵɵelementContainerStart(0),s.ɵɵtext(1,"\n "),s.ɵɵelementContainerEnd())}var k=function(e){return{$implicit:e}};function _(e,t){if(1&e&&(s.ɵɵelementStart(0,"ul",36),s.ɵɵtext(1,"\n "),s.ɵɵtemplate(2,P,2,0,"ng-container",26),s.ɵɵtext(3,"\n "),s.ɵɵelementEnd()),2&e){var n=s.ɵɵnextContext().$implicit;s.ɵɵnextContext(2);var r=s.ɵɵreference(15);s.ɵɵadvance(2),s.ɵɵproperty("ngTemplateOutlet",r)("ngTemplateOutletContext",s.ɵɵpureFunction1(2,k,n.children))}}function A(e,t){if(1&e){var n=s.ɵɵgetCurrentView();s.ɵɵelementStart(0,"li",7),s.ɵɵtext(1,"\n "),s.ɵɵelementStart(2,"div",22),s.ɵɵtext(3,"\n "),s.ɵɵtemplate(4,C,2,7,"i",28),s.ɵɵtext(5,"\n "),s.ɵɵelementStart(6,"a",8),s.ɵɵlistener("click",(function(){s.ɵɵrestoreView(n);var e=t.$implicit;return s.ɵɵnextContext(4).selectFolder(e.node)})),s.ɵɵtext(7,"\n "),s.ɵɵtemplate(8,I,1,0,"i",29),s.ɵɵtext(9),s.ɵɵelementEnd(),s.ɵɵtext(10,"\n "),s.ɵɵtemplate(11,E,5,3,"a",30),s.ɵɵtext(12,"\n "),s.ɵɵelementEnd(),s.ɵɵtext(13,"\n "),s.ɵɵtemplate(14,_,4,4,"ul",31),s.ɵɵtext(15,"\n "),s.ɵɵelementEnd()}if(2&e){var r=t.$implicit,i=s.ɵɵnextContext(4);s.ɵɵproperty("ngClass",s.ɵɵpureFunction1(6,g,i.selectedFolder&&r.node.id===i.selectedFolderId)),s.ɵɵadvance(4),s.ɵɵproperty("ngIf",r.children.length),s.ɵɵadvance(4),s.ɵɵproperty("ngIf",0===r.children.length),s.ɵɵadvance(1),s.ɵɵtextInterpolate1("",r.node.name,"\n "),s.ɵɵadvance(2),s.ɵɵproperty("ngIf",r.node.id),s.ɵɵadvance(3),s.ɵɵproperty("ngIf",r.children.length&&!i.isCollapsed(r.node))}}function O(e,t){if(1&e&&(s.ɵɵtext(0,"\n "),s.ɵɵtemplate(1,A,16,8,"li",27),s.ɵɵtext(2,"\n ")),2&e){var n=t.$implicit;s.ɵɵadvance(1),s.ɵɵproperty("ngForOf",n)}}function T(e,t){1&e&&(s.ɵɵelementContainerStart(0),s.ɵɵtext(1,"\n "),s.ɵɵelementContainerEnd())}function M(e,t){if(1&e){var n=s.ɵɵgetCurrentView();s.ɵɵelementContainerStart(0),s.ɵɵtext(1,"\n "),s.ɵɵelementStart(2,"h3",22),s.ɵɵtext(3),s.ɵɵpipe(4,"i18n"),s.ɵɵelementStart(5,"a",23),s.ɵɵlistener("click",(function(){return s.ɵɵrestoreView(n),s.ɵɵnextContext(2).addFolder()})),s.ɵɵpipe(6,"i18n"),s.ɵɵtext(7,"\n "),s.ɵɵelement(8,"i",24),s.ɵɵtext(9,"\n "),s.ɵɵelementEnd(),s.ɵɵtext(10,"\n "),s.ɵɵelementEnd(),s.ɵɵtext(11,"\n "),s.ɵɵelementStart(12,"ul",6),s.ɵɵtext(13,"\n "),s.ɵɵtemplate(14,O,3,1,"ng-template",null,25,s.ɵɵtemplateRefExtractor),s.ɵɵtext(16,"\n "),s.ɵɵtemplate(17,T,2,0,"ng-container",26),s.ɵɵtext(18,"\n "),s.ɵɵelementEnd(),s.ɵɵtext(19,"\n "),s.ɵɵelementContainerEnd()}if(2&e){var r=s.ɵɵreference(15),i=s.ɵɵnextContext(2);s.ɵɵadvance(3),s.ɵɵtextInterpolate1("\n ",s.ɵɵpipeBind1(4,4,"folders"),"\n "),s.ɵɵadvance(2),s.ɵɵpropertyInterpolate("appA11yTitle",s.ɵɵpipeBind1(6,6,"addFolder")),s.ɵɵadvance(12),s.ɵɵproperty("ngTemplateOutlet",r)("ngTemplateOutletContext",s.ɵɵpureFunction1(8,k,i.nestedFolders))}}function B(e,t){if(1&e){var n=s.ɵɵgetCurrentView();s.ɵɵelementStart(0,"i",32),s.ɵɵlistener("click",(function(){s.ɵɵrestoreView(n);var e=s.ɵɵnextContext().$implicit;return s.ɵɵnextContext(4).collapse(e.node)})),s.ɵɵpipe(1,"i18n"),s.ɵɵelementEnd()}if(2&e){var r=s.ɵɵnextContext().$implicit,i=s.ɵɵnextContext(4);s.ɵɵpropertyInterpolate("title",s.ɵɵpipeBind1(1,2,"toggleCollapse")),s.ɵɵproperty("ngClass",s.ɵɵpureFunction2(4,w,i.isCollapsed(r.node),!i.isCollapsed(r.node)))}}function D(e,t){1&e&&s.ɵɵelement(0,"i",39)}function R(e,t){1&e&&(s.ɵɵelementContainerStart(0),s.ɵɵtext(1,"\n "),s.ɵɵelementContainerEnd())}function V(e,t){if(1&e&&(s.ɵɵelementStart(0,"ul",36),s.ɵɵtext(1,"\n "),s.ɵɵtemplate(2,R,2,0,"ng-container",26),s.ɵɵtext(3,"\n "),s.ɵɵelementEnd()),2&e){var n=s.ɵɵnextContext().$implicit;s.ɵɵnextContext(2);var r=s.ɵɵreference(9);s.ɵɵadvance(2),s.ɵɵproperty("ngTemplateOutlet",r)("ngTemplateOutletContext",s.ɵɵpureFunction1(2,k,n.children))}}function j(e,t){if(1&e){var n=s.ɵɵgetCurrentView();s.ɵɵelementStart(0,"li",7),s.ɵɵtext(1,"\n "),s.ɵɵtemplate(2,B,2,7,"i",28),s.ɵɵtext(3,"\n "),s.ɵɵelementStart(4,"a",8),s.ɵɵlistener("click",(function(){s.ɵɵrestoreView(n);var e=t.$implicit;return s.ɵɵnextContext(4).selectCollection(e.node)})),s.ɵɵtext(5,"\n "),s.ɵɵtemplate(6,D,1,0,"i",38),s.ɵɵtext(7),s.ɵɵelementEnd(),s.ɵɵtext(8,"\n "),s.ɵɵtemplate(9,V,4,4,"ul",31),s.ɵɵtext(10,"\n "),s.ɵɵelementEnd()}if(2&e){var r=t.$implicit,i=s.ɵɵnextContext(4);s.ɵɵproperty("ngClass",s.ɵɵpureFunction1(5,g,r.node.id===i.selectedCollectionId)),s.ɵɵadvance(2),s.ɵɵproperty("ngIf",r.children.length),s.ɵɵadvance(4),s.ɵɵproperty("ngIf",0===r.children.length),s.ɵɵadvance(1),s.ɵɵtextInterpolate1("",r.node.name,"\n "),s.ɵɵadvance(2),s.ɵɵproperty("ngIf",r.children.length&&!i.isCollapsed(r.node))}}function F(e,t){if(1&e&&(s.ɵɵtext(0,"\n "),s.ɵɵtemplate(1,j,11,7,"li",27),s.ɵɵtext(2,"\n ")),2&e){var n=t.$implicit;s.ɵɵadvance(1),s.ɵɵproperty("ngForOf",n)}}function U(e,t){1&e&&(s.ɵɵelementContainerStart(0),s.ɵɵtext(1,"\n "),s.ɵɵelementContainerEnd())}function N(e,t){if(1&e&&(s.ɵɵelementContainerStart(0),s.ɵɵtext(1,"\n "),s.ɵɵelementStart(2,"h3"),s.ɵɵtext(3),s.ɵɵpipe(4,"i18n"),s.ɵɵelementEnd(),s.ɵɵtext(5,"\n "),s.ɵɵelementStart(6,"ul",6),s.ɵɵtext(7,"\n "),s.ɵɵtemplate(8,F,3,1,"ng-template",null,37,s.ɵɵtemplateRefExtractor),s.ɵɵtext(10,"\n "),s.ɵɵtemplate(11,U,2,0,"ng-container",26),s.ɵɵtext(12,"\n "),s.ɵɵelementEnd(),s.ɵɵtext(13,"\n "),s.ɵɵelementContainerEnd()),2&e){var n=s.ɵɵreference(9),r=s.ɵɵnextContext(2);s.ɵɵadvance(3),s.ɵɵtextInterpolate(s.ɵɵpipeBind1(4,3,"collections")),s.ɵɵadvance(8),s.ɵɵproperty("ngTemplateOutlet",n)("ngTemplateOutletContext",s.ɵɵpureFunction1(5,k,r.nestedCollections))}}function z(e,t){if(1&e&&(s.ɵɵelementContainerStart(0),s.ɵɵtext(1,"\n "),s.ɵɵtemplate(2,M,20,10,"ng-container",16),s.ɵɵtext(3,"\n "),s.ɵɵtemplate(4,N,14,7,"ng-container",16),s.ɵɵtext(5,"\n "),s.ɵɵelementContainerEnd()),2&e){var n=s.ɵɵnextContext();s.ɵɵadvance(2),s.ɵɵproperty("ngIf",n.showFolders),s.ɵɵadvance(2),s.ɵɵproperty("ngIf",n.showCollections&&n.collections&&n.collections.length)}}var L=function(e){function t(t,n,r,i){var a=e.call(this,t,n,r,i)||this;return a.onSearchTextChanged=new o.EventEmitter,a.searchText="",a.searchPlaceholder=null,a}return i(t,e),t.prototype.searchTextChanged=function(){this.onSearchTextChanged.emit(this.searchText)},t.ɵfac=function(e){return new(e||t)(s.ɵɵdirectiveInject(l.CollectionService),s.ɵɵdirectiveInject(c.FolderService),s.ɵɵdirectiveInject(p.StorageService),s.ɵɵdirectiveInject(u.UserService))},t.ɵcmp=s.ɵɵdefineComponent({type:t,selectors:[["app-vault-groupings"]],outputs:{onSearchTextChanged:"onSearchTextChanged"},features:[s.ɵɵInheritDefinitionFeature],decls:82,vars:47,consts:[[1,"card","vault-filters"],[1,"card-header","d-flex"],["href","https://help.bitwarden.com/article/searching-vault/","target","_blank","rel","noopener",1,"ml-auto",3,"appA11yTitle"],["aria-hidden","true",1,"fa","fa-question-circle-o"],[1,"card-body"],["type","search","id","search","autocomplete","off","appAutofocus","",1,"form-control",3,"placeholder","ngModel","ngModelChange","input"],[1,"fa-ul","card-ul"],[3,"ngClass"],["href","#","appStopClick","",3,"click"],[1,"fa-li","fa","fa-fw","fa-th"],[3,"ngClass",4,"ngIf"],[1,"fa-li","fa","fa-fw","fa-globe"],[1,"fa-li","fa","fa-fw","fa-credit-card"],[1,"fa-li","fa","fa-fw","fa-id-card-o"],[1,"fa-li","fa","fa-fw","fa-sticky-note-o"],["class","text-muted",4,"ngIf"],[4,"ngIf"],[1,"fa-li","fa","fa-fw","fa-star"],[1,"fa-li","fa","fa-fw","fa-trash-o"],[1,"text-muted"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin",3,"title"],[1,"sr-only"],[1,"d-flex"],["href","#","appStopClick","",1,"text-muted","ml-auto",3,"appA11yTitle","click"],["aria-hidden","true",1,"fa","fa-plus","fa-fw"],["recursiveFolders",""],[4,"ngTemplateOutlet","ngTemplateOutletContext"],[3,"ngClass",4,"ngFor","ngForOf"],["class","fa-li fa",3,"title","ngClass","click",4,"ngIf"],["class","fa-li fa fa-folder-o","aria-hidden","true",4,"ngIf"],["href","#","class","text-muted ml-auto show-active","appStopClick","",3,"appA11yTitle","click",4,"ngIf"],["class","fa-ul card-ul carets",4,"ngIf"],[1,"fa-li","fa",3,"title","ngClass","click"],["aria-hidden","true",1,"fa-li","fa","fa-folder-o"],["href","#","appStopClick","",1,"text-muted","ml-auto","show-active",3,"appA11yTitle","click"],["aria-hidden","true",1,"fa","fa-pencil","fa-fw"],[1,"fa-ul","card-ul","carets"],["recursiveCollections",""],["class","fa-li fa fa-cube","aria-hidden","true",4,"ngIf"],["aria-hidden","true",1,"fa-li","fa","fa-cube"]],template:function(e,t){1&e&&(s.ɵɵelementStart(0,"div",0),s.ɵɵtext(1,"\n "),s.ɵɵelementStart(2,"div",1),s.ɵɵtext(3),s.ɵɵpipe(4,"i18n"),s.ɵɵelementStart(5,"a",2),s.ɵɵpipe(6,"i18n"),s.ɵɵtext(7,"\n "),s.ɵɵelement(8,"i",3),s.ɵɵtext(9,"\n "),s.ɵɵelementEnd(),s.ɵɵtext(10,"\n "),s.ɵɵelementEnd(),s.ɵɵtext(11,"\n "),s.ɵɵelementStart(12,"div",4),s.ɵɵtext(13,"\n "),s.ɵɵelementStart(14,"input",5),s.ɵɵlistener("ngModelChange",(function(e){return t.searchText=e}))("input",(function(){return t.searchTextChanged()})),s.ɵɵpipe(15,"i18n"),s.ɵɵelementEnd(),s.ɵɵtext(16,"\n "),s.ɵɵelementStart(17,"ul",6),s.ɵɵtext(18,"\n "),s.ɵɵelementStart(19,"li",7),s.ɵɵtext(20,"\n "),s.ɵɵelementStart(21,"a",8),s.ɵɵlistener("click",(function(){return t.selectAll()})),s.ɵɵtext(22,"\n "),s.ɵɵelement(23,"i",9),s.ɵɵtext(24),s.ɵɵpipe(25,"i18n"),s.ɵɵelementEnd(),s.ɵɵtext(26,"\n "),s.ɵɵelementEnd(),s.ɵɵtext(27,"\n "),s.ɵɵtemplate(28,x,8,6,"li",10),s.ɵɵtext(29,"\n "),s.ɵɵtemplate(30,b,8,6,"li",10),s.ɵɵtext(31,"\n "),s.ɵɵelementEnd(),s.ɵɵtext(32,"\n "),s.ɵɵelementStart(33,"h3"),s.ɵɵtext(34),s.ɵɵpipe(35,"i18n"),s.ɵɵelementEnd(),s.ɵɵtext(36,"\n "),s.ɵɵelementStart(37,"ul",6),s.ɵɵtext(38,"\n "),s.ɵɵelementStart(39,"li",7),s.ɵɵtext(40,"\n "),s.ɵɵelementStart(41,"a",8),s.ɵɵlistener("click",(function(){return t.selectType(t.cipherType.Login)})),s.ɵɵtext(42,"\n "),s.ɵɵelement(43,"i",11),s.ɵɵtext(44),s.ɵɵpipe(45,"i18n"),s.ɵɵelementEnd(),s.ɵɵtext(46,"\n "),s.ɵɵelementEnd(),s.ɵɵtext(47,"\n "),s.ɵɵelementStart(48,"li",7),s.ɵɵtext(49,"\n "),s.ɵɵelementStart(50,"a",8),s.ɵɵlistener("click",(function(){return t.selectType(t.cipherType.Card)})),s.ɵɵtext(51,"\n "),s.ɵɵelement(52,"i",12),s.ɵɵtext(53),s.ɵɵpipe(54,"i18n"),s.ɵɵelementEnd(),s.ɵɵtext(55,"\n "),s.ɵɵelementEnd(),s.ɵɵtext(56,"\n "),s.ɵɵelementStart(57,"li",7),s.ɵɵtext(58,"\n "),s.ɵɵelementStart(59,"a",8),s.ɵɵlistener("click",(function(){return t.selectType(t.cipherType.Identity)})),s.ɵɵtext(60,"\n "),s.ɵɵelement(61,"i",13),s.ɵɵtext(62),s.ɵɵpipe(63,"i18n"),s.ɵɵelementEnd(),s.ɵɵtext(64,"\n "),s.ɵɵelementEnd(),s.ɵɵtext(65,"\n "),s.ɵɵelementStart(66,"li",7),s.ɵɵtext(67,"\n "),s.ɵɵelementStart(68,"a",8),s.ɵɵlistener("click",(function(){return t.selectType(t.cipherType.SecureNote)})),s.ɵɵtext(69,"\n "),s.ɵɵelement(70,"i",14),s.ɵɵtext(71),s.ɵɵpipe(72,"i18n"),s.ɵɵelementEnd(),s.ɵɵtext(73,"\n "),s.ɵɵelementEnd(),s.ɵɵtext(74,"\n "),s.ɵɵelementEnd(),s.ɵɵtext(75,"\n "),s.ɵɵtemplate(76,S,9,6,"p",15),s.ɵɵtext(77,"\n "),s.ɵɵtemplate(78,z,6,2,"ng-container",16),s.ɵɵtext(79,"\n "),s.ɵɵelementEnd(),s.ɵɵtext(80,"\n"),s.ɵɵelementEnd(),s.ɵɵtext(81,"\n")),2&e&&(s.ɵɵadvance(3),s.ɵɵtextInterpolate1("\n ",s.ɵɵpipeBind1(4,19,"filters"),"\n "),s.ɵɵadvance(2),s.ɵɵpropertyInterpolate("appA11yTitle",s.ɵɵpipeBind1(6,21,"learnMore")),s.ɵɵadvance(9),s.ɵɵpropertyInterpolate("placeholder",t.searchPlaceholder||s.ɵɵpipeBind1(15,23,"searchVault")),s.ɵɵproperty("ngModel",t.searchText),s.ɵɵadvance(5),s.ɵɵproperty("ngClass",s.ɵɵpureFunction1(37,g,t.selectedAll)),s.ɵɵadvance(5),s.ɵɵtextInterpolate1("",s.ɵɵpipeBind1(25,25,"allItems"),"\n "),s.ɵɵadvance(4),s.ɵɵproperty("ngIf",t.showFavorites),s.ɵɵadvance(2),s.ɵɵproperty("ngIf",t.showTrash),s.ɵɵadvance(4),s.ɵɵtextInterpolate(s.ɵɵpipeBind1(35,27,"types")),s.ɵɵadvance(5),s.ɵɵproperty("ngClass",s.ɵɵpureFunction1(39,g,t.selectedType===t.cipherType.Login)),s.ɵɵadvance(5),s.ɵɵtextInterpolate1("",s.ɵɵpipeBind1(45,29,"typeLogin"),"\n "),s.ɵɵadvance(4),s.ɵɵproperty("ngClass",s.ɵɵpureFunction1(41,g,t.selectedType===t.cipherType.Card)),s.ɵɵadvance(5),s.ɵɵtextInterpolate1("",s.ɵɵpipeBind1(54,31,"typeCard"),"\n "),s.ɵɵadvance(4),s.ɵɵproperty("ngClass",s.ɵɵpureFunction1(43,g,t.selectedType===t.cipherType.Identity)),s.ɵɵadvance(5),s.ɵɵtextInterpolate1("",s.ɵɵpipeBind1(63,33,"typeIdentity"),"\n "),s.ɵɵadvance(4),s.ɵɵproperty("ngClass",s.ɵɵpureFunction1(45,g,t.selectedType===t.cipherType.SecureNote)),s.ɵɵadvance(5),s.ɵɵtextInterpolate1("",s.ɵɵpipeBind1(72,35,"typeSecureNote"),"\n "),s.ɵɵadvance(5),s.ɵɵproperty("ngIf",!t.loaded),s.ɵɵadvance(2),s.ɵɵproperty("ngIf",t.loaded))},directives:[d.A11yTitleDirective,m.DefaultValueAccessor,h.AutofocusDirective,m.NgControlStatus,m.NgModel,f.NgClass,v.StopClickDirective,f.NgIf,f.NgTemplateOutlet,f.NgForOf],pipes:[y.I18nPipe],encapsulation:2}),t}(a.GroupingsComponent);t.GroupingsComponent=L},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(157),i=n(251),o=function(){function e(e){null!=e&&(this.id=e.id,this.name=e.name,this.status=e.status,this.type=e.type,this.enabled=e.enabled,this.usePolicies=e.usePolicies,this.useGroups=e.useGroups,this.useDirectory=e.useDirectory,this.useEvents=e.useEvents,this.useTotp=e.useTotp,this.use2fa=e.use2fa,this.useApi=e.useApi,this.useBusinessPortal=e.useBusinessPortal,this.useSso=e.useSso,this.selfHost=e.selfHost,this.usersGetPremium=e.usersGetPremium,this.seats=e.seats,this.maxCollections=e.maxCollections,this.maxStorageGb=e.maxStorageGb,this.ssoBound=e.ssoBound,this.identifier=e.identifier,this.permissions=e.permissions,this.resetPasswordKey=e.resetPasswordKey,this.userId=e.userId)}return Object.defineProperty(e.prototype,"canAccess",{get:function(){return this.type===i.OrganizationUserType.Owner||this.enabled&&this.status===r.OrganizationUserStatusType.Confirmed},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isManager",{get:function(){return this.type===i.OrganizationUserType.Manager||this.type===i.OrganizationUserType.Owner||this.type===i.OrganizationUserType.Admin},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isAdmin",{get:function(){return this.type===i.OrganizationUserType.Owner||this.type===i.OrganizationUserType.Admin},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isOwner",{get:function(){return this.type===i.OrganizationUserType.Owner},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"canAccessBusinessPortal",{get:function(){return this.isAdmin||this.permissions.accessBusinessPortal},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"canAccessEventLogs",{get:function(){return this.isAdmin||this.permissions.accessEventLogs},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"canAccessImportExport",{get:function(){return this.isAdmin||this.permissions.accessImportExport},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"canAccessReports",{get:function(){return this.isAdmin||this.permissions.accessReports},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"canManageAllCollections",{get:function(){return this.isAdmin||this.permissions.manageAllCollections},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"canManageAssignedCollections",{get:function(){return this.isManager||this.permissions.manageAssignedCollections},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"canManageGroups",{get:function(){return this.isAdmin||this.permissions.manageGroups},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"canManageSso",{get:function(){return this.isAdmin||this.permissions.manageSso},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"canManagePolicies",{get:function(){return this.isAdmin||this.permissions.managePolicies},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"canManageUsers",{get:function(){return this.isAdmin||this.permissions.manageUsers},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isResetPasswordEnrolled",{get:function(){return null!=this.resetPasswordKey},enumerable:!0,configurable:!0}),e}();t.Organization=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e){this.id=null,this.size=null,this.sizeName=null,this.fileName=null,e&&(this.id=e.id,this.size=e.size,this.sizeName=e.sizeName)}return Object.defineProperty(e.prototype,"fileSize",{get:function(){try{if(null!=this.size)return parseInt(this.size,null)}catch(e){}return 0},enumerable:!0,configurable:!0}),e}();t.SendFileView=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e){this.text=null,e&&(this.hidden=e.hidden)}return Object.defineProperty(e.prototype,"maskedText",{get:function(){return null!=this.text?"••••••••":null},enumerable:!0,configurable:!0}),e}();t.SendTextView=r},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]-1&&(e=e.concat(this.email.substr(0,t).trim().toLowerCase().split(/[^A-Za-z0-9]/))),e},e.ɵfac=function(t){return new(t||e)(o.ɵɵdirectiveInject(a.I18nService),o.ɵɵdirectiveInject(s.CryptoService),o.ɵɵdirectiveInject(l.MessagingService),o.ɵɵdirectiveInject(c.UserService),o.ɵɵdirectiveInject(p.PasswordGenerationService),o.ɵɵdirectiveInject(u.PlatformUtilsService),o.ɵɵdirectiveInject(d.PolicyService))},e.ɵdir=o.ɵɵdefineDirective({type:e}),e}();t.ChangePasswordComponent=m},,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&t.forEach((function(t){var n=e.data.filter((function(e){return e.id===t}));null!=n&&n.length>0&&(n[0].checked=!0)})),[3,5];case 3:return"collection"!==this.entity?[3,5]:[4,this.apiService.getCollectionUsers(this.organizationId,this.entityId)];case 4:null!=(t=r.sent())&&e.data.length>0&&t.forEach((function(t){var n=e.data.filter((function(e){return!e.accessAll&&e.id===t.id}));null!=n&&n.length>0&&(n[0].checked=!0,n[0].readOnly=t.readOnly,n[0].hidePasswords=t.hidePasswords)})),r.label=5;case 5:return this.allUsers.forEach((function(e){"collection"===n.entity&&e.accessAll&&(e.checked=!0),e.checked&&n.selectedCount++})),[2]}}))}))},e.prototype.check=function(e){"collection"===this.entity&&e.accessAll||(e.checked=!e.checked,this.selectedChanged(e))},e.prototype.selectedChanged=function(e){e.checked?this.selectedCount++:("collection"===this.entity&&(e.readOnly=!1,e.hidePasswords=!1),this.selectedCount--)},e.prototype.filterSelected=function(e){this.showSelected=e},e.prototype.submit=function(){return r(this,void 0,void 0,(function(){var e;return i(this,(function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),"group"===this.entity?(e=this.users.filter((function(e){return e.checked})).map((function(e){return e.id})),this.formPromise=this.apiService.putGroupUsers(this.organizationId,this.entityId,e)):(e=this.users.filter((function(e){return e.checked&&!e.accessAll})).map((function(e){return new l.SelectionReadOnlyRequest(e.id,!!e.readOnly,!!e.hidePasswords)})),this.formPromise=this.apiService.putCollectionUsers(this.organizationId,this.entityId,e)),[4,this.formPromise];case 1:return t.sent(),this.toasterService.popAsync("success",null,this.i18nService.t("updatedUsers")),this.onEditedUsers.emit(),[3,3];case 2:return t.sent(),[3,3];case 3:return[2]}}))}))},e.ɵfac=function(t){return new(t||e)(p.ɵɵdirectiveInject(u.ApiService),p.ɵɵdirectiveInject(d.I18nService),p.ɵɵdirectiveInject(m.ToasterService))},e.ɵcmp=p.ɵɵdefineComponent({type:e,selectors:[["app-entity-users"]],inputs:{entity:"entity",entityId:"entityId",entityName:"entityName",organizationId:"organizationId"},outputs:{onEditedUsers:"onEditedUsers"},decls:49,vars:29,consts:[["tabindex","-1","role","dialog","aria-modal","true","aria-labelledby","userAccessTitle",1,"modal","fade"],["role","document",1,"modal-dialog","modal-lg"],["ngNativeValidate","",1,"modal-content",3,"appApiAction","ngSubmit"],["form",""],[1,"modal-header"],["id","userAccessTitle",1,"modal-title"],["type","button","data-dismiss","modal",1,"close",3,"appA11yTitle"],["aria-hidden","true"],["class","modal-body",4,"ngIf"],[1,"modal-footer"],["type","submit",1,"btn","btn-primary","btn-submit",3,"disabled"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin",3,"title"],["type","button","data-dismiss","modal",1,"btn","btn-outline-secondary"],[1,"modal-body"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin","text-muted",3,"title"],[1,"sr-only"],[1,"d-flex"],[1,"mr-3"],["for","search",1,"sr-only"],["type","search","id","search","name","SearchText",1,"form-control","form-control-sm",3,"placeholder","ngModel","ngModelChange"],["role","group",1,"btn-group","btn-group-sm"],["type","button",1,"btn","btn-outline-secondary",3,"ngClass","click"],["class","badge badge-pill badge-info",4,"ngIf"],[4,"ngIf"],[1,"badge","badge-pill","badge-info"],[1,"table","table-hover","table-list","mb-0"],["width","100","class","text-center",4,"ngIf"],[4,"ngFor","ngForOf"],["width","100",1,"text-center"],[1,"table-list-checkbox",3,"click"],["type","checkbox","appStopProp","",3,"ngModel","name","disabled","ngModelChange","change"],["width","30",3,"click"],["size","25",3,"data","email","circle","fontSize"],["class","badge badge-secondary",4,"ngIf"],["class","badge badge-warning",4,"ngIf"],["class","text-muted d-block",4,"ngIf"],["class","text-center",4,"ngIf"],[1,"badge","badge-secondary"],[1,"badge","badge-warning"],[1,"text-muted","d-block"],["aria-hidden","true",1,"fa","fa-th",3,"title"],[1,"text-center"],["type","checkbox",3,"ngModel","name","disabled","ngModelChange"]],template:function(e,t){if(1&e&&(p.ɵɵelementStart(0,"div",0),p.ɵɵtext(1,"\n "),p.ɵɵelementStart(2,"div",1),p.ɵɵtext(3,"\n "),p.ɵɵelementStart(4,"form",2,3),p.ɵɵlistener("ngSubmit",(function(){return t.submit()})),p.ɵɵtext(6,"\n "),p.ɵɵelementStart(7,"div",4),p.ɵɵtext(8,"\n "),p.ɵɵelementStart(9,"h2",5),p.ɵɵtext(10),p.ɵɵpipe(11,"i18n"),p.ɵɵelementStart(12,"small"),p.ɵɵtext(13),p.ɵɵelementEnd(),p.ɵɵtext(14,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(15,"\n "),p.ɵɵelementStart(16,"button",6),p.ɵɵpipe(17,"i18n"),p.ɵɵtext(18,"\n "),p.ɵɵelementStart(19,"span",7),p.ɵɵtext(20,"×"),p.ɵɵelementEnd(),p.ɵɵtext(21,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(22,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(23,"\n "),p.ɵɵtemplate(24,w,9,6,"div",8),p.ɵɵtext(25,"\n "),p.ɵɵtemplate(26,G,32,22,"div",8),p.ɵɵpipe(27,"search"),p.ɵɵtext(28,"\n "),p.ɵɵelementStart(29,"div",9),p.ɵɵtext(30,"\n "),p.ɵɵelementStart(31,"button",10),p.ɵɵtext(32,"\n "),p.ɵɵelement(33,"i",11),p.ɵɵpipe(34,"i18n"),p.ɵɵtext(35,"\n "),p.ɵɵelementStart(36,"span"),p.ɵɵtext(37),p.ɵɵpipe(38,"i18n"),p.ɵɵelementEnd(),p.ɵɵtext(39,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(40,"\n "),p.ɵɵelementStart(41,"button",12),p.ɵɵtext(42),p.ɵɵpipe(43,"i18n"),p.ɵɵelementEnd(),p.ɵɵtext(44,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(45,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(46,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(47,"\n"),p.ɵɵelementEnd(),p.ɵɵtext(48,"\n")),2&e){var n=p.ɵɵreference(5);p.ɵɵadvance(4),p.ɵɵproperty("appApiAction",t.formPromise),p.ɵɵadvance(6),p.ɵɵtextInterpolate1("\n ",p.ɵɵpipeBind1(11,10,"userAccess"),"\n "),p.ɵɵadvance(3),p.ɵɵtextInterpolate(t.entityName),p.ɵɵadvance(3),p.ɵɵpropertyInterpolate("appA11yTitle",p.ɵɵpipeBind1(17,12,"close")),p.ɵɵadvance(8),p.ɵɵproperty("ngIf",t.loading||!t.users),p.ɵɵadvance(2),p.ɵɵproperty("ngIf",!t.loading&&t.users&&p.ɵɵpipeBindV(27,14,p.ɵɵpureFunction2(26,K,t.users,t.searchText))),p.ɵɵadvance(5),p.ɵɵproperty("disabled",n.loading),p.ɵɵadvance(2),p.ɵɵpropertyInterpolate("title",p.ɵɵpipeBind1(34,20,"loading")),p.ɵɵadvance(4),p.ɵɵtextInterpolate(p.ɵɵpipeBind1(38,22,"save")),p.ɵɵadvance(5),p.ɵɵtextInterpolate(p.ɵɵpipeBind1(43,24,"close"))}},directives:[h.NgControlStatusGroup,h.NgForm,f.ApiActionDirective,v.A11yTitleDirective,y.NgIf,h.DefaultValueAccessor,h.NgControlStatus,h.NgModel,y.NgClass,y.NgForOf,h.CheckboxControlValueAccessor,g.StopPropDirective,x.AvatarComponent],pipes:[b.I18nPipe,S.SearchPipe],encapsulation:2}),e}();t.EntityUsersComponent=q},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0?this.events=this.events.concat(o):this.events=o,this.loading=!1,this.morePromise=null,this.refreshPromise=null,[2]}}))}))},e.ɵfac=function(t){return new(t||e)(o.ɵɵdirectiveInject(a.ApiService),o.ɵɵdirectiveInject(s.I18nService),o.ɵɵdirectiveInject(l.EventService),o.ɵɵdirectiveInject(c.ToasterService))},e.ɵcmp=o.ɵɵdefineComponent({type:e,selectors:[["app-entity-events"]],inputs:{name:"name",entity:"entity",entityId:"entityId",organizationId:"organizationId",showUser:"showUser"},decls:36,vars:12,consts:[["tabindex","-1","role","dialog","aria-modal","true","aria-labelledby","eventLogsTitle",1,"modal","fade"],["role","document",1,"modal-dialog","modal-lg"],[1,"modal-content"],[1,"modal-header"],["id","eventLogsTitle",1,"modal-title"],["class","text-muted",4,"ngIf"],["type","button","data-dismiss","modal",1,"close",3,"appA11yTitle"],["aria-hidden","true"],["class","modal-body",4,"ngIf"],[1,"modal-footer"],["type","button","data-dismiss","modal",1,"btn","btn-outline-secondary"],[1,"text-muted"],[1,"modal-body"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin","text-muted",3,"title"],[1,"sr-only"],[1,"d-flex"],[1,"form-inline"],["for","start",1,"sr-only"],["type","datetime-local","id","start","placeholder","YYYY-MM-DDTHH:MM",1,"form-control","form-control-sm",3,"placeholder","ngModel","ngModelChange"],[1,"mx-2"],["for","end",1,"sr-only"],["type","datetime-local","id","end","placeholder","YYYY-MM-DDTHH:MM",1,"form-control","form-control-sm",3,"placeholder","ngModel","ngModelChange"],["type","button",1,"btn","btn-sm","btn-outline-primary","ml-3",3,"appApiAction","disabled","click"],["refreshBtn",""],["aria-hidden","true",1,"fa","fa-refresh","fa-fw",3,"ngClass"],[4,"ngIf"],["class","table table-hover mb-0",4,"ngIf"],["type","button","class","btn btn-block btn-link btn-submit",3,"appApiAction","disabled","click",4,"ngIf"],[1,"table","table-hover","mb-0"],["width","210",1,"border-top-0"],["width","40",1,"border-top-0"],["class","border-top-0","width","150",4,"ngIf"],[1,"border-top-0"],[4,"ngFor","ngForOf"],["width","150",1,"border-top-0"],["aria-hidden","true",3,"title"],[3,"innerHTML"],[3,"appA11yTitle"],["type","button",1,"btn","btn-block","btn-link","btn-submit",3,"appApiAction","disabled","click"],["moreBtn",""],["aria-hidden","true",1,"fa","fa-spinner","fa-spin",3,"title"]],template:function(e,t){1&e&&(o.ɵɵelementStart(0,"div",0),o.ɵɵtext(1,"\n "),o.ɵɵelementStart(2,"div",1),o.ɵɵtext(3,"\n "),o.ɵɵelementStart(4,"div",2),o.ɵɵtext(5,"\n "),o.ɵɵelementStart(6,"div",3),o.ɵɵtext(7,"\n "),o.ɵɵelementStart(8,"h2",4),o.ɵɵtext(9),o.ɵɵpipe(10,"i18n"),o.ɵɵtemplate(11,f,2,1,"small",5),o.ɵɵtext(12,"\n "),o.ɵɵelementEnd(),o.ɵɵtext(13,"\n "),o.ɵɵelementStart(14,"button",6),o.ɵɵpipe(15,"i18n"),o.ɵɵtext(16,"\n "),o.ɵɵelementStart(17,"span",7),o.ɵɵtext(18,"×"),o.ɵɵelementEnd(),o.ɵɵtext(19,"\n "),o.ɵɵelementEnd(),o.ɵɵtext(20,"\n "),o.ɵɵelementEnd(),o.ɵɵtext(21,"\n "),o.ɵɵtemplate(22,v,9,6,"div",8),o.ɵɵtext(23,"\n "),o.ɵɵtemplate(24,I,40,25,"div",8),o.ɵɵtext(25,"\n "),o.ɵɵelementStart(26,"div",9),o.ɵɵtext(27,"\n "),o.ɵɵelementStart(28,"button",10),o.ɵɵtext(29),o.ɵɵpipe(30,"i18n"),o.ɵɵelementEnd(),o.ɵɵtext(31,"\n "),o.ɵɵelementEnd(),o.ɵɵtext(32,"\n "),o.ɵɵelementEnd(),o.ɵɵtext(33,"\n "),o.ɵɵelementEnd(),o.ɵɵtext(34,"\n"),o.ɵɵelementEnd(),o.ɵɵtext(35,"\n")),2&e&&(o.ɵɵadvance(9),o.ɵɵtextInterpolate1("\n ",o.ɵɵpipeBind1(10,6,"eventLogs"),"\n "),o.ɵɵadvance(2),o.ɵɵproperty("ngIf",t.name),o.ɵɵadvance(3),o.ɵɵpropertyInterpolate("appA11yTitle",o.ɵɵpipeBind1(15,8,"close")),o.ɵɵadvance(8),o.ɵɵproperty("ngIf",!t.loaded),o.ɵɵadvance(2),o.ɵɵproperty("ngIf",t.loaded),o.ɵɵadvance(5),o.ɵɵtextInterpolate(o.ɵɵpipeBind1(30,10,"close")))},directives:[p.NgIf,u.A11yTitleDirective,d.DefaultValueAccessor,d.NgControlStatus,d.NgModel,m.ApiActionDirective,p.NgClass,p.NgForOf],pipes:[h.I18nPipe,p.DatePipe],encapsulation:2}),e}();t.EntityEventsComponent=E},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(t){void 0===t&&(t=null);var n=e.call(this,t)||this;return null==t||(n.accessBusinessPortal=n.getResponseProperty("AccessBusinessPortal"),n.accessEventLogs=n.getResponseProperty("AccessEventLogs"),n.accessImportExport=n.getResponseProperty("AccessImportExport"),n.accessReports=n.getResponseProperty("AccessReports"),n.manageAllCollections=n.getResponseProperty("ManageAllCollections"),n.manageAssignedCollections=n.getResponseProperty("ManageAssignedCollections"),n.manageCiphers=n.getResponseProperty("ManageCiphers"),n.manageGroups=n.getResponseProperty("ManageGroups"),n.manageSso=n.getResponseProperty("ManageSso"),n.managePolicies=n.getResponseProperty("ManagePolicies"),n.manageUsers=n.getResponseProperty("ManageUsers"),n.manageResetPassword=n.getResponseProperty("ManageResetPassword")),n}return i(t,e),t}(n(23).BaseResponse);t.PermissionsApi=o},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0)return void(this.creditAmount=parseFloat((Math.round(100*e)/100).toString()).toFixed(2).toString())}}catch(t){}this.creditAmount=""},Object.defineProperty(e.prototype,"creditAmountNumber",{get:function(){if(null!=this.creditAmount&&""!==this.creditAmount)try{return parseFloat(this.creditAmount)}catch(e){}return null},enumerable:!0,configurable:!0}),e.ɵfac=function(t){return new(t||e)(c.ɵɵdirectiveInject(p.UserService),c.ɵɵdirectiveInject(u.ApiService),c.ɵɵdirectiveInject(d.PlatformUtilsService))},e.ɵcmp=c.ɵɵdefineComponent({type:e,selectors:[["app-add-credit"]],viewQuery:function(e,t){var n;(1&e&&c.ɵɵstaticViewQuery(g,!0,o.ElementRef),2&e)&&(c.ɵɵqueryRefresh(n=c.ɵɵloadQuery())&&(t.ppButtonFormRef=n.first))},inputs:{creditAmount:"creditAmount",showOptions:"showOptions",method:"method",organizationId:"organizationId"},outputs:{onAdded:"onAdded",onCanceled:"onCanceled"},decls:92,vars:32,consts:[["ngNativeValidate","",1,"card",3,"appApiAction","ngSubmit"],["form",""],[1,"card-body"],["type","button",1,"close",3,"appA11yTitle","click"],["aria-hidden","true"],[1,"card-body-header"],["class","mb-4 text-lg",4,"ngIf"],[1,"form-group"],[1,"row"],[1,"col-4"],["for","creditAmount"],[1,"input-group"],[1,"input-group-prepend"],[1,"input-group-text"],["id","creditAmount","type","text","name","CreditAmount","required","",1,"form-control",3,"ngModel","ngModelChange","blur"],[1,"form-text","text-muted"],["type","submit",1,"btn","btn-primary","btn-submit",3,"disabled"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin",3,"title"],["type","button",1,"btn","btn-outline-secondary",3,"click"],["method","post","target","_top",3,"action"],["ppButtonForm",""],["type","hidden","name","cmd","value","_xclick"],["type","hidden","name","business",3,"value"],["type","hidden","name","button_subtype","value","services"],["type","hidden","name","no_note","value","1"],["type","hidden","name","no_shipping","value","1"],["type","hidden","name","rm","value","1"],["type","hidden","name","return",3,"value"],["type","hidden","name","cancel_return",3,"value"],["type","hidden","name","currency_code","value","USD"],["type","hidden","name","image_url","value","https://bitwarden.com/images/paypal-banner.png"],["type","hidden","name","bn","value","PP-BuyNowBF:btn_buynow_LG.gif:NonHosted"],["type","hidden","name","amount",3,"value"],["type","hidden","name","custom",3,"value"],["type","hidden","name","item_name","value","Bitwarden Account Credit"],["type","hidden","name","item_number",3,"value"],[1,"mb-4","text-lg"],[1,"form-check","form-check-inline"],["type","radio","name","Method","id","credit-method-paypal",1,"form-check-input",3,"value","ngModel","ngModelChange"],["for","credit-method-paypal",1,"form-check-label"],["aria-hidden","true",1,"fa","fa-fw","fa-paypal"],["type","radio","name","Method","id","credit-method-bitcoin",1,"form-check-input",3,"value","ngModel","ngModelChange"],["for","credit-method-bitcoin",1,"form-check-label"],["aria-hidden","true",1,"fa","fa-fw","fa-bitcoin"]],template:function(e,t){if(1&e&&(c.ɵɵelementStart(0,"form",0,1),c.ɵɵlistener("ngSubmit",(function(){return t.submit()})),c.ɵɵtext(2,"\n "),c.ɵɵelementStart(3,"div",2),c.ɵɵtext(4,"\n "),c.ɵɵelementStart(5,"button",3),c.ɵɵlistener("click",(function(){return t.cancel()})),c.ɵɵpipe(6,"i18n"),c.ɵɵelementStart(7,"span",4),c.ɵɵtext(8,"×"),c.ɵɵelementEnd(),c.ɵɵelementEnd(),c.ɵɵtext(9,"\n "),c.ɵɵelementStart(10,"h3",5),c.ɵɵtext(11),c.ɵɵpipe(12,"i18n"),c.ɵɵelementEnd(),c.ɵɵtext(13,"\n "),c.ɵɵtemplate(14,x,22,4,"div",6),c.ɵɵtext(15,"\n "),c.ɵɵelementStart(16,"div",7),c.ɵɵtext(17,"\n "),c.ɵɵelementStart(18,"div",8),c.ɵɵtext(19,"\n "),c.ɵɵelementStart(20,"div",9),c.ɵɵtext(21,"\n "),c.ɵɵelementStart(22,"label",10),c.ɵɵtext(23),c.ɵɵpipe(24,"i18n"),c.ɵɵelementEnd(),c.ɵɵtext(25,"\n "),c.ɵɵelementStart(26,"div",11),c.ɵɵtext(27,"\n "),c.ɵɵelementStart(28,"div",12),c.ɵɵelementStart(29,"span",13),c.ɵɵtext(30,"$USD"),c.ɵɵelementEnd(),c.ɵɵelementEnd(),c.ɵɵtext(31,"\n "),c.ɵɵelementStart(32,"input",14),c.ɵɵlistener("ngModelChange",(function(e){return t.creditAmount=e}))("blur",(function(){return t.formatAmount()})),c.ɵɵelementEnd(),c.ɵɵtext(33,"\n "),c.ɵɵelementEnd(),c.ɵɵtext(34,"\n "),c.ɵɵelementEnd(),c.ɵɵtext(35,"\n "),c.ɵɵelementEnd(),c.ɵɵtext(36,"\n "),c.ɵɵelementStart(37,"small",15),c.ɵɵtext(38),c.ɵɵpipe(39,"i18n"),c.ɵɵelementEnd(),c.ɵɵtext(40,"\n "),c.ɵɵelementEnd(),c.ɵɵtext(41,"\n "),c.ɵɵelementStart(42,"button",16),c.ɵɵtext(43,"\n "),c.ɵɵelement(44,"i",17),c.ɵɵpipe(45,"i18n"),c.ɵɵtext(46,"\n "),c.ɵɵelementStart(47,"span"),c.ɵɵtext(48),c.ɵɵpipe(49,"i18n"),c.ɵɵelementEnd(),c.ɵɵtext(50,"\n "),c.ɵɵelementEnd(),c.ɵɵtext(51,"\n "),c.ɵɵelementStart(52,"button",18),c.ɵɵlistener("click",(function(){return t.cancel()})),c.ɵɵtext(53),c.ɵɵpipe(54,"i18n"),c.ɵɵelementEnd(),c.ɵɵtext(55,"\n "),c.ɵɵelementEnd(),c.ɵɵtext(56,"\n"),c.ɵɵelementEnd(),c.ɵɵtext(57,"\n"),c.ɵɵelementStart(58,"form",19,20),c.ɵɵtext(60,"\n "),c.ɵɵelement(61,"input",21),c.ɵɵtext(62,"\n "),c.ɵɵelement(63,"input",22),c.ɵɵtext(64,"\n "),c.ɵɵelement(65,"input",23),c.ɵɵtext(66,"\n "),c.ɵɵelement(67,"input",24),c.ɵɵtext(68,"\n "),c.ɵɵelement(69,"input",25),c.ɵɵtext(70,"\n "),c.ɵɵelement(71,"input",26),c.ɵɵtext(72,"\n "),c.ɵɵelement(73,"input",27),c.ɵɵtext(74,"\n "),c.ɵɵelement(75,"input",28),c.ɵɵtext(76,"\n "),c.ɵɵelement(77,"input",29),c.ɵɵtext(78,"\n "),c.ɵɵelement(79,"input",30),c.ɵɵtext(80,"\n "),c.ɵɵelement(81,"input",31),c.ɵɵtext(82,"\n "),c.ɵɵelement(83,"input",32),c.ɵɵtext(84,"\n "),c.ɵɵelement(85,"input",33),c.ɵɵtext(86,"\n "),c.ɵɵelement(87,"input",34),c.ɵɵtext(88,"\n "),c.ɵɵelement(89,"input",35),c.ɵɵtext(90,"\n"),c.ɵɵelementEnd(),c.ɵɵtext(91,"\n")),2&e){var n=c.ɵɵreference(1);c.ɵɵproperty("appApiAction",t.formPromise),c.ɵɵadvance(5),c.ɵɵpropertyInterpolate("appA11yTitle",c.ɵɵpipeBind1(6,18,"cancel")),c.ɵɵadvance(6),c.ɵɵtextInterpolate(c.ɵɵpipeBind1(12,20,"addCredit")),c.ɵɵadvance(3),c.ɵɵproperty("ngIf",t.showOptions),c.ɵɵadvance(9),c.ɵɵtextInterpolate(c.ɵɵpipeBind1(24,22,"amount")),c.ɵɵadvance(9),c.ɵɵproperty("ngModel",t.creditAmount),c.ɵɵadvance(6),c.ɵɵtextInterpolate(c.ɵɵpipeBind1(39,24,"creditDelayed")),c.ɵɵadvance(4),c.ɵɵproperty("disabled",n.loading||t.ppLoading),c.ɵɵadvance(2),c.ɵɵpropertyInterpolate("title",c.ɵɵpipeBind1(45,26,"loading")),c.ɵɵadvance(4),c.ɵɵtextInterpolate(c.ɵɵpipeBind1(49,28,"submit")),c.ɵɵadvance(5),c.ɵɵtextInterpolate1("\n ",c.ɵɵpipeBind1(54,30,"cancel"),"\n "),c.ɵɵadvance(5),c.ɵɵpropertyInterpolate("action",t.ppButtonFormAction,c.ɵɵsanitizeUrl),c.ɵɵadvance(5),c.ɵɵpropertyInterpolate("value",t.ppButtonBusinessId),c.ɵɵadvance(10),c.ɵɵpropertyInterpolate("value",t.returnUrl),c.ɵɵadvance(2),c.ɵɵpropertyInterpolate("value",t.returnUrl),c.ɵɵadvance(8),c.ɵɵpropertyInterpolate("value",t.creditAmount),c.ɵɵadvance(2),c.ɵɵpropertyInterpolate("value",t.ppButtonCustomField),c.ɵɵadvance(4),c.ɵɵpropertyInterpolate("value",t.subject)}},directives:[m.NgControlStatusGroup,m.NgForm,h.ApiActionDirective,f.A11yTitleDirective,v.NgIf,m.DefaultValueAccessor,m.RequiredValidator,m.NgControlStatus,m.NgModel,m.ɵangular_packages_forms_forms_y,m.RadioControlValueAccessor],pipes:[y.I18nPipe],encapsulation:2}),e}();t.AddCreditComponent=b},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&(t.push(e),r.exposedPasswordMap.set(e.id,n))}));n.push(i)}})),[4,Promise.all(n)];case 2:return i.sent(),this.ciphers=t,[2]}}))}))},t.prototype.getAllCiphers=function(){return this.cipherService.getAllDecrypted()},t.prototype.canManageCipher=function(e){return!0},t.ɵfac=function(e){return new(e||t)(c.ɵɵdirectiveInject(p.CipherService),c.ɵɵdirectiveInject(u.AuditService),c.ɵɵdirectiveInject(c.ComponentFactoryResolver),c.ɵɵdirectiveInject(d.MessagingService),c.ɵɵdirectiveInject(m.UserService))},t.ɵcmp=c.ɵɵdefineComponent({type:t,selectors:[["app-exposed-passwords-report"]],features:[c.ɵɵInheritDefinitionFeature],decls:26,vars:14,consts:[[1,"page-header"],["type","button",1,"btn","btn-primary","btn-submit",3,"disabled","click"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin",3,"title"],["class","mt-4",4,"ngIf"],["cipherAddEdit",""],[1,"mt-4"],["type","success",3,"title",4,"ngIf"],[4,"ngIf"],["type","success",3,"title"],["type","danger",3,"title"],[1,"table","table-hover","table-list","table-ciphers"],[4,"ngFor","ngForOf"],[1,"table-list-icon"],[3,"cipher"],[1,"reduced-lh","wrap"],[4,"ngIf","ngIfElse"],["cantManage",""],[1,"text-right"],[1,"badge","badge-warning"],["href","#","appStopClick","",3,"title","click"],["appStopProp","","aria-hidden","true",1,"fa","fa-share-alt",3,"title"],[1,"sr-only"],["appStopProp","","aria-hidden","true",1,"fa","fa-paperclip",3,"title"]],template:function(e,t){1&e&&(c.ɵɵelementStart(0,"div",0),c.ɵɵtext(1,"\n "),c.ɵɵelementStart(2,"h1"),c.ɵɵtext(3),c.ɵɵpipe(4,"i18n"),c.ɵɵelementEnd(),c.ɵɵtext(5,"\n"),c.ɵɵelementEnd(),c.ɵɵtext(6,"\n"),c.ɵɵelementStart(7,"p"),c.ɵɵtext(8),c.ɵɵpipe(9,"i18n"),c.ɵɵelementEnd(),c.ɵɵtext(10,"\n"),c.ɵɵelementStart(11,"button",1),c.ɵɵlistener("click",(function(){return t.load()})),c.ɵɵtext(12,"\n "),c.ɵɵelement(13,"i",2),c.ɵɵpipe(14,"i18n"),c.ɵɵtext(15,"\n "),c.ɵɵelementStart(16,"span"),c.ɵɵtext(17),c.ɵɵpipe(18,"i18n"),c.ɵɵelementEnd(),c.ɵɵtext(19,"\n"),c.ɵɵelementEnd(),c.ɵɵtext(20,"\n"),c.ɵɵtemplate(21,k,6,2,"div",3),c.ɵɵtext(22,"\n"),c.ɵɵtemplate(23,_,0,0,"ng-template",null,4,c.ɵɵtemplateRefExtractor),c.ɵɵtext(25,"\n")),2&e&&(c.ɵɵadvance(3),c.ɵɵtextInterpolate(c.ɵɵpipeBind1(4,6,"exposedPasswordsReport")),c.ɵɵadvance(5),c.ɵɵtextInterpolate(c.ɵɵpipeBind1(9,8,"exposedPasswordsReportDesc")),c.ɵɵadvance(3),c.ɵɵproperty("disabled",t.loading),c.ɵɵadvance(2),c.ɵɵpropertyInterpolate("title",c.ɵɵpipeBind1(14,10,"loading")),c.ɵɵadvance(4),c.ɵɵtextInterpolate(c.ɵɵpipeBind1(18,12,"checkExposedPasswords")),c.ɵɵadvance(4),c.ɵɵproperty("ngIf",t.hasLoaded))},directives:[h.NgIf,f.CalloutComponent,h.NgForOf,v.IconComponent,y.StopClickDirective,g.StopPropDirective],pipes:[x.I18nPipe,h.DecimalPipe],encapsulation:2}),t}(l.CipherReportComponent);t.ExposedPasswordsReportComponent=A},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},a=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]1||!this.allowPersonal)&&(null!=this.organization?this.cloneMode&&this.organization.canManageAllCollections:!this.editMode||this.cloneMode)},t.prototype.loadCollections=function(){return this.organization.canManageAllCollections?Promise.resolve(this.collections):e.prototype.loadCollections.call(this)},t.prototype.loadCipher=function(){return o(this,void 0,void 0,(function(){var t,n;return a(this,(function(r){switch(r.label){case 0:return this.organization.canManageAllCollections?[3,2]:[4,e.prototype.loadCipher.call(this)];case 1:return[2,r.sent()];case 2:return[4,this.apiService.getCipherAdmin(this.cipherId)];case 3:return t=r.sent(),n=new s.CipherData(t),this.originalCipher=new l.Cipher(n),[2,new l.Cipher(n)]}}))}))},t.prototype.encryptCipher=function(){return this.organization.canManageAllCollections?this.cipherService.encrypt(this.cipher,null,this.originalCipher):e.prototype.encryptCipher.call(this)},t.prototype.saveCipher=function(t){return o(this,void 0,void 0,(function(){var n;return a(this,(function(r){return this.organization.canManageAllCollections&&null!=t.organizationId?this.editMode&&!this.cloneMode?(n=new p.CipherRequest(t),[2,this.apiService.putCipherAdmin(this.cipherId,n)]):(n=new c.CipherCreateRequest(t),[2,this.apiService.postCipherAdmin(n)]):[2,e.prototype.saveCipher.call(this,t)]}))}))},t.prototype.deleteCipher=function(){return o(this,void 0,void 0,(function(){return a(this,(function(t){return this.organization.canManageAllCollections?[2,this.cipher.isDeleted?this.apiService.deleteCipherAdmin(this.cipherId):this.apiService.putDeleteCipherAdmin(this.cipherId)]:[2,e.prototype.deleteCipher.call(this)]}))}))},t.ɵfac=function(e){return new(e||t)(d.ɵɵdirectiveInject(m.CipherService),d.ɵɵdirectiveInject(h.FolderService),d.ɵɵdirectiveInject(f.I18nService),d.ɵɵdirectiveInject(v.PlatformUtilsService),d.ɵɵdirectiveInject(y.AuditService),d.ɵɵdirectiveInject(g.StateService),d.ɵɵdirectiveInject(x.UserService),d.ɵɵdirectiveInject(b.CollectionService),d.ɵɵdirectiveInject(S.TotpService),d.ɵɵdirectiveInject(w.PasswordGenerationService),d.ɵɵdirectiveInject(C.ApiService),d.ɵɵdirectiveInject(I.MessagingService),d.ɵɵdirectiveInject(E.EventService),d.ɵɵdirectiveInject(P.PolicyService))},t.ɵcmp=d.ɵɵdefineComponent({type:t,selectors:[["app-org-vault-add-edit"]],features:[d.ɵɵInheritDefinitionFeature],decls:36,vars:11,consts:[["tabindex","-1","role","dialog","aria-modal","true","aria-labelledby","cipherAddEditTitle",1,"modal","fade"],["role","document",1,"modal-dialog","modal-lg"],["ngNativeValidate","","autocomplete","off",1,"modal-content",3,"appApiAction","ngSubmit"],["form",""],[1,"modal-header"],["id","cipherAddEditTitle",1,"modal-title"],["type","button","data-dismiss","modal",1,"close",3,"appA11yTitle"],["aria-hidden","true"],["class","modal-body",4,"ngIf"],[1,"modal-footer"],["type","submit","class","btn btn-primary btn-submit",3,"disabled",4,"ngIf"],["type","button","data-dismiss","modal",1,"btn","btn-outline-secondary"],["class","ml-auto",4,"ngIf"],[1,"modal-body"],["type","info",4,"ngIf"],["class","row",4,"ngIf"],[1,"row"],[1,"col-6","form-group"],["for","name"],["id","name","type","text","name","Name","required","",1,"form-control",3,"ngModel","disabled","ngModelChange"],["class","col-6 form-group",4,"ngIf"],[4,"ngIf"],[1,"form-group"],["for","notes"],["id","notes","name","Notes","rows","6",1,"form-control",3,"ngModel","disabled","ngModelChange"],[1,"mt-4"],["cdkDropList","",3,"cdkDropListDropped",4,"ngIf"],["href","#","appStopClick","","class","d-inline-block mb-2",3,"click",4,"ngIf"],["type","info"],["for","type"],["id","type","name","Type","appAutofocus","",1,"form-control",3,"ngModel","disabled","ngModelChange"],[3,"ngValue",4,"ngFor","ngForOf"],[3,"ngValue"],["for","folder"],["id","folder","name","FolderId",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","loginUsername"],[1,"input-group"],["id","loginUsername","type","text","name","Login.Username","appInputVerbatim","",1,"form-control",3,"ngModel","disabled","ngModelChange"],["class","input-group-append",4,"ngIf"],[1,"d-flex"],["for","loginPassword"],["class","ml-auto d-flex",4,"ngIf"],["id","loginPassword","name","Login.Password","appInputVerbatim","","autocomplete","new-password",1,"form-control","text-monospace",3,"type","ngModel","disabled","ngModelChange"],[1,"input-group-append"],["type","button",1,"btn","btn-outline-secondary",3,"appA11yTitle","disabled","click"],["aria-hidden","true",1,"fa","fa-lg",3,"ngClass"],["aria-hidden","true",1,"fa","fa-lg","fa-clone"],["for","loginTotp"],["id","loginTotp","name","Login.Totp","appInputVerbatim","",1,"form-control","text-monospace",3,"type","ngModel","disabled","ngModelChange"],[1,"col-6","form-group","totp","d-flex","align-items-end",3,"ngClass"],["class","d-flex align-items-center",4,"ngIf"],["href","#","appStopClick","","class","d-inline-block mb-3",3,"click",4,"ngIf"],["type","button",1,"btn","btn-outline-secondary",3,"appA11yTitle","click"],[1,"ml-auto","d-flex"],["href","#","class","d-block mr-2 fa-icon-above-input","appStopClick","",3,"appA11yTitle","click",4,"ngIf"],["href","#","appStopClick","",1,"d-block","fa-icon-above-input",3,"appA11yTitle","appApiAction","click"],["checkPasswordBtn",""],["aria-hidden","true",1,"fa","fa-lg","fa-fw","fa-check-circle",3,"hidden"],["aria-hidden","true",1,"fa","fa-lg","fa-fw","fa-spinner","fa-spin",3,"hidden","title"],["href","#","appStopClick","",1,"d-block","mr-2","fa-icon-above-input",3,"appA11yTitle","click"],["aria-hidden","true",1,"fa","fa-lg","fa-fw","fa-refresh"],["src","images/totp-countdown.png",1,"ml-2",3,"title"],["href","#","appStopClick","","class","badge badge-primary ml-3",3,"click",4,"ngIf"],["href","#","appStopClick","",1,"badge","badge-primary","ml-3",3,"click"],[1,"d-flex","align-items-center"],[1,"totp-countdown","mr-3","ml-2"],[1,"totp-sec"],["r","12.6","cy","16","cx","16",1,"totp-circle","inner",3,"ngStyle"],["r","14","cy","16","cx","16",1,"totp-circle","outer"],[1,"totp-code","mr-2",3,"title"],["type","button",1,"btn","btn-link",3,"appA11yTitle","click"],["aria-hidden","true",1,"fa","fa-clone"],["class","row",4,"ngFor","ngForOf","ngForTrackBy"],[1,"col-7","form-group"],[3,"for"],["type","text","appInputVerbatim","",1,"form-control",3,"id","name","ngModel","disabled","placeholder","ngModelChange"],["aria-hidden","true",1,"fa","fa-lg","fa-share"],[1,"col-5","form-group"],["href","https://help.bitwarden.com/article/uri-match-detection/","target","_blank","rel","noopener",1,"ml-auto",3,"appA11yTitle"],["aria-hidden","true",1,"fa","fa-question-circle-o"],[1,"form-control","overflow-hidden",3,"id","name","ngModel","disabled","ngModelChange","change"],["type","button","class","btn btn-link text-danger ml-2",3,"appA11yTitle","click",4,"ngIf"],["type","button",1,"btn","btn-link","text-danger","ml-2",3,"appA11yTitle","click"],["aria-hidden","true",1,"fa","fa-minus-circle","fa-lg"],["href","#","appStopClick","",1,"d-inline-block","mb-3",3,"click"],["aria-hidden","true",1,"fa","fa-plus-circle","fa-fw"],["for","cardCardholderName"],["id","cardCardholderName","type","text","name","Card.CardCardholderName",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","cardBrand"],["id","cardBrand","name","Card.Brand",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","cardNumber"],["id","cardNumber","type","text","name","Card.Number","appInputVerbatim","",1,"form-control",3,"ngModel","disabled","ngModelChange"],[1,"col","form-group"],["for","cardExpMonth"],["id","cardExpMonth","name","Card.ExpMonth",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","cardExpYear"],["id","cardExpYear","type","text","name","Card.ExpYear",1,"form-control",3,"ngModel","placeholder","disabled","ngModelChange"],["for","cardCode"],["id","cardCode","name","Card.Code","appInputVerbatim","","autocomplete","new-password",1,"form-control","text-monospace",3,"type","ngModel","disabled","ngModelChange"],[1,"col-4","form-group"],["for","idTitle"],["id","idTitle","name","Identity.Title",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idFirstName"],["id","idFirstName","type","text","name","Identity.FirstName",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idMiddleName"],["id","idMiddleName","type","text","name","Identity.MiddleName",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idLastName"],["id","idLastName","type","text","name","Identity.LastName",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idUsername"],["id","idUsername","type","text","name","Identity.Username","appInputVerbatim","",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idCompany"],["id","idCompany","type","text","name","Identity.Company",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idSsn"],["id","idSsn","type","text","name","Identity.SSN","appInputVerbatim","",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idPassportNumber"],["id","idPassportNumber","type","text","name","Identity.PassportNumber","appInputVerbatim","",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idLicenseNumber"],["id","idLicenseNumber","type","text","name","Identity.LicenseNumber","appInputVerbatim","",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idEmail"],["id","idEmail","type","text","name","Identity.Email","appInputVerbatim","",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idPhone"],["id","idPhone","type","text","name","Identity.Phone",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idAddress1"],["id","idAddress1","type","text","name","Identity.Address1",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idAddress2"],["id","idAddress2","type","text","name","Identity.Address2",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idAddress3"],["id","idAddress3","type","text","name","Identity.Address3",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idCity"],["id","idCity","type","text","name","Identity.City",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idState"],["id","idState","type","text","name","Identity.State",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idPostalCode"],["id","idPostalCode","type","text","name","Identity.PostalCode",1,"form-control",3,"ngModel","disabled","ngModelChange"],["for","idCountry"],["id","idCountry","type","text","name","Identity.Country",1,"form-control",3,"ngModel","disabled","ngModelChange"],["cdkDropList","",3,"cdkDropListDropped"],["class","row","cdkDrag","",4,"ngFor","ngForOf","ngForTrackBy"],["cdkDrag","",1,"row"],["href","https://help.bitwarden.com/article/custom-fields/","target","_blank","rel","noopener",1,"ml-auto",3,"appA11yTitle"],["type","text","appInputVerbatim","",1,"form-control",3,"id","name","ngModel","disabled","ngModelChange"],["class","input-group",4,"ngIf"],[1,"flex-fill"],["type","checkbox","appTrueFalseValue","","trueValue","true","falseValue","false",3,"id","name","ngModel","disabled","ngModelChange",4,"ngIf"],["type","button","class","btn btn-link text-muted cursor-move",3,"appA11yTitle",4,"ngIf"],["appInputVerbatim","","autocomplete","new-password",1,"form-control","text-monospace",3,"id","type","name","ngModel","disabled","ngModelChange"],["type","checkbox","appTrueFalseValue","","trueValue","true","falseValue","false",3,"id","name","ngModel","disabled","ngModelChange"],["type","button",1,"btn","btn-link","text-muted","cursor-move",3,"appA11yTitle"],["aria-hidden","true",1,"fa","fa-bars","fa-lg"],["href","#","appStopClick","",1,"d-inline-block","mb-2",3,"click"],[1,"col-5"],["for","addFieldType",1,"sr-only"],["id","addFieldType","name","AddFieldType",1,"form-control",3,"ngModel","ngModelChange"],["for","organizationId"],["id","organizationId","name","OrganizationId",1,"form-control",3,"ngModel","disabled","ngModelChange","change"],["class","form-check",4,"ngFor","ngForOf"],[1,"form-check"],["type","checkbox",1,"form-check-input",3,"ngModel","id","name","disabled","ngModelChange"],[1,"form-check-label",3,"for"],[1,"small","text-muted","mt-4"],[1,"font-weight-semibold"],["class","ml-3",4,"ngIf"],["href","#","appStopClick","",3,"title","click"],[1,"ml-3"],[4,"ngFor","ngForOf"],[1,"password-wrapper","text-monospace","ml-2"],["type","submit",1,"btn","btn-primary","btn-submit",3,"disabled"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin",3,"title"],[1,"ml-auto"],["type","button","class","btn btn-link",3,"appA11yTitle","click",4,"ngIf"],["type","button","class","btn btn-outline-danger",3,"appA11yTitle","disabled","appApiAction","click",4,"ngIf"],["type","button",1,"btn","btn-outline-danger",3,"appA11yTitle","disabled","appApiAction","click"],["deleteBtn",""],["aria-hidden","true",1,"fa","fa-trash-o","fa-lg","fa-fw",3,"hidden"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin","fa-lg","fa-fw",3,"hidden","title"]],template:function(e,t){1&e&&(d.ɵɵelementStart(0,"div",0),d.ɵɵtext(1,"\n "),d.ɵɵelementStart(2,"div",1),d.ɵɵtext(3,"\n "),d.ɵɵelementStart(4,"form",2,3),d.ɵɵlistener("ngSubmit",(function(){return t.submit()})),d.ɵɵtext(6,"\n "),d.ɵɵelementStart(7,"div",4),d.ɵɵtext(8,"\n "),d.ɵɵelementStart(9,"h2",5),d.ɵɵtext(10),d.ɵɵelementEnd(),d.ɵɵtext(11,"\n "),d.ɵɵelementStart(12,"button",6),d.ɵɵpipe(13,"i18n"),d.ɵɵtext(14,"\n "),d.ɵɵelementStart(15,"span",7),d.ɵɵtext(16,"×"),d.ɵɵelementEnd(),d.ɵɵtext(17,"\n "),d.ɵɵelementEnd(),d.ɵɵtext(18,"\n "),d.ɵɵelementEnd(),d.ɵɵtext(19,"\n "),d.ɵɵtemplate(20,Te,54,25,"div",8),d.ɵɵtext(21,"\n "),d.ɵɵelementStart(22,"div",9),d.ɵɵtext(23,"\n "),d.ɵɵtemplate(24,Me,9,7,"button",10),d.ɵɵtext(25,"\n "),d.ɵɵelementStart(26,"button",11),d.ɵɵtext(27),d.ɵɵpipe(28,"i18n"),d.ɵɵelementEnd(),d.ɵɵtext(29,"\n "),d.ɵɵtemplate(30,Ve,6,2,"div",12),d.ɵɵtext(31,"\n "),d.ɵɵelementEnd(),d.ɵɵtext(32,"\n "),d.ɵɵelementEnd(),d.ɵɵtext(33,"\n "),d.ɵɵelementEnd(),d.ɵɵtext(34,"\n"),d.ɵɵelementEnd(),d.ɵɵtext(35,"\n")),2&e&&(d.ɵɵadvance(4),d.ɵɵproperty("appApiAction",t.formPromise),d.ɵɵadvance(6),d.ɵɵtextInterpolate(t.title),d.ɵɵadvance(2),d.ɵɵpropertyInterpolate("appA11yTitle",d.ɵɵpipeBind1(13,7,"close")),d.ɵɵadvance(8),d.ɵɵproperty("ngIf",t.cipher),d.ɵɵadvance(4),d.ɵɵproperty("ngIf",!t.viewOnly),d.ɵɵadvance(3),d.ɵɵtextInterpolate1("\n ",d.ɵɵpipeBind1(28,9,t.viewOnly?"close":"cancel"),"\n "),d.ɵɵadvance(3),d.ɵɵproperty("ngIf",t.cipher&&!t.viewOnly))},directives:[k.NgControlStatusGroup,k.NgForm,_.ApiActionDirective,A.A11yTitleDirective,O.NgIf,k.DefaultValueAccessor,k.RequiredValidator,k.NgControlStatus,k.NgModel,T.CalloutComponent,k.SelectControlValueAccessor,M.AutofocusDirective,O.NgForOf,k.NgSelectOption,k.ɵangular_packages_forms_forms_x,B.InputVerbatimDirective,O.NgClass,D.StopClickDirective,O.NgStyle,R.CdkDropList,R.CdkDrag,V.TrueFalseValueDirective,k.CheckboxControlValueAccessor],pipes:[j.I18nPipe,O.DatePipe],encapsulation:2}),t}(u.AddEditComponent);t.AddEditComponent=je},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){null!=e&&(this.id=e.id,this.url=e.url,this.fileName=e.fileName,this.key=e.key,this.size=e.size,this.sizeName=e.sizeName)};t.AttachmentData=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){null!=e&&(this.cardholderName=e.cardholderName,this.brand=e.brand,this.number=e.number,this.expMonth=e.expMonth,this.expYear=e.expYear,this.code=e.code)};t.CardData=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){null!=e&&(this.type=e.type,this.name=e.name,this.value=e.value)};t.FieldData=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){null!=e&&(this.title=e.title,this.firstName=e.firstName,this.middleName=e.middleName,this.lastName=e.lastName,this.address1=e.address1,this.address2=e.address2,this.address3=e.address3,this.city=e.city,this.state=e.state,this.postalCode=e.postalCode,this.country=e.country,this.company=e.company,this.email=e.email,this.phone=e.phone,this.ssn=e.ssn,this.username=e.username,this.passportNumber=e.passportNumber,this.licenseNumber=e.licenseNumber)};t.IdentityData=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(487),i=function(e){null!=e&&(this.username=e.username,this.password=e.password,this.passwordRevisionDate=e.passwordRevisionDate,this.totp=e.totp,e.uris&&(this.uris=e.uris.map((function(e){return new r.LoginUriData(e)}))))};t.LoginData=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){this.match=null,null!=e&&(this.uri=e.uri,this.match=e.match)};t.LoginUriData=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){null!=e&&(this.type=e.type)};t.SecureNoteData=r},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},a=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0))return[3,4];i.label=1;case 1:return i.trys.push([1,3,,4]),[4,this.getFileContents(n[0])];case 2:return null!=(o=i.sent())&&(r=o),[3,4];case 3:return i.sent(),[3,4];case 4:if(null==r||""===r)return this.toasterService.popAsync("error",this.i18nService.t("errorOccurred"),this.i18nService.t("selectFile")),this.loading=!1,[2];i.label=5;case 5:return i.trys.push([5,7,,8]),this.formPromise=this.importService.import(e,r,this.organizationId),[4,this.formPromise];case 6:return null!=(a=i.sent())?(this.error(a),this.loading=!1,[2]):(this.toasterService.popAsync("success",null,this.i18nService.t("importSuccess")),this.router.navigate(this.successNavigate),[3,8]);case 7:return i.sent(),[3,8];case 8:return this.loading=!1,[2]}}))}))},e.prototype.getFormatInstructionTitle=function(){var e=this;if(null==this.format)return null;var t=this.featuredImportOptions.concat(this.importOptions).filter((function(t){return t.id===e.format}));return t.length>0?this.i18nService.t("instructionsFor",t[0].name):null},e.prototype.setImportOptions=function(){this.featuredImportOptions=o([{id:null,name:"-- "+this.i18nService.t("select")+" --"}],this.importService.featuredImportOptions),this.importOptions=this.importService.regularImportOptions},e.prototype.error=function(e){return r(this,void 0,void 0,(function(){return i(this,(function(t){switch(t.label){case 0:return[4,a.default.fire({heightAuto:!1,buttonsStyling:!1,icon:"error",iconHtml:'',input:"textarea",inputValue:e.message,inputAttributes:{readonly:"true"},title:this.i18nService.t("importError"),text:this.i18nService.t("importErrorDesc"),showConfirmButton:!0,confirmButtonText:this.i18nService.t("ok"),onOpen:function(e){e.querySelector(".swal2-textarea").scrollTo(0,0)}})];case 1:return t.sent(),[2]}}))}))},e.prototype.getFileContents=function(e){var t=this;return new Promise((function(n,r){var i=new FileReader;i.readAsText(e,"utf-8"),i.onload=function(i){if("lastpasscsv"===t.format&&"text/html"===e.type){var o=(new DOMParser).parseFromString(i.target.result,"text/html").querySelector("pre");return null!=o?void n(o.textContent):void r()}n(i.target.result)},i.onerror=function(){r()}}))},e.ɵfac=function(t){return new(t||e)(s.ɵɵdirectiveInject(l.I18nService),s.ɵɵdirectiveInject(c.ToasterService),s.ɵɵdirectiveInject(p.ImportService),s.ɵɵdirectiveInject(u.Router),s.ɵɵdirectiveInject(d.PlatformUtilsService))},e.ɵcmp=s.ɵɵdefineComponent({type:e,selectors:[["app-import"]],decls:67,vars:24,consts:[[1,"page-header"],["ngNativeValidate","",3,"ngSubmit"],["form",""],[1,"row"],[1,"col-6"],[1,"form-group"],["for","type"],["id","type","name","Format","required","",1,"form-control",3,"ngModel","ngModelChange"],[3,"ngValue",4,"ngFor","ngForOf"],[4,"ngIf"],["type","info",3,"title",4,"ngIf"],["for","file"],["type","file","id","file","name","file",1,"form-control-file"],["for","fileContents"],["id","fileContents","name","FileContents",1,"form-control",3,"ngModel","ngModelChange"],["type","submit",1,"btn","btn-primary","btn-submit",3,"disabled"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin",3,"title"],[3,"ngValue"],["value","-","disabled",""],["type","info",3,"title"],["target","_blank","rel","noopener","href","https://help.bitwarden.com/article/export-your-data/"],["target","_blank","rel","noopener","href","https://help.bitwarden.com/article/import-from-lastpass/"],["target","_blank","rel","noopener","href","https://help.bitwarden.com/article/import-from-chrome/"],["target","_blank","rel","noopener","href","https://bitwarden.com/help/article/import-from-firefox/"],["target","_blank","rel","noopener","href","https://help.bitwarden.com/article/import-from-1password/"],["target","_blank","rel","noopener","href","https://bit.ly/2GpOMTg"]],template:function(e,t){1&e&&(s.ɵɵelementStart(0,"div",0),s.ɵɵtext(1,"\n "),s.ɵɵelementStart(2,"h1"),s.ɵɵtext(3),s.ɵɵpipe(4,"i18n"),s.ɵɵelementEnd(),s.ɵɵtext(5,"\n"),s.ɵɵelementEnd(),s.ɵɵtext(6,"\n"),s.ɵɵelementStart(7,"form",1,2),s.ɵɵlistener("ngSubmit",(function(){return t.submit()})),s.ɵɵtext(9,"\n "),s.ɵɵelementStart(10,"div",3),s.ɵɵtext(11,"\n "),s.ɵɵelementStart(12,"div",4),s.ɵɵtext(13,"\n "),s.ɵɵelementStart(14,"div",5),s.ɵɵtext(15,"\n "),s.ɵɵelementStart(16,"label",6),s.ɵɵtext(17),s.ɵɵpipe(18,"i18n"),s.ɵɵelementEnd(),s.ɵɵtext(19,"\n "),s.ɵɵelementStart(20,"select",7),s.ɵɵlistener("ngModelChange",(function(e){return t.format=e})),s.ɵɵtext(21,"\n "),s.ɵɵtemplate(22,y,2,2,"option",8),s.ɵɵtext(23,"\n "),s.ɵɵtemplate(24,x,6,1,"ng-container",9),s.ɵɵtext(25,"\n "),s.ɵɵelementEnd(),s.ɵɵtext(26,"\n "),s.ɵɵelementEnd(),s.ɵɵtext(27,"\n "),s.ɵɵelementEnd(),s.ɵɵtext(28,"\n "),s.ɵɵelementEnd(),s.ɵɵtext(29,"\n "),s.ɵɵtemplate(30,ve,100,50,"app-callout",10),s.ɵɵtext(31,"\n "),s.ɵɵelementStart(32,"div",3),s.ɵɵtext(33,"\n "),s.ɵɵelementStart(34,"div",4),s.ɵɵtext(35,"\n "),s.ɵɵelementStart(36,"div",5),s.ɵɵtext(37,"\n "),s.ɵɵelementStart(38,"label",11),s.ɵɵtext(39),s.ɵɵpipe(40,"i18n"),s.ɵɵelementEnd(),s.ɵɵtext(41,"\n "),s.ɵɵelement(42,"input",12),s.ɵɵtext(43,"\n "),s.ɵɵelementEnd(),s.ɵɵtext(44,"\n "),s.ɵɵelementEnd(),s.ɵɵtext(45,"\n "),s.ɵɵelementEnd(),s.ɵɵtext(46,"\n "),s.ɵɵelementStart(47,"div",5),s.ɵɵtext(48,"\n "),s.ɵɵelementStart(49,"label",13),s.ɵɵtext(50),s.ɵɵpipe(51,"i18n"),s.ɵɵelementEnd(),s.ɵɵtext(52,"\n "),s.ɵɵelementStart(53,"textarea",14),s.ɵɵlistener("ngModelChange",(function(e){return t.fileContents=e})),s.ɵɵelementEnd(),s.ɵɵtext(54,"\n "),s.ɵɵelementEnd(),s.ɵɵtext(55,"\n "),s.ɵɵelementStart(56,"button",15),s.ɵɵtext(57,"\n "),s.ɵɵelement(58,"i",16),s.ɵɵpipe(59,"i18n"),s.ɵɵtext(60,"\n "),s.ɵɵelementStart(61,"span"),s.ɵɵtext(62),s.ɵɵpipe(63,"i18n"),s.ɵɵelementEnd(),s.ɵɵtext(64,"\n "),s.ɵɵelementEnd(),s.ɵɵtext(65,"\n"),s.ɵɵelementEnd(),s.ɵɵtext(66,"\n")),2&e&&(s.ɵɵadvance(3),s.ɵɵtextInterpolate(s.ɵɵpipeBind1(4,12,"importData")),s.ɵɵadvance(14),s.ɵɵtextInterpolate1("1. ",s.ɵɵpipeBind1(18,14,"selectFormat"),""),s.ɵɵadvance(3),s.ɵɵproperty("ngModel",t.format),s.ɵɵadvance(2),s.ɵɵproperty("ngForOf",t.featuredImportOptions),s.ɵɵadvance(2),s.ɵɵproperty("ngIf",t.importOptions&&t.importOptions.length),s.ɵɵadvance(6),s.ɵɵproperty("ngIf",t.format),s.ɵɵadvance(9),s.ɵɵtextInterpolate1("2. ",s.ɵɵpipeBind1(40,16,"selectImportFile"),""),s.ɵɵadvance(11),s.ɵɵtextInterpolate(s.ɵɵpipeBind1(51,18,"orCopyPasteFileContents")),s.ɵɵadvance(3),s.ɵɵproperty("ngModel",t.fileContents),s.ɵɵadvance(3),s.ɵɵproperty("disabled",t.loading),s.ɵɵadvance(2),s.ɵɵpropertyInterpolate("title",s.ɵɵpipeBind1(59,20,"loading")),s.ɵɵadvance(4),s.ɵɵtextInterpolate(s.ɵɵpipeBind1(63,22,"importData")))},directives:[m.NgControlStatusGroup,m.NgForm,m.SelectControlValueAccessor,m.RequiredValidator,m.NgControlStatus,m.NgModel,h.NgForOf,h.NgIf,m.DefaultValueAccessor,m.NgSelectOption,m.ɵangular_packages_forms_forms_x,f.CalloutComponent],pipes:[v.I18nPipe],encapsulation:2}),e}();t.ImportComponent=ye},,function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},a=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0?[4,this.getAllCiphers()]:[3,6];case 4:return e=o.sent(),t=[],n=[],r=new Map,e.forEach((function(e){if(e.type===s.CipherType.Login&&(null==e.login.totp||""===e.login.totp)&&e.login.hasUris&&!e.isDeleted)for(var n=0;n0?[2]:[4,fetch(new Request("https://2fa.directory/api/v2/totp.json"))];case 1:if(200!==(e=a.sent()).status)throw new Error;return[4,e.json()];case 2:for(n in t=a.sent())if(t.hasOwnProperty(n))for(i in r=t[n])r.hasOwnProperty(i)&&null!=(o=r[i]).url&&null!=(s=l.Utils.getHostname(o.url))&&this.services.set(s,o.doc);return[2]}}))}))},t.ɵfac=function(e){return new(e||t)(p.ɵɵdirectiveInject(u.CipherService),p.ɵɵdirectiveInject(p.ComponentFactoryResolver),p.ɵɵdirectiveInject(d.MessagingService),p.ɵɵdirectiveInject(m.UserService))},t.ɵcmp=p.ɵɵdefineComponent({type:t,selectors:[["app-inactive-two-factor-report"]],features:[p.ɵɵInheritDefinitionFeature],decls:20,vars:9,consts:[[1,"page-header"],[4,"ngIf"],["class","mt-4",4,"ngIf"],["cipherAddEdit",""],["aria-hidden","true",1,"fa","fa-spinner","fa-spin","text-muted",3,"title"],[1,"sr-only"],[1,"mt-4"],["type","success",3,"title",4,"ngIf"],["type","success",3,"title"],["type","danger",3,"title"],[1,"table","table-hover","table-list","table-ciphers"],[4,"ngFor","ngForOf"],[1,"table-list-icon"],[3,"cipher"],[1,"reduced-lh","wrap"],["href","#","appStopClick","",3,"title","click"],[1,"text-right"],["class","badge badge-primary","target","_blank","rel","noopener",3,"href",4,"ngIf"],["appStopProp","","aria-hidden","true",1,"fa","fa-share-alt",3,"title"],["appStopProp","","aria-hidden","true",1,"fa","fa-paperclip",3,"title"],["target","_blank","rel","noopener",1,"badge","badge-primary",3,"href"]],template:function(e,t){1&e&&(p.ɵɵelementStart(0,"div",0),p.ɵɵtext(1,"\n "),p.ɵɵelementStart(2,"h1"),p.ɵɵtext(3),p.ɵɵpipe(4,"i18n"),p.ɵɵtemplate(5,b,9,6,"small",1),p.ɵɵtext(6,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(7,"\n"),p.ɵɵelementEnd(),p.ɵɵtext(8,"\n"),p.ɵɵelementStart(9,"p"),p.ɵɵtext(10),p.ɵɵpipe(11,"i18n"),p.ɵɵelementEnd(),p.ɵɵtext(12,"\n"),p.ɵɵtemplate(13,S,9,6,"div",1),p.ɵɵtext(14,"\n"),p.ɵɵtemplate(15,_,6,2,"div",2),p.ɵɵtext(16,"\n"),p.ɵɵtemplate(17,A,0,0,"ng-template",null,3,p.ɵɵtemplateRefExtractor),p.ɵɵtext(19,"\n")),2&e&&(p.ɵɵadvance(3),p.ɵɵtextInterpolate1("\n ",p.ɵɵpipeBind1(4,5,"inactive2faReport"),"\n "),p.ɵɵadvance(2),p.ɵɵproperty("ngIf",t.hasLoaded&&t.loading),p.ɵɵadvance(5),p.ɵɵtextInterpolate(p.ɵɵpipeBind1(11,7,"inactive2faReportDesc")),p.ɵɵadvance(3),p.ɵɵproperty("ngIf",!t.hasLoaded&&t.loading),p.ɵɵadvance(2),p.ɵɵproperty("ngIf",t.hasLoaded))},directives:[h.NgIf,f.CalloutComponent,h.NgForOf,v.IconComponent,y.StopClickDirective,g.StopPropDirective],pipes:[x.I18nPipe,h.DecimalPipe],encapsulation:2}),t}(c.CipherReportComponent);t.InactiveTwoFactorReportComponent=O},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},a=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]1})),this.ciphers=n,[2]}}))}))},t.prototype.getAllCiphers=function(){return this.cipherService.getAllDecrypted()},t.prototype.canManageCipher=function(e){return!0},t.ɵfac=function(e){return new(e||t)(c.ɵɵdirectiveInject(p.CipherService),c.ɵɵdirectiveInject(c.ComponentFactoryResolver),c.ɵɵdirectiveInject(u.MessagingService),c.ɵɵdirectiveInject(d.UserService))},t.ɵcmp=c.ɵɵdefineComponent({type:t,selectors:[["app-reused-passwords-report"]],features:[c.ɵɵInheritDefinitionFeature],decls:20,vars:9,consts:[[1,"page-header"],[4,"ngIf"],["class","mt-4",4,"ngIf"],["cipherAddEdit",""],["aria-hidden","true",1,"fa","fa-spinner","fa-spin","text-muted",3,"title"],[1,"sr-only"],[1,"mt-4"],["type","success",3,"title",4,"ngIf"],["type","success",3,"title"],["type","danger",3,"title"],[1,"table","table-hover","table-list","table-ciphers"],[4,"ngFor","ngForOf"],[1,"table-list-icon"],[3,"cipher"],[1,"reduced-lh","wrap"],[4,"ngIf","ngIfElse"],["cantManage",""],[1,"text-right"],[1,"badge","badge-warning"],["href","#","appStopClick","",3,"title","click"],["appStopProp","","aria-hidden","true",1,"fa","fa-share-alt",3,"title"],["appStopProp","","aria-hidden","true",1,"fa","fa-paperclip",3,"title"]],template:function(e,t){1&e&&(c.ɵɵelementStart(0,"div",0),c.ɵɵtext(1,"\n "),c.ɵɵelementStart(2,"h1"),c.ɵɵtext(3),c.ɵɵpipe(4,"i18n"),c.ɵɵtemplate(5,x,9,6,"small",1),c.ɵɵtext(6,"\n "),c.ɵɵelementEnd(),c.ɵɵtext(7,"\n"),c.ɵɵelementEnd(),c.ɵɵtext(8,"\n"),c.ɵɵelementStart(9,"p"),c.ɵɵtext(10),c.ɵɵpipe(11,"i18n"),c.ɵɵelementEnd(),c.ɵɵtext(12,"\n"),c.ɵɵtemplate(13,b,9,6,"div",1),c.ɵɵtext(14,"\n"),c.ɵɵtemplate(15,_,6,2,"div",2),c.ɵɵtext(16,"\n"),c.ɵɵtemplate(17,A,0,0,"ng-template",null,3,c.ɵɵtemplateRefExtractor),c.ɵɵtext(19,"\n")),2&e&&(c.ɵɵadvance(3),c.ɵɵtextInterpolate1("\n ",c.ɵɵpipeBind1(4,5,"reusedPasswordsReport"),"\n "),c.ɵɵadvance(2),c.ɵɵproperty("ngIf",t.hasLoaded&&t.loading),c.ɵɵadvance(5),c.ɵɵtextInterpolate(c.ɵɵpipeBind1(11,7,"reusedPasswordsReportDesc")),c.ɵɵadvance(3),c.ɵɵproperty("ngIf",!t.hasLoaded&&t.loading),c.ɵɵadvance(2),c.ɵɵproperty("ngIf",t.hasLoaded))},directives:[m.NgIf,h.CalloutComponent,m.NgForOf,f.IconComponent,v.StopClickDirective,y.StopPropDirective],pipes:[g.I18nPipe,m.DecimalPipe],encapsulation:2}),t}(l.CipherReportComponent);t.ReusedPasswordsReportComponent=O},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},a=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]-1?l.concat(e.login.username.substr(0,c).trim().toLowerCase().split(/[^A-Za-z0-9]/)).filter((function(e){return e.length>=3})):e.login.username.trim().toLowerCase().split(/[^A-Za-z0-9]/).filter((function(e){return e.length>=3}))}var p=i.passwordGenerationService.passwordStrength(e.login.password,l.length>0?l:null);i.passwordStrengthCache.set(a,p.score)}var u=i.passwordStrengthCache.get(a);null!=u&&u<=2&&(i.passwordStrengthMap.set(e.id,i.scoreKey(u)),t.push(e))}})),t.sort((function(e,t){return i.passwordStrengthCache.get(r(e))-i.passwordStrengthCache.get(r(t))})),this.ciphers=t,[2]}}))}))},t.prototype.getAllCiphers=function(){return this.cipherService.getAllDecrypted()},t.prototype.canManageCipher=function(e){return!0},t.prototype.scoreKey=function(e){switch(e){case 4:return["strong","success"];case 3:return["good","primary"];case 2:return["weak","warning"];default:return["veryWeak","danger"]}},t.ɵfac=function(e){return new(e||t)(c.ɵɵdirectiveInject(p.CipherService),c.ɵɵdirectiveInject(u.PasswordGenerationService),c.ɵɵdirectiveInject(c.ComponentFactoryResolver),c.ɵɵdirectiveInject(d.MessagingService),c.ɵɵdirectiveInject(m.UserService))},t.ɵcmp=c.ɵɵdefineComponent({type:t,selectors:[["app-weak-passwords-report"]],features:[c.ɵɵInheritDefinitionFeature],decls:20,vars:9,consts:[[1,"page-header"],[4,"ngIf"],["class","mt-4",4,"ngIf"],["cipherAddEdit",""],["aria-hidden","true",1,"fa","fa-spinner","fa-spin","text-muted",3,"title"],[1,"sr-only"],[1,"mt-4"],["type","success",3,"title",4,"ngIf"],["type","success",3,"title"],["type","danger",3,"title"],[1,"table","table-hover","table-list","table-ciphers"],[4,"ngFor","ngForOf"],[1,"table-list-icon"],[3,"cipher"],[1,"reduced-lh","wrap"],[4,"ngIf","ngIfElse"],["cantManage",""],[1,"text-right"],["href","#","appStopClick","",3,"title","click"],["appStopProp","","aria-hidden","true",1,"fa","fa-share-alt",3,"title"],["appStopProp","","aria-hidden","true",1,"fa","fa-paperclip",3,"title"]],template:function(e,t){1&e&&(c.ɵɵelementStart(0,"div",0),c.ɵɵtext(1,"\n "),c.ɵɵelementStart(2,"h1"),c.ɵɵtext(3),c.ɵɵpipe(4,"i18n"),c.ɵɵtemplate(5,b,9,6,"small",1),c.ɵɵtext(6,"\n "),c.ɵɵelementEnd(),c.ɵɵtext(7,"\n"),c.ɵɵelementEnd(),c.ɵɵtext(8,"\n"),c.ɵɵelementStart(9,"p"),c.ɵɵtext(10),c.ɵɵpipe(11,"i18n"),c.ɵɵelementEnd(),c.ɵɵtext(12,"\n"),c.ɵɵtemplate(13,S,9,6,"div",1),c.ɵɵtext(14,"\n"),c.ɵɵtemplate(15,A,6,2,"div",2),c.ɵɵtext(16,"\n"),c.ɵɵtemplate(17,O,0,0,"ng-template",null,3,c.ɵɵtemplateRefExtractor),c.ɵɵtext(19,"\n")),2&e&&(c.ɵɵadvance(3),c.ɵɵtextInterpolate1("\n ",c.ɵɵpipeBind1(4,5,"weakPasswordsReport"),"\n "),c.ɵɵadvance(2),c.ɵɵproperty("ngIf",t.hasLoaded&&t.loading),c.ɵɵadvance(5),c.ɵɵtextInterpolate(c.ɵɵpipeBind1(11,7,"weakPasswordsReportDesc")),c.ɵɵadvance(3),c.ɵɵproperty("ngIf",!t.hasLoaded&&t.loading),c.ɵɵadvance(2),c.ɵɵproperty("ngIf",t.hasLoaded))},directives:[h.NgIf,f.CalloutComponent,h.NgForOf,v.IconComponent,y.StopClickDirective,g.StopPropDirective],pipes:[x.I18nPipe,h.DecimalPipe],encapsulation:2}),t}(l.CipherReportComponent);t.WeakPasswordsReportComponent=T},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},a=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]-1)""===r.substr(o).trim()&&(i=o);e+=r.substring(0,i)}this.platformUtilsService.copyToClipboard(e,{window:window})}},e.ɵfac=function(t){return new(t||e)(r.ɵɵdirectiveInject(r.ElementRef),r.ɵɵdirectiveInject(i.PlatformUtilsService))},e.ɵdir=r.ɵɵdefineDirective({type:e,selectors:[["","appSelectCopy",""]],hostBindings:function(e,t){1&e&&r.ɵɵlistener("copy",(function(){return t.onCopy()}))}}),e}();t.SelectCopyDirective=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(0);var r=n(0),i=function(){function e(){}return e.prototype.transform=function(e){for(var t="",n=0;n":r=">",i=!0;break;case" ":r=" ",i=!0}var o="letter";i||r.match(/[^\w ]/)?o="special":r.match(/\d/)&&(o="number"),t+=''+r+""}return t},e.ɵfac=function(t){return new(t||e)},e.ɵpipe=r.ɵɵdefinePipe({name:"colorPassword",type:e,pure:!0}),e}();t.ColorPasswordPipe=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e,t){this.userId=t,this.name=e.name,this.id=e.id,this.revisionDate=e.revisionDate};t.FolderData=r},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(127),a=function(e){function t(t,n){void 0===n&&(n=!1);var r=e.call(this)||this;return null==t||(r.buildDomainModel(r,t,{id:null,name:null},n,["id"]),r.revisionDate=null!=t.revisionDate?new Date(t.revisionDate):null),r}return i(t,e),t.prototype.decrypt=function(){return this.decryptObj(new o.FolderView(this),{name:null},null)},t}(n(81).default);t.Folder=a},,,,,,function(e,t){},,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.NotificationsService=r},,,,function(e,t){function n(e){return Promise.resolve().then((function(){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}))}n.keys=function(){return[]},n.resolve=n,e.exports=n,n.id=529},,,,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]-1&&(this.email=r.email),null!=r.premium?this.stateService.save("loginRedirect",{route:"/settings/premium"}):null!=r.org&&this.stateService.save("loginRedirect",{route:"/settings/create-organization",qParams:{plan:r.org}}),[4,e.prototype.ngOnInit.call(this)];case 1:return n.sent(),null!=t&&t.unsubscribe(),[2]}}))}))})),[2]}))}))},t.prototype.goAfterLogIn=function(){return o(this,void 0,void 0,(function(){var e,t,n;return a(this,(function(r){switch(r.label){case 0:return[4,this.stateService.get("orgInvitation")];case 1:return e=r.sent(),[4,this.stateService.get("emergencyInvitation")];case 2:return t=r.sent(),null==e?[3,3]:(this.router.navigate(["accept-organization"],{queryParams:e}),[3,8]);case 3:return null==t?[3,4]:(this.router.navigate(["accept-emergency"],{queryParams:t}),[3,8]);case 4:return[4,this.stateService.get("loginRedirect")];case 5:return null==(n=r.sent())?[3,7]:(this.router.navigate([n.route],{queryParams:n.qParams}),[4,this.stateService.remove("loginRedirect")]);case 6:return r.sent(),[3,8];case 7:this.router.navigate([this.successRoute]),r.label=8;case 8:return[2]}}))}))},t.ɵfac=function(e){return new(e||t)(l.ɵɵdirectiveInject(c.AuthService),l.ɵɵdirectiveInject(p.Router),l.ɵɵdirectiveInject(u.I18nService),l.ɵɵdirectiveInject(p.ActivatedRoute),l.ɵɵdirectiveInject(d.StorageService),l.ɵɵdirectiveInject(m.StateService),l.ɵɵdirectiveInject(h.PlatformUtilsService),l.ɵɵdirectiveInject(f.EnvironmentService),l.ɵɵdirectiveInject(v.PasswordGenerationService),l.ɵɵdirectiveInject(y.CryptoFunctionService))},t.ɵcmp=l.ɵɵdefineComponent({type:t,selectors:[["app-login"]],features:[l.ɵɵInheritDefinitionFeature],decls:97,vars:43,consts:[["ngNativeValidate","",1,"container",3,"appApiAction","ngSubmit"],["form",""],[1,"row","justify-content-md-center","mt-5"],[1,"col-5"],["src","images/logo-dark@2x.png","alt","Bitwarden",1,"logo","mb-2"],[1,"lead","text-center","mx-4","mb-4"],[1,"card","d-block"],[1,"card-body"],[1,"form-group"],["for","email"],["id","email","type","text","name","Email","required","","inputmode","email","appInputVerbatim","false",1,"form-control",3,"ngModel","ngModelChange"],["for","masterPassword"],[1,"d-flex"],["id","masterPassword","name","MasterPassword","required","","appInputVerbatim","",1,"text-monospace","form-control",3,"type","ngModel","ngModelChange"],["type","button",1,"ml-1","btn","btn-link",3,"appA11yTitle","click"],["aria-hidden","true",1,"fa","fa-lg",3,"ngClass"],[1,"form-text"],["routerLink","/hint"],[1,"form-check"],["type","checkbox","id","rememberEmail","name","RememberEmail",1,"form-check-input",3,"ngModel","ngModelChange"],["for","rememberEmail",1,"form-check-label"],["type","submit",1,"btn","btn-primary","btn-block","btn-submit",3,"disabled"],["aria-hidden","true",1,"fa","fa-sign-in"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin",3,"title"],["routerLink","/register",1,"btn","btn-outline-secondary","btn-block","ml-2","mt-0",3,"queryParams"],["aria-hidden","true",1,"fa","fa-pencil-square-o"],["routerLink","/sso",1,"btn","btn-outline-secondary","btn-block","mt-2"],["aria-hidden","true",1,"fa","fa-bank"]],template:function(e,t){if(1&e&&(l.ɵɵelementStart(0,"form",0,1),l.ɵɵlistener("ngSubmit",(function(){return t.submit()})),l.ɵɵtext(2,"\n "),l.ɵɵelementStart(3,"div",2),l.ɵɵtext(4,"\n "),l.ɵɵelementStart(5,"div",3),l.ɵɵtext(6,"\n "),l.ɵɵelement(7,"img",4),l.ɵɵtext(8,"\n "),l.ɵɵelementStart(9,"p",5),l.ɵɵtext(10),l.ɵɵpipe(11,"i18n"),l.ɵɵelementEnd(),l.ɵɵtext(12,"\n "),l.ɵɵelementStart(13,"div",6),l.ɵɵtext(14,"\n "),l.ɵɵelementStart(15,"div",7),l.ɵɵtext(16,"\n "),l.ɵɵelementStart(17,"div",8),l.ɵɵtext(18,"\n "),l.ɵɵelementStart(19,"label",9),l.ɵɵtext(20),l.ɵɵpipe(21,"i18n"),l.ɵɵelementEnd(),l.ɵɵtext(22,"\n "),l.ɵɵelementStart(23,"input",10),l.ɵɵlistener("ngModelChange",(function(e){return t.email=e})),l.ɵɵelementEnd(),l.ɵɵtext(24,"\n "),l.ɵɵelementEnd(),l.ɵɵtext(25,"\n "),l.ɵɵelementStart(26,"div",8),l.ɵɵtext(27,"\n "),l.ɵɵelementStart(28,"label",11),l.ɵɵtext(29),l.ɵɵpipe(30,"i18n"),l.ɵɵelementEnd(),l.ɵɵtext(31,"\n "),l.ɵɵelementStart(32,"div",12),l.ɵɵtext(33,"\n "),l.ɵɵelementStart(34,"input",13),l.ɵɵlistener("ngModelChange",(function(e){return t.masterPassword=e})),l.ɵɵelementEnd(),l.ɵɵtext(35,"\n "),l.ɵɵelementStart(36,"button",14),l.ɵɵlistener("click",(function(){return t.togglePassword()})),l.ɵɵpipe(37,"i18n"),l.ɵɵtext(38,"\n "),l.ɵɵelement(39,"i",15),l.ɵɵtext(40,"\n "),l.ɵɵelementEnd(),l.ɵɵtext(41,"\n "),l.ɵɵelementEnd(),l.ɵɵtext(42,"\n "),l.ɵɵelementStart(43,"small",16),l.ɵɵtext(44,"\n "),l.ɵɵelementStart(45,"a",17),l.ɵɵtext(46),l.ɵɵpipe(47,"i18n"),l.ɵɵelementEnd(),l.ɵɵtext(48,"\n "),l.ɵɵelementEnd(),l.ɵɵtext(49,"\n "),l.ɵɵelementEnd(),l.ɵɵtext(50,"\n "),l.ɵɵelementStart(51,"div",18),l.ɵɵtext(52,"\n "),l.ɵɵelementStart(53,"input",19),l.ɵɵlistener("ngModelChange",(function(e){return t.rememberEmail=e})),l.ɵɵelementEnd(),l.ɵɵtext(54,"\n "),l.ɵɵelementStart(55,"label",20),l.ɵɵtext(56),l.ɵɵpipe(57,"i18n"),l.ɵɵelementEnd(),l.ɵɵtext(58,"\n "),l.ɵɵelementEnd(),l.ɵɵtext(59,"\n "),l.ɵɵelement(60,"hr"),l.ɵɵtext(61,"\n "),l.ɵɵelementStart(62,"div",12),l.ɵɵtext(63,"\n "),l.ɵɵelementStart(64,"button",21),l.ɵɵtext(65,"\n "),l.ɵɵelementStart(66,"span"),l.ɵɵtext(67,"\n "),l.ɵɵelement(68,"i",22),l.ɵɵtext(69),l.ɵɵpipe(70,"i18n"),l.ɵɵelementEnd(),l.ɵɵtext(71,"\n "),l.ɵɵelement(72,"i",23),l.ɵɵpipe(73,"i18n"),l.ɵɵtext(74,"\n "),l.ɵɵelementEnd(),l.ɵɵtext(75,"\n "),l.ɵɵelementStart(76,"a",24),l.ɵɵtext(77,"\n "),l.ɵɵelement(78,"i",25),l.ɵɵtext(79),l.ɵɵpipe(80,"i18n"),l.ɵɵelementEnd(),l.ɵɵtext(81,"\n "),l.ɵɵelementEnd(),l.ɵɵtext(82,"\n "),l.ɵɵelementStart(83,"div",12),l.ɵɵtext(84,"\n "),l.ɵɵelementStart(85,"a",26),l.ɵɵtext(86,"\n "),l.ɵɵelement(87,"i",27),l.ɵɵtext(88),l.ɵɵpipe(89,"i18n"),l.ɵɵelementEnd(),l.ɵɵtext(90,"\n "),l.ɵɵelementEnd(),l.ɵɵtext(91,"\n "),l.ɵɵelementEnd(),l.ɵɵtext(92,"\n "),l.ɵɵelementEnd(),l.ɵɵtext(93,"\n "),l.ɵɵelementEnd(),l.ɵɵtext(94,"\n "),l.ɵɵelementEnd(),l.ɵɵtext(95,"\n"),l.ɵɵelementEnd(),l.ɵɵtext(96,"\n")),2&e){var n=l.ɵɵreference(1);l.ɵɵproperty("appApiAction",t.formPromise),l.ɵɵadvance(10),l.ɵɵtextInterpolate(l.ɵɵpipeBind1(11,18,"loginOrCreateNewAccount")),l.ɵɵadvance(10),l.ɵɵtextInterpolate(l.ɵɵpipeBind1(21,20,"emailAddress")),l.ɵɵadvance(3),l.ɵɵproperty("ngModel",t.email),l.ɵɵadvance(6),l.ɵɵtextInterpolate(l.ɵɵpipeBind1(30,22,"masterPass")),l.ɵɵadvance(5),l.ɵɵpropertyInterpolate("type",t.showPassword?"text":"password"),l.ɵɵproperty("ngModel",t.masterPassword),l.ɵɵadvance(2),l.ɵɵpropertyInterpolate("appA11yTitle",l.ɵɵpipeBind1(37,24,"toggleVisibility")),l.ɵɵadvance(3),l.ɵɵproperty("ngClass",l.ɵɵpureFunction2(38,I,!t.showPassword,t.showPassword)),l.ɵɵadvance(7),l.ɵɵtextInterpolate(l.ɵɵpipeBind1(47,26,"getMasterPasswordHint")),l.ɵɵadvance(7),l.ɵɵproperty("ngModel",t.rememberEmail),l.ɵɵadvance(3),l.ɵɵtextInterpolate(l.ɵɵpipeBind1(57,28,"rememberEmail")),l.ɵɵadvance(8),l.ɵɵproperty("disabled",n.loading),l.ɵɵadvance(5),l.ɵɵtextInterpolate1(" ",l.ɵɵpipeBind1(70,30,"logIn"),"\n "),l.ɵɵadvance(3),l.ɵɵpropertyInterpolate("title",l.ɵɵpipeBind1(73,32,"loading")),l.ɵɵadvance(4),l.ɵɵproperty("queryParams",l.ɵɵpureFunction1(41,E,t.email)),l.ɵɵadvance(3),l.ɵɵtextInterpolate1(" ",l.ɵɵpipeBind1(80,34,"createAccount"),"\n "),l.ɵɵadvance(9),l.ɵɵtextInterpolate1(" ",l.ɵɵpipeBind1(89,36,"enterpriseSingleSignOn"),"\n ")}},directives:[g.NgControlStatusGroup,g.NgForm,x.ApiActionDirective,g.DefaultValueAccessor,g.RequiredValidator,b.InputVerbatimDirective,g.NgControlStatus,g.NgModel,S.A11yTitleDirective,w.NgClass,p.RouterLinkWithHref,g.CheckboxControlValueAccessor],pipes:[C.I18nPipe],encapsulation:2}),t}(s.LoginComponent);t.LoginComponent=P},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0),u.ɵɵadvance(2),u.ɵɵproperty("ngIf",(null==n.enforcedPolicyOptions?null:n.enforcedPolicyOptions.minLength)>0),u.ɵɵadvance(2),u.ɵɵproperty("ngIf",null==n.enforcedPolicyOptions?null:n.enforcedPolicyOptions.requireUpper),u.ɵɵadvance(2),u.ɵɵproperty("ngIf",null==n.enforcedPolicyOptions?null:n.enforcedPolicyOptions.requireLower),u.ɵɵadvance(2),u.ɵɵproperty("ngIf",null==n.enforcedPolicyOptions?null:n.enforcedPolicyOptions.requireNumbers),u.ɵɵadvance(2),u.ɵɵproperty("ngIf",null==n.enforcedPolicyOptions?null:n.enforcedPolicyOptions.requireSpecial)}}function K(e,t){if(1&e){var n=u.ɵɵgetCurrentView();u.ɵɵelementStart(0,"div",12),u.ɵɵtext(1,"\n "),u.ɵɵelementStart(2,"div",48),u.ɵɵtext(3,"\n "),u.ɵɵelementStart(4,"input",49),u.ɵɵlistener("ngModelChange",(function(e){return u.ɵɵrestoreView(n),u.ɵɵnextContext().acceptPolicies=e})),u.ɵɵelementEnd(),u.ɵɵtext(5,"\n "),u.ɵɵelementStart(6,"label",50),u.ɵɵtext(7),u.ɵɵpipe(8,"i18n"),u.ɵɵelement(9,"br"),u.ɵɵtext(10,"\n "),u.ɵɵelementStart(11,"a",51),u.ɵɵtext(12),u.ɵɵpipe(13,"i18n"),u.ɵɵelementEnd(),u.ɵɵtext(14,",\n "),u.ɵɵelementStart(15,"a",52),u.ɵɵtext(16),u.ɵɵpipe(17,"i18n"),u.ɵɵelementEnd(),u.ɵɵtext(18,"\n "),u.ɵɵelementEnd(),u.ɵɵtext(19,"\n "),u.ɵɵelementEnd(),u.ɵɵtext(20,"\n "),u.ɵɵelementEnd()}if(2&e){var r=u.ɵɵnextContext();u.ɵɵadvance(4),u.ɵɵproperty("ngModel",r.acceptPolicies),u.ɵɵadvance(3),u.ɵɵtextInterpolate1("\n ",u.ɵɵpipeBind1(8,4,"acceptPolicies"),""),u.ɵɵadvance(5),u.ɵɵtextInterpolate(u.ɵɵpipeBind1(13,6,"termsOfService")),u.ɵɵadvance(4),u.ɵɵtextInterpolate(u.ɵɵpipeBind1(17,8,"privacyPolicy"))}}var q=function(e){return["layout",e]},W=function(e,t){return{"col-5":e,"col-12":t}},H=function(e,t){return{"fa-eye":e,"fa-eye-slash":t}},$=function(e){function t(t,n,r,i,o,a,s,l,c,p){var u=e.call(this,t,n,r,i,o,s,l,c)||this;return u.route=a,u.policyService=p,u.showCreateOrgMessage=!1,u.layout="",u}return i(t,e),t.prototype.getPasswordScoreAlertDisplay=function(){if(null==this.enforcedPolicyOptions)return"";var e;switch(this.enforcedPolicyOptions.minComplexity){case 4:e=this.i18nService.t("strong");break;case 3:e=this.i18nService.t("good");break;default:e=this.i18nService.t("weak")}return e+" ("+this.enforcedPolicyOptions.minComplexity+")"},t.prototype.ngOnInit=function(){return o(this,void 0,void 0,(function(){var e,t,n,r,i,o=this;return a(this,(function(a){switch(a.label){case 0:return e=this.route.queryParams.subscribe((function(t){o.referenceData=new p.ReferenceEventRequest,null!=t.email&&t.email.indexOf("@")>-1&&(o.email=t.email),null!=t.premium?o.stateService.save("loginRedirect",{route:"/settings/premium"}):null!=t.org&&(o.showCreateOrgMessage=!0,o.referenceData.flow=t.org,o.stateService.save("loginRedirect",{route:"/settings/create-organization",qParams:{plan:t.org}})),null!=t.layout&&(o.layout=o.referenceData.layout=t.layout),null!=t.reference?o.referenceData.id=t.reference:o.referenceData.id=("; "+document.cookie).split("; reference=").pop().split(";").shift(),""===o.referenceData.id&&(o.referenceData.id=null),null!=e&&e.unsubscribe()})),[4,this.stateService.get("orgInvitation")];case 1:if(null==(t=a.sent()))return[3,5];a.label=2;case 2:return a.trys.push([2,4,,5]),[4,this.apiService.getPoliciesByToken(t.organizationId,t.token,t.email,t.organizationUserId)];case 3:return null!=(n=a.sent()).data&&(r=n.data.map((function(e){return new c.PolicyData(e)})),this.policies=r.map((function(e){return new l.Policy(e)}))),[3,5];case 4:return a.sent(),[3,5];case 5:return null==this.policies?[3,7]:(i=this,[4,this.policyService.getMasterPasswordPolicyOptions(this.policies)]);case 6:i.enforcedPolicyOptions=a.sent(),a.label=7;case 7:return[2]}}))}))},t.prototype.submit=function(){return o(this,void 0,void 0,(function(){return a(this,(function(t){switch(t.label){case 0:return null==this.enforcedPolicyOptions||this.policyService.evaluateMasterPassword(this.masterPasswordScore,this.masterPassword,this.enforcedPolicyOptions)?[4,e.prototype.submit.call(this)]:(this.platformUtilsService.showToast("error",this.i18nService.t("errorOccurred"),this.i18nService.t("masterPasswordPolicyRequirementsNotMet")),[2]);case 1:return t.sent(),[2]}}))}))},t.ɵfac=function(e){return new(e||t)(u.ɵɵdirectiveInject(d.AuthService),u.ɵɵdirectiveInject(m.Router),u.ɵɵdirectiveInject(h.I18nService),u.ɵɵdirectiveInject(f.CryptoService),u.ɵɵdirectiveInject(v.ApiService),u.ɵɵdirectiveInject(m.ActivatedRoute),u.ɵɵdirectiveInject(y.StateService),u.ɵɵdirectiveInject(g.PlatformUtilsService),u.ɵɵdirectiveInject(x.PasswordGenerationService),u.ɵɵdirectiveInject(b.PolicyService))},t.ɵcmp=u.ɵɵdefineComponent({type:t,selectors:[["app-register"]],features:[u.ɵɵInheritDefinitionFeature],decls:146,vars:80,consts:[[1,"layout",3,"ngClass"],["class","header",4,"ngIf"],["ngNativeValidate","",1,"container",3,"appApiAction","ngSubmit"],["form",""],[1,"row"],["class","col-7",4,"ngIf"],[3,"ngClass"],[1,"row","justify-content-md-center","mt-5"],["class","lead text-center mb-4",4,"ngIf"],[1,"card","d-block"],[1,"card-body"],["type","info","icon","fa-thumb-tack",3,"title",4,"ngIf"],[1,"form-group"],["for","email"],["id","email","type","text","name","Email","required","","inputmode","email","appInputVerbatim","false",1,"form-control",3,"ngModel","appAutofocus","ngModelChange"],[1,"form-text","text-muted"],["for","name"],["id","name","type","text","name","Name",1,"form-control",3,"ngModel","appAutofocus","ngModelChange"],["type","info",4,"ngIf"],["for","masterPassword"],[1,"d-flex"],[1,"w-100"],["id","masterPassword","name","MasterPassword","required","","appInputVerbatim","",1,"text-monospace","form-control","mb-1",3,"type","ngModel","ngModelChange","input"],[3,"score","showText"],["type","button",1,"ml-1","btn","btn-link",3,"appA11yTitle","click"],["aria-hidden","true",1,"fa","fa-lg",3,"ngClass"],[1,"progress-bar","invisible"],["for","masterPasswordRetype"],["id","masterPasswordRetype","name","MasterPasswordRetype","required","","appInputVerbatim","",1,"text-monospace","form-control",3,"type","ngModel","ngModelChange"],["for","hint"],["id","hint","type","text","name","Hint",1,"form-control",3,"ngModel","ngModelChange"],["class","form-group",4,"ngIf"],[1,"d-flex","mb-2"],["type","submit",1,"btn","btn-primary","btn-block","btn-submit",3,"disabled"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin",3,"title"],["routerLink","/",1,"btn","btn-outline-secondary","btn-block","ml-2","mt-0"],[1,"header"],[1,"container"],[1,"col-7"],["alt","Bitwarden","src","images/logo-horizontal-white.png",1,"logo","mb-2"],[1,"mt-5"],[4,"ngIf"],[1,"highlight"],["src","images/wired-logo.png","alt","Wired"],[1,"lead","text-center","mb-4"],["type","info","icon","fa-thumb-tack",3,"title"],["type","info"],[1,"mb-0"],[1,"form-check"],["type","checkbox","id","acceptPolicies","name","AcceptPolicies",1,"form-check-input",3,"ngModel","ngModelChange"],["for","acceptPolicies",1,"form-check-label","small","text-muted"],["href","https://bitwarden.com/terms/","target","_blank","rel","noopener"],["href","https://bitwarden.com/privacy/","target","_blank","rel","noopener"]],template:function(e,t){if(1&e&&(u.ɵɵelementStart(0,"div",0),u.ɵɵtext(1,"\n "),u.ɵɵtemplate(2,O,13,0,"header",1),u.ɵɵtext(3,"\n "),u.ɵɵelementStart(4,"form",2,3),u.ɵɵlistener("ngSubmit",(function(){return t.submit()})),u.ɵɵtext(6,"\n "),u.ɵɵelementStart(7,"div",4),u.ɵɵtext(8,"\n "),u.ɵɵtemplate(9,D,11,3,"div",5),u.ɵɵtext(10,"\n "),u.ɵɵelementStart(11,"div",6),u.ɵɵtext(12,"\n "),u.ɵɵelementStart(13,"div",7),u.ɵɵtext(14,"\n "),u.ɵɵelementStart(15,"div",6),u.ɵɵtext(16,"\n "),u.ɵɵtemplate(17,R,3,3,"p",8),u.ɵɵtext(18,"\n "),u.ɵɵelementStart(19,"div",9),u.ɵɵtext(20,"\n "),u.ɵɵelementStart(21,"div",10),u.ɵɵtext(22,"\n "),u.ɵɵtemplate(23,V,4,6,"app-callout",11),u.ɵɵtext(24,"\n "),u.ɵɵelementStart(25,"div",12),u.ɵɵtext(26,"\n "),u.ɵɵelementStart(27,"label",13),u.ɵɵtext(28),u.ɵɵpipe(29,"i18n"),u.ɵɵelementEnd(),u.ɵɵtext(30,"\n "),u.ɵɵelementStart(31,"input",14),u.ɵɵlistener("ngModelChange",(function(e){return t.email=e})),u.ɵɵelementEnd(),u.ɵɵtext(32,"\n "),u.ɵɵelementStart(33,"small",15),u.ɵɵtext(34),u.ɵɵpipe(35,"i18n"),u.ɵɵelementEnd(),u.ɵɵtext(36,"\n "),u.ɵɵelementEnd(),u.ɵɵtext(37,"\n "),u.ɵɵelementStart(38,"div",12),u.ɵɵtext(39,"\n "),u.ɵɵelementStart(40,"label",16),u.ɵɵtext(41),u.ɵɵpipe(42,"i18n"),u.ɵɵelementEnd(),u.ɵɵtext(43,"\n "),u.ɵɵelementStart(44,"input",17),u.ɵɵlistener("ngModelChange",(function(e){return t.name=e})),u.ɵɵelementEnd(),u.ɵɵtext(45,"\n "),u.ɵɵelementStart(46,"small",15),u.ɵɵtext(47),u.ɵɵpipe(48,"i18n"),u.ɵɵelementEnd(),u.ɵɵtext(49,"\n "),u.ɵɵelementEnd(),u.ɵɵtext(50,"\n "),u.ɵɵelementStart(51,"div",12),u.ɵɵtext(52,"\n "),u.ɵɵtemplate(53,G,18,9,"app-callout",18),u.ɵɵtext(54,"\n "),u.ɵɵelementStart(55,"label",19),u.ɵɵtext(56),u.ɵɵpipe(57,"i18n"),u.ɵɵelementEnd(),u.ɵɵtext(58,"\n "),u.ɵɵelementStart(59,"div",20),u.ɵɵtext(60,"\n "),u.ɵɵelementStart(61,"div",21),u.ɵɵtext(62,"\n "),u.ɵɵelementStart(63,"input",22),u.ɵɵlistener("ngModelChange",(function(e){return t.masterPassword=e}))("input",(function(){return t.updatePasswordStrength()})),u.ɵɵelementEnd(),u.ɵɵtext(64,"\n "),u.ɵɵelementStart(65,"app-password-strength",23),u.ɵɵtext(66,"\n "),u.ɵɵelementEnd(),u.ɵɵtext(67,"\n "),u.ɵɵelementEnd(),u.ɵɵtext(68,"\n "),u.ɵɵelementStart(69,"div"),u.ɵɵtext(70,"\n "),u.ɵɵelementStart(71,"button",24),u.ɵɵlistener("click",(function(){return t.togglePassword(!1)})),u.ɵɵpipe(72,"i18n"),u.ɵɵtext(73,"\n "),u.ɵɵelement(74,"i",25),u.ɵɵtext(75,"\n "),u.ɵɵelementEnd(),u.ɵɵtext(76,"\n "),u.ɵɵelement(77,"div",26),u.ɵɵtext(78,"\n "),u.ɵɵelementEnd(),u.ɵɵtext(79,"\n "),u.ɵɵelementEnd(),u.ɵɵtext(80,"\n "),u.ɵɵelementStart(81,"small",15),u.ɵɵtext(82),u.ɵɵpipe(83,"i18n"),u.ɵɵelementEnd(),u.ɵɵtext(84,"\n "),u.ɵɵelementEnd(),u.ɵɵtext(85,"\n "),u.ɵɵelementStart(86,"div",12),u.ɵɵtext(87,"\n "),u.ɵɵelementStart(88,"label",27),u.ɵɵtext(89),u.ɵɵpipe(90,"i18n"),u.ɵɵelementEnd(),u.ɵɵtext(91,"\n "),u.ɵɵelementStart(92,"div",20),u.ɵɵtext(93,"\n "),u.ɵɵelementStart(94,"input",28),u.ɵɵlistener("ngModelChange",(function(e){return t.confirmMasterPassword=e})),u.ɵɵelementEnd(),u.ɵɵtext(95,"\n "),u.ɵɵelementStart(96,"button",24),u.ɵɵlistener("click",(function(){return t.togglePassword(!0)})),u.ɵɵpipe(97,"i18n"),u.ɵɵtext(98,"\n "),u.ɵɵelement(99,"i",25),u.ɵɵtext(100,"\n "),u.ɵɵelementEnd(),u.ɵɵtext(101,"\n "),u.ɵɵelementEnd(),u.ɵɵtext(102,"\n "),u.ɵɵelementEnd(),u.ɵɵtext(103,"\n "),u.ɵɵelementStart(104,"div",12),u.ɵɵtext(105,"\n "),u.ɵɵelementStart(106,"label",29),u.ɵɵtext(107),u.ɵɵpipe(108,"i18n"),u.ɵɵelementEnd(),u.ɵɵtext(109,"\n "),u.ɵɵelementStart(110,"input",30),u.ɵɵlistener("ngModelChange",(function(e){return t.hint=e})),u.ɵɵelementEnd(),u.ɵɵtext(111,"\n "),u.ɵɵelementStart(112,"small",15),u.ɵɵtext(113),u.ɵɵpipe(114,"i18n"),u.ɵɵelementEnd(),u.ɵɵtext(115,"\n "),u.ɵɵelementEnd(),u.ɵɵtext(116,"\n "),u.ɵɵtemplate(117,K,21,10,"div",31),u.ɵɵtext(118,"\n "),u.ɵɵelement(119,"hr"),u.ɵɵtext(120,"\n "),u.ɵɵelementStart(121,"div",32),u.ɵɵtext(122,"\n "),u.ɵɵelementStart(123,"button",33),u.ɵɵtext(124,"\n "),u.ɵɵelementStart(125,"span"),u.ɵɵtext(126),u.ɵɵpipe(127,"i18n"),u.ɵɵelementEnd(),u.ɵɵtext(128,"\n "),u.ɵɵelement(129,"i",34),u.ɵɵpipe(130,"i18n"),u.ɵɵtext(131,"\n "),u.ɵɵelementEnd(),u.ɵɵtext(132,"\n "),u.ɵɵelementStart(133,"a",35),u.ɵɵtext(134),u.ɵɵpipe(135,"i18n"),u.ɵɵelementEnd(),u.ɵɵtext(136,"\n "),u.ɵɵelementEnd(),u.ɵɵtext(137,"\n "),u.ɵɵelementEnd(),u.ɵɵtext(138,"\n "),u.ɵɵelementEnd(),u.ɵɵtext(139,"\n "),u.ɵɵelementEnd(),u.ɵɵtext(140,"\n "),u.ɵɵelementEnd(),u.ɵɵtext(141,"\n "),u.ɵɵelementEnd(),u.ɵɵtext(142,"\n "),u.ɵɵelementEnd(),u.ɵɵtext(143,"\n "),u.ɵɵelementEnd(),u.ɵɵtext(144,"\n"),u.ɵɵelementEnd(),u.ɵɵtext(145,"\n")),2&e){var n=u.ɵɵreference(5);u.ɵɵproperty("ngClass",u.ɵɵpureFunction1(66,q,t.layout)),u.ɵɵadvance(2),u.ɵɵproperty("ngIf","enterprise2"===t.layout),u.ɵɵadvance(2),u.ɵɵproperty("appApiAction",t.formPromise),u.ɵɵadvance(5),u.ɵɵproperty("ngIf",t.layout),u.ɵɵadvance(2),u.ɵɵproperty("ngClass",u.ɵɵpureFunction2(68,W,t.layout,!t.layout)),u.ɵɵadvance(4),u.ɵɵproperty("ngClass",u.ɵɵpureFunction2(71,W,!t.layout,t.layout)),u.ɵɵadvance(2),u.ɵɵproperty("ngIf",!t.layout),u.ɵɵadvance(6),u.ɵɵproperty("ngIf",t.showCreateOrgMessage),u.ɵɵadvance(5),u.ɵɵtextInterpolate(u.ɵɵpipeBind1(29,38,"emailAddress")),u.ɵɵadvance(3),u.ɵɵproperty("ngModel",t.email)("appAutofocus",""===t.email),u.ɵɵadvance(3),u.ɵɵtextInterpolate(u.ɵɵpipeBind1(35,40,"emailAddressDesc")),u.ɵɵadvance(7),u.ɵɵtextInterpolate(u.ɵɵpipeBind1(42,42,"yourName")),u.ɵɵadvance(3),u.ɵɵproperty("ngModel",t.name)("appAutofocus",""!==t.email),u.ɵɵadvance(3),u.ɵɵtextInterpolate(u.ɵɵpipeBind1(48,44,"yourNameDesc")),u.ɵɵadvance(6),u.ɵɵproperty("ngIf",t.enforcedPolicyOptions),u.ɵɵadvance(3),u.ɵɵtextInterpolate(u.ɵɵpipeBind1(57,46,"masterPass")),u.ɵɵadvance(7),u.ɵɵpropertyInterpolate("type",t.showPassword?"text":"password"),u.ɵɵproperty("ngModel",t.masterPassword),u.ɵɵadvance(2),u.ɵɵproperty("score",t.masterPasswordScore)("showText",!0),u.ɵɵadvance(6),u.ɵɵpropertyInterpolate("appA11yTitle",u.ɵɵpipeBind1(72,48,"toggleVisibility")),u.ɵɵadvance(3),u.ɵɵproperty("ngClass",u.ɵɵpureFunction2(74,H,!t.showPassword,t.showPassword)),u.ɵɵadvance(8),u.ɵɵtextInterpolate(u.ɵɵpipeBind1(83,50,"masterPassDesc")),u.ɵɵadvance(7),u.ɵɵtextInterpolate(u.ɵɵpipeBind1(90,52,"reTypeMasterPass")),u.ɵɵadvance(5),u.ɵɵpropertyInterpolate("type",t.showPassword?"text":"password"),u.ɵɵproperty("ngModel",t.confirmMasterPassword),u.ɵɵadvance(2),u.ɵɵpropertyInterpolate("appA11yTitle",u.ɵɵpipeBind1(97,54,"toggleVisibility")),u.ɵɵadvance(3),u.ɵɵproperty("ngClass",u.ɵɵpureFunction2(77,H,!t.showPassword,t.showPassword)),u.ɵɵadvance(8),u.ɵɵtextInterpolate(u.ɵɵpipeBind1(108,56,"masterPassHint")),u.ɵɵadvance(3),u.ɵɵproperty("ngModel",t.hint),u.ɵɵadvance(3),u.ɵɵtextInterpolate(u.ɵɵpipeBind1(114,58,"masterPassHintDesc")),u.ɵɵadvance(4),u.ɵɵproperty("ngIf",t.showTerms),u.ɵɵadvance(6),u.ɵɵproperty("disabled",n.loading),u.ɵɵadvance(3),u.ɵɵtextInterpolate(u.ɵɵpipeBind1(127,60,"submit")),u.ɵɵadvance(3),u.ɵɵpropertyInterpolate("title",u.ɵɵpipeBind1(130,62,"loading")),u.ɵɵadvance(5),u.ɵɵtextInterpolate1("\n ",u.ɵɵpipeBind1(135,64,"cancel"),"\n ")}},directives:[S.NgClass,S.NgIf,w.NgControlStatusGroup,w.NgForm,C.ApiActionDirective,w.DefaultValueAccessor,w.RequiredValidator,I.InputVerbatimDirective,w.NgControlStatus,w.NgModel,E.AutofocusDirective,P.PasswordStrengthComponent,k.A11yTitleDirective,m.RouterLinkWithHref,_.CalloutComponent,w.CheckboxControlValueAccessor],pipes:[A.I18nPipe],encapsulation:2}),t}(s.RegisterComponent);t.RegisterComponent=$},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});n(0),n(8),n(6),n(18),n(3),n(14),n(36),n(5),n(43),n(61),n(7);var o=n(844),a=n(0),s=n(6),l=n(3),c=n(18),p=n(14),u=n(7),d=n(36),m=n(5),h=n(43),f=n(8),v=n(61),y=n(13),g=n(16),x=n(4),b=n(24),S=n(45),w=n(250),C=n(17),I=n(10);function E(e,t){1&e&&(a.ɵɵelementStart(0,"div",8),a.ɵɵtext(1,"\n "),a.ɵɵelement(2,"i",9),a.ɵɵpipe(3,"i18n"),a.ɵɵtext(4),a.ɵɵpipe(5,"i18n"),a.ɵɵelementEnd()),2&e&&(a.ɵɵadvance(2),a.ɵɵpropertyInterpolate("title",a.ɵɵpipeBind1(3,2,"loading")),a.ɵɵadvance(2),a.ɵɵtextInterpolate1("\n ",a.ɵɵpipeBind1(5,4,"loading"),"\n "))}function P(e,t){if(1&e&&(a.ɵɵelementStart(0,"li"),a.ɵɵtext(1),a.ɵɵpipe(2,"i18n"),a.ɵɵelementEnd()),2&e){var n=a.ɵɵnextContext(3);a.ɵɵadvance(1),a.ɵɵtextInterpolate1("\n ",a.ɵɵpipeBind2(2,1,"policyInEffectMinComplexity",n.getPasswordScoreAlertDisplay()),"\n ")}}function k(e,t){if(1&e&&(a.ɵɵelementStart(0,"li"),a.ɵɵtext(1),a.ɵɵpipe(2,"i18n"),a.ɵɵelementEnd()),2&e){var n=a.ɵɵnextContext(3);a.ɵɵadvance(1),a.ɵɵtextInterpolate1("\n ",a.ɵɵpipeBind2(2,1,"policyInEffectMinLength",null==n.enforcedPolicyOptions?null:n.enforcedPolicyOptions.minLength.toString()),"\n ")}}function _(e,t){1&e&&(a.ɵɵelementStart(0,"li"),a.ɵɵtext(1),a.ɵɵpipe(2,"i18n"),a.ɵɵelementEnd()),2&e&&(a.ɵɵadvance(1),a.ɵɵtextInterpolate1("\n ",a.ɵɵpipeBind1(2,1,"policyInEffectUppercase"),""))}function A(e,t){1&e&&(a.ɵɵelementStart(0,"li"),a.ɵɵtext(1),a.ɵɵpipe(2,"i18n"),a.ɵɵelementEnd()),2&e&&(a.ɵɵadvance(1),a.ɵɵtextInterpolate1("\n ",a.ɵɵpipeBind1(2,1,"policyInEffectLowercase"),""))}function O(e,t){1&e&&(a.ɵɵelementStart(0,"li"),a.ɵɵtext(1),a.ɵɵpipe(2,"i18n"),a.ɵɵelementEnd()),2&e&&(a.ɵɵadvance(1),a.ɵɵtextInterpolate1("\n ",a.ɵɵpipeBind1(2,1,"policyInEffectNumbers"),""))}function T(e,t){1&e&&(a.ɵɵelementStart(0,"li"),a.ɵɵtext(1),a.ɵɵpipe(2,"i18n"),a.ɵɵelementEnd()),2&e&&(a.ɵɵadvance(1),a.ɵɵtextInterpolate1("\n ",a.ɵɵpipeBind2(2,1,"policyInEffectSpecial","!@#$%^&*"),""))}function M(e,t){if(1&e&&(a.ɵɵelementStart(0,"app-callout",11),a.ɵɵtext(1),a.ɵɵpipe(2,"i18n"),a.ɵɵelementStart(3,"ul",29),a.ɵɵtext(4,"\n "),a.ɵɵtemplate(5,P,3,4,"li",30),a.ɵɵtext(6,"\n "),a.ɵɵtemplate(7,k,3,4,"li",30),a.ɵɵtext(8,"\n "),a.ɵɵtemplate(9,_,3,3,"li",30),a.ɵɵtext(10,"\n "),a.ɵɵtemplate(11,A,3,3,"li",30),a.ɵɵtext(12,"\n "),a.ɵɵtemplate(13,O,3,3,"li",30),a.ɵɵtext(14,"\n "),a.ɵɵtemplate(15,T,3,4,"li",30),a.ɵɵtext(16,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(17,"\n "),a.ɵɵelementEnd()),2&e){var n=a.ɵɵnextContext(2);a.ɵɵadvance(1),a.ɵɵtextInterpolate1("\n ",a.ɵɵpipeBind1(2,7,"masterPasswordPolicyInEffect"),"\n "),a.ɵɵadvance(4),a.ɵɵproperty("ngIf",(null==n.enforcedPolicyOptions?null:n.enforcedPolicyOptions.minComplexity)>0),a.ɵɵadvance(2),a.ɵɵproperty("ngIf",(null==n.enforcedPolicyOptions?null:n.enforcedPolicyOptions.minLength)>0),a.ɵɵadvance(2),a.ɵɵproperty("ngIf",null==n.enforcedPolicyOptions?null:n.enforcedPolicyOptions.requireUpper),a.ɵɵadvance(2),a.ɵɵproperty("ngIf",null==n.enforcedPolicyOptions?null:n.enforcedPolicyOptions.requireLower),a.ɵɵadvance(2),a.ɵɵproperty("ngIf",null==n.enforcedPolicyOptions?null:n.enforcedPolicyOptions.requireNumbers),a.ɵɵadvance(2),a.ɵɵproperty("ngIf",null==n.enforcedPolicyOptions?null:n.enforcedPolicyOptions.requireSpecial)}}var B=function(e,t){return{"fa-eye":e,"fa-eye-slash":t}};function D(e,t){if(1&e){var n=a.ɵɵgetCurrentView();a.ɵɵelementStart(0,"div",10),a.ɵɵtext(1,"\n "),a.ɵɵelementStart(2,"app-callout",11),a.ɵɵtext(3),a.ɵɵpipe(4,"i18n"),a.ɵɵelementEnd(),a.ɵɵtext(5,"\n "),a.ɵɵelementStart(6,"div",12),a.ɵɵtext(7,"\n "),a.ɵɵtemplate(8,M,18,9,"app-callout",13),a.ɵɵtext(9,"\n "),a.ɵɵelementStart(10,"label",14),a.ɵɵtext(11),a.ɵɵpipe(12,"i18n"),a.ɵɵelementEnd(),a.ɵɵtext(13,"\n "),a.ɵɵelementStart(14,"div",15),a.ɵɵtext(15,"\n "),a.ɵɵelementStart(16,"div",16),a.ɵɵtext(17,"\n "),a.ɵɵelementStart(18,"input",17),a.ɵɵlistener("ngModelChange",(function(e){return a.ɵɵrestoreView(n),a.ɵɵnextContext().masterPassword=e}))("input",(function(){return a.ɵɵrestoreView(n),a.ɵɵnextContext().updatePasswordStrength()})),a.ɵɵelementEnd(),a.ɵɵtext(19,"\n "),a.ɵɵelementStart(20,"app-password-strength",18),a.ɵɵtext(21,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(22,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(23,"\n "),a.ɵɵelementStart(24,"div"),a.ɵɵtext(25,"\n "),a.ɵɵelementStart(26,"button",19),a.ɵɵlistener("click",(function(){return a.ɵɵrestoreView(n),a.ɵɵnextContext().togglePassword(!1)})),a.ɵɵpipe(27,"i18n"),a.ɵɵtext(28,"\n "),a.ɵɵelement(29,"i",20),a.ɵɵtext(30,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(31,"\n "),a.ɵɵelement(32,"div",21),a.ɵɵtext(33,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(34,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(35,"\n "),a.ɵɵelementStart(36,"small",22),a.ɵɵtext(37),a.ɵɵpipe(38,"i18n"),a.ɵɵelementEnd(),a.ɵɵtext(39,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(40,"\n "),a.ɵɵelementStart(41,"div",12),a.ɵɵtext(42,"\n "),a.ɵɵelementStart(43,"label",23),a.ɵɵtext(44),a.ɵɵpipe(45,"i18n"),a.ɵɵelementEnd(),a.ɵɵtext(46,"\n "),a.ɵɵelementStart(47,"div",15),a.ɵɵtext(48,"\n "),a.ɵɵelementStart(49,"input",24),a.ɵɵlistener("ngModelChange",(function(e){return a.ɵɵrestoreView(n),a.ɵɵnextContext().masterPasswordRetype=e})),a.ɵɵelementEnd(),a.ɵɵtext(50,"\n "),a.ɵɵelementStart(51,"button",19),a.ɵɵlistener("click",(function(){return a.ɵɵrestoreView(n),a.ɵɵnextContext().togglePassword(!0)})),a.ɵɵpipe(52,"i18n"),a.ɵɵtext(53,"\n "),a.ɵɵelement(54,"i",20),a.ɵɵtext(55,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(56,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(57,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(58,"\n "),a.ɵɵelementStart(59,"div",12),a.ɵɵtext(60,"\n "),a.ɵɵelementStart(61,"label",25),a.ɵɵtext(62),a.ɵɵpipe(63,"i18n"),a.ɵɵelementEnd(),a.ɵɵtext(64,"\n "),a.ɵɵelementStart(65,"input",26),a.ɵɵlistener("ngModelChange",(function(e){return a.ɵɵrestoreView(n),a.ɵɵnextContext().hint=e})),a.ɵɵelementEnd(),a.ɵɵtext(66,"\n "),a.ɵɵelementStart(67,"small",22),a.ɵɵtext(68),a.ɵɵpipe(69,"i18n"),a.ɵɵelementEnd(),a.ɵɵtext(70,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(71,"\n "),a.ɵɵelement(72,"hr"),a.ɵɵtext(73,"\n "),a.ɵɵelementStart(74,"div",15),a.ɵɵtext(75,"\n "),a.ɵɵelementStart(76,"button",27),a.ɵɵtext(77,"\n "),a.ɵɵelement(78,"i",9),a.ɵɵpipe(79,"i18n"),a.ɵɵtext(80,"\n "),a.ɵɵelementStart(81,"span"),a.ɵɵtext(82),a.ɵɵpipe(83,"i18n"),a.ɵɵelementEnd(),a.ɵɵtext(84,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(85,"\n "),a.ɵɵelementStart(86,"button",28),a.ɵɵlistener("click",(function(){return a.ɵɵrestoreView(n),a.ɵɵnextContext().logOut()})),a.ɵɵtext(87),a.ɵɵpipe(88,"i18n"),a.ɵɵelementEnd(),a.ɵɵtext(89,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(90,"\n "),a.ɵɵelementEnd()}if(2&e){var r=a.ɵɵnextContext(),i=a.ɵɵreference(1);a.ɵɵadvance(3),a.ɵɵtextInterpolate(a.ɵɵpipeBind1(4,22,"ssoCompleteRegistration")),a.ɵɵadvance(5),a.ɵɵproperty("ngIf",r.enforcedPolicyOptions),a.ɵɵadvance(3),a.ɵɵtextInterpolate(a.ɵɵpipeBind1(12,24,"masterPass")),a.ɵɵadvance(7),a.ɵɵpropertyInterpolate("type",r.showPassword?"text":"password"),a.ɵɵproperty("ngModel",r.masterPassword),a.ɵɵadvance(2),a.ɵɵproperty("score",r.masterPasswordScore)("showText",!0),a.ɵɵadvance(6),a.ɵɵpropertyInterpolate("appA11yTitle",a.ɵɵpipeBind1(27,26,"toggleVisibility")),a.ɵɵadvance(3),a.ɵɵproperty("ngClass",a.ɵɵpureFunction2(44,B,!r.showPassword,r.showPassword)),a.ɵɵadvance(8),a.ɵɵtextInterpolate(a.ɵɵpipeBind1(38,28,"masterPassDesc")),a.ɵɵadvance(7),a.ɵɵtextInterpolate(a.ɵɵpipeBind1(45,30,"reTypeMasterPass")),a.ɵɵadvance(5),a.ɵɵpropertyInterpolate("type",r.showPassword?"text":"password"),a.ɵɵproperty("ngModel",r.masterPasswordRetype),a.ɵɵadvance(2),a.ɵɵpropertyInterpolate("appA11yTitle",a.ɵɵpipeBind1(52,32,"toggleVisibility")),a.ɵɵadvance(3),a.ɵɵproperty("ngClass",a.ɵɵpureFunction2(47,B,!r.showPassword,r.showPassword)),a.ɵɵadvance(8),a.ɵɵtextInterpolate(a.ɵɵpipeBind1(63,34,"masterPassHint")),a.ɵɵadvance(3),a.ɵɵproperty("ngModel",r.hint),a.ɵɵadvance(3),a.ɵɵtextInterpolate(a.ɵɵpipeBind1(69,36,"masterPassHintDesc")),a.ɵɵadvance(8),a.ɵɵproperty("disabled",i.loading),a.ɵɵadvance(2),a.ɵɵpropertyInterpolate("title",a.ɵɵpipeBind1(79,38,"loading")),a.ɵɵadvance(4),a.ɵɵtextInterpolate(a.ɵɵpipeBind1(83,40,"submit")),a.ɵɵadvance(5),a.ɵɵtextInterpolate1("\n ",a.ɵɵpipeBind1(88,42,"logOut"),"\n ")}}var R=function(e){function t(t,n,r,i,o,a,s,l,c,p,u){return e.call(this,n,r,i,o,a,s,l,c,t,p,u)||this}return i(t,e),t.ɵfac=function(e){return new(e||t)(a.ɵɵdirectiveInject(s.ApiService),a.ɵɵdirectiveInject(l.I18nService),a.ɵɵdirectiveInject(c.CryptoService),a.ɵɵdirectiveInject(p.MessagingService),a.ɵɵdirectiveInject(u.UserService),a.ɵɵdirectiveInject(d.PasswordGenerationService),a.ɵɵdirectiveInject(m.PlatformUtilsService),a.ɵɵdirectiveInject(h.PolicyService),a.ɵɵdirectiveInject(f.Router),a.ɵɵdirectiveInject(v.SyncService),a.ɵɵdirectiveInject(f.ActivatedRoute))},t.ɵcmp=a.ɵɵdefineComponent({type:t,selectors:[["app-set-password"]],features:[a.ɵɵInheritDefinitionFeature],decls:21,vars:6,consts:[["ngNativeValidate","","autocomplete","off",3,"appApiAction","ngSubmit"],["form",""],[1,"row","justify-content-md-center","mt-5"],[1,"col-5"],[1,"lead","text-center","mb-4"],[1,"card","d-block"],["class","card-body text-center",4,"ngIf"],["class","card-body",4,"ngIf"],[1,"card-body","text-center"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin",3,"title"],[1,"card-body"],["type","info"],[1,"form-group"],["type","info",4,"ngIf"],["for","masterPassword"],[1,"d-flex"],[1,"w-100"],["id","masterPassword","name","MasterPasswordHash","required","","appInputVerbatim","",1,"text-monospace","form-control","mb-1",3,"type","ngModel","ngModelChange","input"],[3,"score","showText"],["type","button",1,"ml-1","btn","btn-link",3,"appA11yTitle","click"],["aria-hidden","true",1,"fa","fa-lg",3,"ngClass"],[1,"progress-bar","invisible"],[1,"form-text","text-muted"],["for","masterPasswordRetype"],["id","masterPasswordRetype","name","MasterPasswordRetype","required","","appInputVerbatim","",1,"text-monospace","form-control",3,"type","ngModel","ngModelChange"],["for","hint"],["id","hint","type","text","name","Hint",1,"form-control",3,"ngModel","ngModelChange"],["type","submit",1,"btn","btn-primary","btn-block","btn-submit",3,"disabled"],["type","button",1,"btn","btn-outline-secondary","btn-block","ml-2","mt-0",3,"click"],[1,"mb-0"],[4,"ngIf"]],template:function(e,t){1&e&&(a.ɵɵelementStart(0,"form",0,1),a.ɵɵlistener("ngSubmit",(function(){return t.submit()})),a.ɵɵtext(2,"\n "),a.ɵɵelementStart(3,"div",2),a.ɵɵtext(4,"\n "),a.ɵɵelementStart(5,"div",3),a.ɵɵtext(6,"\n "),a.ɵɵelementStart(7,"p",4),a.ɵɵtext(8),a.ɵɵpipe(9,"i18n"),a.ɵɵelementEnd(),a.ɵɵtext(10,"\n "),a.ɵɵelementStart(11,"div",5),a.ɵɵtext(12,"\n "),a.ɵɵtemplate(13,E,6,6,"div",6),a.ɵɵtext(14,"\n "),a.ɵɵtemplate(15,D,91,50,"div",7),a.ɵɵtext(16,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(17,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(18,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(19,"\n"),a.ɵɵelementEnd(),a.ɵɵtext(20,"\n")),2&e&&(a.ɵɵproperty("appApiAction",t.formPromise),a.ɵɵadvance(8),a.ɵɵtextInterpolate(a.ɵɵpipeBind1(9,4,"setMasterPassword")),a.ɵɵadvance(5),a.ɵɵproperty("ngIf",t.syncLoading),a.ɵɵadvance(2),a.ɵɵproperty("ngIf",!t.syncLoading))},directives:[y.NgControlStatusGroup,y.NgForm,g.ApiActionDirective,x.NgIf,b.CalloutComponent,y.DefaultValueAccessor,y.RequiredValidator,S.InputVerbatimDirective,y.NgControlStatus,y.NgModel,w.PasswordStrengthComponent,C.A11yTitleDirective,x.NgClass],pipes:[I.I18nPipe],encapsulation:2}),t}(o.SetPasswordComponent);t.SetPasswordComponent=R},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},a=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]1?t[1]:null},e.prototype.checkState=function(e,t){if(null==e)return!1;if(null==t)return!1;var n=e.split("_identifier="),r=t.split("_identifier=");return n[0]===r[0]},e.ɵfac=function(t){return new(t||e)(s.ɵɵdirectiveInject(l.AuthService),s.ɵɵdirectiveInject(c.Router),s.ɵɵdirectiveInject(p.I18nService),s.ɵɵdirectiveInject(c.ActivatedRoute),s.ɵɵdirectiveInject(u.StorageService),s.ɵɵdirectiveInject(d.StateService),s.ɵɵdirectiveInject(m.PlatformUtilsService),s.ɵɵdirectiveInject(h.ApiService),s.ɵɵdirectiveInject(f.CryptoFunctionService),s.ɵɵdirectiveInject(v.PasswordGenerationService))},e.ɵdir=s.ɵɵdefineDirective({type:e}),e}();t.SsoComponent=y},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},a=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]this.pageSize&&(t=this.pagedCollectionsCount),this.collections.length>e&&(this.pagedCollections=this.pagedCollections.concat(this.collections.slice(e,e+t))),this.pagedCollectionsCount=this.pagedCollections.length,this.didScroll=this.pagedCollections.length>this.pageSize}},e.prototype.edit=function(e){var t=this;null!=this.modal&&this.modal.close();var n=this.componentFactoryResolver.resolveComponentFactory(l.ModalComponent);this.modal=this.addEditModalRef.createComponent(n).instance;var r=this.modal.show(c.CollectionAddEditComponent,this.addEditModalRef);r.organizationId=this.organizationId,r.collectionId=null!=e?e.id:null,r.onSavedCollection.subscribe((function(){t.modal.close(),t.load()})),r.onDeletedCollection.subscribe((function(){t.modal.close(),t.removeCollection(e)})),this.modal.onClosed.subscribe((function(){t.modal=null}))},e.prototype.add=function(){this.edit(null)},e.prototype.delete=function(e){return r(this,void 0,void 0,(function(){return i(this,(function(t){switch(t.label){case 0:return[4,this.platformUtilsService.showDialog(this.i18nService.t("deleteCollectionConfirmation"),e.name,this.i18nService.t("yes"),this.i18nService.t("no"),"warning")];case 1:if(!t.sent())return[2,!1];t.label=2;case 2:return t.trys.push([2,4,,5]),[4,this.apiService.deleteCollection(this.organizationId,e.id)];case 3:return t.sent(),this.toasterService.popAsync("success",null,this.i18nService.t("deletedCollectionId",e.name)),this.removeCollection(e),[3,5];case 4:return t.sent(),[3,5];case 5:return[2]}}))}))},e.prototype.users=function(e){var t=this;null!=this.modal&&this.modal.close();var n=this.componentFactoryResolver.resolveComponentFactory(l.ModalComponent);this.modal=this.usersModalRef.createComponent(n).instance;var r=this.modal.show(p.EntityUsersComponent,this.usersModalRef);r.organizationId=this.organizationId,r.entity="collection",r.entityId=e.id,r.entityName=e.name,r.onEditedUsers.subscribe((function(){t.load(),t.modal.close()})),this.modal.onClosed.subscribe((function(){t.modal=null}))},e.prototype.resetPaging=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){return this.pagedCollections=[],this.loadMore(),[2]}))}))},e.prototype.isSearching=function(){return this.searchService.isSearchable(this.searchText)},e.prototype.isPaging=function(){var e=this.isSearching();return e&&this.didScroll&&this.resetPaging(),!e&&this.collections&&this.collections.length>this.pageSize},e.prototype.removeCollection=function(e){var t=this.collections.indexOf(e);t>-1&&(this.collections.splice(t,1),this.resetPaging())},e.ɵfac=function(t){return new(t||e)(u.ɵɵdirectiveInject(d.ApiService),u.ɵɵdirectiveInject(m.ActivatedRoute),u.ɵɵdirectiveInject(h.CollectionService),u.ɵɵdirectiveInject(u.ComponentFactoryResolver),u.ɵɵdirectiveInject(f.ToasterService),u.ɵɵdirectiveInject(v.I18nService),u.ɵɵdirectiveInject(y.PlatformUtilsService),u.ɵɵdirectiveInject(g.UserService),u.ɵɵdirectiveInject(x.SearchService))},e.ɵcmp=u.ɵɵdefineComponent({type:e,selectors:[["app-org-manage-collections"]],viewQuery:function(e,t){var n;(1&e&&(u.ɵɵstaticViewQuery(k,!0,o.ViewContainerRef),u.ɵɵstaticViewQuery(_,!0,o.ViewContainerRef)),2&e)&&(u.ɵɵqueryRefresh(n=u.ɵɵloadQuery())&&(t.addEditModalRef=n.first),u.ɵɵqueryRefresh(n=u.ɵɵloadQuery())&&(t.usersModalRef=n.first))},decls:37,vars:20,consts:[[1,"page-header","d-flex"],[1,"ml-auto","d-flex"],["for","search",1,"sr-only"],["type","search","id","search",1,"form-control","form-control-sm",3,"placeholder","ngModel","ngModelChange"],["type","button",1,"btn","btn-sm","btn-outline-primary","ml-3",3,"click"],["aria-hidden","true",1,"fa","fa-plus","fa-fw"],[4,"ngIf"],["addEdit",""],["usersTemplate",""],["aria-hidden","true",1,"fa","fa-spinner","fa-spin","text-muted",3,"title"],[1,"sr-only"],["class","table table-hover table-list","infiniteScroll","",3,"infiniteScrollDistance","infiniteScrollDisabled","scrolled",4,"ngIf"],["infiniteScroll","",1,"table","table-hover","table-list",3,"infiniteScrollDistance","infiniteScrollDisabled","scrolled"],[4,"ngFor","ngForOf"],["href","#","appStopClick","",3,"click"],[1,"table-list-options"],["appListDropdown","",1,"dropdown"],["type","button","data-toggle","dropdown","aria-haspopup","true","aria-expanded","false",1,"btn","btn-outline-secondary","dropdown-toggle",3,"appA11yTitle"],["aria-hidden","true",1,"fa","fa-cog","fa-lg"],[1,"dropdown-menu","dropdown-menu-right"],["href","#","appStopClick","",1,"dropdown-item",3,"click"],["aria-hidden","true",1,"fa","fa-fw","fa-users"],["href","#","appStopClick","",1,"dropdown-item","text-danger",3,"click"],["aria-hidden","true",1,"fa","fa-fw","fa-trash-o"]],template:function(e,t){1&e&&(u.ɵɵelementStart(0,"div",0),u.ɵɵtext(1,"\n "),u.ɵɵelementStart(2,"h1"),u.ɵɵtext(3),u.ɵɵpipe(4,"i18n"),u.ɵɵelementEnd(),u.ɵɵtext(5,"\n "),u.ɵɵelementStart(6,"div",1),u.ɵɵtext(7,"\n "),u.ɵɵelementStart(8,"div"),u.ɵɵtext(9,"\n "),u.ɵɵelementStart(10,"label",2),u.ɵɵtext(11),u.ɵɵpipe(12,"i18n"),u.ɵɵelementEnd(),u.ɵɵtext(13,"\n "),u.ɵɵelementStart(14,"input",3),u.ɵɵlistener("ngModelChange",(function(e){return t.searchText=e})),u.ɵɵpipe(15,"i18n"),u.ɵɵelementEnd(),u.ɵɵtext(16,"\n "),u.ɵɵelementEnd(),u.ɵɵtext(17,"\n "),u.ɵɵelementStart(18,"button",4),u.ɵɵlistener("click",(function(){return t.add()})),u.ɵɵtext(19,"\n "),u.ɵɵelement(20,"i",5),u.ɵɵtext(21),u.ɵɵpipe(22,"i18n"),u.ɵɵelementEnd(),u.ɵɵtext(23,"\n "),u.ɵɵelementEnd(),u.ɵɵtext(24,"\n"),u.ɵɵelementEnd(),u.ɵɵtext(25,"\n"),u.ɵɵtemplate(26,A,9,6,"ng-container",6),u.ɵɵtext(27,"\n"),u.ɵɵtemplate(28,B,6,2,"ng-container",6),u.ɵɵpipe(29,"search"),u.ɵɵtext(30,"\n"),u.ɵɵtemplate(31,D,0,0,"ng-template",null,7,u.ɵɵtemplateRefExtractor),u.ɵɵtext(33,"\n"),u.ɵɵtemplate(34,R,0,0,"ng-template",null,8,u.ɵɵtemplateRefExtractor),u.ɵɵtext(36,"\n")),2&e&&(u.ɵɵadvance(3),u.ɵɵtextInterpolate(u.ɵɵpipeBind1(4,7,"collections")),u.ɵɵadvance(8),u.ɵɵtextInterpolate(u.ɵɵpipeBind1(12,9,"search")),u.ɵɵadvance(3),u.ɵɵpropertyInterpolate("placeholder",u.ɵɵpipeBind1(15,11,"search")),u.ɵɵproperty("ngModel",t.searchText),u.ɵɵadvance(7),u.ɵɵtextInterpolate1("\n ",u.ɵɵpipeBind1(22,13,"newCollection"),"\n "),u.ɵɵadvance(5),u.ɵɵproperty("ngIf",t.loading),u.ɵɵadvance(2),u.ɵɵproperty("ngIf",!t.loading&&(t.isPaging()?t.pagedCollections:u.ɵɵpipeBind4(29,15,t.collections,t.searchText,"name","id"))))},directives:[b.DefaultValueAccessor,b.NgControlStatus,b.NgModel,S.NgIf,w.InfiniteScrollDirective,S.NgForOf,C.StopClickDirective,I.A11yTitleDirective],pipes:[E.I18nPipe,P.SearchPipe],encapsulation:2}),e}();t.CollectionsComponent=V},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&r.groups.forEach((function(e){var t=s.groups.filter((function(t){return!t.accessAll&&t.id===e.id}));null!=t&&t.length>0&&(t[0].checked=!0,t[0].readOnly=e.readOnly,t[0].hidePasswords=e.hidePasswords)})),[3,9];case 8:return i.sent(),[3,9];case 9:return[3,11];case 10:this.title=this.i18nService.t("addCollection"),i.label=11;case 11:return this.groups.forEach((function(e){e.accessAll&&(e.checked=!0)})),this.loading=!1,[2]}}))}))},e.prototype.check=function(e,t){e.accessAll||(e.checked=null==t?!e.checked:t,e.checked||(e.readOnly=!1,e.hidePasswords=!1))},e.prototype.selectAll=function(e){var t=this;this.groups.forEach((function(n){return t.check(n,e)}))},e.prototype.submit=function(){return r(this,void 0,void 0,(function(){var e,t;return i(this,(function(n){switch(n.label){case 0:if(null==this.orgKey)throw new Error("No encryption key for this organization.");return e=new s.CollectionRequest,t=e,[4,this.cryptoService.encrypt(this.name,this.orgKey)];case 1:t.name=n.sent().encryptedString,e.externalId=this.externalId,e.groups=this.groups.filter((function(e){return e.checked&&!e.accessAll})).map((function(e){return new l.SelectionReadOnlyRequest(e.id,!!e.readOnly,!!e.hidePasswords)})),n.label=2;case 2:return n.trys.push([2,4,,5]),this.editMode?this.formPromise=this.apiService.putCollection(this.organizationId,this.collectionId,e):this.formPromise=this.apiService.postCollection(this.organizationId,e),[4,this.formPromise];case 3:return n.sent(),this.toasterService.popAsync("success",null,this.i18nService.t(this.editMode?"editedCollectionId":"createdCollectionId",this.name)),this.onSavedCollection.emit(),[3,5];case 4:return n.sent(),[3,5];case 5:return[2]}}))}))},e.prototype.delete=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.editMode?[4,this.platformUtilsService.showDialog(this.i18nService.t("deleteCollectionConfirmation"),this.name,this.i18nService.t("yes"),this.i18nService.t("no"),"warning")]:[2];case 1:if(!e.sent())return[2,!1];e.label=2;case 2:return e.trys.push([2,4,,5]),this.deletePromise=this.apiService.deleteCollection(this.organizationId,this.collectionId),[4,this.deletePromise];case 3:return e.sent(),this.toasterService.popAsync("success",null,this.i18nService.t("deletedCollectionId",this.name)),this.onDeletedCollection.emit(),[3,5];case 4:return e.sent(),[3,5];case 5:return[2]}}))}))},e.ɵfac=function(t){return new(t||e)(p.ɵɵdirectiveInject(u.ApiService),p.ɵɵdirectiveInject(d.I18nService),p.ɵɵdirectiveInject(m.ToasterService),p.ɵɵdirectiveInject(h.PlatformUtilsService),p.ɵɵdirectiveInject(f.CryptoService),p.ɵɵdirectiveInject(v.UserService))},e.ɵcmp=p.ɵɵdefineComponent({type:e,selectors:[["app-collection-add-edit"]],inputs:{collectionId:"collectionId",organizationId:"organizationId"},outputs:{onSavedCollection:"onSavedCollection",onDeletedCollection:"onDeletedCollection"},decls:49,vars:18,consts:[["tabindex","-1","role","dialog","aria-modal","true","aria-labelledby","collectionAddEditTitle",1,"modal","fade"],["role","document",1,"modal-dialog"],["ngNativeValidate","",1,"modal-content",3,"appApiAction","ngSubmit"],["form",""],[1,"modal-header"],["id","collectionAddEditTitle",1,"modal-title"],["type","button","data-dismiss","modal",1,"close",3,"appA11yTitle"],["aria-hidden","true"],["class","modal-body",4,"ngIf"],[1,"modal-footer"],["type","submit",1,"btn","btn-primary","btn-submit",3,"disabled"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin",3,"title"],["type","button","data-dismiss","modal",1,"btn","btn-outline-secondary"],[1,"ml-auto"],["type","button","class","btn btn-outline-danger",3,"appA11yTitle","disabled","appApiAction","click",4,"ngIf"],[1,"modal-body"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin","text-muted",3,"title"],[1,"sr-only"],[1,"form-group"],["for","name"],["id","name","type","text","name","Name","required","","appAutofocus","",1,"form-control",3,"ngModel","ngModelChange"],["for","externalId"],["id","externalId","type","text","name","ExternalId",1,"form-control",3,"ngModel","ngModelChange"],[1,"form-text","text-muted"],[4,"ngIf"],[1,"mt-4","d-flex","mb-0"],["class","ml-auto",4,"ngIf"],["class","table table-hover table-list mb-0",4,"ngIf"],["type","button",1,"btn","btn-link","btn-sm","py-0",3,"click"],[1,"table","table-hover","table-list","mb-0"],["width","100",1,"text-center"],[4,"ngFor","ngForOf"],[1,"table-list-checkbox",3,"click"],["type","checkbox","appStopProp","",3,"ngModel","name","disabled","ngModelChange"],[3,"click"],[1,"text-center"],["type","checkbox",3,"ngModel","name","disabled","ngModelChange"],["aria-hidden","true",1,"fa","fa-th","text-muted","fa-fw",3,"title"],["type","button",1,"btn","btn-outline-danger",3,"appA11yTitle","disabled","appApiAction","click"],["deleteBtn",""],["aria-hidden","true",1,"fa","fa-trash-o","fa-lg","fa-fw",3,"hidden"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin","fa-lg","fa-fw",3,"hidden","title"]],template:function(e,t){if(1&e&&(p.ɵɵelementStart(0,"div",0),p.ɵɵtext(1,"\n "),p.ɵɵelementStart(2,"div",1),p.ɵɵtext(3,"\n "),p.ɵɵelementStart(4,"form",2,3),p.ɵɵlistener("ngSubmit",(function(){return t.submit()})),p.ɵɵtext(6,"\n "),p.ɵɵelementStart(7,"div",4),p.ɵɵtext(8,"\n "),p.ɵɵelementStart(9,"h2",5),p.ɵɵtext(10),p.ɵɵelementEnd(),p.ɵɵtext(11,"\n "),p.ɵɵelementStart(12,"button",6),p.ɵɵpipe(13,"i18n"),p.ɵɵtext(14,"\n "),p.ɵɵelementStart(15,"span",7),p.ɵɵtext(16,"×"),p.ɵɵelementEnd(),p.ɵɵtext(17,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(18,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(19,"\n "),p.ɵɵtemplate(20,I,9,6,"div",8),p.ɵɵtext(21,"\n "),p.ɵɵtemplate(22,T,26,12,"div",8),p.ɵɵtext(23,"\n "),p.ɵɵelementStart(24,"div",9),p.ɵɵtext(25,"\n "),p.ɵɵelementStart(26,"button",10),p.ɵɵtext(27,"\n "),p.ɵɵelement(28,"i",11),p.ɵɵpipe(29,"i18n"),p.ɵɵtext(30,"\n "),p.ɵɵelementStart(31,"span"),p.ɵɵtext(32),p.ɵɵpipe(33,"i18n"),p.ɵɵelementEnd(),p.ɵɵtext(34,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(35,"\n "),p.ɵɵelementStart(36,"button",12),p.ɵɵtext(37),p.ɵɵpipe(38,"i18n"),p.ɵɵelementEnd(),p.ɵɵtext(39,"\n "),p.ɵɵelementStart(40,"div",13),p.ɵɵtext(41,"\n "),p.ɵɵtemplate(42,M,9,10,"button",14),p.ɵɵtext(43,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(44,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(45,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(46,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(47,"\n"),p.ɵɵelementEnd(),p.ɵɵtext(48,"\n")),2&e){var n=p.ɵɵreference(5);p.ɵɵadvance(4),p.ɵɵproperty("appApiAction",t.formPromise),p.ɵɵadvance(6),p.ɵɵtextInterpolate(t.title),p.ɵɵadvance(2),p.ɵɵpropertyInterpolate("appA11yTitle",p.ɵɵpipeBind1(13,10,"close")),p.ɵɵadvance(8),p.ɵɵproperty("ngIf",t.loading),p.ɵɵadvance(2),p.ɵɵproperty("ngIf",!t.loading),p.ɵɵadvance(4),p.ɵɵproperty("disabled",n.loading),p.ɵɵadvance(2),p.ɵɵpropertyInterpolate("title",p.ɵɵpipeBind1(29,12,"loading")),p.ɵɵadvance(4),p.ɵɵtextInterpolate(p.ɵɵpipeBind1(33,14,"save")),p.ɵɵadvance(5),p.ɵɵtextInterpolate(p.ɵɵpipeBind1(38,16,"cancel")),p.ɵɵadvance(5),p.ɵɵproperty("ngIf",t.editMode)}},directives:[y.NgControlStatusGroup,y.NgForm,g.ApiActionDirective,x.A11yTitleDirective,b.NgIf,y.DefaultValueAccessor,y.RequiredValidator,S.AutofocusDirective,y.NgControlStatus,y.NgModel,b.NgForOf,y.CheckboxControlValueAccessor,w.StopPropDirective],pipes:[C.I18nPipe],encapsulation:2}),e}();t.CollectionAddEditComponent=B},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){this.groups=[],null!=e&&(this.name=e.name?e.name.encryptedString:null,this.externalId=e.externalId)};t.CollectionRequest=r},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0?this.events=this.events.concat(o):this.events=o,this.loading=!1,this.morePromise=null,this.refreshPromise=null,[2]}}))}))},e.ɵfac=function(t){return new(t||e)(o.ɵɵdirectiveInject(a.ApiService),o.ɵɵdirectiveInject(s.ActivatedRoute),o.ɵɵdirectiveInject(l.EventService),o.ɵɵdirectiveInject(c.I18nService),o.ɵɵdirectiveInject(p.ToasterService),o.ɵɵdirectiveInject(u.UserService),o.ɵɵdirectiveInject(s.Router))},e.ɵcmp=o.ɵɵdefineComponent({type:e,selectors:[["app-org-events"]],decls:41,vars:27,consts:[[1,"page-header","d-flex"],[1,"ml-auto","d-flex"],[1,"form-inline"],["for","start",1,"sr-only"],["type","datetime-local","id","start","placeholder","YYYY-MM-DDTHH:MM",1,"form-control","form-control-sm",3,"placeholder","ngModel","ngModelChange"],[1,"mx-2"],["for","end",1,"sr-only"],["type","datetime-local","id","end","placeholder","YYYY-MM-DDTHH:MM",1,"form-control","form-control-sm",3,"placeholder","ngModel","ngModelChange"],["type","button",1,"btn","btn-sm","btn-outline-primary","ml-3",3,"appApiAction","disabled","click"],["refreshBtn",""],["aria-hidden","true",1,"fa","fa-refresh","fa-fw",3,"ngClass"],[4,"ngIf"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin","text-muted",3,"title"],[1,"sr-only"],["class","table table-hover",4,"ngIf"],["type","button","class","btn btn-block btn-link btn-submit",3,"appApiAction","disabled","click",4,"ngIf"],[1,"table","table-hover"],["width","210",1,"border-top-0"],["width","40",1,"border-top-0"],["width","150",1,"border-top-0"],[1,"border-top-0"],[4,"ngFor","ngForOf"],["aria-hidden","true",3,"title"],[3,"title"],[3,"innerHTML"],["type","button",1,"btn","btn-block","btn-link","btn-submit",3,"appApiAction","disabled","click"],["moreBtn",""],["aria-hidden","true",1,"fa","fa-spinner","fa-spin",3,"title"]],template:function(e,t){if(1&e&&(o.ɵɵelementStart(0,"div",0),o.ɵɵtext(1,"\n "),o.ɵɵelementStart(2,"h1"),o.ɵɵtext(3),o.ɵɵpipe(4,"i18n"),o.ɵɵelementEnd(),o.ɵɵtext(5,"\n "),o.ɵɵelementStart(6,"div",1),o.ɵɵtext(7,"\n "),o.ɵɵelementStart(8,"div",2),o.ɵɵtext(9,"\n "),o.ɵɵelementStart(10,"label",3),o.ɵɵtext(11),o.ɵɵpipe(12,"i18n"),o.ɵɵelementEnd(),o.ɵɵtext(13,"\n "),o.ɵɵelementStart(14,"input",4),o.ɵɵlistener("ngModelChange",(function(e){return t.start=e})),o.ɵɵpipe(15,"i18n"),o.ɵɵelementEnd(),o.ɵɵtext(16,"\n "),o.ɵɵelementStart(17,"span",5),o.ɵɵtext(18,"-"),o.ɵɵelementEnd(),o.ɵɵtext(19,"\n "),o.ɵɵelementStart(20,"label",6),o.ɵɵtext(21),o.ɵɵpipe(22,"i18n"),o.ɵɵelementEnd(),o.ɵɵtext(23,"\n "),o.ɵɵelementStart(24,"input",7),o.ɵɵlistener("ngModelChange",(function(e){return t.end=e})),o.ɵɵpipe(25,"i18n"),o.ɵɵelementEnd(),o.ɵɵtext(26,"\n "),o.ɵɵelementEnd(),o.ɵɵtext(27,"\n "),o.ɵɵelementStart(28,"button",8,9),o.ɵɵlistener("click",(function(){return t.loadEvents(!0)})),o.ɵɵtext(30,"\n "),o.ɵɵelement(31,"i",10),o.ɵɵtext(32),o.ɵɵpipe(33,"i18n"),o.ɵɵelementEnd(),o.ɵɵtext(34,"\n "),o.ɵɵelementEnd(),o.ɵɵtext(35,"\n"),o.ɵɵelementEnd(),o.ɵɵtext(36,"\n"),o.ɵɵtemplate(37,v,9,6,"ng-container",11),o.ɵɵtext(38,"\n"),o.ɵɵtemplate(39,S,8,3,"ng-container",11),o.ɵɵtext(40,"\n")),2&e){var n=o.ɵɵreference(29);o.ɵɵadvance(3),o.ɵɵtextInterpolate(o.ɵɵpipeBind1(4,13,"eventLogs")),o.ɵɵadvance(8),o.ɵɵtextInterpolate(o.ɵɵpipeBind1(12,15,"startDate")),o.ɵɵadvance(3),o.ɵɵpropertyInterpolate("placeholder",o.ɵɵpipeBind1(15,17,"startDate")),o.ɵɵproperty("ngModel",t.start),o.ɵɵadvance(7),o.ɵɵtextInterpolate(o.ɵɵpipeBind1(22,19,"endDate")),o.ɵɵadvance(3),o.ɵɵpropertyInterpolate("placeholder",o.ɵɵpipeBind1(25,21,"endDate")),o.ɵɵproperty("ngModel",t.end),o.ɵɵadvance(4),o.ɵɵproperty("appApiAction",t.refreshPromise)("disabled",t.loaded&&n.loading),o.ɵɵadvance(3),o.ɵɵproperty("ngClass",o.ɵɵpureFunction1(25,w,t.loaded&&n.loading)),o.ɵɵadvance(1),o.ɵɵtextInterpolate1("\n ",o.ɵɵpipeBind1(33,23,"refresh"),"\n "),o.ɵɵadvance(5),o.ɵɵproperty("ngIf",!t.loaded),o.ɵɵadvance(2),o.ɵɵproperty("ngIf",t.loaded)}},directives:[d.DefaultValueAccessor,d.NgControlStatus,d.NgModel,m.ApiActionDirective,h.NgClass,h.NgIf,h.NgForOf],pipes:[f.I18nPipe,h.DatePipe],encapsulation:2}),e}();t.EventsComponent=C},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0?e.data:[]).sort(a.Utils.getSortFunction(this.i18nService,"name")),this.groups=t,this.resetPaging(),this.loading=!1,[2]}}))}))},e.prototype.loadMore=function(){if(this.groups&&!(this.groups.length<=this.pageSize)){var e=this.pagedGroups.length,t=this.pageSize;0===e&&this.pagedGroupsCount>this.pageSize&&(t=this.pagedGroupsCount),this.groups.length>e&&(this.pagedGroups=this.pagedGroups.concat(this.groups.slice(e,e+t))),this.pagedGroupsCount=this.pagedGroups.length,this.didScroll=this.pagedGroups.length>this.pageSize}},e.prototype.edit=function(e){var t=this;null!=this.modal&&this.modal.close();var n=this.componentFactoryResolver.resolveComponentFactory(s.ModalComponent);this.modal=this.addEditModalRef.createComponent(n).instance;var r=this.modal.show(c.GroupAddEditComponent,this.addEditModalRef);r.organizationId=this.organizationId,r.groupId=null!=e?e.id:null,r.onSavedGroup.subscribe((function(){t.modal.close(),t.load()})),r.onDeletedGroup.subscribe((function(){t.modal.close(),t.removeGroup(e)})),this.modal.onClosed.subscribe((function(){t.modal=null}))},e.prototype.add=function(){this.edit(null)},e.prototype.delete=function(e){return r(this,void 0,void 0,(function(){return i(this,(function(t){switch(t.label){case 0:return[4,this.platformUtilsService.showDialog(this.i18nService.t("deleteGroupConfirmation"),e.name,this.i18nService.t("yes"),this.i18nService.t("no"),"warning")];case 1:if(!t.sent())return[2,!1];t.label=2;case 2:return t.trys.push([2,4,,5]),[4,this.apiService.deleteGroup(this.organizationId,e.id)];case 3:return t.sent(),this.toasterService.popAsync("success",null,this.i18nService.t("deletedGroupId",e.name)),this.removeGroup(e),[3,5];case 4:return t.sent(),[3,5];case 5:return[2]}}))}))},e.prototype.users=function(e){var t=this;null!=this.modal&&this.modal.close();var n=this.componentFactoryResolver.resolveComponentFactory(s.ModalComponent);this.modal=this.usersModalRef.createComponent(n).instance;var r=this.modal.show(l.EntityUsersComponent,this.usersModalRef);r.organizationId=this.organizationId,r.entity="group",r.entityId=e.id,r.entityName=e.name,r.onEditedUsers.subscribe((function(){t.modal.close()})),this.modal.onClosed.subscribe((function(){t.modal=null}))},e.prototype.resetPaging=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){return this.pagedGroups=[],this.loadMore(),[2]}))}))},e.prototype.isSearching=function(){return this.searchService.isSearchable(this.searchText)},e.prototype.isPaging=function(){var e=this.isSearching();return e&&this.didScroll&&this.resetPaging(),!e&&this.groups&&this.groups.length>this.pageSize},e.prototype.removeGroup=function(e){var t=this.groups.indexOf(e);t>-1&&(this.groups.splice(t,1),this.resetPaging())},e.ɵfac=function(t){return new(t||e)(p.ɵɵdirectiveInject(u.ApiService),p.ɵɵdirectiveInject(d.ActivatedRoute),p.ɵɵdirectiveInject(m.I18nService),p.ɵɵdirectiveInject(p.ComponentFactoryResolver),p.ɵɵdirectiveInject(h.ToasterService),p.ɵɵdirectiveInject(f.PlatformUtilsService),p.ɵɵdirectiveInject(v.UserService),p.ɵɵdirectiveInject(d.Router),p.ɵɵdirectiveInject(y.SearchService))},e.ɵcmp=p.ɵɵdefineComponent({type:e,selectors:[["app-org-groups"]],viewQuery:function(e,t){var n;(1&e&&(p.ɵɵstaticViewQuery(E,!0,o.ViewContainerRef),p.ɵɵstaticViewQuery(P,!0,o.ViewContainerRef)),2&e)&&(p.ɵɵqueryRefresh(n=p.ɵɵloadQuery())&&(t.addEditModalRef=n.first),p.ɵɵqueryRefresh(n=p.ɵɵloadQuery())&&(t.usersModalRef=n.first))},decls:37,vars:20,consts:[[1,"page-header","d-flex"],[1,"ml-auto","d-flex"],["for","search",1,"sr-only"],["type","search","id","search",1,"form-control","form-control-sm",3,"placeholder","ngModel","ngModelChange"],["type","button",1,"btn","btn-sm","btn-outline-primary","ml-3",3,"click"],["aria-hidden","true",1,"fa","fa-plus","fa-fw"],[4,"ngIf"],["addEdit",""],["usersTemplate",""],["aria-hidden","true",1,"fa","fa-spinner","fa-spin","text-muted",3,"title"],[1,"sr-only"],["class","table table-hover table-list","infiniteScroll","",3,"infiniteScrollDistance","infiniteScrollDisabled","scrolled",4,"ngIf"],["infiniteScroll","",1,"table","table-hover","table-list",3,"infiniteScrollDistance","infiniteScrollDisabled","scrolled"],[4,"ngFor","ngForOf"],["href","#","appStopClick","",3,"click"],[1,"table-list-options"],["appListDropdown","",1,"dropdown"],["type","button","data-toggle","dropdown","aria-haspopup","true","aria-expanded","false",1,"btn","btn-outline-secondary","dropdown-toggle",3,"appA11yTitle"],["aria-hidden","true",1,"fa","fa-cog","fa-lg"],[1,"dropdown-menu","dropdown-menu-right"],["href","#","appStopClick","",1,"dropdown-item",3,"click"],["aria-hidden","true",1,"fa","fa-fw","fa-users"],["href","#","appStopClick","",1,"dropdown-item","text-danger",3,"click"],["aria-hidden","true",1,"fa","fa-fw","fa-trash-o"]],template:function(e,t){1&e&&(p.ɵɵelementStart(0,"div",0),p.ɵɵtext(1,"\n "),p.ɵɵelementStart(2,"h1"),p.ɵɵtext(3),p.ɵɵpipe(4,"i18n"),p.ɵɵelementEnd(),p.ɵɵtext(5,"\n "),p.ɵɵelementStart(6,"div",1),p.ɵɵtext(7,"\n "),p.ɵɵelementStart(8,"div"),p.ɵɵtext(9,"\n "),p.ɵɵelementStart(10,"label",2),p.ɵɵtext(11),p.ɵɵpipe(12,"i18n"),p.ɵɵelementEnd(),p.ɵɵtext(13,"\n "),p.ɵɵelementStart(14,"input",3),p.ɵɵlistener("ngModelChange",(function(e){return t.searchText=e})),p.ɵɵpipe(15,"i18n"),p.ɵɵelementEnd(),p.ɵɵtext(16,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(17,"\n "),p.ɵɵelementStart(18,"button",4),p.ɵɵlistener("click",(function(){return t.add()})),p.ɵɵtext(19,"\n "),p.ɵɵelement(20,"i",5),p.ɵɵtext(21),p.ɵɵpipe(22,"i18n"),p.ɵɵelementEnd(),p.ɵɵtext(23,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(24,"\n"),p.ɵɵelementEnd(),p.ɵɵtext(25,"\n"),p.ɵɵtemplate(26,k,9,6,"ng-container",6),p.ɵɵtext(27,"\n"),p.ɵɵtemplate(28,T,6,2,"ng-container",6),p.ɵɵpipe(29,"search"),p.ɵɵtext(30,"\n"),p.ɵɵtemplate(31,M,0,0,"ng-template",null,7,p.ɵɵtemplateRefExtractor),p.ɵɵtext(33,"\n"),p.ɵɵtemplate(34,B,0,0,"ng-template",null,8,p.ɵɵtemplateRefExtractor),p.ɵɵtext(36,"\n")),2&e&&(p.ɵɵadvance(3),p.ɵɵtextInterpolate(p.ɵɵpipeBind1(4,7,"groups")),p.ɵɵadvance(8),p.ɵɵtextInterpolate(p.ɵɵpipeBind1(12,9,"search")),p.ɵɵadvance(3),p.ɵɵpropertyInterpolate("placeholder",p.ɵɵpipeBind1(15,11,"search")),p.ɵɵproperty("ngModel",t.searchText),p.ɵɵadvance(7),p.ɵɵtextInterpolate1("\n ",p.ɵɵpipeBind1(22,13,"newGroup"),"\n "),p.ɵɵadvance(5),p.ɵɵproperty("ngIf",t.loading),p.ɵɵadvance(2),p.ɵɵproperty("ngIf",!t.loading&&(t.isPaging()?t.pagedGroups:p.ɵɵpipeBind4(29,15,t.groups,t.searchText,"name","id"))))},directives:[g.DefaultValueAccessor,g.NgControlStatus,g.NgModel,x.NgIf,b.InfiniteScrollDirective,x.NgForOf,S.StopClickDirective,w.A11yTitleDirective],pipes:[C.I18nPipe,I.SearchPipe],encapsulation:2}),e}();t.GroupsComponent=D},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&(n[0].checked=!0,n[0].readOnly=e.readOnly,n[0].hidePasswords=e.hidePasswords)})),[3,5];case 4:return n.sent(),[3,5];case 5:return[3,7];case 6:this.title=this.i18nService.t("addGroup"),n.label=7;case 7:return this.loading=!1,[2]}}))}))},e.prototype.loadCollections=function(){return r(this,void 0,void 0,(function(){var e,t,n;return i(this,(function(r){switch(r.label){case 0:return[4,this.apiService.getCollections(this.organizationId)];case 1:return e=r.sent(),t=e.data.map((function(e){return new s.Collection(new a.CollectionData(e))})),n=this,[4,this.collectionService.decryptMany(t)];case 2:return n.collections=r.sent(),[2]}}))}))},e.prototype.check=function(e,t){e.checked=null==t?!e.checked:t,e.checked||(e.readOnly=!1)},e.prototype.selectAll=function(e){var t=this;this.collections.forEach((function(n){return t.check(n,e)}))},e.prototype.submit=function(){return r(this,void 0,void 0,(function(){var e;return i(this,(function(t){switch(t.label){case 0:(e=new l.GroupRequest).name=this.name,e.externalId=this.externalId,e.accessAll="all"===this.access,e.accessAll||(e.collections=this.collections.filter((function(e){return e.checked})).map((function(e){return new c.SelectionReadOnlyRequest(e.id,!!e.readOnly,!!e.hidePasswords)}))),t.label=1;case 1:return t.trys.push([1,3,,4]),this.editMode?this.formPromise=this.apiService.putGroup(this.organizationId,this.groupId,e):this.formPromise=this.apiService.postGroup(this.organizationId,e),[4,this.formPromise];case 2:return t.sent(),this.toasterService.popAsync("success",null,this.i18nService.t(this.editMode?"editedGroupId":"createdGroupId",this.name)),this.onSavedGroup.emit(),[3,4];case 3:return t.sent(),[3,4];case 4:return[2]}}))}))},e.prototype.delete=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.editMode?[4,this.platformUtilsService.showDialog(this.i18nService.t("deleteGroupConfirmation"),this.name,this.i18nService.t("yes"),this.i18nService.t("no"),"warning")]:[2];case 1:if(!e.sent())return[2,!1];e.label=2;case 2:return e.trys.push([2,4,,5]),this.deletePromise=this.apiService.deleteGroup(this.organizationId,this.groupId),[4,this.deletePromise];case 3:return e.sent(),this.toasterService.popAsync("success",null,this.i18nService.t("deletedGroupId",this.name)),this.onDeletedGroup.emit(),[3,5];case 4:return e.sent(),[3,5];case 5:return[2]}}))}))},e.ɵfac=function(t){return new(t||e)(p.ɵɵdirectiveInject(u.ApiService),p.ɵɵdirectiveInject(d.I18nService),p.ɵɵdirectiveInject(m.ToasterService),p.ɵɵdirectiveInject(h.CollectionService),p.ɵɵdirectiveInject(f.PlatformUtilsService))},e.ɵcmp=p.ɵɵdefineComponent({type:e,selectors:[["app-group-add-edit"]],inputs:{groupId:"groupId",organizationId:"organizationId"},outputs:{onSavedGroup:"onSavedGroup",onDeletedGroup:"onDeletedGroup"},decls:49,vars:18,consts:[["tabindex","-1","role","dialog","aria-modal","true","aria-labelledby","groupAddEditTitle",1,"modal","fade"],["role","document",1,"modal-dialog","modal-lg"],["ngNativeValidate","",1,"modal-content",3,"appApiAction","ngSubmit"],["form",""],[1,"modal-header"],["id","groupAddEditTitle",1,"modal-title"],["type","button","data-dismiss","modal",1,"close",3,"appA11yTitle"],["aria-hidden","true"],["class","modal-body",4,"ngIf"],[1,"modal-footer"],["type","submit",1,"btn","btn-primary","btn-submit",3,"disabled"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin",3,"title"],["type","button","data-dismiss","modal",1,"btn","btn-outline-secondary"],[1,"ml-auto"],["type","button","class","btn btn-outline-danger",3,"appA11yTitle","disabled","appApiAction","click",4,"ngIf"],[1,"modal-body"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin","text-muted",3,"title"],[1,"sr-only"],[1,"form-group"],["for","name"],["id","name","type","text","name","Name","required","",1,"form-control",3,"ngModel","ngModelChange"],["for","externalId"],["id","externalId","type","text","name","ExternalId",1,"form-control",3,"ngModel","ngModelChange"],[1,"form-text","text-muted"],[1,"mt-4","d-flex"],[1,"mb-2"],["target","_blank","rel","noopener","href","https://bitwarden.com/help/article/user-types-access-control/#access-control",3,"appA11yTitle"],["aria-hidden","true",1,"fa","fa-question-circle-o"],["class","ml-auto",4,"ngIf"],[1,"form-group",3,"ngClass"],[1,"form-check"],["type","radio","name","access","id","accessAll","value","all",1,"form-check-input",3,"ngModel","ngModelChange"],["for","accessAll",1,"form-check-label"],["type","radio","name","access","id","accessSelected","value","selected",1,"form-check-input",3,"ngModel","ngModelChange"],["for","accessSelected",1,"form-check-label"],[4,"ngIf"],["type","button",1,"btn","btn-link","btn-sm","py-0",3,"click"],["class","table table-hover table-list mb-0",4,"ngIf"],[1,"table","table-hover","table-list","mb-0"],["width","100",1,"text-center"],[4,"ngFor","ngForOf"],[1,"table-list-checkbox",3,"click"],["type","checkbox","appStopProp","",3,"ngModel","name","ngModelChange"],[3,"click"],[1,"text-center"],["type","checkbox",3,"ngModel","name","disabled","ngModelChange"],["type","button",1,"btn","btn-outline-danger",3,"appA11yTitle","disabled","appApiAction","click"],["deleteBtn",""],["aria-hidden","true",1,"fa","fa-trash-o","fa-lg","fa-fw",3,"hidden"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin","fa-lg","fa-fw",3,"hidden","title"]],template:function(e,t){if(1&e&&(p.ɵɵelementStart(0,"div",0),p.ɵɵtext(1,"\n "),p.ɵɵelementStart(2,"div",1),p.ɵɵtext(3,"\n "),p.ɵɵelementStart(4,"form",2,3),p.ɵɵlistener("ngSubmit",(function(){return t.submit()})),p.ɵɵtext(6,"\n "),p.ɵɵelementStart(7,"div",4),p.ɵɵtext(8,"\n "),p.ɵɵelementStart(9,"h2",5),p.ɵɵtext(10),p.ɵɵelementEnd(),p.ɵɵtext(11,"\n "),p.ɵɵelementStart(12,"button",6),p.ɵɵpipe(13,"i18n"),p.ɵɵtext(14,"\n "),p.ɵɵelementStart(15,"span",7),p.ɵɵtext(16,"×"),p.ɵɵelementEnd(),p.ɵɵtext(17,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(18,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(19,"\n "),p.ɵɵtemplate(20,w,9,6,"div",8),p.ɵɵtext(21,"\n "),p.ɵɵtemplate(22,A,62,30,"div",8),p.ɵɵtext(23,"\n "),p.ɵɵelementStart(24,"div",9),p.ɵɵtext(25,"\n "),p.ɵɵelementStart(26,"button",10),p.ɵɵtext(27,"\n "),p.ɵɵelement(28,"i",11),p.ɵɵpipe(29,"i18n"),p.ɵɵtext(30,"\n "),p.ɵɵelementStart(31,"span"),p.ɵɵtext(32),p.ɵɵpipe(33,"i18n"),p.ɵɵelementEnd(),p.ɵɵtext(34,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(35,"\n "),p.ɵɵelementStart(36,"button",12),p.ɵɵtext(37),p.ɵɵpipe(38,"i18n"),p.ɵɵelementEnd(),p.ɵɵtext(39,"\n "),p.ɵɵelementStart(40,"div",13),p.ɵɵtext(41,"\n "),p.ɵɵtemplate(42,O,9,10,"button",14),p.ɵɵtext(43,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(44,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(45,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(46,"\n "),p.ɵɵelementEnd(),p.ɵɵtext(47,"\n"),p.ɵɵelementEnd(),p.ɵɵtext(48,"\n")),2&e){var n=p.ɵɵreference(5);p.ɵɵadvance(4),p.ɵɵproperty("appApiAction",t.formPromise),p.ɵɵadvance(6),p.ɵɵtextInterpolate(t.title),p.ɵɵadvance(2),p.ɵɵpropertyInterpolate("appA11yTitle",p.ɵɵpipeBind1(13,10,"close")),p.ɵɵadvance(8),p.ɵɵproperty("ngIf",t.loading),p.ɵɵadvance(2),p.ɵɵproperty("ngIf",!t.loading),p.ɵɵadvance(4),p.ɵɵproperty("disabled",n.loading),p.ɵɵadvance(2),p.ɵɵpropertyInterpolate("title",p.ɵɵpipeBind1(29,12,"loading")),p.ɵɵadvance(4),p.ɵɵtextInterpolate(p.ɵɵpipeBind1(33,14,"save")),p.ɵɵadvance(5),p.ɵɵtextInterpolate(p.ɵɵpipeBind1(38,16,"cancel")),p.ɵɵadvance(5),p.ɵɵproperty("ngIf",t.editMode)}},directives:[v.NgControlStatusGroup,v.NgForm,y.ApiActionDirective,g.A11yTitleDirective,x.NgIf,v.DefaultValueAccessor,v.RequiredValidator,v.NgControlStatus,v.NgModel,x.NgClass,v.RadioControlValueAccessor,x.NgForOf,v.CheckboxControlValueAccessor,b.StopPropDirective],pipes:[S.I18nPipe],encapsulation:2}),e}();t.GroupAddEditComponent=T},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&t[0].status===l.OrganizationUserStatusType.Confirmed&&this.events(t[0]),null!=n&&n.unsubscribe(),[2]}))}))})),[2]}}))}))})),[2]}))}))},e.prototype.load=function(){return r(this,void 0,void 0,(function(){var e,t=this;return i(this,(function(n){switch(n.label){case 0:return[4,this.apiService.getOrganizationUsers(this.organizationId)];case 1:return e=n.sent(),this.statusMap.clear(),this.allUsers=null!=e.data&&e.data.length>0?e.data:[],this.allUsers.sort(p.Utils.getSortFunction(this.i18nService,"email")),this.allUsers.forEach((function(e){t.statusMap.has(e.status)?t.statusMap.get(e.status).push(e):t.statusMap.set(e.status,[e])})),this.filter(this.status),this.loading=!1,[2]}}))}))},e.prototype.filter=function(e){this.status=e,null!=this.status?this.users=this.statusMap.get(this.status):this.users=this.allUsers,this.resetPaging()},e.prototype.loadMore=function(){if(this.users&&!(this.users.length<=this.pageSize)){var e=this.pagedUsers.length,t=this.pageSize;0===e&&this.pagedUsersCount>this.pageSize&&(t=this.pagedUsersCount),this.users.length>e&&(this.pagedUsers=this.pagedUsers.concat(this.users.slice(e,e+t))),this.pagedUsersCount=this.pagedUsers.length,this.didScroll=this.pagedUsers.length>this.pageSize}},Object.defineProperty(e.prototype,"allCount",{get:function(){return null!=this.allUsers?this.allUsers.length:0},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"invitedCount",{get:function(){return this.statusMap.has(l.OrganizationUserStatusType.Invited)?this.statusMap.get(l.OrganizationUserStatusType.Invited).length:0},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"acceptedCount",{get:function(){return this.statusMap.has(l.OrganizationUserStatusType.Accepted)?this.statusMap.get(l.OrganizationUserStatusType.Accepted).length:0},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"confirmedCount",{get:function(){return this.statusMap.has(l.OrganizationUserStatusType.Confirmed)?this.statusMap.get(l.OrganizationUserStatusType.Confirmed).length:0},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"showConfirmUsers",{get:function(){return null!=this.allUsers&&null!=this.statusMap&&this.allUsers.length>1&&this.confirmedCount>0&&this.confirmedCount<3&&this.acceptedCount>0},enumerable:!0,configurable:!0}),e.prototype.edit=function(e){var t=this;null!=this.modal&&this.modal.close();var n=this.componentFactoryResolver.resolveComponentFactory(u.ModalComponent);this.modal=this.addEditModalRef.createComponent(n).instance;var r=this.modal.show(m.UserAddEditComponent,this.addEditModalRef);r.name=null!=e?e.name||e.email:null,r.organizationId=this.organizationId,r.organizationUserId=null!=e?e.id:null,r.onSavedUser.subscribe((function(){t.modal.close(),t.load()})),r.onDeletedUser.subscribe((function(){t.modal.close(),t.removeUser(e)})),this.modal.onClosed.subscribe((function(){t.modal=null}))},e.prototype.invite=function(){this.edit(null)},e.prototype.groups=function(e){var t=this;null!=this.modal&&this.modal.close();var n=this.componentFactoryResolver.resolveComponentFactory(u.ModalComponent);this.modal=this.groupsModalRef.createComponent(n).instance;var r=this.modal.show(f.UserGroupsComponent,this.groupsModalRef);r.name=null!=e?e.name||e.email:null,r.organizationId=this.organizationId,r.organizationUserId=null!=e?e.id:null,r.onSavedUser.subscribe((function(){t.modal.close()})),this.modal.onClosed.subscribe((function(){t.modal=null}))},e.prototype.remove=function(e){return r(this,void 0,void 0,(function(){return i(this,(function(t){switch(t.label){case 0:return[4,this.platformUtilsService.showDialog(this.i18nService.t("removeUserConfirmation"),e.name||e.email,this.i18nService.t("yes"),this.i18nService.t("no"),"warning")];case 1:if(!t.sent())return[2,!1];t.label=2;case 2:return t.trys.push([2,4,,5]),[4,this.apiService.deleteOrganizationUser(this.organizationId,e.id)];case 3:return t.sent(),this.toasterService.popAsync("success",null,this.i18nService.t("removedUserId",e.name||e.email)),this.removeUser(e),[3,5];case 4:return t.sent(),[3,5];case 5:return[2]}}))}))},e.prototype.reinvite=function(e){return r(this,void 0,void 0,(function(){return i(this,(function(t){switch(t.label){case 0:return null!=this.actionPromise?[2]:(this.actionPromise=this.apiService.postOrganizationUserReinvite(this.organizationId,e.id),[4,this.actionPromise]);case 1:return t.sent(),this.toasterService.popAsync("success",null,this.i18nService.t("hasBeenReinvited",e.name||e.email)),this.actionPromise=null,[2]}}))}))},e.prototype.confirm=function(e){return r(this,void 0,void 0,(function(){var t,n,o,s,c,d,m,f,v,y,g=this;return i(this,(function(x){switch(x.label){case 0:return t=function(t){return r(g,void 0,void 0,(function(){var n;return i(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,3,4]),this.actionPromise=this.doConfirmation(e,t),[4,this.actionPromise];case 1:return r.sent(),function(t){e.status=l.OrganizationUserStatusType.Confirmed;var n=t.statusMap.get(l.OrganizationUserStatusType.Accepted).indexOf(e);n>-1&&(t.statusMap.get(l.OrganizationUserStatusType.Accepted).splice(n,1),t.statusMap.get(l.OrganizationUserStatusType.Confirmed).push(e))}(this),this.toasterService.popAsync("success",null,this.i18nService.t("hasBeenConfirmed",e.name||e.email)),[3,4];case 2:throw n=r.sent(),this.validationService.showError(n),n;case 3:return this.actionPromise=null,[7];case 4:return[2]}}))}))},null!=this.actionPromise?[2]:[4,this.storageService.get(a.ConstantsService.autoConfirmFingerprints)];case 1:if(null==(n=x.sent())||!n)return null!=this.modal&&this.modal.close(),o=this.componentFactoryResolver.resolveComponentFactory(u.ModalComponent),this.modal=this.confirmModalRef.createComponent(o).instance,(s=this.modal.show(h.UserConfirmComponent,this.confirmModalRef)).name=null!=e?e.name||e.email:null,s.organizationId=this.organizationId,s.organizationUserId=null!=e?e.id:null,s.userId=null!=e?e.userId:null,s.onConfirmedUser.subscribe((function(e){return r(g,void 0,void 0,(function(){var n;return i(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,t(e)];case 1:return r.sent(),this.modal.close(),[3,3];case 2:return n=r.sent(),console.error("Handled exception:",n),[3,3];case 3:return[2]}}))}))})),this.modal.onClosed.subscribe((function(){g.modal=null})),[2];x.label=2;case 2:return x.trys.push([2,9,,10]),[4,this.apiService.getUserPublicKey(e.userId)];case 3:c=x.sent(),d=p.Utils.fromB64ToArray(c.publicKey),x.label=4;case 4:return x.trys.push([4,6,,7]),f=(m=console).log,v="User's fingerprint: ",[4,this.cryptoService.getFingerprint(e.userId,d.buffer)];case 5:return f.apply(m,[v+x.sent().join("-")]),[3,7];case 6:return x.sent(),[3,7];case 7:return[4,t(d)];case 8:return x.sent(),[3,10];case 9:return y=x.sent(),console.error("Handled exception:",y),[3,10];case 10:return[2]}}))}))},e.prototype.events=function(e){return r(this,void 0,void 0,(function(){var t,n,r=this;return i(this,(function(i){return null!=this.modal&&this.modal.close(),t=this.componentFactoryResolver.resolveComponentFactory(u.ModalComponent),this.modal=this.eventsModalRef.createComponent(t).instance,(n=this.modal.show(d.EntityEventsComponent,this.eventsModalRef)).name=e.name||e.email,n.organizationId=this.organizationId,n.entityId=e.id,n.showUser=!1,n.entity="user",this.modal.onClosed.subscribe((function(){r.modal=null})),[2]}))}))},e.prototype.resetPaging=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){return this.pagedUsers=[],this.loadMore(),[2]}))}))},e.prototype.isSearching=function(){return this.searchService.isSearchable(this.searchText)},e.prototype.isPaging=function(){var e=this.isSearching();return e&&this.didScroll&&this.resetPaging(),!e&&this.users&&this.users.length>this.pageSize},e.prototype.doConfirmation=function(e,t){return r(this,void 0,void 0,(function(){var n,r,o;return i(this,(function(i){switch(i.label){case 0:return[4,this.cryptoService.getOrgKey(this.organizationId)];case 1:return n=i.sent(),[4,this.cryptoService.rsaEncrypt(n.key,t.buffer)];case 2:return r=i.sent(),(o=new s.OrganizationUserConfirmRequest).key=r.encryptedString,[4,this.apiService.postOrganizationUserConfirm(this.organizationId,e.id,o)];case 3:return i.sent(),[2]}}))}))},e.prototype.removeUser=function(e){var t=this.users.indexOf(e);t>-1&&(this.users.splice(t,1),this.resetPaging()),this.statusMap.has(l.OrganizationUserStatusType.Accepted)&&(t=this.statusMap.get(l.OrganizationUserStatusType.Accepted).indexOf(e))>-1&&this.statusMap.get(l.OrganizationUserStatusType.Accepted).splice(t,1),this.statusMap.has(l.OrganizationUserStatusType.Invited)&&(t=this.statusMap.get(l.OrganizationUserStatusType.Invited).indexOf(e))>-1&&this.statusMap.get(l.OrganizationUserStatusType.Invited).splice(t,1),this.statusMap.has(l.OrganizationUserStatusType.Confirmed)&&(t=this.statusMap.get(l.OrganizationUserStatusType.Confirmed).indexOf(e))>-1&&this.statusMap.get(l.OrganizationUserStatusType.Confirmed).splice(t,1)},e.ɵfac=function(t){return new(t||e)(v.ɵɵdirectiveInject(y.ApiService),v.ɵɵdirectiveInject(g.ActivatedRoute),v.ɵɵdirectiveInject(x.I18nService),v.ɵɵdirectiveInject(v.ComponentFactoryResolver),v.ɵɵdirectiveInject(b.PlatformUtilsService),v.ɵɵdirectiveInject(S.ToasterService),v.ɵɵdirectiveInject(w.CryptoService),v.ɵɵdirectiveInject(C.UserService),v.ɵɵdirectiveInject(g.Router),v.ɵɵdirectiveInject(I.StorageService),v.ɵɵdirectiveInject(E.SearchService),v.ɵɵdirectiveInject(P.ValidationService))},e.ɵcmp=v.ɵɵdefineComponent({type:e,selectors:[["app-org-people"]],viewQuery:function(e,t){var n;(1&e&&(v.ɵɵstaticViewQuery(V,!0,o.ViewContainerRef),v.ɵɵstaticViewQuery(j,!0,o.ViewContainerRef),v.ɵɵstaticViewQuery(F,!0,o.ViewContainerRef),v.ɵɵstaticViewQuery(U,!0,o.ViewContainerRef)),2&e)&&(v.ɵɵqueryRefresh(n=v.ɵɵloadQuery())&&(t.addEditModalRef=n.first),v.ɵɵqueryRefresh(n=v.ɵɵloadQuery())&&(t.groupsModalRef=n.first),v.ɵɵqueryRefresh(n=v.ɵɵloadQuery())&&(t.eventsModalRef=n.first),v.ɵɵqueryRefresh(n=v.ɵɵloadQuery())&&(t.confirmModalRef=n.first))},decls:64,vars:45,consts:[[1,"page-header","d-flex"],[1,"ml-auto","d-flex"],["role","group",1,"btn-group","btn-group-sm"],["type","button",1,"btn","btn-outline-secondary",3,"ngClass","click"],["class","badge badge-pill badge-info",4,"ngIf"],["class","badge badge-pill badge-warning",4,"ngIf"],[1,"ml-3"],["for","search",1,"sr-only"],["type","search","id","search",1,"form-control","form-control-sm",3,"placeholder","ngModel","ngModelChange"],["type","button",1,"btn","btn-sm","btn-outline-primary","ml-3",3,"click"],["aria-hidden","true",1,"fa","fa-plus","fa-fw"],[4,"ngIf"],["addEdit",""],["groupsTemplate",""],["eventsTemplate",""],["confirmTemplate",""],[1,"badge","badge-pill","badge-info"],[1,"badge","badge-pill","badge-warning"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin","text-muted",3,"title"],[1,"sr-only"],["type","info","icon","fa-check-circle",3,"title",4,"ngIf"],["infiniteScroll","",1,"table","table-hover","table-list",3,"infiniteScrollDistance","infiniteScrollDisabled","scrolled"],[4,"ngFor","ngForOf"],["type","info","icon","fa-check-circle",3,"title"],["width","30"],["size","25",3,"data","email","circle","fontSize"],["href","#","appStopClick","",3,"click"],["class","badge badge-secondary",4,"ngIf"],["class","badge badge-warning",4,"ngIf"],["class","text-muted d-block",4,"ngIf"],[1,"table-list-options"],["appListDropdown","",1,"dropdown"],["type","button","data-toggle","dropdown","aria-haspopup","true","aria-expanded","false",1,"btn","btn-outline-secondary","dropdown-toggle",3,"appA11yTitle"],["aria-hidden","true",1,"fa","fa-cog","fa-lg"],[1,"dropdown-menu","dropdown-menu-right"],["class","dropdown-item","href","#","appStopClick","",3,"click",4,"ngIf"],["class","dropdown-item text-success","href","#","appStopClick","",3,"click",4,"ngIf"],["href","#","appStopClick","",1,"dropdown-item","text-danger",3,"click"],["aria-hidden","true",1,"fa","fa-fw","fa-remove"],[1,"badge","badge-secondary"],[1,"badge","badge-warning"],[1,"text-muted","d-block"],["aria-hidden","true",1,"fa","fa-lock",3,"title"],["href","#","appStopClick","",1,"dropdown-item",3,"click"],["aria-hidden","true",1,"fa","fa-fw","fa-envelope-o"],["href","#","appStopClick","",1,"dropdown-item","text-success",3,"click"],["aria-hidden","true",1,"fa","fa-fw","fa-check"],["aria-hidden","true",1,"fa","fa-fw","fa-sitemap"],["aria-hidden","true",1,"fa","fa-fw","fa-file-text-o"]],template:function(e,t){1&e&&(v.ɵɵelementStart(0,"div",0),v.ɵɵtext(1,"\n "),v.ɵɵelementStart(2,"h1"),v.ɵɵtext(3),v.ɵɵpipe(4,"i18n"),v.ɵɵelementEnd(),v.ɵɵtext(5,"\n "),v.ɵɵelementStart(6,"div",1),v.ɵɵtext(7,"\n "),v.ɵɵelementStart(8,"div",2),v.ɵɵtext(9,"\n "),v.ɵɵelementStart(10,"button",3),v.ɵɵlistener("click",(function(){return t.filter(null)})),v.ɵɵtext(11),v.ɵɵpipe(12,"i18n"),v.ɵɵtemplate(13,N,2,1,"span",4),v.ɵɵtext(14,"\n "),v.ɵɵelementEnd(),v.ɵɵtext(15,"\n "),v.ɵɵelementStart(16,"button",3),v.ɵɵlistener("click",(function(){return t.filter(t.organizationUserStatusType.Invited)})),v.ɵɵtext(17),v.ɵɵpipe(18,"i18n"),v.ɵɵtemplate(19,z,2,1,"span",4),v.ɵɵtext(20,"\n "),v.ɵɵelementEnd(),v.ɵɵtext(21,"\n "),v.ɵɵelementStart(22,"button",3),v.ɵɵlistener("click",(function(){return t.filter(t.organizationUserStatusType.Accepted)})),v.ɵɵtext(23),v.ɵɵpipe(24,"i18n"),v.ɵɵtemplate(25,L,2,1,"span",5),v.ɵɵtext(26,"\n "),v.ɵɵelementEnd(),v.ɵɵtext(27,"\n "),v.ɵɵelementEnd(),v.ɵɵtext(28,"\n "),v.ɵɵelementStart(29,"div",6),v.ɵɵtext(30,"\n "),v.ɵɵelementStart(31,"label",7),v.ɵɵtext(32),v.ɵɵpipe(33,"i18n"),v.ɵɵelementEnd(),v.ɵɵtext(34,"\n "),v.ɵɵelementStart(35,"input",8),v.ɵɵlistener("ngModelChange",(function(e){return t.searchText=e})),v.ɵɵpipe(36,"i18n"),v.ɵɵelementEnd(),v.ɵɵtext(37,"\n "),v.ɵɵelementEnd(),v.ɵɵtext(38,"\n "),v.ɵɵelementStart(39,"button",9),v.ɵɵlistener("click",(function(){return t.invite()})),v.ɵɵtext(40,"\n "),v.ɵɵelement(41,"i",10),v.ɵɵtext(42),v.ɵɵpipe(43,"i18n"),v.ɵɵelementEnd(),v.ɵɵtext(44,"\n "),v.ɵɵelementEnd(),v.ɵɵtext(45,"\n"),v.ɵɵelementEnd(),v.ɵɵtext(46,"\n"),v.ɵɵtemplate(47,G,9,6,"ng-container",11),v.ɵɵtext(48,"\n"),v.ɵɵtemplate(49,se,6,2,"ng-container",11),v.ɵɵpipe(50,"search"),v.ɵɵtext(51,"\n"),v.ɵɵtemplate(52,le,0,0,"ng-template",null,12,v.ɵɵtemplateRefExtractor),v.ɵɵtext(54,"\n"),v.ɵɵtemplate(55,ce,0,0,"ng-template",null,13,v.ɵɵtemplateRefExtractor),v.ɵɵtext(57,"\n"),v.ɵɵtemplate(58,pe,0,0,"ng-template",null,14,v.ɵɵtemplateRefExtractor),v.ɵɵtext(60,"\n"),v.ɵɵtemplate(61,ue,0,0,"ng-template",null,15,v.ɵɵtemplateRefExtractor),v.ɵɵtext(63,"\n")),2&e&&(v.ɵɵadvance(3),v.ɵɵtextInterpolate(v.ɵɵpipeBind1(4,16,"people")),v.ɵɵadvance(7),v.ɵɵproperty("ngClass",v.ɵɵpureFunction1(36,de,null==t.status)),v.ɵɵadvance(1),v.ɵɵtextInterpolate1("\n ",v.ɵɵpipeBind1(12,18,"all"),"\n "),v.ɵɵadvance(2),v.ɵɵproperty("ngIf",t.allCount),v.ɵɵadvance(3),v.ɵɵproperty("ngClass",v.ɵɵpureFunction1(38,de,t.status==t.organizationUserStatusType.Invited)),v.ɵɵadvance(1),v.ɵɵtextInterpolate1("\n ",v.ɵɵpipeBind1(18,20,"invited"),"\n "),v.ɵɵadvance(2),v.ɵɵproperty("ngIf",t.invitedCount),v.ɵɵadvance(3),v.ɵɵproperty("ngClass",v.ɵɵpureFunction1(40,de,t.status==t.organizationUserStatusType.Accepted)),v.ɵɵadvance(1),v.ɵɵtextInterpolate1("\n ",v.ɵɵpipeBind1(24,22,"accepted"),"\n "),v.ɵɵadvance(2),v.ɵɵproperty("ngIf",t.acceptedCount),v.ɵɵadvance(7),v.ɵɵtextInterpolate(v.ɵɵpipeBind1(33,24,"search")),v.ɵɵadvance(3),v.ɵɵpropertyInterpolate("placeholder",v.ɵɵpipeBind1(36,26,"search")),v.ɵɵproperty("ngModel",t.searchText),v.ɵɵadvance(7),v.ɵɵtextInterpolate1("\n ",v.ɵɵpipeBind1(43,28,"inviteUser"),"\n "),v.ɵɵadvance(5),v.ɵɵproperty("ngIf",t.loading),v.ɵɵadvance(2),v.ɵɵproperty("ngIf",!t.loading&&(t.isPaging()?t.pagedUsers:v.ɵɵpipeBindV(50,30,v.ɵɵpureFunction2(42,me,t.users,t.searchText)))))},directives:[k.NgClass,k.NgIf,_.DefaultValueAccessor,_.NgControlStatus,_.NgModel,A.InfiniteScrollDirective,k.NgForOf,O.CalloutComponent,T.AvatarComponent,M.StopClickDirective,B.A11yTitleDirective],pipes:[D.I18nPipe,R.SearchPipe],encapsulation:2}),e}();t.PeopleComponent=he},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&(n[0].checked=!0,n[0].readOnly=e.readOnly,n[0].hidePasswords=e.hidePasswords)})),[3,5];case 4:return n.sent(),[3,5];case 5:return[3,7];case 6:this.title=this.i18nService.t("inviteUser"),n.label=7;case 7:return this.loading=!1,[2]}}))}))},e.prototype.loadCollections=function(){return r(this,void 0,void 0,(function(){var e,t,n;return i(this,(function(r){switch(r.label){case 0:return[4,this.apiService.getCollections(this.organizationId)];case 1:return e=r.sent(),t=e.data.map((function(e){return new s.Collection(new a.CollectionData(e))})),n=this,[4,this.collectionService.decryptMany(t)];case 2:return n.collections=r.sent(),[2]}}))}))},e.prototype.check=function(e,t){e.checked=null==t?!e.checked:t,e.checked||(e.readOnly=!1)},e.prototype.selectAll=function(e){var t=this;this.collections.forEach((function(n){return t.check(n,e)}))},e.prototype.setRequestPermissions=function(e,t){return e.accessBusinessPortal=!t&&this.permissions.accessBusinessPortal,e.accessEventLogs=this.permissions.accessEventLogs=!t&&this.permissions.accessEventLogs,e.accessImportExport=!t&&this.permissions.accessImportExport,e.accessReports=!t&&this.permissions.accessReports,e.manageAllCollections=!t&&this.permissions.manageAllCollections,e.manageAssignedCollections=!t&&this.permissions.manageAssignedCollections,e.manageGroups=!t&&this.permissions.manageGroups,e.manageSso=!t&&this.permissions.manageSso,e.managePolicies=!t&&this.permissions.managePolicies,e.manageUsers=!t&&this.permissions.manageUsers,e.manageResetPassword=!t&&this.permissions.manageResetPassword,e},e.prototype.submit=function(){var e,t;return r(this,void 0,void 0,(function(){var n,r;return i(this,(function(i){switch(i.label){case 0:n=null,"all"!==this.access&&(n=this.collections.filter((function(e){return e.checked})).map((function(e){return new p.SelectionReadOnlyRequest(e.id,!!e.readOnly,!!e.hidePasswords)}))),i.label=1;case 1:return i.trys.push([1,3,,4]),this.editMode?((r=new c.OrganizationUserUpdateRequest).accessAll="all"===this.access,r.type=this.type,r.collections=n,r.permissions=this.setRequestPermissions(null!==(e=r.permissions)&&void 0!==e?e:new d.PermissionsApi,r.type!==u.OrganizationUserType.Custom),this.formPromise=this.apiService.putOrganizationUser(this.organizationId,this.organizationUserId,r)):((r=new l.OrganizationUserInviteRequest).emails=this.emails.trim().split(/\s*,\s*/),r.accessAll="all"===this.access,r.type=this.type,r.permissions=this.setRequestPermissions(null!==(t=r.permissions)&&void 0!==t?t:new d.PermissionsApi,r.type!==u.OrganizationUserType.Custom),r.collections=n,this.formPromise=this.apiService.postOrganizationUserInvite(this.organizationId,r)),[4,this.formPromise];case 2:return i.sent(),this.toasterService.popAsync("success",null,this.i18nService.t(this.editMode?"editedUserId":"invitedUsers",this.name)),this.onSavedUser.emit(),[3,4];case 3:return i.sent(),[3,4];case 4:return[2]}}))}))},e.prototype.delete=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.editMode?[4,this.platformUtilsService.showDialog(this.i18nService.t("removeUserConfirmation"),this.name,this.i18nService.t("yes"),this.i18nService.t("no"),"warning")]:[2];case 1:if(!e.sent())return[2,!1];e.label=2;case 2:return e.trys.push([2,4,,5]),this.deletePromise=this.apiService.deleteOrganizationUser(this.organizationId,this.organizationUserId),[4,this.deletePromise];case 3:return e.sent(),this.toasterService.popAsync("success",null,this.i18nService.t("removedUserId",this.name)),this.onDeletedUser.emit(),[3,5];case 4:return e.sent(),[3,5];case 5:return[2]}}))}))},e.ɵfac=function(t){return new(t||e)(m.ɵɵdirectiveInject(h.ApiService),m.ɵɵdirectiveInject(f.I18nService),m.ɵɵdirectiveInject(v.ToasterService),m.ɵɵdirectiveInject(y.CollectionService),m.ɵɵdirectiveInject(g.PlatformUtilsService))},e.ɵcmp=m.ɵɵdefineComponent({type:e,selectors:[["app-user-add-edit"]],inputs:{name:"name",organizationUserId:"organizationUserId",organizationId:"organizationId"},outputs:{onSavedUser:"onSavedUser",onDeletedUser:"onDeletedUser"},decls:51,vars:19,consts:[["tabindex","-1","role","dialog","aria-modal","true","aria-labelledby","userAddEditTitle",1,"modal","fade"],["role","document",1,"modal-dialog","modal-lg"],["ngNativeValidate","",1,"modal-content",3,"appApiAction","ngSubmit"],["form",""],[1,"modal-header"],["id","userAddEditTitle",1,"modal-title"],["class","text-muted",4,"ngIf"],["type","button","data-dismiss","modal",1,"close",3,"appA11yTitle"],["aria-hidden","true"],["class","modal-body",4,"ngIf"],[1,"modal-footer"],["type","submit",1,"btn","btn-primary","btn-submit",3,"disabled"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin",3,"title"],["type","button","data-dismiss","modal",1,"btn","btn-outline-secondary"],[1,"ml-auto"],["type","button","class","btn btn-outline-danger",3,"appA11yTitle","disabled","appApiAction","click",4,"ngIf"],[1,"text-muted"],[1,"modal-body"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin","text-muted",3,"title"],[1,"sr-only"],[4,"ngIf"],["target","_blank","rel","noopener","href","https://bitwarden.com/help/article/user-types-access-control/#user-types",3,"appA11yTitle"],["aria-hidden","true",1,"fa","fa-question-circle-o"],[1,"form-check","mt-2","form-check-block"],["type","radio","name","userType","id","userTypeUser",1,"form-check-input",3,"value","ngModel","ngModelChange"],["for","userTypeUser",1,"form-check-label"],["type","radio","name","userType","id","userTypeManager",1,"form-check-input",3,"value","ngModel","ngModelChange"],["for","userTypeManager",1,"form-check-label"],["type","radio","name","userType","id","userTypeAdmin",1,"form-check-input",3,"value","ngModel","ngModelChange"],["for","userTypeAdmin",1,"form-check-label"],["type","radio","name","userType","id","userTypeOwner",1,"form-check-input",3,"value","ngModel","ngModelChange"],["for","userTypeOwner",1,"form-check-label"],["type","radio","name","userType","id","userTypeCustom",1,"form-check-input",3,"value","ngModel","ngModelChange"],["for","userTypeCustom",1,"form-check-label"],[1,"mt-4","d-flex"],[1,"mb-3"],["target","_blank","rel","noopener","href","https://bitwarden.com/help/article/user-types-access-control/#access-control",3,"appA11yTitle"],["class","ml-auto",4,"ngIf"],[1,"form-group",3,"ngClass"],[1,"form-check"],["type","radio","name","access","id","accessAll","value","all",1,"form-check-input",3,"ngModel","ngModelChange"],["for","accessAll",1,"form-check-label"],["type","radio","name","access","id","accessSelected","value","selected",1,"form-check-input",3,"ngModel","ngModelChange"],["for","accessSelected",1,"form-check-label"],[1,"form-group","mb-4"],["for","emails"],["id","emails","type","text","name","Emails","required","","appAutoFocus","",1,"form-control",3,"ngModel","ngModelChange"],[1,"row"],[1,"col-6"],[1,"font-weight-bold","mb-0"],[1,"my-0","mr-2"],[1,"form-group","mb-0"],[1,"form-check","mt-1","form-check-block"],["type","checkbox","name","manageAssignedCollections","id","manageAssignedCollections",1,"form-check-input",3,"ngModel","ngModelChange"],["for","manageAssignedCollections",1,"form-check-label","font-weight-normal"],["type","checkbox","name","accessBusinessPortal","id","accessBusinessPortal",1,"form-check-input",3,"ngModel","ngModelChange"],["for","accessBusinessPortal",1,"form-check-label","font-weight-normal"],["type","checkbox","name","accessEventLogs","id","accessEventLogs",1,"form-check-input",3,"ngModel","ngModelChange"],["for","accessEventLogs",1,"form-check-label","font-weight-normal"],["type","checkbox","name","accessImportExport","id","accessImportExport",1,"form-check-input",3,"ngModel","ngModelChange"],["for","accessImportExport",1,"form-check-label","font-weight-normal"],["type","checkbox","name","accessReports","id","accessReports",1,"form-check-input",3,"ngModel","ngModelChange"],["for","accessReports",1,"form-check-label","font-weight-normal"],["type","checkbox","name","manageAllCollections","id","manageAllCollections",1,"form-check-input",3,"ngModel","ngModelChange"],["for","manageAllCollections",1,"form-check-label","font-weight-normal"],["type","checkbox","name","manageGroups","id","manageGroups",1,"form-check-input",3,"ngModel","ngModelChange"],["for","manageGroups",1,"form-check-label","font-weight-normal"],["type","checkbox","name","manageSso","id","managePolicies",1,"form-check-input",3,"ngModel","ngModelChange"],["for","manageSso",1,"form-check-label","font-weight-normal"],["type","checkbox","name","managePolicies","id","managePolicies",1,"form-check-input",3,"ngModel","ngModelChange"],["for","managePolicies",1,"form-check-label","font-weight-normal"],["type","checkbox","name","manageUsers","id","manageUsers",1,"form-check-input",3,"ngModel","ngModelChange"],["for","manageUsers",1,"form-check-label","font-weight-normal"],["type","checkbox","name","manageResetPassword","id","manageResetPassword",1,"form-check-input",3,"ngModel","ngModelChange"],["for","manageResetPassword",1,"form-check-label","font-weight-normal"],["type","button",1,"btn","btn-link","btn-sm","py-0",3,"click"],["class","table table-hover table-list mb-0",4,"ngIf"],[1,"table","table-hover","table-list","mb-0"],["width","100",1,"text-center"],[4,"ngFor","ngForOf"],[1,"table-list-checkbox",3,"click"],["type","checkbox","appStopProp","",3,"ngModel","name","ngModelChange"],[3,"click"],[1,"text-center"],["type","checkbox",3,"ngModel","name","disabled","ngModelChange"],["type","button",1,"btn","btn-outline-danger",3,"appA11yTitle","disabled","appApiAction","click"],["deleteBtn",""],["aria-hidden","true",1,"fa","fa-trash-o","fa-lg","fa-fw",3,"hidden"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin","fa-lg","fa-fw",3,"hidden","title"]],template:function(e,t){if(1&e&&(m.ɵɵelementStart(0,"div",0),m.ɵɵtext(1,"\n "),m.ɵɵelementStart(2,"div",1),m.ɵɵtext(3,"\n "),m.ɵɵelementStart(4,"form",2,3),m.ɵɵlistener("ngSubmit",(function(){return t.submit()})),m.ɵɵtext(6,"\n "),m.ɵɵelementStart(7,"div",4),m.ɵɵtext(8,"\n "),m.ɵɵelementStart(9,"h2",5),m.ɵɵtext(10),m.ɵɵtemplate(11,E,2,1,"small",6),m.ɵɵtext(12,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(13,"\n "),m.ɵɵelementStart(14,"button",7),m.ɵɵpipe(15,"i18n"),m.ɵɵtext(16,"\n "),m.ɵɵelementStart(17,"span",8),m.ɵɵtext(18,"×"),m.ɵɵelementEnd(),m.ɵɵtext(19,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(20,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(21,"\n "),m.ɵɵtemplate(22,P,9,6,"div",9),m.ɵɵtext(23,"\n "),m.ɵɵtemplate(24,R,119,67,"div",9),m.ɵɵtext(25,"\n "),m.ɵɵelementStart(26,"div",10),m.ɵɵtext(27,"\n "),m.ɵɵelementStart(28,"button",11),m.ɵɵtext(29,"\n "),m.ɵɵelement(30,"i",12),m.ɵɵpipe(31,"i18n"),m.ɵɵtext(32,"\n "),m.ɵɵelementStart(33,"span"),m.ɵɵtext(34),m.ɵɵpipe(35,"i18n"),m.ɵɵelementEnd(),m.ɵɵtext(36,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(37,"\n "),m.ɵɵelementStart(38,"button",13),m.ɵɵtext(39),m.ɵɵpipe(40,"i18n"),m.ɵɵelementEnd(),m.ɵɵtext(41,"\n "),m.ɵɵelementStart(42,"div",14),m.ɵɵtext(43,"\n "),m.ɵɵtemplate(44,V,9,10,"button",15),m.ɵɵtext(45,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(46,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(47,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(48,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(49,"\n"),m.ɵɵelementEnd(),m.ɵɵtext(50,"\n")),2&e){var n=m.ɵɵreference(5);m.ɵɵadvance(4),m.ɵɵproperty("appApiAction",t.formPromise),m.ɵɵadvance(6),m.ɵɵtextInterpolate1("\n ",t.title,"\n "),m.ɵɵadvance(1),m.ɵɵproperty("ngIf",t.name),m.ɵɵadvance(3),m.ɵɵpropertyInterpolate("appA11yTitle",m.ɵɵpipeBind1(15,11,"close")),m.ɵɵadvance(8),m.ɵɵproperty("ngIf",t.loading),m.ɵɵadvance(2),m.ɵɵproperty("ngIf",!t.loading),m.ɵɵadvance(4),m.ɵɵproperty("disabled",n.loading),m.ɵɵadvance(2),m.ɵɵpropertyInterpolate("title",m.ɵɵpipeBind1(31,13,"loading")),m.ɵɵadvance(4),m.ɵɵtextInterpolate(m.ɵɵpipeBind1(35,15,"save")),m.ɵɵadvance(5),m.ɵɵtextInterpolate1("\n ",m.ɵɵpipeBind1(40,17,"cancel"),"\n "),m.ɵɵadvance(5),m.ɵɵproperty("ngIf",t.editMode)}},directives:[x.NgControlStatusGroup,x.NgForm,b.ApiActionDirective,S.NgIf,w.A11yTitleDirective,x.RadioControlValueAccessor,x.DefaultValueAccessor,x.NgControlStatus,x.NgModel,S.NgClass,x.RequiredValidator,x.CheckboxControlValueAccessor,S.NgForOf,C.StopPropDirective],pipes:[I.I18nPipe],encapsulation:2}),e}();t.UserAddEditComponent=j},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&(t[0].checked=!0)})),[3,5];case 4:return i.sent(),[3,5];case 5:return this.loading=!1,[2]}}))}))},e.prototype.check=function(e,t){e.checked=null==t?!e.checked:t,e.checked||(e.readOnly=!1)},e.prototype.selectAll=function(e){var t=this;this.groups.forEach((function(n){return t.check(n,e)}))},e.prototype.submit=function(){return r(this,void 0,void 0,(function(){var e;return i(this,(function(t){switch(t.label){case 0:(e=new a.OrganizationUserUpdateGroupsRequest).groupIds=this.groups.filter((function(e){return e.checked})).map((function(e){return e.id})),t.label=1;case 1:return t.trys.push([1,3,,4]),this.formPromise=this.apiService.putOrganizationUserGroups(this.organizationId,this.organizationUserId,e),[4,this.formPromise];case 2:return t.sent(),this.toasterService.popAsync("success",null,this.i18nService.t("editedGroupsForUser",this.name)),this.onSavedUser.emit(),[3,4];case 3:return t.sent(),[3,4];case 4:return[2]}}))}))},e.ɵfac=function(t){return new(t||e)(l.ɵɵdirectiveInject(c.ApiService),l.ɵɵdirectiveInject(p.I18nService),l.ɵɵdirectiveInject(u.ToasterService))},e.ɵcmp=l.ɵɵdefineComponent({type:e,selectors:[["app-user-groups"]],inputs:{name:"name",organizationUserId:"organizationUserId",organizationId:"organizationId"},outputs:{onSavedUser:"onSavedUser"},decls:47,vars:20,consts:[["tabindex","-1","role","dialog","aria-modal","true","aria-labelledby","groupAccessTitle",1,"modal","fade"],["role","document",1,"modal-dialog"],[1,"modal-content",3,"appApiAction","ngSubmit"],["form",""],[1,"modal-header"],["id","groupAccessTitle",1,"modal-title"],["class","text-muted",4,"ngIf"],["type","button","data-dismiss","modal",1,"close",3,"appA11yTitle"],["aria-hidden","true"],["class","modal-body",4,"ngIf"],[1,"modal-footer"],["type","submit",1,"btn","btn-primary","btn-submit",3,"disabled"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin",3,"title"],["type","button","data-dismiss","modal",1,"btn","btn-outline-secondary"],[1,"text-muted"],[1,"modal-body"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin","text-muted",3,"title"],[1,"sr-only"],[4,"ngIf"],["class","table table-hover table-list mb-0",4,"ngIf"],[1,"table","table-hover","table-list","mb-0"],[4,"ngFor","ngForOf"],[1,"table-list-checkbox",3,"click"],["type","checkbox","appStopProp","",3,"ngModel","name","ngModelChange"],[3,"click"]],template:function(e,t){if(1&e&&(l.ɵɵelementStart(0,"div",0),l.ɵɵtext(1,"\n "),l.ɵɵelementStart(2,"div",1),l.ɵɵtext(3,"\n "),l.ɵɵelementStart(4,"form",2,3),l.ɵɵlistener("ngSubmit",(function(){return t.submit()})),l.ɵɵtext(6,"\n "),l.ɵɵelementStart(7,"div",4),l.ɵɵtext(8,"\n "),l.ɵɵelementStart(9,"h2",5),l.ɵɵtext(10),l.ɵɵpipe(11,"i18n"),l.ɵɵtemplate(12,g,2,1,"small",6),l.ɵɵtext(13,"\n "),l.ɵɵelementEnd(),l.ɵɵtext(14,"\n "),l.ɵɵelementStart(15,"button",7),l.ɵɵpipe(16,"i18n"),l.ɵɵtext(17,"\n "),l.ɵɵelementStart(18,"span",8),l.ɵɵtext(19,"×"),l.ɵɵelementEnd(),l.ɵɵtext(20,"\n "),l.ɵɵelementEnd(),l.ɵɵtext(21,"\n "),l.ɵɵelementEnd(),l.ɵɵtext(22,"\n "),l.ɵɵtemplate(23,x,9,6,"div",9),l.ɵɵtext(24,"\n "),l.ɵɵtemplate(25,C,10,5,"div",9),l.ɵɵtext(26,"\n "),l.ɵɵelementStart(27,"div",10),l.ɵɵtext(28,"\n "),l.ɵɵelementStart(29,"button",11),l.ɵɵtext(30,"\n "),l.ɵɵelement(31,"i",12),l.ɵɵpipe(32,"i18n"),l.ɵɵtext(33,"\n "),l.ɵɵelementStart(34,"span"),l.ɵɵtext(35),l.ɵɵpipe(36,"i18n"),l.ɵɵelementEnd(),l.ɵɵtext(37,"\n "),l.ɵɵelementEnd(),l.ɵɵtext(38,"\n "),l.ɵɵelementStart(39,"button",13),l.ɵɵtext(40),l.ɵɵpipe(41,"i18n"),l.ɵɵelementEnd(),l.ɵɵtext(42,"\n "),l.ɵɵelementEnd(),l.ɵɵtext(43,"\n "),l.ɵɵelementEnd(),l.ɵɵtext(44,"\n "),l.ɵɵelementEnd(),l.ɵɵtext(45,"\n"),l.ɵɵelementEnd(),l.ɵɵtext(46,"\n")),2&e){var n=l.ɵɵreference(5);l.ɵɵadvance(4),l.ɵɵproperty("appApiAction",t.formPromise),l.ɵɵadvance(6),l.ɵɵtextInterpolate1("\n ",l.ɵɵpipeBind1(11,10,"groupAccess"),"\n "),l.ɵɵadvance(2),l.ɵɵproperty("ngIf",t.name),l.ɵɵadvance(3),l.ɵɵpropertyInterpolate("appA11yTitle",l.ɵɵpipeBind1(16,12,"close")),l.ɵɵadvance(8),l.ɵɵproperty("ngIf",t.loading),l.ɵɵadvance(2),l.ɵɵproperty("ngIf",!t.loading),l.ɵɵadvance(4),l.ɵɵproperty("disabled",n.loading),l.ɵɵadvance(2),l.ɵɵpropertyInterpolate("title",l.ɵɵpipeBind1(32,14,"loading")),l.ɵɵadvance(4),l.ɵɵtextInterpolate(l.ɵɵpipeBind1(36,16,"save")),l.ɵɵadvance(5),l.ɵɵtextInterpolate(l.ɵɵpipeBind1(41,18,"cancel"))}},directives:[d.ɵangular_packages_forms_forms_y,d.NgControlStatusGroup,d.NgForm,m.ApiActionDirective,h.NgIf,f.A11yTitleDirective,h.NgForOf,d.CheckboxControlValueAccessor,v.StopPropDirective,d.NgControlStatus,d.NgModel],pipes:[y.I18nPipe],encapsulation:2}),e}();t.UserGroupsComponent=I},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0?e.data:[],this.orgPolicies.forEach((function(e){t.policiesEnabledMap.set(e.type,e.enabled)})),this.policies.forEach((function(e){e.enabled=t.policiesEnabledMap.has(e.type)&&t.policiesEnabledMap.get(e.type)})),this.loading=!1,[2]}}))}))},e.prototype.edit=function(e){var t=this;null!=this.modal&&this.modal.close();var n=this.componentFactoryResolver.resolveComponentFactory(s.ModalComponent);this.modal=this.editModalRef.createComponent(n).instance;var r=this.modal.show(l.PolicyEditComponent,this.editModalRef);r.name=e.name,r.description=e.description,r.type=e.type,r.organizationId=this.organizationId,r.policiesEnabledMap=this.policiesEnabledMap,r.onSavedPolicy.subscribe((function(){t.modal.close(),t.load()})),this.modal.onClosed.subscribe((function(){t.modal=null}))},e.prototype.goToEnterprisePortal=function(){return r(this,void 0,void 0,(function(){var e,t;return i(this,(function(n){switch(n.label){case 0:if(null!=this.enterpriseTokenPromise)return[2];n.label=1;case 1:return n.trys.push([1,5,,6]),this.enterpriseTokenPromise=this.apiService.getEnterprisePortalSignInToken(),[4,this.enterpriseTokenPromise];case 2:return null==(e=n.sent())?[3,4]:[4,this.userService.getUserId()];case 3:t=n.sent(),this.platformUtilsService.launchUri(this.enterpriseUrl+"/login?userId="+t+"&token="+window.encodeURIComponent(e)+"&organizationId="+this.organizationId),n.label=4;case 4:return[3,6];case 5:return n.sent(),[3,6];case 6:return this.enterpriseTokenPromise=null,[2]}}))}))},e.ɵfac=function(t){return new(t||e)(c.ɵɵdirectiveInject(p.ApiService),c.ɵɵdirectiveInject(u.ActivatedRoute),c.ɵɵdirectiveInject(d.I18nService),c.ɵɵdirectiveInject(c.ComponentFactoryResolver),c.ɵɵdirectiveInject(m.PlatformUtilsService),c.ɵɵdirectiveInject(h.UserService),c.ɵɵdirectiveInject(u.Router),c.ɵɵdirectiveInject(f.EnvironmentService))},e.ɵcmp=c.ɵɵdefineComponent({type:e,selectors:[["app-org-policies"]],viewQuery:function(e,t){var n;(1&e&&c.ɵɵstaticViewQuery(b,!0,o.ViewContainerRef),2&e)&&(c.ɵɵqueryRefresh(n=c.ɵɵloadQuery())&&(t.editModalRef=n.first))},decls:16,vars:6,consts:[[3,"type",4,"ngIf"],[1,"page-header","d-flex"],[4,"ngIf"],["class","table table-hover table-list",4,"ngIf"],["editTemplate",""],[3,"type"],["type","button",1,"btn","btn-outline-secondary",3,"click"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin","text-muted",3,"title"],[1,"sr-only"],[1,"table","table-hover","table-list"],[4,"ngFor","ngForOf"],["href","#","appStopClick","",3,"click"],["class","badge badge-success",4,"ngIf"],[1,"text-muted","d-block"],[1,"badge","badge-success"]],template:function(e,t){1&e&&(c.ɵɵtemplate(0,S,10,7,"app-callout",0),c.ɵɵtext(1,"\n"),c.ɵɵelementStart(2,"div",1),c.ɵɵtext(3,"\n "),c.ɵɵelementStart(4,"h1"),c.ɵɵtext(5),c.ɵɵpipe(6,"i18n"),c.ɵɵelementEnd(),c.ɵɵtext(7,"\n"),c.ɵɵelementEnd(),c.ɵɵtext(8,"\n"),c.ɵɵtemplate(9,w,9,6,"ng-container",2),c.ɵɵtext(10,"\n"),c.ɵɵtemplate(11,P,7,1,"table",3),c.ɵɵtext(12,"\n"),c.ɵɵtemplate(13,k,0,0,"ng-template",null,4,c.ɵɵtemplateRefExtractor),c.ɵɵtext(15,"\n")),2&e&&(c.ɵɵproperty("ngIf",t.userCanAccessBusinessPortal),c.ɵɵadvance(5),c.ɵɵtextInterpolate(c.ɵɵpipeBind1(6,4,"policies")),c.ɵɵadvance(4),c.ɵɵproperty("ngIf",t.loading),c.ɵɵadvance(2),c.ɵɵproperty("ngIf",!t.loading))},directives:[v.NgIf,y.CalloutComponent,v.NgForOf,g.StopClickDirective],pipes:[x.I18nPipe],encapsulation:2}),e}();t.PoliciesComponent=_},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(6);t.ApiService=r.ApiService;var i=n(860);t.AppIdService=i.AppIdService;var o=n(87);t.AuditService=o.AuditService;var a=n(58);t.AuthService=a.AuthService;var s=n(19);t.CipherService=s.CipherService;var l=n(40);t.CollectionService=l.CollectionService;var c=n(18);t.CryptoService=c.CryptoService;var p=n(64);t.EnvironmentService=p.EnvironmentService;var u=n(48);t.FolderService=u.FolderService;var d=n(3);t.I18nService=d.I18nService;var m=n(861);t.LogService=m.LogService;var h=n(14);t.MessagingService=h.MessagingService;var f=n(36);t.PasswordGenerationService=f.PasswordGenerationService;var v=n(5);t.PlatformUtilsService=v.PlatformUtilsService;var y=n(80);t.SearchService=y.SearchService;var g=n(281);t.SettingsService=g.SettingsService;var x=n(41);t.StorageService=x.StorageService;var b=n(38);t.StateService=b.StateService;var S=n(61);t.SyncService=S.SyncService;var w=n(103);t.TokenService=w.TokenService;var C=n(114);t.TotpService=C.TotpService;var I=n(7);t.UserService=I.UserService;var E=n(93);t.VaultTimeoutService=E.VaultTimeoutService},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]1?"×"+n.quantity:""," @ ",a.ɵɵpipeBind2(4,5,n.amount,"$"),"\n "),a.ɵɵadvance(4),a.ɵɵtextInterpolate2("\n ",a.ɵɵpipeBind2(8,8,n.quantity*n.amount,"$")," /",a.ɵɵpipeBind1(9,11,n.interval),"\n ")}}function D(e,t){if(1&e&&(a.ɵɵelementStart(0,"div",20),a.ɵɵtext(1,"\n "),a.ɵɵelementStart(2,"strong",21),a.ɵɵtext(3),a.ɵɵpipe(4,"i18n"),a.ɵɵelementEnd(),a.ɵɵtext(5,"\n "),a.ɵɵelementStart(6,"table",22),a.ɵɵtext(7,"\n "),a.ɵɵelementStart(8,"tbody"),a.ɵɵtext(9,"\n "),a.ɵɵtemplate(10,B,11,13,"tr",23),a.ɵɵtext(11,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(12,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(13,"\n "),a.ɵɵelementEnd()),2&e){var n=a.ɵɵnextContext(3);a.ɵɵadvance(3),a.ɵɵtextInterpolate(a.ɵɵpipeBind1(4,2,"details")),a.ɵɵadvance(7),a.ɵɵproperty("ngForOf",n.subscription.items)}}function R(e,t){if(1&e&&(a.ɵɵelementStart(0,"div",14),a.ɵɵtext(1,"\n "),a.ɵɵelementStart(2,"div",15),a.ɵɵtext(3,"\n "),a.ɵɵelementStart(4,"dl"),a.ɵɵtext(5,"\n "),a.ɵɵelementStart(6,"dt"),a.ɵɵtext(7),a.ɵɵpipe(8,"i18n"),a.ɵɵelementEnd(),a.ɵɵtext(9,"\n "),a.ɵɵelementStart(10,"dd"),a.ɵɵtext(11),a.ɵɵelementEnd(),a.ɵɵtext(12,"\n "),a.ɵɵtemplate(13,M,23,15,"ng-container",1),a.ɵɵtext(14,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(15,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(16,"\n "),a.ɵɵtemplate(17,D,14,4,"div",16),a.ɵɵtext(18,"\n "),a.ɵɵelementEnd()),2&e){var n=a.ɵɵnextContext(2);a.ɵɵadvance(7),a.ɵɵtextInterpolate(a.ɵɵpipeBind1(8,4,"billingPlan")),a.ɵɵadvance(4),a.ɵɵtextInterpolate(n.sub.plan.name),a.ɵɵadvance(2),a.ɵɵproperty("ngIf",n.subscription),a.ɵɵadvance(4),a.ɵɵproperty("ngIf",n.subscription)}}function V(e,t){if(1&e){var n=a.ɵɵgetCurrentView();a.ɵɵelementStart(0,"div",27),a.ɵɵtext(1,"\n "),a.ɵɵelementStart(2,"div",28),a.ɵɵtext(3,"\n "),a.ɵɵelementStart(4,"button",29),a.ɵɵlistener("click",(function(){return a.ɵɵrestoreView(n),a.ɵɵnextContext(3).closeUpdateLicense(!1)})),a.ɵɵpipe(5,"i18n"),a.ɵɵelementStart(6,"span",30),a.ɵɵtext(7,"×"),a.ɵɵelementEnd(),a.ɵɵelementEnd(),a.ɵɵtext(8,"\n "),a.ɵɵelementStart(9,"h3",31),a.ɵɵtext(10),a.ɵɵpipe(11,"i18n"),a.ɵɵelementEnd(),a.ɵɵtext(12,"\n "),a.ɵɵelementStart(13,"app-update-license",32),a.ɵɵlistener("onUpdated",(function(){return a.ɵɵrestoreView(n),a.ɵɵnextContext(3).closeUpdateLicense(!0)}))("onCanceled",(function(){return a.ɵɵrestoreView(n),a.ɵɵnextContext(3).closeUpdateLicense(!1)})),a.ɵɵelementEnd(),a.ɵɵtext(14,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(15,"\n "),a.ɵɵelementEnd()}if(2&e){var r=a.ɵɵnextContext(3);a.ɵɵadvance(4),a.ɵɵpropertyInterpolate("appA11yTitle",a.ɵɵpipeBind1(5,3,"cancel")),a.ɵɵadvance(6),a.ɵɵtextInterpolate(a.ɵɵpipeBind1(11,5,"updateLicense")),a.ɵɵadvance(3),a.ɵɵproperty("organizationId",r.organizationId)}}function j(e,t){if(1&e){var n=a.ɵɵgetCurrentView();a.ɵɵelementContainerStart(0),a.ɵɵtext(1,"\n "),a.ɵɵelementStart(2,"div"),a.ɵɵtext(3,"\n "),a.ɵɵelementStart(4,"button",24),a.ɵɵlistener("click",(function(){return a.ɵɵrestoreView(n),a.ɵɵnextContext(2).updateLicense()})),a.ɵɵtext(5),a.ɵɵpipe(6,"i18n"),a.ɵɵelementEnd(),a.ɵɵtext(7,"\n "),a.ɵɵelementStart(8,"a",25),a.ɵɵtext(9),a.ɵɵpipe(10,"i18n"),a.ɵɵelementEnd(),a.ɵɵtext(11,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(12,"\n "),a.ɵɵtemplate(13,V,16,7,"div",26),a.ɵɵtext(14,"\n "),a.ɵɵelementContainerEnd()}if(2&e){var r=a.ɵɵnextContext(2);a.ɵɵadvance(5),a.ɵɵtextInterpolate1("\n ",a.ɵɵpipeBind1(6,3,"updateLicense"),"\n "),a.ɵɵadvance(4),a.ɵɵtextInterpolate1("\n ",a.ɵɵpipeBind1(10,5,"manageSubscription"),"\n "),a.ɵɵadvance(4),a.ɵɵproperty("ngIf",r.showUpdateLicense)}}function F(e,t){if(1&e){var n=a.ɵɵgetCurrentView();a.ɵɵelementStart(0,"button",24),a.ɵɵlistener("click",(function(){return a.ɵɵrestoreView(n),a.ɵɵnextContext(3).changePlan()})),a.ɵɵtext(1),a.ɵɵpipe(2,"i18n"),a.ɵɵelementEnd()}2&e&&(a.ɵɵadvance(1),a.ɵɵtextInterpolate1("\n ",a.ɵɵpipeBind1(2,1,"changeBillingPlan"),"\n "))}function U(e,t){if(1&e){var n=a.ɵɵgetCurrentView();a.ɵɵelementStart(0,"button",42),a.ɵɵlistener("click",(function(){return a.ɵɵrestoreView(n),a.ɵɵnextContext(3).downloadLicense()})),a.ɵɵtext(1),a.ɵɵpipe(2,"i18n"),a.ɵɵelementEnd()}if(2&e){var r=a.ɵɵnextContext(3);a.ɵɵproperty("disabled",r.showDownloadLicense),a.ɵɵadvance(1),a.ɵɵtextInterpolate1("\n ",a.ɵɵpipeBind1(2,2,"downloadLicense"),"\n ")}}function N(e,t){if(1&e){var n=a.ɵɵgetCurrentView();a.ɵɵelementStart(0,"button",43,44),a.ɵɵlistener("click",(function(){return a.ɵɵrestoreView(n),a.ɵɵnextContext(3).cancel()})),a.ɵɵtext(2,"\n "),a.ɵɵelement(3,"i",10),a.ɵɵpipe(4,"i18n"),a.ɵɵtext(5,"\n "),a.ɵɵelementStart(6,"span"),a.ɵɵtext(7),a.ɵɵpipe(8,"i18n"),a.ɵɵelementEnd(),a.ɵɵtext(9,"\n "),a.ɵɵelementEnd()}if(2&e){var r=a.ɵɵreference(1),i=a.ɵɵnextContext(3);a.ɵɵproperty("appApiAction",i.cancelPromise)("disabled",r.loading),a.ɵɵadvance(3),a.ɵɵpropertyInterpolate("title",a.ɵɵpipeBind1(4,4,"loading")),a.ɵɵadvance(4),a.ɵɵtextInterpolate(a.ɵɵpipeBind1(8,6,"cancelSubscription"))}}function z(e,t){if(1&e){var n=a.ɵɵgetCurrentView();a.ɵɵelementStart(0,"app-change-plan",45),a.ɵɵlistener("onChanged",(function(){return a.ɵɵrestoreView(n),a.ɵɵnextContext(3).closeChangePlan(!0)}))("onCanceled",(function(){return a.ɵɵrestoreView(n),a.ɵɵnextContext(3).closeChangePlan(!1)})),a.ɵɵelementEnd()}if(2&e){var r=a.ɵɵnextContext(3);a.ɵɵproperty("organizationId",r.organizationId)}}function L(e,t){if(1&e){var n=a.ɵɵgetCurrentView();a.ɵɵelementStart(0,"div",46),a.ɵɵtext(1,"\n "),a.ɵɵelementStart(2,"app-download-license",47),a.ɵɵlistener("onDownloaded",(function(){return a.ɵɵrestoreView(n),a.ɵɵnextContext(3).closeDownloadLicense()}))("onCanceled",(function(){return a.ɵɵrestoreView(n),a.ɵɵnextContext(3).closeDownloadLicense()})),a.ɵɵelementEnd(),a.ɵɵtext(3,"\n "),a.ɵɵelementEnd()}if(2&e){var r=a.ɵɵnextContext(3);a.ɵɵadvance(2),a.ɵɵproperty("organizationId",r.organizationId)}}function G(e,t){if(1&e){var n=a.ɵɵgetCurrentView();a.ɵɵelementStart(0,"div",33),a.ɵɵtext(1,"\n "),a.ɵɵelementStart(2,"button",24),a.ɵɵlistener("click",(function(){return a.ɵɵrestoreView(n),a.ɵɵnextContext(4).adjustSeats(!0)})),a.ɵɵtext(3),a.ɵɵpipe(4,"i18n"),a.ɵɵelementEnd(),a.ɵɵtext(5,"\n "),a.ɵɵelementStart(6,"button",50),a.ɵɵlistener("click",(function(){return a.ɵɵrestoreView(n),a.ɵɵnextContext(4).adjustSeats(!1)})),a.ɵɵtext(7),a.ɵɵpipe(8,"i18n"),a.ɵɵelementEnd(),a.ɵɵtext(9,"\n "),a.ɵɵelementEnd()}2&e&&(a.ɵɵadvance(3),a.ɵɵtextInterpolate1("\n ",a.ɵɵpipeBind1(4,2,"addSeats"),"\n "),a.ɵɵadvance(4),a.ɵɵtextInterpolate1("\n ",a.ɵɵpipeBind1(8,4,"removeSeats"),"\n "))}function K(e,t){if(1&e){var n=a.ɵɵgetCurrentView();a.ɵɵelementStart(0,"app-adjust-seats",51),a.ɵɵlistener("onAdjusted",(function(){return a.ɵɵrestoreView(n),a.ɵɵnextContext(4).closeSeats(!0)}))("onCanceled",(function(){return a.ɵɵrestoreView(n),a.ɵɵnextContext(4).closeSeats(!1)})),a.ɵɵelementEnd()}if(2&e){var r=a.ɵɵnextContext(4);a.ɵɵproperty("seatPrice",r.seatPrice)("add",r.adjustSeatsAdd)("organizationId",r.organizationId)("interval",r.billingInterval)}}function q(e,t){if(1&e&&(a.ɵɵelementContainerStart(0),a.ɵɵtext(1,"\n "),a.ɵɵelementStart(2,"div",46),a.ɵɵtext(3,"\n "),a.ɵɵtemplate(4,G,10,6,"div",48),a.ɵɵtext(5,"\n "),a.ɵɵtemplate(6,K,1,4,"app-adjust-seats",49),a.ɵɵtext(7,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(8,"\n "),a.ɵɵelementContainerEnd()),2&e){var n=a.ɵɵnextContext(3);a.ɵɵadvance(4),a.ɵɵproperty("ngIf",!n.showAdjustSeats),a.ɵɵadvance(2),a.ɵɵproperty("ngIf",n.showAdjustSeats)}}function W(e,t){if(1&e){var n=a.ɵɵgetCurrentView();a.ɵɵelementStart(0,"div",33),a.ɵɵtext(1,"\n "),a.ɵɵelementStart(2,"button",24),a.ɵɵlistener("click",(function(){return a.ɵɵrestoreView(n),a.ɵɵnextContext(4).adjustStorage(!0)})),a.ɵɵtext(3),a.ɵɵpipe(4,"i18n"),a.ɵɵelementEnd(),a.ɵɵtext(5,"\n "),a.ɵɵelementStart(6,"button",50),a.ɵɵlistener("click",(function(){return a.ɵɵrestoreView(n),a.ɵɵnextContext(4).adjustStorage(!1)})),a.ɵɵtext(7),a.ɵɵpipe(8,"i18n"),a.ɵɵelementEnd(),a.ɵɵtext(9,"\n "),a.ɵɵelementEnd()}2&e&&(a.ɵɵadvance(3),a.ɵɵtextInterpolate1("\n ",a.ɵɵpipeBind1(4,2,"addStorage"),"\n "),a.ɵɵadvance(4),a.ɵɵtextInterpolate1("\n ",a.ɵɵpipeBind1(8,4,"removeStorage"),"\n "))}function H(e,t){if(1&e){var n=a.ɵɵgetCurrentView();a.ɵɵelementStart(0,"app-adjust-storage",53),a.ɵɵlistener("onAdjusted",(function(){return a.ɵɵrestoreView(n),a.ɵɵnextContext(4).closeStorage(!0)}))("onCanceled",(function(){return a.ɵɵrestoreView(n),a.ɵɵnextContext(4).closeStorage(!1)})),a.ɵɵelementEnd()}if(2&e){var r=a.ɵɵnextContext(4);a.ɵɵproperty("storageGbPrice",r.storageGbPrice)("add",r.adjustStorageAdd)("organizationId",r.organizationId)("interval",r.billingInterval)}}function $(e,t){if(1&e&&(a.ɵɵelementContainerStart(0),a.ɵɵtext(1,"\n "),a.ɵɵelementStart(2,"div",46),a.ɵɵtext(3,"\n "),a.ɵɵtemplate(4,W,10,6,"div",48),a.ɵɵtext(5,"\n "),a.ɵɵtemplate(6,H,1,4,"app-adjust-storage",52),a.ɵɵtext(7,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(8,"\n "),a.ɵɵelementContainerEnd()),2&e){var n=a.ɵɵnextContext(3);a.ɵɵadvance(4),a.ɵɵproperty("ngIf",!n.showAdjustStorage),a.ɵɵadvance(2),a.ɵɵproperty("ngIf",n.showAdjustStorage)}}var Y=function(e){return{width:e}};function Q(e,t){if(1&e&&(a.ɵɵelementContainerStart(0),a.ɵɵtext(1,"\n "),a.ɵɵelementStart(2,"div",33),a.ɵɵtext(3,"\n "),a.ɵɵtemplate(4,F,3,3,"button",34),a.ɵɵtext(5,"\n "),a.ɵɵtemplate(6,U,3,4,"button",35),a.ɵɵtext(7,"\n "),a.ɵɵtemplate(8,N,10,8,"button",36),a.ɵɵtext(9,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(10,"\n "),a.ɵɵtemplate(11,z,1,1,"app-change-plan",37),a.ɵɵtext(12,"\n "),a.ɵɵtemplate(13,L,4,1,"div",38),a.ɵɵtext(14,"\n "),a.ɵɵelementStart(15,"h2",39),a.ɵɵtext(16),a.ɵɵpipe(17,"i18n"),a.ɵɵelementEnd(),a.ɵɵtext(18,"\n "),a.ɵɵelementStart(19,"p"),a.ɵɵtext(20),a.ɵɵpipe(21,"i18n"),a.ɵɵelementEnd(),a.ɵɵtext(22,"\n "),a.ɵɵtemplate(23,q,9,2,"ng-container",1),a.ɵɵtext(24,"\n "),a.ɵɵelementStart(25,"h2",39),a.ɵɵtext(26),a.ɵɵpipe(27,"i18n"),a.ɵɵelementEnd(),a.ɵɵtext(28,"\n "),a.ɵɵelementStart(29,"p"),a.ɵɵtext(30),a.ɵɵpipe(31,"i18n"),a.ɵɵelementEnd(),a.ɵɵtext(32,"\n "),a.ɵɵelementStart(33,"div",40),a.ɵɵtext(34,"\n "),a.ɵɵelementStart(35,"div",41),a.ɵɵtext(36),a.ɵɵpipe(37,"percent"),a.ɵɵelementEnd(),a.ɵɵtext(38,"\n "),a.ɵɵelementEnd(),a.ɵɵtext(39,"\n "),a.ɵɵtemplate(40,$,9,2,"ng-container",1),a.ɵɵtext(41,"\n "),a.ɵɵelementContainerEnd()),2&e){var n=a.ɵɵnextContext(2);a.ɵɵadvance(4),a.ɵɵproperty("ngIf",!n.showChangePlan),a.ɵɵadvance(2),a.ɵɵproperty("ngIf",n.canDownloadLicense),a.ɵɵadvance(2),a.ɵɵproperty("ngIf",n.subscription&&!n.subscription.cancelled&&!n.subscriptionMarkedForCancel),a.ɵɵadvance(3),a.ɵɵproperty("ngIf",n.showChangePlan),a.ɵɵadvance(2),a.ɵɵproperty("ngIf",n.showDownloadLicense),a.ɵɵadvance(3),a.ɵɵtextInterpolate(a.ɵɵpipeBind1(17,14,"userSeats")),a.ɵɵadvance(4),a.ɵɵtextInterpolate(a.ɵɵpipeBind2(21,16,"subscriptionUserSeats",n.sub.seats)),a.ɵɵadvance(3),a.ɵɵproperty("ngIf",n.subscription&&n.canAdjustSeats&&!n.subscription.cancelled&&!n.subscriptionMarkedForCancel),a.ɵɵadvance(3),a.ɵɵtextInterpolate(a.ɵɵpipeBind1(27,19,"storage")),a.ɵɵadvance(4),a.ɵɵtextInterpolate(a.ɵɵpipeBind3(31,21,"subscriptionStorage",n.sub.maxStorageGb||0,n.sub.storageName||"0 MB")),a.ɵɵadvance(5),a.ɵɵproperty("ngStyle",a.ɵɵpureFunction1(27,Y,n.storageProgressWidth+"%")),a.ɵɵattribute("aria-valuenow",n.storagePercentage),a.ɵɵadvance(1),a.ɵɵtextInterpolate1("\n ",a.ɵɵpipeBind1(37,25,n.storagePercentage/100),""),a.ɵɵadvance(4),a.ɵɵproperty("ngIf",n.subscription&&!n.subscription.cancelled&&!n.subscriptionMarkedForCancel)}}function J(e,t){if(1&e&&(a.ɵɵelementContainerStart(0),a.ɵɵtext(1,"\n "),a.ɵɵtemplate(2,E,4,6,"app-callout",5),a.ɵɵtext(3,"\n "),a.ɵɵtemplate(4,P,18,14,"app-callout",5),a.ɵɵtext(5,"\n "),a.ɵɵtemplate(6,O,17,9,"dl",1),a.ɵɵtext(7,"\n "),a.ɵɵtemplate(8,R,19,6,"div",6),a.ɵɵtext(9,"\n "),a.ɵɵtemplate(10,j,15,7,"ng-container",1),a.ɵɵtext(11,"\n "),a.ɵɵtemplate(12,Q,42,29,"ng-container",1),a.ɵɵtext(13,"\n"),a.ɵɵelementContainerEnd()),2&e){var n=a.ɵɵnextContext();a.ɵɵadvance(2),a.ɵɵproperty("ngIf",n.subscription&&n.subscription.cancelled),a.ɵɵadvance(2),a.ɵɵproperty("ngIf",n.subscriptionMarkedForCancel),a.ɵɵadvance(2),a.ɵɵproperty("ngIf",n.selfHosted),a.ɵɵadvance(2),a.ɵɵproperty("ngIf",!n.selfHosted),a.ɵɵadvance(2),a.ɵɵproperty("ngIf",n.selfHosted),a.ɵɵadvance(2),a.ɵɵproperty("ngIf",!n.selfHosted)}}var X=function(){function e(e,t,n,r,i,o){this.apiService=e,this.platformUtilsService=t,this.i18nService=n,this.toasterService=r,this.messagingService=i,this.route=o,this.loading=!1,this.firstLoaded=!1,this.adjustSeatsAdd=!0,this.showAdjustSeats=!1,this.adjustStorageAdd=!0,this.showAdjustStorage=!1,this.showUpdateLicense=!1,this.showDownloadLicense=!1,this.showChangePlan=!1,this.selfHosted=!1,this.selfHosted=t.isSelfHost()}return e.prototype.ngOnInit=function(){return r(this,void 0,void 0,(function(){var e=this;return i(this,(function(t){return this.route.parent.parent.params.subscribe((function(t){return r(e,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.organizationId=t.organizationId,[4,this.load()];case 1:return e.sent(),this.firstLoaded=!0,[2]}}))}))})),[2]}))}))},e.prototype.load=function(){return r(this,void 0,void 0,(function(){var e;return i(this,(function(t){switch(t.label){case 0:return this.loading?[2]:(this.loading=!0,e=this,[4,this.apiService.getOrganizationSubscription(this.organizationId)]);case 1:return e.sub=t.sent(),this.loading=!1,[2]}}))}))},e.prototype.reinstate=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.loading?[2]:[4,this.platformUtilsService.showDialog(this.i18nService.t("reinstateConfirmation"),this.i18nService.t("reinstateSubscription"),this.i18nService.t("yes"),this.i18nService.t("cancel"))];case 1:if(!e.sent())return[2];e.label=2;case 2:return e.trys.push([2,4,,5]),this.reinstatePromise=this.apiService.postOrganizationReinstate(this.organizationId),[4,this.reinstatePromise];case 3:return e.sent(),this.toasterService.popAsync("success",null,this.i18nService.t("reinstated")),this.load(),[3,5];case 4:return e.sent(),[3,5];case 5:return[2]}}))}))},e.prototype.cancel=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.loading?[2]:[4,this.platformUtilsService.showDialog(this.i18nService.t("cancelConfirmation"),this.i18nService.t("cancelSubscription"),this.i18nService.t("yes"),this.i18nService.t("no"),"warning")];case 1:if(!e.sent())return[2];e.label=2;case 2:return e.trys.push([2,4,,5]),this.cancelPromise=this.apiService.postOrganizationCancel(this.organizationId),[4,this.cancelPromise];case 3:return e.sent(),this.toasterService.popAsync("success",null,this.i18nService.t("canceledSubscription")),this.load(),[3,5];case 4:return e.sent(),[3,5];case 5:return[2]}}))}))},e.prototype.changePlan=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return null==this.subscription&&this.sub.planType===o.PlanType.Free?(this.showChangePlan=!this.showChangePlan,[2]):[4,this.platformUtilsService.showDialog(this.i18nService.t("changeBillingPlanDesc"),this.i18nService.t("changeBillingPlan"),this.i18nService.t("contactSupport"),this.i18nService.t("close"))];case 1:return e.sent()&&this.platformUtilsService.launchUri("https://bitwarden.com/contact"),[2]}}))}))},e.prototype.closeChangePlan=function(e){this.showChangePlan=!1},e.prototype.downloadLicense=function(){this.showDownloadLicense=!this.showDownloadLicense},e.prototype.closeDownloadLicense=function(){this.showDownloadLicense=!1},e.prototype.updateLicense=function(){this.loading||(this.showUpdateLicense=!0)},e.prototype.closeUpdateLicense=function(e){this.showUpdateLicense=!1,e&&(this.load(),this.messagingService.send("updatedOrgLicense"))},e.prototype.adjustSeats=function(e){this.adjustSeatsAdd=e,this.showAdjustSeats=!0},e.prototype.closeSeats=function(e){this.showAdjustSeats=!1,e&&this.load()},e.prototype.adjustStorage=function(e){this.adjustStorageAdd=e,this.showAdjustStorage=!0},e.prototype.closeStorage=function(e){this.showAdjustStorage=!1,e&&this.load()},Object.defineProperty(e.prototype,"isExpired",{get:function(){return null!=this.sub&&null!=this.sub.expiration&&new Date(this.sub.expiration)0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]

'+this.i18nService.t("twoFactorRecoveryYourCode")+":

"+this.code+'

'+new Date+"

"),e.onafterprint=function(){return e.close()},e.print()},e.prototype.formatString=function(e){return null==e?null:e.replace(/(.{4})/g,"$1 ").trim().toUpperCase()},e.prototype.processResponse=function(e){this.code=this.formatString(e.code)},e.ɵfac=function(t){return new(t||e)(i.ɵɵdirectiveInject(o.I18nService))},e.ɵcmp=i.ɵɵdefineComponent({type:e,selectors:[["app-two-factor-recovery"]],decls:31,vars:11,consts:[["tabindex","-1","role","dialog","aria-modal","true","aria-labelledby","2faRecoveryTitle",1,"modal","fade"],["role","document",1,"modal-dialog"],[1,"modal-content"],[1,"modal-header"],["id","2faRecoveryTitle",1,"modal-title"],["type","button","data-dismiss","modal",1,"close",3,"appA11yTitle"],["aria-hidden","true"],[3,"organizationId","type","onAuthed",4,"ngIf"],[4,"ngIf"],[3,"organizationId","type","onAuthed"],[1,"modal-body","text-center"],[1,"modal-footer"],["type","button","class","btn btn-primary",3,"click",4,"ngIf"],["type","button","data-dismiss","modal",1,"btn","btn-outline-secondary"],[1,"text-lg"],["type","button",1,"btn","btn-primary",3,"click"]],template:function(e,t){1&e&&(i.ɵɵelementStart(0,"div",0),i.ɵɵtext(1,"\n "),i.ɵɵelementStart(2,"div",1),i.ɵɵtext(3,"\n "),i.ɵɵelementStart(4,"div",2),i.ɵɵtext(5,"\n "),i.ɵɵelementStart(6,"div",3),i.ɵɵtext(7,"\n "),i.ɵɵelementStart(8,"h2",4),i.ɵɵtext(9),i.ɵɵpipe(10,"i18n"),i.ɵɵelementStart(11,"small"),i.ɵɵtext(12),i.ɵɵpipe(13,"i18n"),i.ɵɵelementEnd(),i.ɵɵtext(14,"\n "),i.ɵɵelementEnd(),i.ɵɵtext(15,"\n "),i.ɵɵelementStart(16,"button",5),i.ɵɵpipe(17,"i18n"),i.ɵɵtext(18,"\n "),i.ɵɵelementStart(19,"span",6),i.ɵɵtext(20,"×"),i.ɵɵelementEnd(),i.ɵɵtext(21,"\n "),i.ɵɵelementEnd(),i.ɵɵtext(22,"\n "),i.ɵɵelementEnd(),i.ɵɵtext(23,"\n "),i.ɵɵtemplate(24,p,2,2,"app-two-factor-verify",7),i.ɵɵtext(25,"\n "),i.ɵɵtemplate(26,h,18,6,"ng-container",8),i.ɵɵtext(27,"\n "),i.ɵɵelementEnd(),i.ɵɵtext(28,"\n "),i.ɵɵelementEnd(),i.ɵɵtext(29,"\n"),i.ɵɵelementEnd(),i.ɵɵtext(30,"\n")),2&e&&(i.ɵɵadvance(9),i.ɵɵtextInterpolate1("\n ",i.ɵɵpipeBind1(10,5,"twoStepLogin"),"\n "),i.ɵɵadvance(3),i.ɵɵtextInterpolate(i.ɵɵpipeBind1(13,7,"recoveryCodeTitle")),i.ɵɵadvance(4),i.ɵɵpropertyInterpolate("appA11yTitle",i.ɵɵpipeBind1(17,9,"close")),i.ɵɵadvance(8),i.ɵɵproperty("ngIf",!t.authed),i.ɵɵadvance(2),i.ɵɵproperty("ngIf",t.authed))},directives:[a.A11yTitleDirective,s.NgIf,l.TwoFactorVerifyComponent],pipes:[c.I18nPipe],encapsulation:2}),e}();t.TwoFactorRecoveryComponent=f},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},a=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]1&&n.configured)}}function D(e,t){1&e&&(d.ɵɵelementContainerStart(0),d.ɵɵtext(1,"\n "),d.ɵɵelement(2,"i",38),d.ɵɵtext(3,"\n "),d.ɵɵelementContainerEnd())}function R(e,t){1&e&&(d.ɵɵelementContainerStart(0),d.ɵɵtext(1,"\n "),d.ɵɵelement(2,"i",38),d.ɵɵtext(3),d.ɵɵpipe(4,"i18n"),d.ɵɵelementContainerEnd()),2&e&&(d.ɵɵadvance(3),d.ɵɵtextInterpolate1("\n ",d.ɵɵpipeBind1(4,1,"twoFactorU2fWaiting"),"...\n "))}function V(e,t){1&e&&(d.ɵɵelementContainerStart(0),d.ɵɵtext(1,"\n "),d.ɵɵelement(2,"i",39),d.ɵɵtext(3),d.ɵɵpipe(4,"i18n"),d.ɵɵelementContainerEnd()),2&e&&(d.ɵɵadvance(3),d.ɵɵtextInterpolate1("\n ",d.ɵɵpipeBind1(4,1,"twoFactorU2fClickSave"),"\n "))}function j(e,t){1&e&&(d.ɵɵelementContainerStart(0),d.ɵɵtext(1,"\n "),d.ɵɵelement(2,"i",40),d.ɵɵtext(3),d.ɵɵpipe(4,"i18n"),d.ɵɵelementContainerEnd()),2&e&&(d.ɵɵadvance(3),d.ɵɵtextInterpolate1("\n ",d.ɵɵpipeBind1(4,1,"twoFactorU2fProblemReadingTryAgain"),"\n "))}function F(e,t){if(1&e&&(d.ɵɵelementContainerStart(0),d.ɵɵtext(1,"\n "),d.ɵɵtemplate(2,R,5,3,"ng-container",25),d.ɵɵtext(3,"\n "),d.ɵɵtemplate(4,V,5,3,"ng-container",25),d.ɵɵtext(5,"\n "),d.ɵɵtemplate(6,j,5,3,"ng-container",25),d.ɵɵtext(7,"\n "),d.ɵɵelementContainerEnd()),2&e){var n=d.ɵɵnextContext(2);d.ɵɵadvance(2),d.ɵɵproperty("ngIf",n.webAuthnListening),d.ɵɵadvance(2),d.ɵɵproperty("ngIf",n.webAuthnResponse),d.ɵɵadvance(2),d.ɵɵproperty("ngIf",n.webAuthnError)}}function U(e,t){1&e&&(d.ɵɵelement(0,"i",41),d.ɵɵpipe(1,"i18n")),2&e&&d.ɵɵpropertyInterpolate("title",d.ɵɵpipeBind1(1,1,"loading"))}function N(e,t){1&e&&(d.ɵɵelementStart(0,"span"),d.ɵɵtext(1),d.ɵɵpipe(2,"i18n"),d.ɵɵelementEnd()),2&e&&(d.ɵɵadvance(1),d.ɵɵtextInterpolate(d.ɵɵpipeBind1(2,1,"save")))}function z(e,t){if(1&e){var n=d.ɵɵgetCurrentView();d.ɵɵelementStart(0,"button",42,43),d.ɵɵlistener("click",(function(){return d.ɵɵrestoreView(n),d.ɵɵnextContext(2).disable()})),d.ɵɵtext(2,"\n "),d.ɵɵelement(3,"i",41),d.ɵɵpipe(4,"i18n"),d.ɵɵtext(5,"\n "),d.ɵɵelementStart(6,"span"),d.ɵɵtext(7),d.ɵɵpipe(8,"i18n"),d.ɵɵelementEnd(),d.ɵɵtext(9,"\n "),d.ɵɵelementEnd()}if(2&e){var r=d.ɵɵreference(1),i=d.ɵɵnextContext(2);d.ɵɵproperty("appApiAction",i.disablePromise)("disabled",r.loading),d.ɵɵadvance(3),d.ɵɵpropertyInterpolate("title",d.ɵɵpipeBind1(4,4,"loading")),d.ɵɵadvance(4),d.ɵɵtextInterpolate(d.ɵɵpipeBind1(8,6,"disableAllKeys"))}}function L(e,t){if(1&e){var n=d.ɵɵgetCurrentView();d.ɵɵelementStart(0,"form",10,11),d.ɵɵlistener("ngSubmit",(function(){return d.ɵɵrestoreView(n),d.ɵɵnextContext().submit()})),d.ɵɵtext(2,"\n "),d.ɵɵelementStart(3,"div",12),d.ɵɵtext(4,"\n "),d.ɵɵtemplate(5,P,4,6,"app-callout",13),d.ɵɵtext(6,"\n "),d.ɵɵelementStart(7,"app-callout",14),d.ɵɵtext(8,"\n "),d.ɵɵelementStart(9,"p"),d.ɵɵtext(10),d.ɵɵpipe(11,"i18n"),d.ɵɵelementEnd(),d.ɵɵtext(12,"\n "),d.ɵɵelementStart(13,"ul",15),d.ɵɵtext(14,"\n "),d.ɵɵelementStart(15,"li"),d.ɵɵtext(16),d.ɵɵpipe(17,"i18n"),d.ɵɵelementEnd(),d.ɵɵtext(18,"\n "),d.ɵɵelementEnd(),d.ɵɵtext(19,"\n "),d.ɵɵelementEnd(),d.ɵɵtext(20,"\n "),d.ɵɵelement(21,"img",16),d.ɵɵtext(22,"\n "),d.ɵɵelementStart(23,"ul",17),d.ɵɵtext(24,"\n "),d.ɵɵtemplate(25,B,13,5,"li",18),d.ɵɵtext(26,"\n "),d.ɵɵelementEnd(),d.ɵɵtext(27,"\n "),d.ɵɵelement(28,"hr"),d.ɵɵtext(29,"\n "),d.ɵɵelementStart(30,"p"),d.ɵɵtext(31),d.ɵɵpipe(32,"i18n"),d.ɵɵelementEnd(),d.ɵɵtext(33,"\n "),d.ɵɵelementStart(34,"ol"),d.ɵɵtext(35,"\n "),d.ɵɵelementStart(36,"li"),d.ɵɵtext(37),d.ɵɵpipe(38,"i18n"),d.ɵɵelementEnd(),d.ɵɵtext(39,"\n "),d.ɵɵelementStart(40,"li"),d.ɵɵtext(41),d.ɵɵpipe(42,"i18n"),d.ɵɵelementEnd(),d.ɵɵtext(43,"\n "),d.ɵɵelementStart(44,"li"),d.ɵɵtext(45),d.ɵɵpipe(46,"i18n"),d.ɵɵelementEnd(),d.ɵɵtext(47,"\n "),d.ɵɵelementStart(48,"li"),d.ɵɵtext(49),d.ɵɵpipe(50,"i18n"),d.ɵɵelementEnd(),d.ɵɵtext(51,"\n "),d.ɵɵelementEnd(),d.ɵɵtext(52,"\n "),d.ɵɵelementStart(53,"div",19),d.ɵɵtext(54,"\n "),d.ɵɵelementStart(55,"div",20),d.ɵɵtext(56,"\n "),d.ɵɵelementStart(57,"label",21),d.ɵɵtext(58),d.ɵɵpipe(59,"i18n"),d.ɵɵelementEnd(),d.ɵɵtext(60,"\n "),d.ɵɵelementStart(61,"input",22),d.ɵɵlistener("ngModelChange",(function(e){return d.ɵɵrestoreView(n),d.ɵɵnextContext().name=e})),d.ɵɵelementEnd(),d.ɵɵtext(62,"\n "),d.ɵɵelementEnd(),d.ɵɵtext(63,"\n "),d.ɵɵelementEnd(),d.ɵɵtext(64,"\n "),d.ɵɵelementStart(65,"button",23,24),d.ɵɵlistener("click",(function(){return d.ɵɵrestoreView(n),d.ɵɵnextContext().readKey()})),d.ɵɵtext(67),d.ɵɵpipe(68,"i18n"),d.ɵɵelementEnd(),d.ɵɵtext(69,"\n "),d.ɵɵtemplate(70,D,4,0,"ng-container",25),d.ɵɵtext(71,"\n "),d.ɵɵtemplate(72,F,8,3,"ng-container",25),d.ɵɵtext(73,"\n "),d.ɵɵelementEnd(),d.ɵɵtext(74,"\n "),d.ɵɵelementStart(75,"div",26),d.ɵɵtext(76,"\n "),d.ɵɵelementStart(77,"button",27),d.ɵɵtext(78,"\n "),d.ɵɵtemplate(79,U,2,3,"i",28),d.ɵɵtext(80,"\n "),d.ɵɵtemplate(81,N,3,3,"span",25),d.ɵɵtext(82,"\n "),d.ɵɵelementEnd(),d.ɵɵtext(83,"\n "),d.ɵɵtemplate(84,z,10,8,"button",29),d.ɵɵtext(85,"\n "),d.ɵɵelementStart(86,"button",30),d.ɵɵtext(87),d.ɵɵpipe(88,"i18n"),d.ɵɵelementEnd(),d.ɵɵtext(89,"\n "),d.ɵɵelementEnd(),d.ɵɵtext(90,"\n "),d.ɵɵelementEnd()}if(2&e){var r=d.ɵɵreference(1),i=d.ɵɵreference(66),o=d.ɵɵnextContext();d.ɵɵproperty("appApiAction",o.formPromise),d.ɵɵadvance(5),d.ɵɵproperty("ngIf",o.enabled),d.ɵɵadvance(5),d.ɵɵtextInterpolate(d.ɵɵpipeBind1(11,23,"twoFactorWebAuthnWarning")),d.ɵɵadvance(6),d.ɵɵtextInterpolate(d.ɵɵpipeBind1(17,25,"twoFactorWebAuthnSupportWeb")),d.ɵɵadvance(9),d.ɵɵproperty("ngForOf",o.keys),d.ɵɵadvance(6),d.ɵɵtextInterpolate1("",d.ɵɵpipeBind1(32,27,"twoFactorWebAuthnAdd"),":"),d.ɵɵadvance(6),d.ɵɵtextInterpolate(d.ɵɵpipeBind1(38,29,"twoFactorU2fGiveName")),d.ɵɵadvance(4),d.ɵɵtextInterpolate(d.ɵɵpipeBind1(42,31,"twoFactorU2fPlugInReadKey")),d.ɵɵadvance(4),d.ɵɵtextInterpolate(d.ɵɵpipeBind1(46,33,"twoFactorU2fTouchButton")),d.ɵɵadvance(4),d.ɵɵtextInterpolate(d.ɵɵpipeBind1(50,35,"twoFactorU2fSaveForm")),d.ɵɵadvance(9),d.ɵɵtextInterpolate(d.ɵɵpipeBind1(59,37,"name")),d.ɵɵadvance(3),d.ɵɵproperty("ngModel",o.name)("disabled",!o.keyIdAvailable),d.ɵɵadvance(4),d.ɵɵproperty("disabled",i.loading||o.webAuthnListening||!o.keyIdAvailable)("appApiAction",o.challengePromise),d.ɵɵadvance(2),d.ɵɵtextInterpolate1("\n ",d.ɵɵpipeBind1(68,39,"readKey"),"\n "),d.ɵɵadvance(3),d.ɵɵproperty("ngIf",i.loading),d.ɵɵadvance(2),d.ɵɵproperty("ngIf",!i.loading),d.ɵɵadvance(5),d.ɵɵproperty("disabled",r.loading||!o.webAuthnResponse),d.ɵɵadvance(2),d.ɵɵproperty("ngIf",r.loading),d.ɵɵadvance(2),d.ɵɵproperty("ngIf",!r.loading),d.ɵɵadvance(3),d.ɵɵproperty("ngIf",o.enabled),d.ɵɵadvance(3),d.ɵɵtextInterpolate(d.ɵɵpipeBind1(88,41,"close"))}}var G=function(e){function t(t,n,r,i,o){var a=e.call(this,t,n,r,i)||this;return a.ngZone=o,a.type=s.TwoFactorProviderType.WebAuthn,a.keyIdAvailable=null,a.keysConfiguredCount=0,a}return i(t,e),t.prototype.auth=function(t){e.prototype.auth.call(this,t),this.processResponse(t.response)},t.prototype.submit=function(){var t=this;if(null==this.webAuthnResponse||null==this.keyIdAvailable)return Promise.reject();var n=new p.UpdateTwoFactorWebAuthnRequest;return n.masterPasswordHash=this.masterPasswordHash,n.deviceResponse=this.webAuthnResponse,n.id=this.keyIdAvailable,n.name=this.name,e.prototype.enable.call(this,(function(){return o(t,void 0,void 0,(function(){var e;return a(this,(function(t){switch(t.label){case 0:return this.formPromise=this.apiService.putTwoFactorWebAuthn(n),[4,this.formPromise];case 1:return e=t.sent(),[4,this.processResponse(e)];case 2:return t.sent(),[2]}}))}))}))},t.prototype.disable=function(){return e.prototype.disable.call(this,this.formPromise)},t.prototype.remove=function(e){return o(this,void 0,void 0,(function(){var t,n,r;return a(this,(function(i){switch(i.label){case 0:return this.keysConfiguredCount<=1||null!=e.removePromise?[2]:(t=null!=e.name?e.name:this.i18nService.t("webAuthnkeyX",e.id),[4,this.platformUtilsService.showDialog(this.i18nService.t("removeU2fConfirmation"),t,this.i18nService.t("yes"),this.i18nService.t("no"),"warning")]);case 1:if(!i.sent())return[2];(n=new c.UpdateTwoFactorWebAuthnDeleteRequest).id=e.id,n.masterPasswordHash=this.masterPasswordHash,i.label=2;case 2:return i.trys.push([2,5,,6]),e.removePromise=this.apiService.deleteTwoFactorWebAuthn(n),[4,e.removePromise];case 3:return r=i.sent(),e.removePromise=null,[4,this.processResponse(r)];case 4:return i.sent(),[3,6];case 5:return i.sent(),[3,6];case 6:return[2]}}))}))},t.prototype.readKey=function(){return o(this,void 0,void 0,(function(){var e,t;return a(this,(function(n){switch(n.label){case 0:if(null==this.keyIdAvailable)return[2];(e=new l.PasswordVerificationRequest).masterPasswordHash=this.masterPasswordHash,n.label=1;case 1:return n.trys.push([1,3,,4]),this.challengePromise=this.apiService.getTwoFactorWebAuthnChallenge(e),[4,this.challengePromise];case 2:return t=n.sent(),this.readDevice(t),[3,4];case 3:return n.sent(),[3,4];case 4:return[2]}}))}))},t.prototype.readDevice=function(e){var t=this;console.log("listening for key..."),this.resetWebAuthn(!0),navigator.credentials.create({publicKey:e}).then((function(e){t.ngZone.run((function(){t.webAuthnListening=!1,t.webAuthnResponse=e}))})).catch((function(e){console.error(e),t.resetWebAuthn(!1),t.webAuthnError=!0}))},t.prototype.resetWebAuthn=function(e){void 0===e&&(e=!1),this.webAuthnResponse=null,this.webAuthnError=!1,this.webAuthnListening=e},t.prototype.processResponse=function(e){this.resetWebAuthn(),this.keys=[],this.keyIdAvailable=null,this.name=null,this.keysConfiguredCount=0;for(var t=function(t){if(null!=e.keys){var r=e.keys.filter((function(e){return e.id===t}));if(r.length>0)return n.keysConfiguredCount++,n.keys.push({id:t,name:r[0].name,configured:!0,migrated:r[0].migrated,removePromise:null}),"continue"}n.keys.push({id:t,name:null,configured:!1,removePromise:null}),null==n.keyIdAvailable&&(n.keyIdAvailable=t)},n=this,r=1;r<=5;r++)t(r);this.enabled=e.enabled},t.ɵfac=function(e){return new(e||t)(d.ɵɵdirectiveInject(m.ApiService),d.ɵɵdirectiveInject(h.I18nService),d.ɵɵdirectiveInject(f.ToasterService),d.ɵɵdirectiveInject(v.PlatformUtilsService),d.ɵɵdirectiveInject(d.NgZone))},t.ɵcmp=d.ɵɵdefineComponent({type:t,selectors:[["app-two-factor-webauthn"]],features:[d.ɵɵInheritDefinitionFeature],decls:31,vars:11,consts:[["tabindex","-1","role","dialog","aria-modal","true","aria-labelledby","2faU2fTitle",1,"modal","fade"],["role","document",1,"modal-dialog","modal-lg"],[1,"modal-content"],[1,"modal-header"],["id","2faU2fTitle",1,"modal-title"],["type","button","data-dismiss","modal",1,"close",3,"appA11yTitle"],["aria-hidden","true"],[3,"organizationId","type","onAuthed",4,"ngIf"],["ngNativeValidate","",3,"appApiAction","ngSubmit",4,"ngIf"],[3,"organizationId","type","onAuthed"],["ngNativeValidate","",3,"appApiAction","ngSubmit"],["form",""],[1,"modal-body"],["type","success","icon","fa-check-circle",3,"title",4,"ngIf"],["type","warning"],[1,"mb-0"],["src","images/7.png","alt","",1,"float-right","ml-5"],[1,"fa-ul"],[3,"appApiAction",4,"ngFor","ngForOf"],[1,"row"],[1,"form-group","col-6"],["for","name"],["id","name","type","text","name","Name",1,"form-control",3,"ngModel","disabled","ngModelChange"],["type","button",1,"btn","btn-outline-secondary","mr-2",3,"disabled","appApiAction","click"],["readKeyBtn",""],[4,"ngIf"],[1,"modal-footer"],["type","submit",1,"btn","btn-primary",3,"disabled"],["class","fa fa-spinner fa-spin","aria-hidden","true",3,"title",4,"ngIf"],["type","button","class","btn btn-outline-secondary btn-submit",3,"appApiAction","disabled","click",4,"ngIf"],["type","button","data-dismiss","modal",1,"btn","btn-outline-secondary"],["type","success","icon","fa-check-circle",3,"title"],[3,"appApiAction"],["removeKeyBtn",""],[1,"fa-li","fa","fa-key"],["class","fa fa-spin fa-spinner text-muted fa-fw","aria-hidden","true",3,"title",4,"ngIf"],["href","#","appStopClick","",3,"click"],["aria-hidden","true",1,"fa","fa-spin","fa-spinner","text-muted","fa-fw",3,"title"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin","text-muted"],["aria-hidden","true",1,"fa","fa-check-circle","text-success"],["aria-hidden","true",1,"fa","fa-warning","text-danger"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin",3,"title"],["type","button",1,"btn","btn-outline-secondary","btn-submit",3,"appApiAction","disabled","click"],["disableBtn",""]],template:function(e,t){1&e&&(d.ɵɵelementStart(0,"div",0),d.ɵɵtext(1,"\n "),d.ɵɵelementStart(2,"div",1),d.ɵɵtext(3,"\n "),d.ɵɵelementStart(4,"div",2),d.ɵɵtext(5,"\n "),d.ɵɵelementStart(6,"div",3),d.ɵɵtext(7,"\n "),d.ɵɵelementStart(8,"h2",4),d.ɵɵtext(9),d.ɵɵpipe(10,"i18n"),d.ɵɵelementStart(11,"small"),d.ɵɵtext(12),d.ɵɵpipe(13,"i18n"),d.ɵɵelementEnd(),d.ɵɵtext(14,"\n "),d.ɵɵelementEnd(),d.ɵɵtext(15,"\n "),d.ɵɵelementStart(16,"button",5),d.ɵɵpipe(17,"i18n"),d.ɵɵtext(18,"\n "),d.ɵɵelementStart(19,"span",6),d.ɵɵtext(20,"×"),d.ɵɵelementEnd(),d.ɵɵtext(21,"\n "),d.ɵɵelementEnd(),d.ɵɵtext(22,"\n "),d.ɵɵelementEnd(),d.ɵɵtext(23,"\n "),d.ɵɵtemplate(24,E,2,2,"app-two-factor-verify",7),d.ɵɵtext(25,"\n "),d.ɵɵtemplate(26,L,91,43,"form",8),d.ɵɵtext(27,"\n "),d.ɵɵelementEnd(),d.ɵɵtext(28,"\n "),d.ɵɵelementEnd(),d.ɵɵtext(29,"\n"),d.ɵɵelementEnd(),d.ɵɵtext(30,"\n")),2&e&&(d.ɵɵadvance(9),d.ɵɵtextInterpolate1("\n ",d.ɵɵpipeBind1(10,5,"twoStepLogin"),"\n "),d.ɵɵadvance(3),d.ɵɵtextInterpolate(d.ɵɵpipeBind1(13,7,"webAuthnTitle")),d.ɵɵadvance(4),d.ɵɵpropertyInterpolate("appA11yTitle",d.ɵɵpipeBind1(17,9,"close")),d.ɵɵadvance(8),d.ɵɵproperty("ngIf",!t.authed),d.ɵɵadvance(2),d.ɵɵproperty("ngIf",t.authed))},directives:[y.A11yTitleDirective,g.NgIf,x.TwoFactorVerifyComponent,b.NgControlStatusGroup,b.NgForm,S.ApiActionDirective,w.CalloutComponent,g.NgForOf,b.DefaultValueAccessor,b.NgControlStatus,b.NgModel,C.StopClickDirective],pipes:[I.I18nPipe],encapsulation:2}),t}(u.TwoFactorBaseComponent);t.TwoFactorWebAuthnComponent=G},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},a=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0?this.keys[0].key:null,n.key2=null!=this.keys&&this.keys.length>1?this.keys[1].key:null,n.key3=null!=this.keys&&this.keys.length>2?this.keys[2].key:null,n.key4=null!=this.keys&&this.keys.length>3?this.keys[3].key:null,n.key5=null!=this.keys&&this.keys.length>4?this.keys[4].key:null,n.nfc=this.nfc,e.prototype.enable.call(this,(function(){return o(t,void 0,void 0,(function(){var e;return a(this,(function(t){switch(t.label){case 0:return this.formPromise=this.apiService.putTwoFactorYubiKey(n),[4,this.formPromise];case 1:return e=t.sent(),[4,this.processResponse(e)];case 2:return t.sent(),this.toasterService.popAsync("success",null,this.i18nService.t("yubikeysUpdated")),[2]}}))}))}))},t.prototype.disable=function(){return e.prototype.disable.call(this,this.disablePromise)},t.prototype.remove=function(e){e.existingKey=null,e.key=null},t.prototype.processResponse=function(e){this.enabled=e.enabled,this.keys=[{key:e.key1,existingKey:this.padRight(e.key1)},{key:e.key2,existingKey:this.padRight(e.key2)},{key:e.key3,existingKey:this.padRight(e.key3)},{key:e.key4,existingKey:this.padRight(e.key4)},{key:e.key5,existingKey:this.padRight(e.key5)}],this.nfc=e.nfc||!e.enabled},t.prototype.padRight=function(e,t,n){if(void 0===t&&(t="•"),void 0===n&&(n=44),null==e||null==t||e.length>=n)return e;for(var r=(n-e.length)/t.length,i=0;i0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&this.viewEvents(n[0]),null!=o&&o.unsubscribe(),[2]}}))}))})),null!=t&&t.unsubscribe(),[2]}}))}))}))},e.prototype.ngOnDestroy=function(){this.broadcasterService.unsubscribe("OrgVaultComponent")},e.prototype.clearGroupingFilters=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.ciphersComponent.showAddNew=!0,this.ciphersComponent.deleted=!1,this.groupingsComponent.searchPlaceholder=this.i18nService.t("searchVault"),[4,this.ciphersComponent.applyFilter()];case 1:return e.sent(),this.clearFilters(),this.go(),[2]}}))}))},e.prototype.filterCipherType=function(e,t){return void 0===t&&(t=!1),r(this,void 0,void 0,(function(){var n;return i(this,(function(r){switch(r.label){case 0:return this.ciphersComponent.showAddNew=!0,this.ciphersComponent.deleted=!1,this.groupingsComponent.searchPlaceholder=this.i18nService.t("searchType"),n=function(t){return t.type===e},t?[4,this.ciphersComponent.reload(n)]:[3,2];case 1:return r.sent(),[3,4];case 2:return[4,this.ciphersComponent.applyFilter(n)];case 3:r.sent(),r.label=4;case 4:return this.clearFilters(),this.type=e,this.go(),[2]}}))}))},e.prototype.filterCollection=function(e,t){return void 0===t&&(t=!1),r(this,void 0,void 0,(function(){var n;return i(this,(function(r){switch(r.label){case 0:return this.ciphersComponent.showAddNew=!0,this.ciphersComponent.deleted=!1,this.groupingsComponent.searchPlaceholder=this.i18nService.t("searchCollection"),n=function(t){return"unassigned"===e?null==t.collectionIds||0===t.collectionIds.length:null!=t.collectionIds&&t.collectionIds.indexOf(e)>-1},t?[4,this.ciphersComponent.reload(n)]:[3,2];case 1:return r.sent(),[3,4];case 2:return[4,this.ciphersComponent.applyFilter(n)];case 3:r.sent(),r.label=4;case 4:return this.clearFilters(),this.collectionId=e,this.go(),[2]}}))}))},e.prototype.filterDeleted=function(e){return void 0===e&&(e=!1),r(this,void 0,void 0,(function(){return i(this,(function(t){switch(t.label){case 0:return this.ciphersComponent.showAddNew=!1,this.ciphersComponent.deleted=!0,this.groupingsComponent.searchPlaceholder=this.i18nService.t("searchTrash"),e?[4,this.ciphersComponent.reload(null,!0)]:[3,2];case 1:return t.sent(),[3,4];case 2:return[4,this.ciphersComponent.applyFilter(null)];case 3:t.sent(),t.label=4;case 4:return this.clearFilters(),this.deleted=!0,this.go(),[2]}}))}))},e.prototype.filterSearchText=function(e){this.ciphersComponent.searchText=e,this.ciphersComponent.search(200)},e.prototype.editCipherAttachments=function(e){var t=this;if(null!=this.organization.maxStorageGb&&0!==this.organization.maxStorageGb){null!=this.modal&&this.modal.close();var n=this.componentFactoryResolver.resolveComponentFactory(a.ModalComponent);this.modal=this.attachmentsModalRef.createComponent(n).instance;var o=this.modal.show(c.AttachmentsComponent,this.attachmentsModalRef);o.organization=this.organization,o.cipherId=e.id;var s=!1;o.onUploadedAttachment.subscribe((function(){return s=!0})),o.onDeletedAttachment.subscribe((function(){return s=!0})),this.modal.onClosed.subscribe((function(){return r(t,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.modal=null,s?[4,this.ciphersComponent.refresh()]:[3,2];case 1:e.sent(),e.label=2;case 2:return s=!1,[2]}}))}))}))}else this.messagingService.send("upgradeOrganization",{organizationId:e.organizationId})},e.prototype.editCipherCollections=function(e){var t=this;null!=this.modal&&this.modal.close();var n=this.componentFactoryResolver.resolveComponentFactory(a.ModalComponent);this.modal=this.collectionsModalRef.createComponent(n).instance;var o=this.modal.show(u.CollectionsComponent,this.collectionsModalRef);this.organization.canManageAllCollections&&(o.collectionIds=e.collectionIds,o.collections=this.groupingsComponent.collections.filter((function(e){return!e.readOnly}))),o.organization=this.organization,o.cipherId=e.id,o.onSavedCollections.subscribe((function(){return r(t,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.modal.close(),[4,this.ciphersComponent.refresh()];case 1:return e.sent(),[2]}}))}))})),this.modal.onClosed.subscribe((function(){return r(t,void 0,void 0,(function(){return i(this,(function(e){return this.modal=null,[2]}))}))}))},e.prototype.addCipher=function(){var e=this.editCipher(null);e.organizationId=this.organization.id,e.type=this.type,this.organization.canManageAllCollections&&(e.collections=this.groupingsComponent.collections.filter((function(e){return!e.readOnly}))),null!=this.collectionId&&(e.collectionIds=[this.collectionId])},e.prototype.editCipher=function(e){var t=this;null!=this.modal&&this.modal.close();var n=this.componentFactoryResolver.resolveComponentFactory(a.ModalComponent);this.modal=this.cipherAddEditModalRef.createComponent(n).instance;var o=this.modal.show(l.AddEditComponent,this.cipherAddEditModalRef);return o.organization=this.organization,o.cipherId=null==e?null:e.id,o.onSavedCipher.subscribe((function(e){return r(t,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.modal.close(),[4,this.ciphersComponent.refresh()];case 1:return e.sent(),[2]}}))}))})),o.onDeletedCipher.subscribe((function(e){return r(t,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.modal.close(),[4,this.ciphersComponent.refresh()];case 1:return e.sent(),[2]}}))}))})),o.onRestoredCipher.subscribe((function(e){return r(t,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.modal.close(),[4,this.ciphersComponent.refresh()];case 1:return e.sent(),[2]}}))}))})),this.modal.onClosed.subscribe((function(){t.modal=null})),o},e.prototype.cloneCipher=function(e){var t=this.editCipher(e);t.cloneMode=!0,t.organizationId=this.organization.id,this.organization.canManageAllCollections&&(t.collections=this.groupingsComponent.collections.filter((function(e){return!e.readOnly}))),t.collectionIds=e.collectionIds},e.prototype.viewEvents=function(e){return r(this,void 0,void 0,(function(){var t,n,r=this;return i(this,(function(i){return null!=this.modal&&this.modal.close(),t=this.componentFactoryResolver.resolveComponentFactory(a.ModalComponent),this.modal=this.eventsModalRef.createComponent(t).instance,(n=this.modal.show(s.EntityEventsComponent,this.eventsModalRef)).name=e.name,n.organizationId=this.organization.id,n.entityId=e.id,n.showUser=!0,n.entity="cipher",this.modal.onClosed.subscribe((function(){r.modal=null})),[2]}))}))},e.prototype.clearFilters=function(){this.collectionId=null,this.type=null,this.deleted=!1},e.prototype.go=function(e){void 0===e&&(e=null),null==e&&(e={type:this.type,collectionId:this.collectionId,deleted:!!this.deleted||null}),this.router.navigate([],{relativeTo:this.route,queryParams:e,replaceUrl:!0})},e.ɵfac=function(t){return new(t||e)(m.ɵɵdirectiveInject(h.ActivatedRoute),m.ɵɵdirectiveInject(f.UserService),m.ɵɵdirectiveInject(h.Router),m.ɵɵdirectiveInject(m.ChangeDetectorRef),m.ɵɵdirectiveInject(v.SyncService),m.ɵɵdirectiveInject(y.I18nService),m.ɵɵdirectiveInject(m.ComponentFactoryResolver),m.ɵɵdirectiveInject(g.MessagingService),m.ɵɵdirectiveInject(x.BroadcasterService),m.ɵɵdirectiveInject(m.NgZone),m.ɵɵdirectiveInject(b.PlatformUtilsService))},e.ɵcmp=m.ɵɵdefineComponent({type:e,selectors:[["app-org-vault"]],viewQuery:function(e,t){var n;(1&e&&(m.ɵɵstaticViewQuery(d.GroupingsComponent,!0),m.ɵɵstaticViewQuery(p.CiphersComponent,!0),m.ɵɵstaticViewQuery(_,!0,o.ViewContainerRef),m.ɵɵstaticViewQuery(A,!0,o.ViewContainerRef),m.ɵɵstaticViewQuery(O,!0,o.ViewContainerRef),m.ɵɵstaticViewQuery(T,!0,o.ViewContainerRef)),2&e)&&(m.ɵɵqueryRefresh(n=m.ɵɵloadQuery())&&(t.groupingsComponent=n.first),m.ɵɵqueryRefresh(n=m.ɵɵloadQuery())&&(t.ciphersComponent=n.first),m.ɵɵqueryRefresh(n=m.ɵɵloadQuery())&&(t.attachmentsModalRef=n.first),m.ɵɵqueryRefresh(n=m.ɵɵloadQuery())&&(t.cipherAddEditModalRef=n.first),m.ɵɵqueryRefresh(n=m.ɵɵloadQuery())&&(t.collectionsModalRef=n.first),m.ɵɵqueryRefresh(n=m.ɵɵloadQuery())&&(t.eventsModalRef=n.first))},decls:53,vars:14,consts:[[1,"container","page-content"],[1,"row"],[1,"col-3"],[3,"showFolders","showFavorites","showTrash","onAllClicked","onCipherTypeClicked","onCollectionClicked","onSearchTextChanged","onTrashClicked"],[1,"col-9"],[1,"page-header","d-flex"],[3,"appApiAction"],["actionSpinner",""],[4,"ngIf"],[1,"ml-auto","d-flex"],[3,"ciphersComponent","modal","deleted","organization"],["type","button","class","btn btn-outline-primary btn-sm ml-auto",3,"click",4,"ngIf"],["type","warning","icon","fa-warning",4,"ngIf"],[3,"onCipherClicked","onAttachmentsClicked","onAddCipher","onCollectionsClicked","onEventsClicked","onCloneClicked"],["attachments",""],["cipherAddEdit",""],["collections",""],["eventsTemplate",""],["aria-hidden","true",1,"fa","fa-spinner","fa-spin","text-muted",3,"title"],[1,"sr-only"],["type","button",1,"btn","btn-outline-primary","btn-sm","ml-auto",3,"click"],["aria-hidden","true",1,"fa","fa-plus","fa-fw"],["type","warning","icon","fa-warning"]],template:function(e,t){if(1&e&&(m.ɵɵelementStart(0,"div",0),m.ɵɵtext(1,"\n "),m.ɵɵelementStart(2,"div",1),m.ɵɵtext(3,"\n "),m.ɵɵelementStart(4,"div",2),m.ɵɵtext(5,"\n "),m.ɵɵelementStart(6,"app-org-vault-groupings",3),m.ɵɵlistener("onAllClicked",(function(){return t.clearGroupingFilters()}))("onCipherTypeClicked",(function(e){return t.filterCipherType(e)}))("onCollectionClicked",(function(e){return t.filterCollection(e.id)}))("onSearchTextChanged",(function(e){return t.filterSearchText(e)}))("onTrashClicked",(function(){return t.filterDeleted()})),m.ɵɵtext(7,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(8,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(9,"\n "),m.ɵɵelementStart(10,"div",4),m.ɵɵtext(11,"\n "),m.ɵɵelementStart(12,"div",5),m.ɵɵtext(13,"\n "),m.ɵɵelementStart(14,"h1"),m.ɵɵtext(15),m.ɵɵpipe(16,"i18n"),m.ɵɵelementStart(17,"small",6,7),m.ɵɵtext(19,"\n "),m.ɵɵtemplate(20,M,9,6,"ng-container",8),m.ɵɵtext(21,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(22,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(23,"\n "),m.ɵɵelementStart(24,"div",9),m.ɵɵtext(25,"\n "),m.ɵɵelementStart(26,"app-vault-bulk-actions",10),m.ɵɵtext(27,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(28,"\n "),m.ɵɵtemplate(29,B,5,3,"button",11),m.ɵɵtext(30,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(31,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(32,"\n "),m.ɵɵtemplate(33,D,2,1,"app-callout",12),m.ɵɵtext(34,"\n "),m.ɵɵelementStart(35,"app-org-vault-ciphers",13),m.ɵɵlistener("onCipherClicked",(function(e){return t.editCipher(e)}))("onAttachmentsClicked",(function(e){return t.editCipherAttachments(e)}))("onAddCipher",(function(){return t.addCipher()}))("onCollectionsClicked",(function(e){return t.editCipherCollections(e)}))("onEventsClicked",(function(e){return t.viewEvents(e)}))("onCloneClicked",(function(e){return t.cloneCipher(e)})),m.ɵɵtext(36,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(37,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(38,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(39,"\n"),m.ɵɵelementEnd(),m.ɵɵtext(40,"\n"),m.ɵɵtemplate(41,R,0,0,"ng-template",null,14,m.ɵɵtemplateRefExtractor),m.ɵɵtext(43,"\n"),m.ɵɵtemplate(44,V,0,0,"ng-template",null,15,m.ɵɵtemplateRefExtractor),m.ɵɵtext(46,"\n"),m.ɵɵtemplate(47,j,0,0,"ng-template",null,16,m.ɵɵtemplateRefExtractor),m.ɵɵtext(49,"\n"),m.ɵɵtemplate(50,F,0,0,"ng-template",null,17,m.ɵɵtemplateRefExtractor),m.ɵɵtext(52,"\n")),2&e){var n=m.ɵɵreference(18);m.ɵɵadvance(6),m.ɵɵproperty("showFolders",!1)("showFavorites",!1)("showTrash",!0),m.ɵɵadvance(9),m.ɵɵtextInterpolate1("\n ",m.ɵɵpipeBind1(16,12,"vault"),"\n "),m.ɵɵadvance(2),m.ɵɵproperty("appApiAction",t.ciphersComponent.actionPromise),m.ɵɵadvance(3),m.ɵɵproperty("ngIf",n.loading),m.ɵɵadvance(6),m.ɵɵproperty("ciphersComponent",t.ciphersComponent)("modal",t.modal)("deleted",t.deleted)("organization",t.organization),m.ɵɵadvance(3),m.ɵɵproperty("ngIf",!t.deleted),m.ɵɵadvance(4),m.ɵɵproperty("ngIf",t.deleted)}},directives:[S.GroupingsComponent,w.ApiActionDirective,C.NgIf,I.BulkActionsComponent,E.CiphersComponent,P.CalloutComponent],pipes:[k.I18nPipe],encapsulation:2}),e}();t.VaultComponent=U},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},a=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]524288e3)return this.platformUtilsService.showToast("error",this.i18nService.t("errorOccurred"),this.i18nService.t("maxFileSize")),[2];i.label=1;case 1:return i.trys.push([1,4,,5]),this.formPromise=this.saveCipherAttachment(t[0]),n=this,[4,this.formPromise];case 2:return n.cipherDomain=i.sent(),r=this,[4,this.cipherDomain.decrypt()];case 3:return r.cipher=i.sent(),this.platformUtilsService.showToast("success",null,this.i18nService.t("attachmentSaved")),this.onUploadedAttachment.emit(),[3,5];case 4:return i.sent(),[3,5];case 5:return e.type="",e.type="file",e.value="",[2]}}))}))},e.prototype.delete=function(e){return r(this,void 0,void 0,(function(){var t;return i(this,(function(n){switch(n.label){case 0:return null!=this.deletePromises[e.id]?[2]:[4,this.platformUtilsService.showDialog(this.i18nService.t("deleteAttachmentConfirmation"),this.i18nService.t("deleteAttachment"),this.i18nService.t("yes"),this.i18nService.t("no"),"warning")];case 1:if(!n.sent())return[2];n.label=2;case 2:return n.trys.push([2,4,,5]),this.deletePromises[e.id]=this.deleteCipherAttachment(e.id),[4,this.deletePromises[e.id]];case 3:return n.sent(),this.platformUtilsService.showToast("success",null,this.i18nService.t("deletedAttachment")),(t=this.cipher.attachments.indexOf(e))>-1&&this.cipher.attachments.splice(t,1),[3,5];case 4:return n.sent(),[3,5];case 5:return this.deletePromises[e.id]=null,this.onDeletedAttachment.emit(),[2]}}))}))},e.prototype.download=function(e){return r(this,void 0,void 0,(function(){var t,n,r,o,s,l,c,p,u;return i(this,(function(i){switch(i.label){case 0:if((t=e).downloading)return[2];if(!this.canAccessAttachments)return this.platformUtilsService.showToast("error",this.i18nService.t("premiumRequired"),this.i18nService.t("premiumRequiredDesc")),[2];i.label=1;case 1:return i.trys.push([1,3,,4]),[4,this.apiService.getAttachmentData(this.cipher.id,e.id,this.emergencyAccessId)];case 2:return r=i.sent(),n=r.url,[3,4];case 3:if(!((o=i.sent())instanceof a.ErrorResponse&&404===o.statusCode))throw o instanceof a.ErrorResponse?new Error(o.getSingleMessage()):o;return n=e.url,[3,4];case 4:return t.downloading=!0,[4,fetch(new Request(n,{cache:"no-store"}))];case 5:if(200!==(s=i.sent()).status)return this.platformUtilsService.showToast("error",null,this.i18nService.t("errorOccurred")),t.downloading=!1,[2];i.label=6;case 6:return i.trys.push([6,12,,13]),[4,s.arrayBuffer()];case 7:return l=i.sent(),null==e.key?[3,8]:(p=e.key,[3,10]);case 8:return[4,this.cryptoService.getOrgKey(this.cipher.organizationId)];case 9:p=i.sent(),i.label=10;case 10:return c=p,[4,this.cryptoService.decryptFromBytes(l,c)];case 11:return u=i.sent(),this.platformUtilsService.saveFile(this.win,u,null,e.fileName),[3,13];case 12:return i.sent(),this.platformUtilsService.showToast("error",null,this.i18nService.t("errorOccurred")),[3,13];case 13:return t.downloading=!1,[2]}}))}))},e.prototype.init=function(){return r(this,void 0,void 0,(function(){var e,t,n,r;return i(this,(function(i){switch(i.label){case 0:return e=this,[4,this.loadCipher()];case 1:return e.cipherDomain=i.sent(),t=this,[4,this.cipherDomain.decrypt()];case 2:return t.cipher=i.sent(),n=this,[4,this.cryptoService.hasEncKey()];case 3:return n.hasUpdatedKey=i.sent(),[4,this.userService.canAccessPremium()];case 4:return r=i.sent(),this.canAccessAttachments=r||null!=this.cipher.organizationId,this.canAccessAttachments?[3,6]:[4,this.platformUtilsService.showDialog(this.i18nService.t("premiumRequiredDesc"),this.i18nService.t("premiumRequired"),this.i18nService.t("learnMore"),this.i18nService.t("cancel"))];case 5:return i.sent()&&this.platformUtilsService.launchUri("https://vault.bitwarden.com/#/?premium=purchase"),[3,8];case 6:return this.hasUpdatedKey?[3,8]:[4,this.platformUtilsService.showDialog(this.i18nService.t("updateKey"),this.i18nService.t("featureUnavailable"),this.i18nService.t("learnMore"),this.i18nService.t("cancel"),"warning")];case 7:i.sent()&&this.platformUtilsService.launchUri("https://help.bitwarden.com/article/update-encryption-key/"),i.label=8;case 8:return[2]}}))}))},e.prototype.reuploadCipherAttachment=function(e,t){return r(this,void 0,void 0,(function(){var n,o=this;return i(this,(function(a){switch(a.label){case 0:if(n=e,null!=e.key||n.downloading||null!=this.reuploadPromises[e.id])return[2];a.label=1;case 1:return a.trys.push([1,3,,4]),this.reuploadPromises[e.id]=Promise.resolve().then((function(){return r(o,void 0,void 0,(function(){var r,o,a,s,l,c,p,u,d;return i(this,(function(i){switch(i.label){case 0:return n.downloading=!0,[4,fetch(new Request(e.url,{cache:"no-store"}))];case 1:if(200!==(r=i.sent()).status)return this.platformUtilsService.showToast("error",null,this.i18nService.t("errorOccurred")),n.downloading=!1,[2];i.label=2;case 2:return i.trys.push([2,11,,12]),[4,r.arrayBuffer()];case 3:return o=i.sent(),null==e.key?[3,4]:(s=e.key,[3,6]);case 4:return[4,this.cryptoService.getOrgKey(this.cipher.organizationId)];case 5:s=i.sent(),i.label=6;case 6:return a=s,[4,this.cryptoService.decryptFromBytes(o,a)];case 7:return l=i.sent(),c=this,[4,this.cipherService.saveAttachmentRawWithServer(this.cipherDomain,e.fileName,l,t)];case 8:return c.cipherDomain=i.sent(),p=this,[4,this.cipherDomain.decrypt()];case 9:return p.cipher=i.sent(),this.deletePromises[e.id]=this.deleteCipherAttachment(e.id),[4,this.deletePromises[e.id]];case 10:return i.sent(),(u=this.cipher.attachments.filter((function(t){return t.id===e.id}))).length>0&&(d=this.cipher.attachments.indexOf(u[0]))>-1&&this.cipher.attachments.splice(d,1),this.platformUtilsService.showToast("success",null,this.i18nService.t("attachmentSaved")),this.onReuploadedAttachment.emit(),[3,12];case 11:return i.sent(),this.platformUtilsService.showToast("error",null,this.i18nService.t("errorOccurred")),[3,12];case 12:return n.downloading=!1,[2]}}))}))})),[4,this.reuploadPromises[e.id]];case 2:return a.sent(),[3,4];case 3:return a.sent(),[3,4];case 4:return[2]}}))}))},e.prototype.loadCipher=function(){return this.cipherService.get(this.cipherId)},e.prototype.saveCipherAttachment=function(e){return this.cipherService.saveAttachmentWithServer(this.cipherDomain,e)},e.prototype.deleteCipherAttachment=function(e){return this.cipherService.deleteAttachmentWithServer(this.cipher.id,e)},e.ɵfac=function(t){return new(t||e)(s.ɵɵdirectiveInject(l.CipherService),s.ɵɵdirectiveInject(c.I18nService),s.ɵɵdirectiveInject(p.CryptoService),s.ɵɵdirectiveInject(u.UserService),s.ɵɵdirectiveInject(d.PlatformUtilsService),s.ɵɵdirectiveInject(m.ApiService),s.ɵɵdirectiveInject(Window))},e.ɵdir=s.ɵɵdefineDirective({type:e,inputs:{cipherId:"cipherId"},outputs:{onUploadedAttachment:"onUploadedAttachment",onDeletedAttachment:"onDeletedAttachment",onReuploadedAttachment:"onReuploadedAttachment"}}),e}();t.AttachmentsComponent=h},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(t){var n=e.call(this,t)||this;return n.type=n.getResponseProperty("Type"),n.domains=n.getResponseProperty("Domains"),n.excluded=n.getResponseProperty("Excluded"),n}return i(t,e),t}(n(23).BaseResponse);t.GlobalDomainResponse=o},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(t){var n=e.call(this,t)||this;return n.accessToken=t.access_token,n.expiresIn=t.expires_in,n.refreshToken=t.refresh_token,n.tokenType=t.token_type,n.resetMasterPassword=n.getResponseProperty("ResetMasterPassword"),n.privateKey=n.getResponseProperty("PrivateKey"),n.key=n.getResponseProperty("Key"),n.twoFactorToken=n.getResponseProperty("TwoFactorToken"),n.kdf=n.getResponseProperty("Kdf"),n.kdfIterations=n.getResponseProperty("KdfIterations"),n}return i(t,e),t}(n(23).BaseResponse);t.IdentityTokenResponse=o},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(t){var n=e.call(this,t)||this;n.twoFactorProviders2=new Map,n.twoFactorProviders=n.getResponseProperty("TwoFactorProviders");var r=n.getResponseProperty("TwoFactorProviders2");if(null!=r)for(var i in r)r.hasOwnProperty(i)&&n.twoFactorProviders2.set(parseInt(i,null),r[i]);return n}return i(t,e),t}(n(23).BaseResponse);t.IdentityTwoFactorResponse=o},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(t,n){var r=e.call(this,t)||this,i=r.getResponseProperty("Data");return r.data=null==i?[]:i.map((function(e){return new n(e)})),r.continuationToken=r.getResponseProperty("ContinuationToken"),r}return i(t,e),t}(n(23).BaseResponse);t.ListResponse=o},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(23),a=n(468),s=function(e){function t(t){var n=e.call(this,t)||this;return n.id=n.getResponseProperty("Id"),n.name=n.getResponseProperty("Name"),n.usePolicies=n.getResponseProperty("UsePolicies"),n.useGroups=n.getResponseProperty("UseGroups"),n.useDirectory=n.getResponseProperty("UseDirectory"),n.useEvents=n.getResponseProperty("UseEvents"),n.useTotp=n.getResponseProperty("UseTotp"),n.use2fa=n.getResponseProperty("Use2fa"),n.useApi=n.getResponseProperty("UseApi"),n.useBusinessPortal=n.getResponseProperty("UseBusinessPortal"),n.useSso=n.getResponseProperty("UseSso"),n.selfHost=n.getResponseProperty("SelfHost"),n.usersGetPremium=n.getResponseProperty("UsersGetPremium"),n.seats=n.getResponseProperty("Seats"),n.maxCollections=n.getResponseProperty("MaxCollections"),n.maxStorageGb=n.getResponseProperty("MaxStorageGb"),n.key=n.getResponseProperty("Key"),n.status=n.getResponseProperty("Status"),n.type=n.getResponseProperty("Type"),n.enabled=n.getResponseProperty("Enabled"),n.ssoBound=n.getResponseProperty("SsoBound"),n.identifier=n.getResponseProperty("Identifier"),n.permissions=new a.PermissionsApi(n.getResponseProperty("permissions")),n.resetPasswordKey=n.getResponseProperty("ResetPasswordKey"),n.userId=n.getResponseProperty("UserId"),n}return i(t,e),t}(o.BaseResponse);t.ProfileOrganizationResponse=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(23),a=n(262),s=n(499),l=n(500),c=n(501),p=n(621),u=n(293),d=n(502),m=function(e){function t(t){var n=e.call(this,t)||this;n.folders=[],n.collections=[],n.ciphers=[],n.policies=[],n.sends=[];var r=n.getResponseProperty("Profile");null!=r&&(n.profile=new u.ProfileResponse(r));var i=n.getResponseProperty("Folders");null!=i&&(n.folders=i.map((function(e){return new c.FolderResponse(e)})));var o=n.getResponseProperty("Collections");null!=o&&(n.collections=o.map((function(e){return new s.CollectionDetailsResponse(e)})));var m=n.getResponseProperty("Ciphers");null!=m&&(n.ciphers=m.map((function(e){return new a.CipherResponse(e)})));var h=n.getResponseProperty("Domains");null!=h&&(n.domains=new l.DomainsResponse(h));var f=n.getResponseProperty("Policies");null!=f&&(n.policies=f.map((function(e){return new p.PolicyResponse(e)})));var v=n.getResponseProperty("Sends");return null!=v&&(n.sends=v.map((function(e){return new d.SendResponse(e)}))),n}return i(t,e),t}(o.BaseResponse);t.SyncResponse=m},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(t){var n=e.call(this,t)||this;return n.id=n.getResponseProperty("Id"),n.organizationId=n.getResponseProperty("OrganizationId"),n.type=n.getResponseProperty("Type"),n.data=n.getResponseProperty("Data"),n.enabled=n.getResponseProperty("Enabled"),n}return i(t,e),t}(n(23).BaseResponse);t.PolicyResponse=o},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},a=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&(this.organizationId=this.organizations[0].id),this.filterCollections(),[2]}}))}))},e.prototype.ngOnDestroy=function(){this.selectAll(!1)},e.prototype.filterCollections=function(){var e=this;this.selectAll(!1),null==this.organizationId||0===this.writeableCollections.length?this.collections=[]:this.collections=this.writeableCollections.filter((function(t){return t.organizationId===e.organizationId}))},e.prototype.submit=function(){return r(this,void 0,void 0,(function(){var e;return i(this,(function(t){switch(t.label){case 0:e=this.collections.filter((function(e){return e.checked})).map((function(e){return e.id})),t.label=1;case 1:return t.trys.push([1,3,,4]),this.formPromise=this.cipherService.shareManyWithServer(this.shareableCiphers,this.organizationId,e),[4,this.formPromise];case 2:return t.sent(),this.onShared.emit(),this.toasterService.popAsync("success",null,this.i18nService.t("sharedItems")),[3,4];case 3:return t.sent(),[3,4];case 4:return[2]}}))}))},e.prototype.check=function(e,t){e.checked=null==t?!e.checked:t},e.prototype.selectAll=function(e){var t=this;(e?this.collections:this.writeableCollections).forEach((function(n){return t.check(n,e)}))},Object.defineProperty(e.prototype,"canSave",{get:function(){if(null!=this.shareableCiphers&&this.shareableCiphers.length>0&&null!=this.collections)for(var e=0;e0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=this.maxAccessCount},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"expired",{get:function(){return null!=this.expirationDate&&this.expirationDate<=new Date},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"pendingDelete",{get:function(){return this.deletionDate<=new Date},enumerable:!0,configurable:!0}),e}();t.SendView=a},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0),v.ɵɵadvance(2),v.ɵɵproperty("ngIf",(null==n.enforcedPolicyOptions?null:n.enforcedPolicyOptions.minLength)>0),v.ɵɵadvance(2),v.ɵɵproperty("ngIf",null==n.enforcedPolicyOptions?null:n.enforcedPolicyOptions.requireUpper),v.ɵɵadvance(2),v.ɵɵproperty("ngIf",null==n.enforcedPolicyOptions?null:n.enforcedPolicyOptions.requireLower),v.ɵɵadvance(2),v.ɵɵproperty("ngIf",null==n.enforcedPolicyOptions?null:n.enforcedPolicyOptions.requireNumbers),v.ɵɵadvance(2),v.ɵɵproperty("ngIf",null==n.enforcedPolicyOptions?null:n.enforcedPolicyOptions.requireSpecial)}}var G=function(e){function t(t,n,r,i,o,a,s,l,c,p,u){var d=e.call(this,t,n,r,i,o,a,s)||this;return d.folderService=l,d.cipherService=c,d.syncService=p,d.apiService=u,d.rotateEncKey=!1,d}return i(t,e),t.prototype.rotateEncKeyClicked=function(){return o(this,void 0,void 0,(function(){var e,t,n;return a(this,(function(r){switch(r.label){case 0:return this.rotateEncKey?[4,this.cipherService.getAllDecrypted()]:[3,5];case 1:if(e=r.sent(),t=!1,null!=e)for(n=0;n0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0),a.ɵɵadvance(2),a.ɵɵproperty("disabled",n.loading),a.ɵɵadvance(2),a.ɵɵpropertyInterpolate("title",a.ɵɵpipeBind1(43,27,"loading")),a.ɵɵadvance(4),a.ɵɵtextInterpolate(a.ɵɵpipeBind1(47,29,"save"))}},directives:[p.NgControlStatusGroup,p.NgForm,u.ApiActionDirective,d.NgIf,d.NgForOf,p.DefaultValueAccessor,p.RequiredValidator,p.NgControlStatus,p.NgModel,m.A11yTitleDirective,d.NgClass,h.StopClickDirective],pipes:[f.I18nPipe],encapsulation:2}),e}();t.DomainRulesComponent=E},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]1?"×"+n.quantity:""," @ ",o.ɵɵpipeBind2(4,5,n.amount,"$"),"\n "),o.ɵɵadvance(4),o.ɵɵtextInterpolate2("\n ",o.ɵɵpipeBind2(8,8,n.quantity*n.amount,"$")," /",o.ɵɵpipeBind1(9,11,n.interval),"\n ")}}function _(e,t){if(1&e&&(o.ɵɵelementStart(0,"div",16),o.ɵɵtext(1,"\n "),o.ɵɵelementStart(2,"strong",17),o.ɵɵtext(3),o.ɵɵpipe(4,"i18n"),o.ɵɵelementEnd(),o.ɵɵtext(5,"\n "),o.ɵɵelementStart(6,"table",18),o.ɵɵtext(7,"\n "),o.ɵɵelementStart(8,"tbody"),o.ɵɵtext(9,"\n "),o.ɵɵtemplate(10,k,11,13,"tr",19),o.ɵɵtext(11,"\n "),o.ɵɵelementEnd(),o.ɵɵtext(12,"\n "),o.ɵɵelementEnd(),o.ɵɵtext(13,"\n "),o.ɵɵelementEnd()),2&e){var n=o.ɵɵnextContext(3);o.ɵɵadvance(3),o.ɵɵtextInterpolate(o.ɵɵpipeBind1(4,2,"details")),o.ɵɵadvance(7),o.ɵɵproperty("ngForOf",n.subscription.items)}}function A(e,t){if(1&e&&(o.ɵɵelementStart(0,"div",10),o.ɵɵtext(1,"\n "),o.ɵɵelementStart(2,"div",11),o.ɵɵtext(3,"\n "),o.ɵɵelementStart(4,"dl"),o.ɵɵtext(5,"\n "),o.ɵɵelementStart(6,"dt"),o.ɵɵtext(7),o.ɵɵpipe(8,"i18n"),o.ɵɵelementEnd(),o.ɵɵtext(9,"\n "),o.ɵɵelementStart(10,"dd"),o.ɵɵtext(11,"\n "),o.ɵɵelementStart(12,"span",12),o.ɵɵtext(13),o.ɵɵelementEnd(),o.ɵɵtext(14,"\n "),o.ɵɵtemplate(15,P,3,3,"span",13),o.ɵɵtext(16,"\n "),o.ɵɵelementEnd(),o.ɵɵtext(17,"\n "),o.ɵɵelementStart(18,"dt"),o.ɵɵtext(19),o.ɵɵpipe(20,"i18n"),o.ɵɵelementEnd(),o.ɵɵtext(21,"\n "),o.ɵɵelementStart(22,"dd"),o.ɵɵtext(23),o.ɵɵpipe(24,"date"),o.ɵɵpipe(25,"currency"),o.ɵɵelementEnd(),o.ɵɵtext(26,"\n "),o.ɵɵelementEnd(),o.ɵɵtext(27,"\n "),o.ɵɵelementEnd(),o.ɵɵtext(28,"\n "),o.ɵɵtemplate(29,_,14,4,"div",14),o.ɵɵtext(30,"\n "),o.ɵɵelementEnd()),2&e){var n=o.ɵɵnextContext(2);o.ɵɵadvance(7),o.ɵɵtextInterpolate(o.ɵɵpipeBind1(8,6,"status")),o.ɵɵadvance(6),o.ɵɵtextInterpolate(n.subscription&&n.subscription.status||"-"),o.ɵɵadvance(2),o.ɵɵproperty("ngIf",n.subscriptionMarkedForCancel),o.ɵɵadvance(4),o.ɵɵtextInterpolate(o.ɵɵpipeBind1(20,8,"nextCharge")),o.ɵɵadvance(4),o.ɵɵtextInterpolate1("",n.nextInvoice?o.ɵɵpipeBind2(24,10,n.nextInvoice.date,"mediumDate")+", "+o.ɵɵpipeBind2(25,13,n.nextInvoice.amount,"$"):"-","\n "),o.ɵɵadvance(6),o.ɵɵproperty("ngIf",n.subscription)}}function O(e,t){if(1&e){var n=o.ɵɵgetCurrentView();o.ɵɵelementStart(0,"div",23),o.ɵɵtext(1,"\n "),o.ɵɵelementStart(2,"div",24),o.ɵɵtext(3,"\n "),o.ɵɵelementStart(4,"button",25),o.ɵɵlistener("click",(function(){return o.ɵɵrestoreView(n),o.ɵɵnextContext(3).closeUpdateLicense(!1)})),o.ɵɵpipe(5,"i18n"),o.ɵɵelementStart(6,"span",26),o.ɵɵtext(7,"×"),o.ɵɵelementEnd(),o.ɵɵelementEnd(),o.ɵɵtext(8,"\n "),o.ɵɵelementStart(9,"h3",27),o.ɵɵtext(10),o.ɵɵpipe(11,"i18n"),o.ɵɵelementEnd(),o.ɵɵtext(12,"\n "),o.ɵɵelementStart(13,"app-update-license",28),o.ɵɵlistener("onUpdated",(function(){return o.ɵɵrestoreView(n),o.ɵɵnextContext(3).closeUpdateLicense(!0)}))("onCanceled",(function(){return o.ɵɵrestoreView(n),o.ɵɵnextContext(3).closeUpdateLicense(!1)})),o.ɵɵtext(14,"\n "),o.ɵɵelementEnd(),o.ɵɵtext(15,"\n "),o.ɵɵelementEnd(),o.ɵɵtext(16,"\n "),o.ɵɵelementEnd()}2&e&&(o.ɵɵadvance(4),o.ɵɵpropertyInterpolate("appA11yTitle",o.ɵɵpipeBind1(5,2,"cancel")),o.ɵɵadvance(6),o.ɵɵtextInterpolate(o.ɵɵpipeBind1(11,4,"updateLicense")))}function T(e,t){if(1&e){var n=o.ɵɵgetCurrentView();o.ɵɵelementContainerStart(0),o.ɵɵtext(1,"\n "),o.ɵɵelementStart(2,"div"),o.ɵɵtext(3,"\n "),o.ɵɵelementStart(4,"button",20),o.ɵɵlistener("click",(function(){return o.ɵɵrestoreView(n),o.ɵɵnextContext(2).updateLicense()})),o.ɵɵtext(5),o.ɵɵpipe(6,"i18n"),o.ɵɵelementEnd(),o.ɵɵtext(7,"\n "),o.ɵɵelementStart(8,"a",21),o.ɵɵtext(9),o.ɵɵpipe(10,"i18n"),o.ɵɵelementEnd(),o.ɵɵtext(11,"\n "),o.ɵɵelementEnd(),o.ɵɵtext(12,"\n "),o.ɵɵtemplate(13,O,17,6,"div",22),o.ɵɵtext(14,"\n "),o.ɵɵelementContainerEnd()}if(2&e){var r=o.ɵɵnextContext(2);o.ɵɵadvance(5),o.ɵɵtextInterpolate1("\n ",o.ɵɵpipeBind1(6,3,"updateLicense"),"\n "),o.ɵɵadvance(4),o.ɵɵtextInterpolate1("\n ",o.ɵɵpipeBind1(10,5,"manageSubscription"),"\n "),o.ɵɵadvance(4),o.ɵɵproperty("ngIf",r.showUpdateLicense)}}function M(e,t){if(1&e){var n=o.ɵɵgetCurrentView();o.ɵɵelementStart(0,"button",20),o.ɵɵlistener("click",(function(){return o.ɵɵrestoreView(n),o.ɵɵnextContext(3).downloadLicense()})),o.ɵɵtext(1),o.ɵɵpipe(2,"i18n"),o.ɵɵelementEnd()}2&e&&(o.ɵɵadvance(1),o.ɵɵtextInterpolate1("\n ",o.ɵɵpipeBind1(2,1,"downloadLicense"),"\n "))}function B(e,t){if(1&e){var n=o.ɵɵgetCurrentView();o.ɵɵelementStart(0,"button",35,36),o.ɵɵlistener("click",(function(){return o.ɵɵrestoreView(n),o.ɵɵnextContext(3).cancel()})),o.ɵɵtext(2,"\n "),o.ɵɵelement(3,"i",9),o.ɵɵpipe(4,"i18n"),o.ɵɵtext(5,"\n "),o.ɵɵelementStart(6,"span"),o.ɵɵtext(7),o.ɵɵpipe(8,"i18n"),o.ɵɵelementEnd(),o.ɵɵtext(9,"\n "),o.ɵɵelementEnd()}if(2&e){var r=o.ɵɵreference(1),i=o.ɵɵnextContext(3);o.ɵɵproperty("appApiAction",i.cancelPromise)("disabled",r.loading),o.ɵɵadvance(3),o.ɵɵpropertyInterpolate("title",o.ɵɵpipeBind1(4,4,"loading")),o.ɵɵadvance(4),o.ɵɵtextInterpolate(o.ɵɵpipeBind1(8,6,"cancelSubscription"))}}function D(e,t){if(1&e){var n=o.ɵɵgetCurrentView();o.ɵɵelementStart(0,"div",29),o.ɵɵtext(1,"\n "),o.ɵɵelementStart(2,"button",20),o.ɵɵlistener("click",(function(){return o.ɵɵrestoreView(n),o.ɵɵnextContext(4).adjustStorage(!0)})),o.ɵɵtext(3),o.ɵɵpipe(4,"i18n"),o.ɵɵelementEnd(),o.ɵɵtext(5,"\n "),o.ɵɵelementStart(6,"button",40),o.ɵɵlistener("click",(function(){return o.ɵɵrestoreView(n),o.ɵɵnextContext(4).adjustStorage(!1)})),o.ɵɵtext(7),o.ɵɵpipe(8,"i18n"),o.ɵɵelementEnd(),o.ɵɵtext(9,"\n "),o.ɵɵelementEnd()}2&e&&(o.ɵɵadvance(3),o.ɵɵtextInterpolate1("\n ",o.ɵɵpipeBind1(4,2,"addStorage"),"\n "),o.ɵɵadvance(4),o.ɵɵtextInterpolate1("\n ",o.ɵɵpipeBind1(8,4,"removeStorage"),"\n "))}function R(e,t){if(1&e){var n=o.ɵɵgetCurrentView();o.ɵɵelementStart(0,"app-adjust-storage",41),o.ɵɵlistener("onAdjusted",(function(){return o.ɵɵrestoreView(n),o.ɵɵnextContext(4).closeStorage(!0)}))("onCanceled",(function(){return o.ɵɵrestoreView(n),o.ɵɵnextContext(4).closeStorage(!1)})),o.ɵɵelementEnd()}if(2&e){var r=o.ɵɵnextContext(4);o.ɵɵproperty("storageGbPrice",4)("add",r.adjustStorageAdd)}}function V(e,t){if(1&e&&(o.ɵɵelementContainerStart(0),o.ɵɵtext(1,"\n "),o.ɵɵelementStart(2,"div",37),o.ɵɵtext(3,"\n "),o.ɵɵtemplate(4,D,10,6,"div",38),o.ɵɵtext(5,"\n "),o.ɵɵtemplate(6,R,1,2,"app-adjust-storage",39),o.ɵɵtext(7,"\n "),o.ɵɵelementEnd(),o.ɵɵtext(8,"\n "),o.ɵɵelementContainerEnd()),2&e){var n=o.ɵɵnextContext(3);o.ɵɵadvance(4),o.ɵɵproperty("ngIf",!n.showAdjustStorage),o.ɵɵadvance(2),o.ɵɵproperty("ngIf",n.showAdjustStorage)}}var j=function(e){return{width:e}};function F(e,t){if(1&e&&(o.ɵɵelementContainerStart(0),o.ɵɵtext(1,"\n "),o.ɵɵelementStart(2,"div",29),o.ɵɵtext(3,"\n "),o.ɵɵtemplate(4,M,3,3,"button",30),o.ɵɵtext(5,"\n "),o.ɵɵtemplate(6,B,10,8,"button",31),o.ɵɵtext(7,"\n "),o.ɵɵelementEnd(),o.ɵɵtext(8,"\n "),o.ɵɵelementStart(9,"h2",32),o.ɵɵtext(10),o.ɵɵpipe(11,"i18n"),o.ɵɵelementEnd(),o.ɵɵtext(12,"\n "),o.ɵɵelementStart(13,"p"),o.ɵɵtext(14),o.ɵɵpipe(15,"i18n"),o.ɵɵelementEnd(),o.ɵɵtext(16,"\n "),o.ɵɵelementStart(17,"div",33),o.ɵɵtext(18,"\n "),o.ɵɵelementStart(19,"div",34),o.ɵɵtext(20),o.ɵɵpipe(21,"percent"),o.ɵɵelementEnd(),o.ɵɵtext(22,"\n "),o.ɵɵelementEnd(),o.ɵɵtext(23,"\n "),o.ɵɵtemplate(24,V,9,2,"ng-container",1),o.ɵɵtext(25,"\n "),o.ɵɵelementContainerEnd()),2&e){var n=o.ɵɵnextContext(2);o.ɵɵadvance(4),o.ɵɵproperty("ngIf",!n.subscription||!n.subscription.cancelled),o.ɵɵadvance(2),o.ɵɵproperty("ngIf",n.subscription&&!n.subscription.cancelled&&!n.subscriptionMarkedForCancel),o.ɵɵadvance(4),o.ɵɵtextInterpolate(o.ɵɵpipeBind1(11,8,"storage")),o.ɵɵadvance(4),o.ɵɵtextInterpolate(o.ɵɵpipeBind3(15,10,"subscriptionStorage",n.sub.maxStorageGb||0,n.sub.storageName||"0 MB")),o.ɵɵadvance(5),o.ɵɵproperty("ngStyle",o.ɵɵpureFunction1(16,j,n.storageProgressWidth+"%")),o.ɵɵattribute("aria-valuenow",n.storagePercentage),o.ɵɵadvance(1),o.ɵɵtextInterpolate1("\n ",o.ɵɵpipeBind1(21,14,n.storagePercentage/100),""),o.ɵɵadvance(4),o.ɵɵproperty("ngIf",n.subscription&&!n.subscription.cancelled&&!n.subscriptionMarkedForCancel)}}function U(e,t){if(1&e&&(o.ɵɵelementContainerStart(0),o.ɵɵtext(1,"\n "),o.ɵɵtemplate(2,S,4,6,"app-callout",4),o.ɵɵtext(3,"\n "),o.ɵɵtemplate(4,w,18,14,"app-callout",4),o.ɵɵtext(5,"\n "),o.ɵɵtemplate(6,E,10,5,"dl",1),o.ɵɵtext(7,"\n "),o.ɵɵtemplate(8,A,31,16,"div",5),o.ɵɵtext(9,"\n "),o.ɵɵtemplate(10,T,15,7,"ng-container",1),o.ɵɵtext(11,"\n "),o.ɵɵtemplate(12,F,26,18,"ng-container",1),o.ɵɵtext(13,"\n"),o.ɵɵelementContainerEnd()),2&e){var n=o.ɵɵnextContext();o.ɵɵadvance(2),o.ɵɵproperty("ngIf",n.subscription&&n.subscription.cancelled),o.ɵɵadvance(2),o.ɵɵproperty("ngIf",n.subscriptionMarkedForCancel),o.ɵɵadvance(2),o.ɵɵproperty("ngIf",n.selfHosted),o.ɵɵadvance(2),o.ɵɵproperty("ngIf",!n.selfHosted),o.ɵɵadvance(2),o.ɵɵproperty("ngIf",n.selfHosted),o.ɵɵadvance(2),o.ɵɵproperty("ngIf",!n.selfHosted)}}var N=function(){function e(e,t,n,r,i,o){this.tokenService=e,this.apiService=t,this.platformUtilsService=n,this.i18nService=r,this.toasterService=i,this.router=o,this.loading=!1,this.firstLoaded=!1,this.adjustStorageAdd=!0,this.showAdjustStorage=!1,this.showUpdateLicense=!1,this.selfHosted=!1,this.selfHosted=n.isSelfHost()}return e.prototype.ngOnInit=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return[4,this.load()];case 1:return e.sent(),this.firstLoaded=!0,[2]}}))}))},e.prototype.load=function(){return r(this,void 0,void 0,(function(){var e;return i(this,(function(t){switch(t.label){case 0:return this.loading?[2]:this.tokenService.getPremium()?(this.loading=!0,e=this,[4,this.apiService.getUserSubscription()]):[3,2];case 1:return e.sub=t.sent(),[3,3];case 2:return this.router.navigate(["/settings/premium"]),[2];case 3:return this.loading=!1,[2]}}))}))},e.prototype.reinstate=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.loading?[2]:this.usingInAppPurchase?(this.platformUtilsService.showDialog(this.i18nService.t("manageSubscriptionFromStore"),this.i18nService.t("cancelSubscription"),null,null,"warning"),[2]):[4,this.platformUtilsService.showDialog(this.i18nService.t("reinstateConfirmation"),this.i18nService.t("reinstateSubscription"),this.i18nService.t("yes"),this.i18nService.t("cancel"))];case 1:if(!e.sent())return[2];e.label=2;case 2:return e.trys.push([2,4,,5]),this.reinstatePromise=this.apiService.postReinstatePremium(),[4,this.reinstatePromise];case 3:return e.sent(),this.toasterService.popAsync("success",null,this.i18nService.t("reinstated")),this.load(),[3,5];case 4:return e.sent(),[3,5];case 5:return[2]}}))}))},e.prototype.cancel=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.loading?[2]:this.usingInAppPurchase?(this.platformUtilsService.showDialog(this.i18nService.t("manageSubscriptionFromStore"),this.i18nService.t("cancelSubscription"),null,null,"warning"),[2]):[4,this.platformUtilsService.showDialog(this.i18nService.t("cancelConfirmation"),this.i18nService.t("cancelSubscription"),this.i18nService.t("yes"),this.i18nService.t("no"),"warning")];case 1:if(!e.sent())return[2];e.label=2;case 2:return e.trys.push([2,4,,5]),this.cancelPromise=this.apiService.postCancelPremium(),[4,this.cancelPromise];case 3:return e.sent(),this.toasterService.popAsync("success",null,this.i18nService.t("canceledSubscription")),this.load(),[3,5];case 4:return e.sent(),[3,5];case 5:return[2]}}))}))},e.prototype.downloadLicense=function(){if(!this.loading){var e=JSON.stringify(this.sub.license,null,2);this.platformUtilsService.saveFile(window,e,null,"bitwarden_premium_license.json")}},e.prototype.updateLicense=function(){this.loading||(this.showUpdateLicense=!0)},e.prototype.closeUpdateLicense=function(e){this.showUpdateLicense=!1,e&&this.load()},e.prototype.adjustStorage=function(e){this.usingInAppPurchase?this.platformUtilsService.showDialog(this.i18nService.t("cannotPerformInAppPurchase"),this.i18nService.t(e?"addStorage":"removeStorage"),null,null,"warning"):(this.adjustStorageAdd=e,this.showAdjustStorage=!0)},e.prototype.closeStorage=function(e){this.showAdjustStorage=!1,e&&this.load()},Object.defineProperty(e.prototype,"subscriptionMarkedForCancel",{get:function(){return null!=this.subscription&&!this.subscription.cancelled&&this.subscription.cancelAtEndDate},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"subscription",{get:function(){return null!=this.sub?this.sub.subscription:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"nextInvoice",{get:function(){return null!=this.sub?this.sub.upcomingInvoice:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"storagePercentage",{get:function(){return null!=this.sub&&this.sub.maxStorageGb?+(this.sub.storageGb/this.sub.maxStorageGb*100).toFixed(2):0},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"storageProgressWidth",{get:function(){return this.storagePercentage<5?5:0},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"usingInAppPurchase",{get:function(){return null!=this.sub&&this.sub.usingInAppPurchase},enumerable:!0,configurable:!0}),e.ɵfac=function(t){return new(t||e)(o.ɵɵdirectiveInject(a.TokenService),o.ɵɵdirectiveInject(s.ApiService),o.ɵɵdirectiveInject(l.PlatformUtilsService),o.ɵɵdirectiveInject(c.I18nService),o.ɵɵdirectiveInject(p.ToasterService),o.ɵɵdirectiveInject(u.Router))},e.ɵcmp=o.ɵɵdefineComponent({type:e,selectors:[["app-user-subscription"]],decls:13,vars:6,consts:[[1,"page-header"],[4,"ngIf"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin","text-muted",3,"title"],[1,"sr-only"],["type","warning",3,"title",4,"ngIf"],["class","row",4,"ngIf"],["type","warning",3,"title"],["type","button",1,"btn","btn-outline-secondary","btn-submit",3,"appApiAction","disabled","click"],["reinstateBtn",""],["aria-hidden","true",1,"fa","fa-spinner","fa-spin",3,"title"],[1,"row"],[1,"col-4"],[1,"text-capitalize"],["class","badge badge-warning",4,"ngIf"],["class","col-8",4,"ngIf"],[1,"badge","badge-warning"],[1,"col-8"],[1,"d-block","mb-1"],[1,"table"],[4,"ngFor","ngForOf"],["type","button",1,"btn","btn-outline-secondary",3,"click"],["href","https://vault.bitwarden.com/#/settings/subscription","target","_blank","rel","noopener",1,"btn","btn-outline-secondary"],["class","card mt-3",4,"ngIf"],[1,"card","mt-3"],[1,"card-body"],["type","button",1,"close",3,"appA11yTitle","click"],["aria-hidden","true"],[1,"card-body-header"],[3,"onUpdated","onCanceled"],[1,"d-flex"],["type","button","class","btn btn-outline-secondary",3,"click",4,"ngIf"],["type","button","class","btn btn-outline-danger btn-submit ml-auto",3,"appApiAction","disabled","click",4,"ngIf"],[1,"spaced-header"],[1,"progress"],["role","progressbar","aria-valuemin","0","aria-valuemax","100",1,"progress-bar","bg-success",3,"ngStyle"],["type","button",1,"btn","btn-outline-danger","btn-submit","ml-auto",3,"appApiAction","disabled","click"],["cancelBtn",""],[1,"mt-3"],["class","d-flex",4,"ngIf"],[3,"storageGbPrice","add","onAdjusted","onCanceled",4,"ngIf"],["type","button",1,"ml-1","btn","btn-outline-secondary",3,"click"],[3,"storageGbPrice","add","onAdjusted","onCanceled"]],template:function(e,t){1&e&&(o.ɵɵelementStart(0,"div",0),o.ɵɵtext(1,"\n "),o.ɵɵelementStart(2,"h1"),o.ɵɵtext(3),o.ɵɵpipe(4,"i18n"),o.ɵɵtemplate(5,x,9,6,"small",1),o.ɵɵtext(6,"\n "),o.ɵɵelementEnd(),o.ɵɵtext(7,"\n"),o.ɵɵelementEnd(),o.ɵɵtext(8,"\n"),o.ɵɵtemplate(9,b,9,6,"ng-container",1),o.ɵɵtext(10,"\n"),o.ɵɵtemplate(11,U,14,6,"ng-container",1),o.ɵɵtext(12,"\n")),2&e&&(o.ɵɵadvance(3),o.ɵɵtextInterpolate1("\n ",o.ɵɵpipeBind1(4,4,"premiumMembership"),"\n "),o.ɵɵadvance(2),o.ɵɵproperty("ngIf",t.firstLoaded&&t.loading),o.ɵɵadvance(4),o.ɵɵproperty("ngIf",!t.firstLoaded&&t.loading),o.ɵɵadvance(2),o.ɵɵproperty("ngIf",t.sub))},directives:[d.NgIf,m.CalloutComponent,h.ApiActionDirective,d.NgForOf,f.A11yTitleDirective,v.UpdateLicenseComponent,d.NgStyle,y.AdjustStorageComponent],pipes:[g.I18nPipe,d.DatePipe,d.CurrencyPipe,d.PercentPipe],encapsulation:2}),e}();t.UserSubscriptionComponent=N},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]-1}))];case 1:return t.sent(),this.clearFilters(),this.collectionId=e,this.go(),[2]}}))}))},e.prototype.filterSearchText=function(e){this.ciphersComponent.searchText=e,this.ciphersComponent.search(200)},e.prototype.editCipherAttachments=function(e){return r(this,void 0,void 0,(function(){var t,n,o,s,l,c=this;return i(this,(function(u){switch(u.label){case 0:return[4,this.userService.canAccessPremium()];case 1:return t=u.sent(),null!=e.organizationId||t?[3,2]:(this.messagingService.send("premiumRequired"),[2]);case 2:return null==e.organizationId?[3,4]:[4,this.userService.getOrganization(e.organizationId)];case 3:if(null!=(n=u.sent())&&(null==n.maxStorageGb||0===n.maxStorageGb))return this.messagingService.send("upgradeOrganization",{organizationId:e.organizationId}),[2];u.label=4;case 4:return null!=this.modal&&this.modal.close(),o=this.componentFactoryResolver.resolveComponentFactory(a.ModalComponent),this.modal=this.attachmentsModalRef.createComponent(o).instance,(s=this.modal.show(p.AttachmentsComponent,this.attachmentsModalRef)).cipherId=e.id,l=!1,s.onUploadedAttachment.subscribe((function(){return l=!0})),s.onDeletedAttachment.subscribe((function(){return l=!0})),s.onReuploadedAttachment.subscribe((function(){return l=!0})),this.modal.onClosed.subscribe((function(){return r(c,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.modal=null,l?[4,this.ciphersComponent.refresh()]:[3,2];case 1:e.sent(),e.label=2;case 2:return l=!1,[2]}}))}))})),[2]}}))}))},e.prototype.shareCipher=function(e){var t=this;null!=this.modal&&this.modal.close();var n=this.componentFactoryResolver.resolveComponentFactory(a.ModalComponent);this.modal=this.shareModalRef.createComponent(n).instance;var o=this.modal.show(f.ShareComponent,this.shareModalRef);o.cipherId=e.id,o.onSharedCipher.subscribe((function(){return r(t,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.modal.close(),[4,this.ciphersComponent.refresh()];case 1:return e.sent(),[2]}}))}))})),this.modal.onClosed.subscribe((function(){return r(t,void 0,void 0,(function(){return i(this,(function(e){return this.modal=null,[2]}))}))}))},e.prototype.editCipherCollections=function(e){var t=this;null!=this.modal&&this.modal.close();var n=this.componentFactoryResolver.resolveComponentFactory(a.ModalComponent);this.modal=this.collectionsModalRef.createComponent(n).instance;var o=this.modal.show(d.CollectionsComponent,this.collectionsModalRef);o.cipherId=e.id,o.onSavedCollections.subscribe((function(){return r(t,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.modal.close(),[4,this.ciphersComponent.refresh()];case 1:return e.sent(),[2]}}))}))})),this.modal.onClosed.subscribe((function(){return r(t,void 0,void 0,(function(){return i(this,(function(e){return this.modal=null,[2]}))}))}))},e.prototype.addFolder=function(){return r(this,void 0,void 0,(function(){var e,t,n=this;return i(this,(function(o){return null!=this.modal&&this.modal.close(),e=this.componentFactoryResolver.resolveComponentFactory(a.ModalComponent),this.modal=this.folderAddEditModalRef.createComponent(e).instance,(t=this.modal.show(m.FolderAddEditComponent,this.folderAddEditModalRef)).folderId=null,t.onSavedFolder.subscribe((function(){return r(n,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.modal.close(),[4,this.groupingsComponent.loadFolders()];case 1:return e.sent(),[2]}}))}))})),this.modal.onClosed.subscribe((function(){n.modal=null})),[2]}))}))},e.prototype.editFolder=function(e){return r(this,void 0,void 0,(function(){var t,n,o=this;return i(this,(function(s){return null!=this.modal&&this.modal.close(),t=this.componentFactoryResolver.resolveComponentFactory(a.ModalComponent),this.modal=this.folderAddEditModalRef.createComponent(t).instance,(n=this.modal.show(m.FolderAddEditComponent,this.folderAddEditModalRef)).folderId=e,n.onSavedFolder.subscribe((function(){return r(o,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.modal.close(),[4,this.groupingsComponent.loadFolders()];case 1:return e.sent(),[2]}}))}))})),n.onDeletedFolder.subscribe((function(){return r(o,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.modal.close(),[4,this.groupingsComponent.loadFolders()];case 1:return e.sent(),[4,this.filterFolder("none")];case 2:return e.sent(),this.groupingsComponent.selectedFolderId=null,[2]}}))}))})),this.modal.onClosed.subscribe((function(){o.modal=null})),[2]}))}))},e.prototype.addCipher=function(){var e=this,t=this.editCipher(null);if(t.type=this.type,t.folderId="none"===this.folderId?null:this.folderId,null!=this.collectionId){var n=this.groupingsComponent.collections.filter((function(t){return t.id===e.collectionId}));n.length>0&&(t.organizationId=n[0].organizationId,t.collectionIds=[this.collectionId])}},e.prototype.editCipher=function(e){var t=this;null!=this.modal&&this.modal.close();var n=this.componentFactoryResolver.resolveComponentFactory(a.ModalComponent);this.modal=this.cipherAddEditModalRef.createComponent(n).instance;var o=this.modal.show(c.AddEditComponent,this.cipherAddEditModalRef);return o.cipherId=null==e?null:e.id,o.onSavedCipher.subscribe((function(e){return r(t,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.modal.close(),[4,this.ciphersComponent.refresh()];case 1:return e.sent(),[2]}}))}))})),o.onDeletedCipher.subscribe((function(e){return r(t,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.modal.close(),[4,this.ciphersComponent.refresh()];case 1:return e.sent(),[2]}}))}))})),o.onRestoredCipher.subscribe((function(e){return r(t,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.modal.close(),[4,this.ciphersComponent.refresh()];case 1:return e.sent(),[2]}}))}))})),this.modal.onClosed.subscribe((function(){t.modal=null})),o},e.prototype.cloneCipher=function(e){this.editCipher(e).cloneMode=!0},e.prototype.updateKey=function(){var e=this;null!=this.modal&&this.modal.close();var t=this.componentFactoryResolver.resolveComponentFactory(a.ModalComponent);this.modal=this.updateKeyModalRef.createComponent(t).instance,this.modal.show(l.UpdateKeyComponent,this.updateKeyModalRef),this.modal.onClosed.subscribe((function(){e.modal=null}))},e.prototype.clearFilters=function(){this.folderId=null,this.collectionId=null,this.favorites=!1,this.type=null,this.deleted=!1},e.prototype.go=function(e){void 0===e&&(e=null),null==e&&(e={favorites:!!this.favorites||null,type:this.type,folderId:this.folderId,collectionId:this.collectionId,deleted:!!this.deleted||null}),this.router.navigate([],{relativeTo:this.route,queryParams:e,replaceUrl:!0})},e.ɵfac=function(t){return new(t||e)(v.ɵɵdirectiveInject(y.SyncService),v.ɵɵdirectiveInject(g.ActivatedRoute),v.ɵɵdirectiveInject(g.Router),v.ɵɵdirectiveInject(v.ChangeDetectorRef),v.ɵɵdirectiveInject(x.I18nService),v.ɵɵdirectiveInject(v.ComponentFactoryResolver),v.ɵɵdirectiveInject(b.TokenService),v.ɵɵdirectiveInject(S.CryptoService),v.ɵɵdirectiveInject(w.MessagingService),v.ɵɵdirectiveInject(C.UserService),v.ɵɵdirectiveInject(I.PlatformUtilsService),v.ɵɵdirectiveInject(E.BroadcasterService),v.ɵɵdirectiveInject(v.NgZone))},e.ɵcmp=v.ɵɵdefineComponent({type:e,selectors:[["app-vault"]],viewQuery:function(e,t){var n;(1&e&&(v.ɵɵstaticViewQuery(h.GroupingsComponent,!0),v.ɵɵstaticViewQuery(u.CiphersComponent,!0),v.ɵɵstaticViewQuery(s.OrganizationsComponent,!0),v.ɵɵstaticViewQuery(j,!0,o.ViewContainerRef),v.ɵɵstaticViewQuery(F,!0,o.ViewContainerRef),v.ɵɵstaticViewQuery(U,!0,o.ViewContainerRef),v.ɵɵstaticViewQuery(N,!0,o.ViewContainerRef),v.ɵɵstaticViewQuery(z,!0,o.ViewContainerRef),v.ɵɵstaticViewQuery(L,!0,o.ViewContainerRef)),2&e)&&(v.ɵɵqueryRefresh(n=v.ɵɵloadQuery())&&(t.groupingsComponent=n.first),v.ɵɵqueryRefresh(n=v.ɵɵloadQuery())&&(t.ciphersComponent=n.first),v.ɵɵqueryRefresh(n=v.ɵɵloadQuery())&&(t.organizationsComponent=n.first),v.ɵɵqueryRefresh(n=v.ɵɵloadQuery())&&(t.attachmentsModalRef=n.first),v.ɵɵqueryRefresh(n=v.ɵɵloadQuery())&&(t.folderAddEditModalRef=n.first),v.ɵɵqueryRefresh(n=v.ɵɵloadQuery())&&(t.cipherAddEditModalRef=n.first),v.ɵɵqueryRefresh(n=v.ɵɵloadQuery())&&(t.shareModalRef=n.first),v.ɵɵqueryRefresh(n=v.ɵɵloadQuery())&&(t.collectionsModalRef=n.first),v.ɵɵqueryRefresh(n=v.ɵɵloadQuery())&&(t.updateKeyModalRef=n.first))},decls:90,vars:21,consts:[[1,"container","page-content"],[1,"row"],[1,"col-3"],[3,"onAllClicked","onFavoritesClicked","onCipherTypeClicked","onFolderClicked","onAddFolder","onEditFolder","onCollectionClicked","onSearchTextChanged","onTrashClicked"],[1,"col-6"],[1,"page-header","d-flex"],[3,"appApiAction"],["actionSpinner",""],[4,"ngIf"],[1,"ml-auto","d-flex"],[3,"ciphersComponent","modal","deleted"],["type","button","class","btn btn-outline-primary btn-sm",3,"click",4,"ngIf"],["type","warning","icon","fa-warning",4,"ngIf"],[3,"onCipherClicked","onAttachmentsClicked","onAddCipher","onShareClicked","onCollectionsClicked","onCloneClicked"],["class","card border-warning mb-4",4,"ngIf"],["class","d-block mb-4",4,"ngIf"],[1,"d-block","mb-4"],["class","card border-success mb-4",4,"ngIf"],[1,"card"],[1,"card-header","d-flex"],["href","https://help.bitwarden.com/article/what-is-an-organization/","target","_blank","rel","noopener",1,"ml-auto",3,"appA11yTitle"],["aria-hidden","true",1,"fa","fa-question-circle-o"],[1,"card-body"],[3,"vault"],["attachments",""],["folderAddEdit",""],["cipherAddEdit",""],["share",""],["collections",""],["updateKeyTemplate",""],["aria-hidden","true",1,"fa","fa-spinner","fa-spin","text-muted",3,"title"],[1,"sr-only"],["type","button",1,"btn","btn-outline-primary","btn-sm",3,"click"],["aria-hidden","true",1,"fa","fa-plus","fa-fw"],["type","warning","icon","fa-warning"],[1,"card","border-warning","mb-4"],[1,"card-header","bg-warning","text-white"],["aria-hidden","true",1,"fa","fa-warning","fa-fw"],["type","button",1,"btn","btn-block","btn-outline-secondary",3,"click"],["target","_blank","href","https://browser-update.org/update-browser.html","rel","noopener",1,"btn","btn-block","btn-outline-secondary"],[1,"card","border-success","mb-4"],[1,"card-header","bg-success","text-white"],["aria-hidden","true",1,"fa","fa-star","fa-fw"],["routerLink","/settings/premium",1,"btn","btn-block","btn-outline-secondary"]],template:function(e,t){if(1&e&&(v.ɵɵelementStart(0,"div",0),v.ɵɵtext(1,"\n "),v.ɵɵelementStart(2,"div",1),v.ɵɵtext(3,"\n "),v.ɵɵelementStart(4,"div",2),v.ɵɵtext(5,"\n "),v.ɵɵelementStart(6,"app-vault-groupings",3),v.ɵɵlistener("onAllClicked",(function(){return t.clearGroupingFilters()}))("onFavoritesClicked",(function(){return t.filterFavorites()}))("onCipherTypeClicked",(function(e){return t.filterCipherType(e)}))("onFolderClicked",(function(e){return t.filterFolder(e.id)}))("onAddFolder",(function(){return t.addFolder()}))("onEditFolder",(function(e){return t.editFolder(e.id)}))("onCollectionClicked",(function(e){return t.filterCollection(e.id)}))("onSearchTextChanged",(function(e){return t.filterSearchText(e)}))("onTrashClicked",(function(){return t.filterDeleted()})),v.ɵɵtext(7,"\n "),v.ɵɵelementEnd(),v.ɵɵtext(8,"\n "),v.ɵɵelementEnd(),v.ɵɵtext(9,"\n "),v.ɵɵelementStart(10,"div",4),v.ɵɵtext(11,"\n "),v.ɵɵelementStart(12,"div",5),v.ɵɵtext(13,"\n "),v.ɵɵelementStart(14,"h1"),v.ɵɵtext(15),v.ɵɵpipe(16,"i18n"),v.ɵɵelementStart(17,"small",6,7),v.ɵɵtext(19,"\n "),v.ɵɵtemplate(20,G,9,6,"ng-container",8),v.ɵɵtext(21,"\n "),v.ɵɵelementEnd(),v.ɵɵtext(22,"\n "),v.ɵɵelementEnd(),v.ɵɵtext(23,"\n "),v.ɵɵelementStart(24,"div",9),v.ɵɵtext(25,"\n "),v.ɵɵelementStart(26,"app-vault-bulk-actions",10),v.ɵɵtext(27,"\n "),v.ɵɵelementEnd(),v.ɵɵtext(28,"\n "),v.ɵɵtemplate(29,K,5,3,"button",11),v.ɵɵtext(30,"\n "),v.ɵɵelementEnd(),v.ɵɵtext(31,"\n "),v.ɵɵelementEnd(),v.ɵɵtext(32,"\n "),v.ɵɵtemplate(33,q,2,1,"app-callout",12),v.ɵɵtext(34,"\n "),v.ɵɵelementStart(35,"app-vault-ciphers",13),v.ɵɵlistener("onCipherClicked",(function(e){return t.editCipher(e)}))("onAttachmentsClicked",(function(e){return t.editCipherAttachments(e)}))("onAddCipher",(function(){return t.addCipher()}))("onShareClicked",(function(e){return t.shareCipher(e)}))("onCollectionsClicked",(function(e){return t.editCipherCollections(e)}))("onCloneClicked",(function(e){return t.cloneCipher(e)})),v.ɵɵtext(36,"\n "),v.ɵɵelementEnd(),v.ɵɵtext(37,"\n "),v.ɵɵelementEnd(),v.ɵɵtext(38,"\n "),v.ɵɵelementStart(39,"div",2),v.ɵɵtext(40,"\n "),v.ɵɵtemplate(41,W,19,9,"div",14),v.ɵɵtext(42,"\n "),v.ɵɵtemplate(43,H,1,0,"app-verify-email",15),v.ɵɵtext(44,"\n "),v.ɵɵelement(45,"app-send-info",16),v.ɵɵtext(46,"\n "),v.ɵɵtemplate(47,$,19,9,"div",14),v.ɵɵtext(48,"\n "),v.ɵɵtemplate(49,Y,19,9,"div",17),v.ɵɵtext(50,"\n "),v.ɵɵelementStart(51,"div",18),v.ɵɵtext(52,"\n "),v.ɵɵelementStart(53,"div",19),v.ɵɵtext(54),v.ɵɵpipe(55,"i18n"),v.ɵɵelementStart(56,"a",20),v.ɵɵpipe(57,"i18n"),v.ɵɵtext(58,"\n "),v.ɵɵelement(59,"i",21),v.ɵɵtext(60,"\n "),v.ɵɵelementEnd(),v.ɵɵtext(61,"\n "),v.ɵɵelementEnd(),v.ɵɵtext(62,"\n "),v.ɵɵelementStart(63,"div",22),v.ɵɵtext(64,"\n "),v.ɵɵelement(65,"app-organizations",23),v.ɵɵtext(66,"\n "),v.ɵɵelementEnd(),v.ɵɵtext(67,"\n "),v.ɵɵelementEnd(),v.ɵɵtext(68,"\n "),v.ɵɵelementEnd(),v.ɵɵtext(69,"\n "),v.ɵɵelementEnd(),v.ɵɵtext(70,"\n"),v.ɵɵelementEnd(),v.ɵɵtext(71,"\n"),v.ɵɵtemplate(72,Q,0,0,"ng-template",null,24,v.ɵɵtemplateRefExtractor),v.ɵɵtext(74,"\n"),v.ɵɵtemplate(75,J,0,0,"ng-template",null,25,v.ɵɵtemplateRefExtractor),v.ɵɵtext(77,"\n"),v.ɵɵtemplate(78,X,0,0,"ng-template",null,26,v.ɵɵtemplateRefExtractor),v.ɵɵtext(80,"\n"),v.ɵɵtemplate(81,Z,0,0,"ng-template",null,27,v.ɵɵtemplateRefExtractor),v.ɵɵtext(83,"\n"),v.ɵɵtemplate(84,ee,0,0,"ng-template",null,28,v.ɵɵtemplateRefExtractor),v.ɵɵtext(86,"\n"),v.ɵɵtemplate(87,te,0,0,"ng-template",null,29,v.ɵɵtemplateRefExtractor),v.ɵɵtext(89,"\n")),2&e){var n=v.ɵɵreference(18);v.ɵɵadvance(15),v.ɵɵtextInterpolate1("\n ",v.ɵɵpipeBind1(16,15,"myVault"),"\n "),v.ɵɵadvance(2),v.ɵɵproperty("appApiAction",t.ciphersComponent.actionPromise),v.ɵɵadvance(3),v.ɵɵproperty("ngIf",n.loading),v.ɵɵadvance(6),v.ɵɵproperty("ciphersComponent",t.ciphersComponent)("modal",t.modal)("deleted",t.deleted),v.ɵɵadvance(3),v.ɵɵproperty("ngIf",!t.deleted),v.ɵɵadvance(4),v.ɵɵproperty("ngIf",t.deleted),v.ɵɵadvance(8),v.ɵɵproperty("ngIf",t.showUpdateKey),v.ɵɵadvance(2),v.ɵɵproperty("ngIf",t.showVerifyEmail),v.ɵɵadvance(4),v.ɵɵproperty("ngIf",t.showBrowserOutdated),v.ɵɵadvance(2),v.ɵɵproperty("ngIf",t.showPremiumCallout),v.ɵɵadvance(5),v.ɵɵtextInterpolate1("\n ",v.ɵɵpipeBind1(55,17,"organizations"),"\n "),v.ɵɵadvance(2),v.ɵɵpropertyInterpolate("appA11yTitle",v.ɵɵpipeBind1(57,19,"learnMore")),v.ɵɵadvance(9),v.ɵɵproperty("vault",!0)}},directives:[P.GroupingsComponent,k.ApiActionDirective,_.NgIf,A.BulkActionsComponent,O.CiphersComponent,T.SendInfoComponent,M.A11yTitleDirective,B.OrganizationsComponent,D.CalloutComponent,R.VerifyEmailComponent,g.RouterLinkWithHref],pipes:[V.I18nPipe],encapsulation:2}),e}();t.VaultComponent=ne},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]-1&&this.trustedContacts.splice(t,1)},e.prototype.removeGrantor=function(e){var t=this.grantedContacts.indexOf(e);t>-1&&this.grantedContacts.splice(t,1)},e.prototype.doConfirmation=function(e){return r(this,void 0,void 0,(function(){var t,n,r,o,a,s,p,u;return i(this,(function(i){switch(i.label){case 0:return[4,this.cryptoService.getEncKey()];case 1:return t=i.sent(),[4,this.apiService.getUserPublicKey(e.granteeId)];case 2:n=i.sent(),r=l.Utils.fromB64ToArray(n.publicKey),i.label=3;case 3:return i.trys.push([3,5,,6]),a=(o=console).log,s="User's fingerprint: ",[4,this.cryptoService.getFingerprint(e.granteeId,r.buffer)];case 4:return a.apply(o,[s+i.sent().join("-")]),[3,6];case 5:return i.sent(),[3,6];case 6:return[4,this.cryptoService.rsaEncrypt(t.key,r.buffer)];case 7:return p=i.sent(),(u=new c.EmergencyAccessConfirmRequest).key=p.encryptedString,[4,this.apiService.postEmergencyAccessConfirm(e.id,u)];case 8:return i.sent(),[2]}}))}))},e.ɵfac=function(t){return new(t||e)(v.ɵɵdirectiveInject(y.ApiService),v.ɵɵdirectiveInject(g.I18nService),v.ɵɵdirectiveInject(v.ComponentFactoryResolver),v.ɵɵdirectiveInject(x.PlatformUtilsService),v.ɵɵdirectiveInject(b.ToasterService),v.ɵɵdirectiveInject(S.CryptoService),v.ɵɵdirectiveInject(w.StorageService),v.ɵɵdirectiveInject(C.UserService),v.ɵɵdirectiveInject(I.MessagingService))},e.ɵcmp=v.ɵɵdefineComponent({type:e,selectors:[["emergency-access"]],viewQuery:function(e,t){var n;(1&e&&(v.ɵɵstaticViewQuery(T,!0,o.ViewContainerRef),v.ɵɵstaticViewQuery(M,!0,o.ViewContainerRef),v.ɵɵstaticViewQuery(B,!0,o.ViewContainerRef)),2&e)&&(v.ɵɵqueryRefresh(n=v.ɵɵloadQuery())&&(t.addEditModalRef=n.first),v.ɵɵqueryRefresh(n=v.ɵɵloadQuery())&&(t.takeoverModalRef=n.first),v.ɵɵqueryRefresh(n=v.ɵɵloadQuery())&&(t.confirmModalRef=n.first))},decls:59,vars:25,consts:[[1,"page-header"],["href","https://bitwarden.com/help/article/emergency-access/","target","_blank","rel","noopener"],[4,"ngIf"],[1,"page-header","d-flex"],["href","#","appStopClick","","class","badge badge-primary",3,"click",4,"ngIf"],[1,"ml-auto","d-flex"],["type","button",1,"btn","btn-sm","btn-outline-primary","ml-3",3,"disabled","click"],["aria-hidden","true",1,"fa","fa-plus","fa-fw"],["class","table table-hover table-list mb-0",4,"ngIf"],[1,"page-header","spaced-header"],["addEdit",""],["takeoverTemplate",""],["confirmTemplate",""],["href","#","appStopClick","",1,"badge","badge-primary",3,"click"],[1,"table","table-hover","table-list","mb-0"],[4,"ngFor","ngForOf"],["width","30"],["size","25",3,"data","email","circle","fontSize"],["href","#","appStopClick","",3,"click"],["class","badge badge-secondary",4,"ngIf"],["class","badge badge-warning",4,"ngIf"],["class","badge badge-success",4,"ngIf"],["class","badge badge-primary",4,"ngIf"],["class","text-muted d-block",4,"ngIf"],[1,"table-list-options"],["appListDropdown","",1,"dropdown"],["type","button","data-toggle","dropdown","aria-haspopup","true","aria-expanded","false",1,"btn","btn-outline-secondary","dropdown-toggle",3,"appA11yTitle"],["aria-hidden","true",1,"fa","fa-cog","fa-lg"],[1,"dropdown-menu","dropdown-menu-right"],["class","dropdown-item","href","#","appStopClick","",3,"click",4,"ngIf"],["class","dropdown-item text-success","href","#","appStopClick","",3,"click",4,"ngIf"],["class","dropdown-item text-warning","href","#","appStopClick","",3,"click",4,"ngIf"],["href","#","appStopClick","",1,"dropdown-item","text-danger",3,"click"],["aria-hidden","true",1,"fa","fa-fw","fa-remove"],[1,"badge","badge-secondary"],[1,"badge","badge-warning"],[1,"badge","badge-success"],[1,"badge","badge-primary"],[1,"text-muted","d-block"],["href","#","appStopClick","",1,"dropdown-item",3,"click"],["aria-hidden","true",1,"fa","fa-fw","fa-envelope-o"],["href","#","appStopClick","",1,"dropdown-item","text-success",3,"click"],["aria-hidden","true",1,"fa","fa-fw","fa-check"],["href","#","appStopClick","",1,"dropdown-item","text-warning",3,"click"],["class","dropdown-item",3,"routerLink",4,"ngIf"],["aria-hidden","true",1,"fa","fa-fw","fa-key"],[1,"dropdown-item",3,"routerLink"],["aria-hidden","true",1,"fa","fa-fw","fa-eye"]],template:function(e,t){1&e&&(v.ɵɵelementStart(0,"div",0),v.ɵɵtext(1,"\n "),v.ɵɵelementStart(2,"h1"),v.ɵɵtext(3),v.ɵɵpipe(4,"i18n"),v.ɵɵelementEnd(),v.ɵɵtext(5,"\n"),v.ɵɵelementEnd(),v.ɵɵtext(6,"\n"),v.ɵɵelementStart(7,"p"),v.ɵɵtext(8),v.ɵɵpipe(9,"i18n"),v.ɵɵelementStart(10,"a",1),v.ɵɵtext(11),v.ɵɵpipe(12,"i18n"),v.ɵɵelementEnd(),v.ɵɵtext(13,"\n"),v.ɵɵelementEnd(),v.ɵɵtext(14,"\n\n"),v.ɵɵtemplate(15,D,7,6,"p",2),v.ɵɵtext(16,"\n\n"),v.ɵɵelementStart(17,"div",3),v.ɵɵtext(18,"\n "),v.ɵɵelementStart(19,"h2"),v.ɵɵtext(20),v.ɵɵpipe(21,"i18n"),v.ɵɵtemplate(22,R,3,3,"a",4),v.ɵɵtext(23,"\n "),v.ɵɵelementEnd(),v.ɵɵtext(24,"\n "),v.ɵɵelementStart(25,"div",5),v.ɵɵtext(26,"\n "),v.ɵɵelementStart(27,"button",6),v.ɵɵlistener("click",(function(){return t.invite()})),v.ɵɵtext(28,"\n "),v.ɵɵelement(29,"i",7),v.ɵɵtext(30),v.ɵɵpipe(31,"i18n"),v.ɵɵelementEnd(),v.ɵɵtext(32,"\n "),v.ɵɵelementEnd(),v.ɵɵtext(33,"\n"),v.ɵɵelementEnd(),v.ɵɵtext(34,"\n\n"),v.ɵɵtemplate(35,$,7,1,"table",8),v.ɵɵtext(36,"\n\n"),v.ɵɵtemplate(37,Y,3,3,"p",2),v.ɵɵtext(38,"\n\n"),v.ɵɵelementStart(39,"div",9),v.ɵɵtext(40,"\n "),v.ɵɵelementStart(41,"h2"),v.ɵɵtext(42),v.ɵɵpipe(43,"i18n"),v.ɵɵelementEnd(),v.ɵɵtext(44,"\n"),v.ɵɵelementEnd(),v.ɵɵtext(45,"\n\n"),v.ɵɵtemplate(46,se,7,1,"table",8),v.ɵɵtext(47,"\n\n"),v.ɵɵtemplate(48,le,3,3,"p",2),v.ɵɵtext(49,"\n\n"),v.ɵɵtemplate(50,ce,0,0,"ng-template",null,10,v.ɵɵtemplateRefExtractor),v.ɵɵtext(52,"\n"),v.ɵɵtemplate(53,pe,0,0,"ng-template",null,11,v.ɵɵtemplateRefExtractor),v.ɵɵtext(55,"\n"),v.ɵɵtemplate(56,ue,0,0,"ng-template",null,12,v.ɵɵtemplateRefExtractor),v.ɵɵtext(58,"\n")),2&e&&(v.ɵɵadvance(3),v.ɵɵtextInterpolate(v.ɵɵpipeBind1(4,13,"emergencyAccess")),v.ɵɵadvance(5),v.ɵɵtextInterpolate1("\n ",v.ɵɵpipeBind1(9,15,"emergencyAccessDesc"),"\n "),v.ɵɵadvance(3),v.ɵɵtextInterpolate1("\n ",v.ɵɵpipeBind1(12,17,"learnMore"),".\n "),v.ɵɵadvance(4),v.ɵɵproperty("ngIf",t.isOrganizationOwner),v.ɵɵadvance(5),v.ɵɵtextInterpolate1("\n ",v.ɵɵpipeBind1(21,19,"trustedEmergencyContacts"),"\n "),v.ɵɵadvance(2),v.ɵɵproperty("ngIf",!t.canAccessPremium),v.ɵɵadvance(5),v.ɵɵproperty("disabled",!t.canAccessPremium),v.ɵɵadvance(3),v.ɵɵtextInterpolate1("\n ",v.ɵɵpipeBind1(31,21,"addEmergencyContact"),"\n "),v.ɵɵadvance(5),v.ɵɵproperty("ngIf",t.trustedContacts&&t.trustedContacts.length),v.ɵɵadvance(2),v.ɵɵproperty("ngIf",!t.trustedContacts||!t.trustedContacts.length),v.ɵɵadvance(5),v.ɵɵtextInterpolate(v.ɵɵpipeBind1(43,23,"designatedEmergencyContacts")),v.ɵɵadvance(4),v.ɵɵproperty("ngIf",t.grantedContacts&&t.grantedContacts.length),v.ɵɵadvance(2),v.ɵɵproperty("ngIf",!t.grantedContacts||!t.grantedContacts.length))},directives:[E.NgIf,P.StopClickDirective,E.NgForOf,k.AvatarComponent,_.A11yTitleDirective,A.RouterLinkWithHref],pipes:[O.I18nPipe],encapsulation:2}),e}();t.EmergencyAccessComponent=de},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.View=0]="View",e[e.Takeover=1]="Takeover"}(t.EmergencyAccessType||(t.EmergencyAccessType={}))},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(23),a=n(262),s=function(e){function t(t){var n=e.call(this,t)||this;return n.id=n.getResponseProperty("Id"),n.granteeId=n.getResponseProperty("GranteeId"),n.name=n.getResponseProperty("Name"),n.email=n.getResponseProperty("Email"),n.type=n.getResponseProperty("Type"),n.status=n.getResponseProperty("Status"),n.waitTimeDays=n.getResponseProperty("WaitTimeDays"),n.creationDate=n.getResponseProperty("CreationDate"),n}return i(t,e),t}(o.BaseResponse);t.EmergencyAccessGranteeDetailsResponse=s;var l=function(e){function t(t){var n=e.call(this,t)||this;return n.id=n.getResponseProperty("Id"),n.grantorId=n.getResponseProperty("GrantorId"),n.name=n.getResponseProperty("Name"),n.email=n.getResponseProperty("Email"),n.type=n.getResponseProperty("Type"),n.status=n.getResponseProperty("Status"),n.waitTimeDays=n.getResponseProperty("WaitTimeDays"),n.creationDate=n.getResponseProperty("CreationDate"),n}return i(t,e),t}(o.BaseResponse);t.EmergencyAccessGrantorDetailsResponse=l;var c=function(e){function t(t){var n=e.call(this,t)||this;return n.keyEncrypted=n.getResponseProperty("KeyEncrypted"),n.kdf=n.getResponseProperty("Kdf"),n.kdfIterations=n.getResponseProperty("KdfIterations"),n}return i(t,e),t}(o.BaseResponse);t.EmergencyAccessTakeoverResponse=c;var p=function(e){function t(t){var n=e.call(this,t)||this;n.ciphers=[],n.keyEncrypted=n.getResponseProperty("KeyEncrypted");var r=n.getResponseProperty("Ciphers");return null!=r&&(n.ciphers=r.map((function(e){return new a.CipherResponse(e)}))),n}return i(t,e),t}(o.BaseResponse);t.EmergencyAccessViewResponse=p},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0),m.ɵɵadvance(2),m.ɵɵproperty("ngIf",(null==n.enforcedPolicyOptions?null:n.enforcedPolicyOptions.minLength)>0),m.ɵɵadvance(2),m.ɵɵproperty("ngIf",null==n.enforcedPolicyOptions?null:n.enforcedPolicyOptions.requireUpper),m.ɵɵadvance(2),m.ɵɵproperty("ngIf",null==n.enforcedPolicyOptions?null:n.enforcedPolicyOptions.requireLower),m.ɵɵadvance(2),m.ɵɵproperty("ngIf",null==n.enforcedPolicyOptions?null:n.enforcedPolicyOptions.requireNumbers),m.ɵɵadvance(2),m.ɵɵproperty("ngIf",null==n.enforcedPolicyOptions?null:n.enforcedPolicyOptions.requireSpecial)}}var U=function(e){function t(t,n,r,i,o,a,l,c,p){var u=e.call(this,t,n,r,i,o,a,l)||this;return u.apiService=c,u.toasterService=p,u.onDone=new s.EventEmitter,u}return i(t,e),t.prototype.ngOnInit=function(){return o(this,void 0,void 0,(function(){var e,t,n;return a(this,(function(r){switch(r.label){case 0:return[4,this.apiService.getEmergencyGrantorPolicies(this.emergencyAccessId)];case 1:return null!=(e=r.sent()).data&&e.data.length>0?(t=e.data.map((function(e){return new p.Policy(new c.PolicyData(e))})),n=this,[4,this.policyService.getMasterPasswordPolicyOptions(t)]):[3,3];case 2:n.enforcedPolicyOptions=r.sent(),r.label=3;case 3:return[2]}}))}))},t.prototype.submit=function(){return o(this,void 0,void 0,(function(){var e,t,n,r,i,o,s;return a(this,(function(a){switch(a.label){case 0:return[4,this.strongPassword()];case 1:return a.sent()?[4,this.apiService.postEmergencyAccessTakeover(this.emergencyAccessId)]:[2];case 2:return e=a.sent(),[4,this.cryptoService.rsaDecrypt(e.keyEncrypted)];case 3:return t=a.sent(),null==(n=new u.SymmetricCryptoKey(t))?(this.toasterService.popAsync("error",this.i18nService.t("errorOccurred"),this.i18nService.t("unexpectedError")),[2]):[4,this.cryptoService.makeKey(this.masterPassword,this.email,e.kdf,e.kdfIterations)];case 4:return r=a.sent(),[4,this.cryptoService.hashPassword(this.masterPassword,r)];case 5:return i=a.sent(),[4,this.cryptoService.remakeEncKey(r,n)];case 6:o=a.sent(),(s=new d.EmergencyAccessPasswordRequest).newMasterPasswordHash=i,s.key=o[1].encryptedString,this.apiService.postEmergencyAccessPassword(this.emergencyAccessId,s);try{this.onDone.emit()}catch(l){}return[2]}}))}))},t.ɵfac=function(e){return new(e||t)(m.ɵɵdirectiveInject(h.I18nService),m.ɵɵdirectiveInject(f.CryptoService),m.ɵɵdirectiveInject(v.MessagingService),m.ɵɵdirectiveInject(y.UserService),m.ɵɵdirectiveInject(g.PasswordGenerationService),m.ɵɵdirectiveInject(x.PlatformUtilsService),m.ɵɵdirectiveInject(b.PolicyService),m.ɵɵdirectiveInject(S.ApiService),m.ɵɵdirectiveInject(w.ToasterService))},t.ɵcmp=m.ɵɵdefineComponent({type:t,selectors:[["emergency-access-takeover"]],inputs:{emergencyAccessId:"emergencyAccessId",name:"name",email:"email",kdf:"kdf",kdfIterations:"kdfIterations"},outputs:{onDone:"onDone"},features:[m.ɵɵInheritDefinitionFeature],decls:81,vars:32,consts:[["tabindex","-1","role","dialog","aria-modal","true","aria-labelledby","userAddEditTitle",1,"modal","fade"],["role","document",1,"modal-dialog","modal-lg"],["ngNativeValidate","",1,"modal-content",3,"appApiAction","ngSubmit"],["form",""],[1,"modal-header"],["id","userAddEditTitle",1,"modal-title"],["class","text-muted",4,"ngIf"],["type","button","data-dismiss","modal",1,"close",3,"appA11yTitle"],["aria-hidden","true"],[1,"modal-body"],["type","warning"],["type","info",4,"ngIf"],[1,"row"],[1,"col-6"],[1,"form-group"],["for","masterPassword"],["id","masterPassword","type","password","name","NewMasterPasswordHash","required","","appInputVerbatim","","autocomplete","new-password",1,"form-control","mb-1",3,"ngModel","ngModelChange","input"],[3,"score","showText"],["for","masterPasswordRetype"],["id","masterPasswordRetype","type","password","name","MasterPasswordRetype","required","","appInputVerbatim","","autocomplete","new-password",1,"form-control",3,"ngModel","ngModelChange"],[1,"modal-footer"],["type","submit",1,"btn","btn-primary","btn-submit",3,"disabled"],["aria-hidden","true",1,"fa","fa-spinner","fa-spin",3,"title"],["type","button","data-dismiss","modal",1,"btn","btn-outline-secondary"],[1,"text-muted"],["type","info"],[1,"mb-0"],[4,"ngIf"]],template:function(e,t){if(1&e&&(m.ɵɵelementStart(0,"div",0),m.ɵɵtext(1,"\n "),m.ɵɵelementStart(2,"div",1),m.ɵɵtext(3,"\n "),m.ɵɵelementStart(4,"form",2,3),m.ɵɵlistener("ngSubmit",(function(){return t.submit()})),m.ɵɵtext(6,"\n "),m.ɵɵelementStart(7,"div",4),m.ɵɵtext(8,"\n "),m.ɵɵelementStart(9,"h2",5),m.ɵɵtext(10),m.ɵɵpipe(11,"i18n"),m.ɵɵtemplate(12,T,2,1,"small",6),m.ɵɵtext(13,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(14,"\n "),m.ɵɵelementStart(15,"button",7),m.ɵɵpipe(16,"i18n"),m.ɵɵtext(17,"\n "),m.ɵɵelementStart(18,"span",8),m.ɵɵtext(19,"×"),m.ɵɵelementEnd(),m.ɵɵtext(20,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(21,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(22,"\n "),m.ɵɵelementStart(23,"div",9),m.ɵɵtext(24,"\n "),m.ɵɵelementStart(25,"app-callout",10),m.ɵɵtext(26),m.ɵɵpipe(27,"i18n"),m.ɵɵelementEnd(),m.ɵɵtext(28,"\n "),m.ɵɵtemplate(29,F,18,9,"app-callout",11),m.ɵɵtext(30,"\n "),m.ɵɵelementStart(31,"div",12),m.ɵɵtext(32,"\n "),m.ɵɵelementStart(33,"div",13),m.ɵɵtext(34,"\n "),m.ɵɵelementStart(35,"div",14),m.ɵɵtext(36,"\n "),m.ɵɵelementStart(37,"label",15),m.ɵɵtext(38),m.ɵɵpipe(39,"i18n"),m.ɵɵelementEnd(),m.ɵɵtext(40,"\n "),m.ɵɵelementStart(41,"input",16),m.ɵɵlistener("ngModelChange",(function(e){return t.masterPassword=e}))("input",(function(){return t.updatePasswordStrength()})),m.ɵɵelementEnd(),m.ɵɵtext(42,"\n "),m.ɵɵelement(43,"app-password-strength",17),m.ɵɵtext(44,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(45,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(46,"\n "),m.ɵɵelementStart(47,"div",13),m.ɵɵtext(48,"\n "),m.ɵɵelementStart(49,"div",14),m.ɵɵtext(50,"\n "),m.ɵɵelementStart(51,"label",18),m.ɵɵtext(52),m.ɵɵpipe(53,"i18n"),m.ɵɵelementEnd(),m.ɵɵtext(54,"\n "),m.ɵɵelementStart(55,"input",19),m.ɵɵlistener("ngModelChange",(function(e){return t.masterPasswordRetype=e})),m.ɵɵelementEnd(),m.ɵɵtext(56,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(57,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(58,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(59,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(60,"\n "),m.ɵɵelementStart(61,"div",20),m.ɵɵtext(62,"\n "),m.ɵɵelementStart(63,"button",21),m.ɵɵtext(64,"\n "),m.ɵɵelement(65,"i",22),m.ɵɵpipe(66,"i18n"),m.ɵɵtext(67,"\n "),m.ɵɵelementStart(68,"span"),m.ɵɵtext(69),m.ɵɵpipe(70,"i18n"),m.ɵɵelementEnd(),m.ɵɵtext(71,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(72,"\n "),m.ɵɵelementStart(73,"button",23),m.ɵɵtext(74),m.ɵɵpipe(75,"i18n"),m.ɵɵelementEnd(),m.ɵɵtext(76,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(77,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(78,"\n "),m.ɵɵelementEnd(),m.ɵɵtext(79,"\n"),m.ɵɵelementEnd(),m.ɵɵtext(80,"\n")),2&e){var n=m.ɵɵreference(5);m.ɵɵadvance(4),m.ɵɵproperty("appApiAction",t.formPromise),m.ɵɵadvance(6),m.ɵɵtextInterpolate1("\n ",m.ɵɵpipeBind1(11,16,"takeover"),"\n "),m.ɵɵadvance(2),m.ɵɵproperty("ngIf",t.name),m.ɵɵadvance(3),m.ɵɵpropertyInterpolate("appA11yTitle",m.ɵɵpipeBind1(16,18,"close")),m.ɵɵadvance(11),m.ɵɵtextInterpolate(m.ɵɵpipeBind1(27,20,"loggedOutWarning")),m.ɵɵadvance(3),m.ɵɵproperty("ngIf",t.enforcedPolicyOptions),m.ɵɵadvance(9),m.ɵɵtextInterpolate(m.ɵɵpipeBind1(39,22,"newMasterPass")),m.ɵɵadvance(3),m.ɵɵproperty("ngModel",t.masterPassword),m.ɵɵadvance(2),m.ɵɵproperty("score",t.masterPasswordScore)("showText",!0),m.ɵɵadvance(9),m.ɵɵtextInterpolate(m.ɵɵpipeBind1(53,24,"confirmNewMasterPass")),m.ɵɵadvance(3),m.ɵɵproperty("ngModel",t.masterPasswordRetype),m.ɵɵadvance(8),m.ɵɵproperty("disabled",n.loading),m.ɵɵadvance(2),m.ɵɵpropertyInterpolate("title",m.ɵɵpipeBind1(66,26,"loading")),m.ɵɵadvance(4),m.ɵɵtextInterpolate(m.ɵɵpipeBind1(70,28,"save")),m.ɵɵadvance(5),m.ɵɵtextInterpolate(m.ɵɵpipeBind1(75,30,"cancel"))}},directives:[C.NgControlStatusGroup,C.NgForm,I.ApiActionDirective,E.NgIf,P.A11yTitleDirective,k.CalloutComponent,C.DefaultValueAccessor,C.RequiredValidator,_.InputVerbatimDirective,C.NgControlStatus,C.NgModel,A.PasswordStrengthComponent],pipes:[O.I18nPipe],encapsulation:2}),t}(l.ChangePasswordComponent);t.EmergencyAccessTakeoverComponent=U},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]-1?"&":"?",e+="end="+n),null!=r&&(e+=e.indexOf("?")>-1?"&":"?",e+="continuationToken="+r),e},e.prototype.isJsonResponse=function(e){var t=e.headers.get("content-type");return null!=t&&t.indexOf("application/json")>-1},e.prototype.isTextResponse=function(e){var t=e.headers.get("content-type");return null!=t&&t.indexOf("text")>-1},e}();t.ApiService=Y},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(23),a=n(684),s=function(e){function t(t){var n=e.call(this,t)||this;n.id=n.getResponseProperty("Id"),n.identifier=n.getResponseProperty("Identifier"),n.name=n.getResponseProperty("Name"),n.businessName=n.getResponseProperty("BusinessName"),n.businessAddress1=n.getResponseProperty("BusinessAddress1"),n.businessAddress2=n.getResponseProperty("BusinessAddress2"),n.businessAddress3=n.getResponseProperty("BusinessAddress3"),n.businessCountry=n.getResponseProperty("BusinessCountry"),n.businessTaxNumber=n.getResponseProperty("BusinessTaxNumber"),n.billingEmail=n.getResponseProperty("BillingEmail");var r=n.getResponseProperty("Plan");return n.plan=null==r?null:new a.PlanResponse(r),n.planType=n.getResponseProperty("PlanType"),n.seats=n.getResponseProperty("Seats"),n.maxCollections=n.getResponseProperty("MaxCollections"),n.maxStorageGb=n.getResponseProperty("MaxStorageGb"),n.useGroups=n.getResponseProperty("UseGroups"),n.useDirectory=n.getResponseProperty("UseDirectory"),n.useEvents=n.getResponseProperty("UseEvents"),n.useTotp=n.getResponseProperty("UseTotp"),n.use2fa=n.getResponseProperty("Use2fa"),n.useApi=n.getResponseProperty("UseApi"),n}return i(t,e),t}(o.BaseResponse);t.OrganizationResponse=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(t){var n=e.call(this,t)||this;return n.type=n.getResponseProperty("Type"),n.product=n.getResponseProperty("Product"),n.name=n.getResponseProperty("Name"),n.isAnnual=n.getResponseProperty("IsAnnual"),n.nameLocalizationKey=n.getResponseProperty("NameLocalizationKey"),n.descriptionLocalizationKey=n.getResponseProperty("DescriptionLocalizationKey"),n.canBeUsedByBusiness=n.getResponseProperty("CanBeUsedByBusiness"),n.baseSeats=n.getResponseProperty("BaseSeats"),n.baseStorageGb=n.getResponseProperty("BaseStorageGb"),n.maxCollections=n.getResponseProperty("MaxCollections"),n.maxUsers=n.getResponseProperty("MaxUsers"),n.hasAdditionalSeatsOption=n.getResponseProperty("HasAdditionalSeatsOption"),n.maxAdditionalSeats=n.getResponseProperty("MaxAdditionalSeats"),n.hasAdditionalStorageOption=n.getResponseProperty("HasAdditionalStorageOption"),n.maxAdditionalStorage=n.getResponseProperty("MaxAdditionalStorage"),n.hasPremiumAccessOption=n.getResponseProperty("HasPremiumAccessOption"),n.trialPeriodDays=n.getResponseProperty("TrialPeriodDays"),n.hasSelfHost=n.getResponseProperty("HasSelfHost"),n.hasPolicies=n.getResponseProperty("HasPolicies"),n.hasGroups=n.getResponseProperty("HasGroups"),n.hasDirectory=n.getResponseProperty("HasDirectory"),n.hasEvents=n.getResponseProperty("HasEvents"),n.hasTotp=n.getResponseProperty("HasTotp"),n.has2fa=n.getResponseProperty("Has2fa"),n.hasApi=n.getResponseProperty("HasApi"),n.hasSso=n.getResponseProperty("HasSso"),n.usersGetPremium=n.getResponseProperty("UsersGetPremium"),n.upgradeSortOrder=n.getResponseProperty("UpgradeSortOrder"),n.displaySortOrder=n.getResponseProperty("SortOrder"),n.legacyYear=n.getResponseProperty("LegacyYear"),n.disabled=n.getResponseProperty("Disabled"),n.stripePlanId=n.getResponseProperty("StripePlanId"),n.stripeSeatPlanId=n.getResponseProperty("StripeSeatPlanId"),n.stripeStoragePlanId=n.getResponseProperty("StripeStoragePlanId"),n.stripePremiumAccessPlanId=n.getResponseProperty("StripePremiumAccessPlanId"),n.basePrice=n.getResponseProperty("BasePrice"),n.seatPrice=n.getResponseProperty("SeatPrice"),n.additionalStoragePricePerGb=n.getResponseProperty("AdditionalStoragePricePerGb"),n.premiumAccessOptionPrice=n.getResponseProperty("PremiumAccessOptionPrice"),n}return i(t,e),t}(n(23).BaseResponse);t.PlanResponse=o},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(23),a=function(e){function t(t){var n=e.call(this,t)||this;n.storageName=n.getResponseProperty("StorageName"),n.storageGb=n.getResponseProperty("StorageGb"),n.maxStorageGb=n.getResponseProperty("MaxStorageGb"),n.license=n.getResponseProperty("License"),n.expiration=n.getResponseProperty("Expiration"),n.usingInAppPurchase=n.getResponseProperty("UsingInAppPurchase");var r=n.getResponseProperty("Subscription"),i=n.getResponseProperty("UpcomingInvoice");return n.subscription=null==r?null:new s(r),n.upcomingInvoice=null==i?null:new c(i),n}return i(t,e),t}(o.BaseResponse);t.SubscriptionResponse=a;var s=function(e){function t(t){var n=e.call(this,t)||this;n.items=[],n.trialEndDate=n.getResponseProperty("TrialStartDate"),n.trialEndDate=n.getResponseProperty("TrialEndDate"),n.periodStartDate=n.getResponseProperty("PeriodStartDate"),n.periodEndDate=n.getResponseProperty("PeriodEndDate"),n.cancelledDate=n.getResponseProperty("CancelledDate"),n.cancelAtEndDate=n.getResponseProperty("CancelAtEndDate"),n.status=n.getResponseProperty("Status"),n.cancelled=n.getResponseProperty("Cancelled");var r=n.getResponseProperty("Items");return null!=r&&(n.items=r.map((function(e){return new l(e)}))),n}return i(t,e),t}(o.BaseResponse);t.BillingSubscriptionResponse=s;var l=function(e){function t(t){var n=e.call(this,t)||this;return n.name=n.getResponseProperty("Name"),n.amount=n.getResponseProperty("Amount"),n.quantity=n.getResponseProperty("Quantity"),n.interval=n.getResponseProperty("Interval"),n}return i(t,e),t}(o.BaseResponse);t.BillingSubscriptionItemResponse=l;var c=function(e){function t(t){var n=e.call(this,t)||this;return n.date=n.getResponseProperty("Date"),n.amount=n.getResponseProperty("Amount"),n}return i(t,e),t}(o.BaseResponse);t.BillingSubscriptionUpcomingInvoiceResponse=c},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(30),a=n(23),s=function(e){function t(t){var n=e.call(this,t)||this;n.enabled=n.getResponseProperty("Enabled");var r=n.getResponseProperty("Keys");return n.keys=null==r?null:r.map((function(e){return new l(e)})),n}return i(t,e),t}(a.BaseResponse);t.TwoFactorWebAuthnResponse=s;var l=function(e){function t(t){var n=e.call(this,t)||this;return n.name=n.getResponseProperty("Name"),n.id=n.getResponseProperty("Id"),n.migrated=n.getResponseProperty("Migrated"),n}return i(t,e),t}(a.BaseResponse);t.KeyResponse=l;var c=function(e){function t(t){var n=e.call(this,t)||this;n.attestation=n.getResponseProperty("attestation"),n.authenticatorSelection=n.getResponseProperty("authenticatorSelection"),n.challenge=o.Utils.fromUrlB64ToArray(n.getResponseProperty("challenge")),n.excludeCredentials=n.getResponseProperty("excludeCredentials").map((function(e){return e.id=o.Utils.fromUrlB64ToArray(e.id).buffer,e})),n.extensions=n.getResponseProperty("extensions"),n.pubKeyCredParams=n.getResponseProperty("pubKeyCredParams"),n.rp=n.getResponseProperty("rp"),n.timeout=n.getResponseProperty("timeout");var r=n.getResponseProperty("user");return r.id=o.Utils.fromUrlB64ToArray(r.id),n.user=r,n}return i(t,e),t}(a.BaseResponse);t.ChallengeResponse=c},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=0;s--)(i=e[s])&&(a=(o<3?i(a):o>3?i(t,n,a):i(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a},i=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},o=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},a=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=0;s--)(i=e[s])&&(a=(o<3?i(a):o>3?i(t,n,a):i(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a},i=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},o=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},a=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]5&&(e.passwordHistory=e.passwordHistory.slice(0,5)),a.label=5;case 5:return(p=new m.Cipher).id=e.id,p.folderId=e.folderId,p.favorite=e.favorite,p.organizationId=e.organizationId,p.type=e.type,p.collectionIds=e.collectionIds,p.revisionDate=e.revisionDate,null!=t||null==p.organizationId?[3,7]:[4,this.cryptoService.getOrgKey(p.organizationId)];case 6:if(null==(t=a.sent()))throw new Error("Cannot encrypt cipher for organization. No key.");a.label=7;case 7:return[4,Promise.all([this.encryptObjProperty(e,p,{name:null,notes:null},t),this.encryptCipherData(p,e,t),this.encryptFields(e.fields,t).then((function(e){p.fields=e})),this.encryptPasswordHistories(e.passwordHistory,t).then((function(e){p.passwordHistory=e})),this.encryptAttachments(e.attachments,t).then((function(e){p.attachments=e}))])];case 8:return a.sent(),[2,p]}}))}))},t.prototype.encryptAttachments=function(e,t){return o(this,void 0,void 0,(function(){var n,r,i=this;return a(this,(function(s){switch(s.label){case 0:return null==e||0===e.length?[2,null]:(n=[],r=[],e.forEach((function(e){return o(i,void 0,void 0,(function(){var i,s,l=this;return a(this,(function(c){return(i=new u.Attachment).id=e.id,i.size=e.size,i.sizeName=e.sizeName,i.url=e.url,s=this.encryptObjProperty(e,i,{fileName:null},t).then((function(){return o(l,void 0,void 0,(function(){var n;return a(this,(function(o){switch(o.label){case 0:return null==e.key?[3,2]:(n=i,[4,this.cryptoService.encrypt(e.key.key,t)]);case 1:n.key=o.sent(),o.label=2;case 2:return r.push(i),[2]}}))}))})),n.push(s),[2]}))}))})),[4,Promise.all(n)]);case 1:return s.sent(),[2,r]}}))}))},t.prototype.encryptFields=function(e,t){return o(this,void 0,void 0,(function(){var n,r;return a(this,(function(i){switch(i.label){case 0:return e&&e.length?(n=this,r=[],[4,e.reduce((function(e,i){return e.then((function(){return n.encryptField(i,t)})).then((function(e){r.push(e)}))}),Promise.resolve())]):[2,null];case 1:return i.sent(),[2,r]}}))}))},t.prototype.encryptField=function(e,t){return o(this,void 0,void 0,(function(){var n;return a(this,(function(r){switch(r.label){case 0:return(n=new h.Field).type=e.type,e.type===l.FieldType.Boolean&&"true"!==e.value&&(e.value="false"),[4,this.encryptObjProperty(e,n,{name:null,value:null},t)];case 1:return r.sent(),[2,n]}}))}))},t.prototype.encryptPasswordHistories=function(e,t){return o(this,void 0,void 0,(function(){var n,r;return a(this,(function(i){switch(i.label){case 0:return e&&e.length?(n=this,r=[],[4,e.reduce((function(e,i){return e.then((function(){return n.encryptPasswordHistory(i,t)})).then((function(e){r.push(e)}))}),Promise.resolve())]):[2,null];case 1:return i.sent(),[2,r]}}))}))},t.prototype.encryptPasswordHistory=function(e,t){return o(this,void 0,void 0,(function(){var n;return a(this,(function(r){switch(r.label){case 0:return(n=new g.Password).lastUsedDate=e.lastUsedDate,[4,this.encryptObjProperty(e,n,{password:null},t)];case 1:return r.sent(),[2,n]}}))}))},t.prototype.get=function(e){return o(this,void 0,void 0,(function(){var t,n,r;return a(this,(function(i){switch(i.label){case 0:return[4,this.userService.getUserId()];case 1:return t=i.sent(),[4,this.storageService.get(R)];case 2:return n=i.sent(),[4,this.storageService.get(D+t)];case 3:return null!=(r=i.sent())&&r.hasOwnProperty(e)?[2,new m.Cipher(r[e],!1,n?n[e]:null)]:[2,null]}}))}))},t.prototype.getAll=function(){return o(this,void 0,void 0,(function(){var e,t,n,r,i;return a(this,(function(o){switch(o.label){case 0:return[4,this.userService.getUserId()];case 1:return e=o.sent(),[4,this.storageService.get(R)];case 2:return t=o.sent(),[4,this.storageService.get(D+e)];case 3:for(i in n=o.sent(),r=[],n)n.hasOwnProperty(i)&&r.push(new m.Cipher(n[i],!1,t?t[i]:null));return[2,r]}}))}))},t.prototype.getAllDecrypted=function(){var e;return o(this,void 0,void 0,(function(){var t,n,r;return a(this,(function(i){switch(i.label){case 0:return null==this.decryptedCipherCache?[3,4]:[4,this.userService.getUserId()];case 1:return t=i.sent(),(null!==(e=this.searchService().indexedEntityId)&&void 0!==e?e:t)===t?[3,3]:[4,this.searchService().indexCiphers(t,this.decryptedCipherCache)];case 2:i.sent(),i.label=3;case 3:return[2,this.decryptedCipherCache];case 4:return n=[],[4,this.cryptoService.hasKey()];case 5:if(!i.sent())throw new Error("No key.");return r=[],[4,this.getAll()];case 6:return i.sent().forEach((function(e){r.push(e.decrypt().then((function(e){return n.push(e)})))})),[4,Promise.all(r)];case 7:return i.sent(),n.sort(this.getLocaleSortingFunction()),this.decryptedCipherCache=n,[2,this.decryptedCipherCache]}}))}))},t.prototype.getAllDecryptedForGrouping=function(e,t){return void 0===t&&(t=!0),o(this,void 0,void 0,(function(){return a(this,(function(n){switch(n.label){case 0:return[4,this.getAllDecrypted()];case 1:return[2,n.sent().filter((function(n){return!n.isDeleted&&(!(!t||n.folderId!==e)||!t&&null!=n.collectionIds&&n.collectionIds.indexOf(e)>-1)}))]}}))}))},t.prototype.getAllDecryptedForUrl=function(e,t,n){return void 0===n&&(n=null),o(this,void 0,void 0,(function(){var r,i,o,l,p;return a(this,(function(a){switch(a.label){case 0:return null==e&&null==t?[2,Promise.resolve([])]:(r=B.Utils.getDomain(e),i=null==r?Promise.resolve([]):this.settingsService.getEquivalentDomains().then((function(e){var t=[];return e.forEach((function(e){e.length&&e.indexOf(r)>=0&&(t=t.concat(e))})),t.length||t.push(r),t})),[4,Promise.all([i,this.getAllDecrypted()])]);case 1:return o=a.sent(),l=o[0],p=o[1],null!=n?[3,3]:[4,this.storageService.get(T.ConstantsService.defaultUriMatch)];case 2:null==(n=a.sent())&&(n=c.UriMatchType.Domain),a.label=3;case 3:return[2,p.filter((function(i){if(null!=i.deletedDate)return!1;if(null!=t&&t.indexOf(i.type)>-1)return!0;if(null!=e&&i.type===s.CipherType.Login&&null!=i.login.uris)for(var o=0;o-1){if(!j.has(p.domain))return!0;var u=B.Utils.getHost(e);if(!j.get(p.domain).has(u))return!0}break;case c.UriMatchType.Host:var d=B.Utils.getHost(e);if(null!=d&&d===B.Utils.getHost(p.uri))return!0;break;case c.UriMatchType.Exact:if(e===p.uri)return!0;break;case c.UriMatchType.StartsWith:if(e.startsWith(p.uri))return!0;break;case c.UriMatchType.RegularExpression:try{if(new RegExp(p.uri,"i").test(e))return!0}catch(a){}break;case c.UriMatchType.Never:}}return!1}))]}}))}))},t.prototype.getAllFromApiForOrganization=function(e){return o(this,void 0,void 0,(function(){var t,n,r;return a(this,(function(i){switch(i.label){case 0:return[4,this.apiService.getCiphersOrganization(e)];case 1:return null!=(t=i.sent())&&null!=t.data&&t.data.length?(n=[],r=[],t.data.forEach((function(e){var t=new p.CipherData(e),i=new m.Cipher(t);r.push(i.decrypt().then((function(e){return n.push(e)})))})),[4,Promise.all(r)]):[3,3];case 2:return i.sent(),n.sort(this.getLocaleSortingFunction()),[2,n];case 3:return[2,[]]}}))}))},t.prototype.getLastUsedForUrl=function(e){return o(this,void 0,void 0,(function(){return a(this,(function(t){return[2,this.getCipherForUrl(e,!0,!1)]}))}))},t.prototype.getLastLaunchedForUrl=function(e){return o(this,void 0,void 0,(function(){return a(this,(function(t){return[2,this.getCipherForUrl(e,!1,!0)]}))}))},t.prototype.getNextCipherForUrl=function(e){return o(this,void 0,void 0,(function(){return a(this,(function(t){return[2,this.getCipherForUrl(e,!1,!1)]}))}))},t.prototype.updateLastUsedIndexForUrl=function(e){this.sortedCiphersCache.updateLastUsedIndex(e)},t.prototype.updateLastUsedDate=function(e){return o(this,void 0,void 0,(function(){var t,n,r;return a(this,(function(i){switch(i.label){case 0:return[4,this.storageService.get(R)];case 1:return(t=i.sent())||(t={}),t[e]?t[e].lastUsedDate=(new Date).getTime():t[e]={lastUsedDate:(new Date).getTime()},[4,this.storageService.save(R,t)];case 2:if(i.sent(),null==this.decryptedCipherCache)return[2];for(n=0;nr?-1:null!=r&&null==n?1:0},t.prototype.sortCiphersByLastUsedThenName=function(e,t){var n=this.sortCiphersByLastUsed(e,t);return 0!==n?n:this.getLocaleSortingFunction()(e,t)},t.prototype.getLocaleSortingFunction=function(){var e=this;return function(t,n){var r=t.name,i=n.name;if(null==r&&null!=i)return-1;if(null!=r&&null==i)return 1;if(null==r&&null==i)return 0;var o=e.i18nService.collator?e.i18nService.collator.compare(r,i):r.localeCompare(i);return 0!==o||t.type!==s.CipherType.Login||n.type!==s.CipherType.Login?o:(null!=t.login.username&&(r+=t.login.username),null!=n.login.username&&(i+=n.login.username),e.i18nService.collator?e.i18nService.collator.compare(r,i):r.localeCompare(i))}},t.prototype.softDelete=function(e){return o(this,void 0,void 0,(function(){var t,n,r;return a(this,(function(i){switch(i.label){case 0:return[4,this.userService.getUserId()];case 1:return t=i.sent(),[4,this.storageService.get(D+t)];case 2:return null==(n=i.sent())?[2]:(r=function(e){null!=n[e]&&(n[e].deletedDate=(new Date).toISOString())},"string"==typeof e?r(e):e.forEach(r),[4,this.storageService.save(D+t,n)]);case 3:return i.sent(),this.decryptedCipherCache=null,[2]}}))}))},t.prototype.softDeleteWithServer=function(e){return o(this,void 0,void 0,(function(){return a(this,(function(t){switch(t.label){case 0:return[4,this.apiService.putDeleteCipher(e)];case 1:return t.sent(),[4,this.softDelete(e)];case 2:return t.sent(),[2]}}))}))},t.prototype.softDeleteManyWithServer=function(e){return o(this,void 0,void 0,(function(){return a(this,(function(t){switch(t.label){case 0:return[4,this.apiService.putDeleteManyCiphers(new b.CipherBulkDeleteRequest(e))];case 1:return t.sent(),[4,this.softDelete(e)];case 2:return t.sent(),[2]}}))}))},t.prototype.restore=function(e){return o(this,void 0,void 0,(function(){var t,n,r;return a(this,(function(i){switch(i.label){case 0:return[4,this.userService.getUserId()];case 1:return t=i.sent(),[4,this.storageService.get(D+t)];case 2:return null==(n=i.sent())?[2]:(r=function(e){null!=n[e.id]&&(n[e.id].deletedDate=null,n[e.id].revisionDate=e.revisionDate)},"Array"===e.constructor.name?e.forEach(r):r(e),[4,this.storageService.save(D+t,n)]);case 3:return i.sent(),this.decryptedCipherCache=null,[2]}}))}))},t.prototype.restoreWithServer=function(e){return o(this,void 0,void 0,(function(){var t;return a(this,(function(n){switch(n.label){case 0:return[4,this.apiService.putRestoreCipher(e)];case 1:return t=n.sent(),[4,this.restore({id:e,revisionDate:t.revisionDate})];case 2:return n.sent(),[2]}}))}))},t.prototype.restoreManyWithServer=function(e){return o(this,void 0,void 0,(function(){var t,n,r,i,o;return a(this,(function(a){switch(a.label){case 0:return[4,this.apiService.putRestoreManyCiphers(new w.CipherBulkRestoreRequest(e))];case 1:for(t=a.sent(),n=[],r=0,i=t.data;r0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=0;s--)(i=e[s])&&(a=(o<3?i(a):o>3?i(t,n,a):i(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a},i=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},o=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},a=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0?[2,this.orgKeys]:[4,this.storageService.get(x)];case 1:if(null==(e=a.sent()))return[2,null];for(i in t=new Map,n=!1,r=[],e)r.push(i);o=0,a.label=2;case 2:return o53)throw new Error("We cannot generate numbers larger than 53 bits.");return o=Math.ceil(i/8),s=Math.pow(2,i)-1,c=Uint8Array.bind,[4,this.cryptoFunctionService.randomBytes(o)];case 1:for(l=new(c.apply(Uint8Array,[void 0,a.sent()])),p=8*(o-1),u=0;u=r?[2,this.randomNumber(e,t)]:[2,e+n]}}))}))},e.prototype.aesEncrypt=function(e,t){return o(this,void 0,void 0,(function(){var n,r,i,o,s,l;return a(this,(function(a){switch(a.label){case 0:return n=new u.EncryptedObject,r=n,[4,this.getKeyForEncryption(t)];case 1:return r.key=a.sent(),i=n,[4,this.cryptoFunctionService.randomBytes(16)];case 2:return i.iv=a.sent(),o=n,[4,this.cryptoFunctionService.aesEncrypt(e,n.iv,n.key.encKey)];case 3:return o.data=a.sent(),null==n.key.macKey?[3,5]:((s=new Uint8Array(n.iv.byteLength+n.data.byteLength)).set(new Uint8Array(n.iv),0),s.set(new Uint8Array(n.data),n.iv.byteLength),l=n,[4,this.cryptoFunctionService.hmac(s.buffer,n.key.macKey,"sha256")]);case 4:l.mac=a.sent(),a.label=5;case 5:return[2,n]}}))}))},e.prototype.aesDecryptToUtf8=function(e,t,n,r,i){return o(this,void 0,void 0,(function(){var o,s,l,c;return a(this,(function(a){switch(a.label){case 0:return[4,this.getKeyForEncryption(i)];case 1:return o=a.sent(),null!=(s=this.resolveLegacyKey(e,o)).macKey&&null==r?(this.logService.error("mac required."),[2,null]):s.encType!==e?(this.logService.error("encType unavailable."),[2,null]):null==(l=this.cryptoFunctionService.aesDecryptFastParameters(t,n,r,s)).macKey||null==l.mac?[3,4]:[4,this.cryptoFunctionService.hmacFast(l.macData,l.macKey,"sha256")];case 2:return c=a.sent(),[4,this.cryptoFunctionService.compareFast(l.mac,c)];case 3:if(!a.sent())return this.logService.error("mac failed."),[2,null];a.label=4;case 4:return[2,this.cryptoFunctionService.aesDecryptFast(l)]}}))}))},e.prototype.aesDecryptToBytes=function(e,t,n,r,i){return o(this,void 0,void 0,(function(){var o,s,l,c;return a(this,(function(a){switch(a.label){case 0:return[4,this.getKeyForEncryption(i)];case 1:return o=a.sent(),null!=(s=this.resolveLegacyKey(e,o)).macKey&&null==r?[2,null]:s.encType!==e?[2,null]:null==s.macKey||null==r?[3,4]:((l=new Uint8Array(n.byteLength+t.byteLength)).set(new Uint8Array(n),0),l.set(new Uint8Array(t),n.byteLength),[4,this.cryptoFunctionService.hmac(l.buffer,s.macKey,"sha256")]);case 2:return null===(c=a.sent())?[2,null]:[4,this.cryptoFunctionService.compare(r,c)];case 3:if(!a.sent())return this.logService.error("mac failed."),[2,null];a.label=4;case 4:return[4,this.cryptoFunctionService.aesDecrypt(t,n,s.encKey)];case 5:return[2,a.sent()]}}))}))},e.prototype.getKeyForEncryption=function(e){return o(this,void 0,void 0,(function(){var t;return a(this,(function(n){switch(n.label){case 0:return null!=e?[2,e]:[4,this.getEncKey()];case 1:return null!=(t=n.sent())?[2,t]:[4,this.getKey()];case 2:return[2,n.sent()]}}))}))},e.prototype.resolveLegacyKey=function(e,t){return e===l.EncryptionType.AesCbc128_HmacSha256_B64&&t.encType===l.EncryptionType.AesCbc256_B64?(null==this.legacyEtmKey&&(this.legacyEtmKey=new m.SymmetricCryptoKey(t.key,l.EncryptionType.AesCbc128_HmacSha256_B64)),this.legacyEtmKey):t},e.prototype.stretchKey=function(e){return o(this,void 0,void 0,(function(){var t,n,r;return a(this,(function(i){switch(i.label){case 0:return t=new Uint8Array(64),[4,this.cryptoFunctionService.hkdfExpand(e.key,"enc",32,"sha256")];case 1:return n=i.sent(),[4,this.cryptoFunctionService.hkdfExpand(e.key,"mac",32,"sha256")];case 2:return r=i.sent(),t.set(new Uint8Array(n)),t.set(new Uint8Array(r),32),[2,new m.SymmetricCryptoKey(t.buffer)]}}))}))},e.prototype.hashPhrase=function(e,t){return void 0===t&&(t=64),o(this,void 0,void 0,(function(){var n,r,i,o,l,c,p;return a(this,(function(a){if(n=Math.log(y.EEFLongWordList.length)/Math.log(2),r=Math.ceil(t/n),i=Array.from(new Uint8Array(e)),o=4*i.length,r*n>o)throw new Error("Output entropy of hash function is too small");for(l=[],c=s.fromArray(i,256);r--;)p=c.mod(y.EEFLongWordList.length),c=c.divide(y.EEFLongWordList.length),l.push(y.EEFLongWordList[p]);return[2,l]}))}))},e.prototype.buildEncKey=function(e,t){return o(this,void 0,void 0,(function(){var n,r;return a(this,(function(i){switch(i.label){case 0:return n=null,32!==e.key.byteLength?[3,3]:[4,this.stretchKey(e)];case 1:return r=i.sent(),[4,this.encrypt(t,r)];case 2:return n=i.sent(),[3,6];case 3:return 64!==e.key.byteLength?[3,5]:[4,this.encrypt(t,e)];case 4:return n=i.sent(),[3,6];case 5:throw new Error("Invalid key size.");case 6:return[2,[new m.SymmetricCryptoKey(t),n]]}}))}))},r([f.sequentialize((function(){return"getEncKey"})),i("design:type",Function),i("design:paramtypes",[m.SymmetricCryptoKey]),i("design:returntype",Promise)],e.prototype,"getEncKey",null),r([f.sequentialize((function(){return"getOrgKeys"})),i("design:type",Function),i("design:paramtypes",[]),i("design:returntype",Promise)],e.prototype,"getOrgKeys",null),e}();t.CryptoService=C},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EEFLongWordList=["abacus","abdomen","abdominal","abide","abiding","ability","ablaze","able","abnormal","abrasion","abrasive","abreast","abridge","abroad","abruptly","absence","absentee","absently","absinthe","absolute","absolve","abstain","abstract","absurd","accent","acclaim","acclimate","accompany","account","accuracy","accurate","accustom","acetone","achiness","aching","acid","acorn","acquaint","acquire","acre","acrobat","acronym","acting","action","activate","activator","active","activism","activist","activity","actress","acts","acutely","acuteness","aeration","aerobics","aerosol","aerospace","afar","affair","affected","affecting","affection","affidavit","affiliate","affirm","affix","afflicted","affluent","afford","affront","aflame","afloat","aflutter","afoot","afraid","afterglow","afterlife","aftermath","aftermost","afternoon","aged","ageless","agency","agenda","agent","aggregate","aghast","agile","agility","aging","agnostic","agonize","agonizing","agony","agreeable","agreeably","agreed","agreeing","agreement","aground","ahead","ahoy","aide","aids","aim","ajar","alabaster","alarm","albatross","album","alfalfa","algebra","algorithm","alias","alibi","alienable","alienate","aliens","alike","alive","alkaline","alkalize","almanac","almighty","almost","aloe","aloft","aloha","alone","alongside","aloof","alphabet","alright","although","altitude","alto","aluminum","alumni","always","amaretto","amaze","amazingly","amber","ambiance","ambiguity","ambiguous","ambition","ambitious","ambulance","ambush","amendable","amendment","amends","amenity","amiable","amicably","amid","amigo","amino","amiss","ammonia","ammonium","amnesty","amniotic","among","amount","amperage","ample","amplifier","amplify","amply","amuck","amulet","amusable","amused","amusement","amuser","amusing","anaconda","anaerobic","anagram","anatomist","anatomy","anchor","anchovy","ancient","android","anemia","anemic","aneurism","anew","angelfish","angelic","anger","angled","angler","angles","angling","angrily","angriness","anguished","angular","animal","animate","animating","animation","animator","anime","animosity","ankle","annex","annotate","announcer","annoying","annually","annuity","anointer","another","answering","antacid","antarctic","anteater","antelope","antennae","anthem","anthill","anthology","antibody","antics","antidote","antihero","antiquely","antiques","antiquity","antirust","antitoxic","antitrust","antiviral","antivirus","antler","antonym","antsy","anvil","anybody","anyhow","anymore","anyone","anyplace","anything","anytime","anyway","anywhere","aorta","apache","apostle","appealing","appear","appease","appeasing","appendage","appendix","appetite","appetizer","applaud","applause","apple","appliance","applicant","applied","apply","appointee","appraisal","appraiser","apprehend","approach","approval","approve","apricot","april","apron","aptitude","aptly","aqua","aqueduct","arbitrary","arbitrate","ardently","area","arena","arguable","arguably","argue","arise","armadillo","armband","armchair","armed","armful","armhole","arming","armless","armoire","armored","armory","armrest","army","aroma","arose","around","arousal","arrange","array","arrest","arrival","arrive","arrogance","arrogant","arson","art","ascend","ascension","ascent","ascertain","ashamed","ashen","ashes","ashy","aside","askew","asleep","asparagus","aspect","aspirate","aspire","aspirin","astonish","astound","astride","astrology","astronaut","astronomy","astute","atlantic","atlas","atom","atonable","atop","atrium","atrocious","atrophy","attach","attain","attempt","attendant","attendee","attention","attentive","attest","attic","attire","attitude","attractor","attribute","atypical","auction","audacious","audacity","audible","audibly","audience","audio","audition","augmented","august","authentic","author","autism","autistic","autograph","automaker","automated","automatic","autopilot","available","avalanche","avatar","avenge","avenging","avenue","average","aversion","avert","aviation","aviator","avid","avoid","await","awaken","award","aware","awhile","awkward","awning","awoke","awry","axis","babble","babbling","babied","baboon","backache","backboard","backboned","backdrop","backed","backer","backfield","backfire","backhand","backing","backlands","backlash","backless","backlight","backlit","backlog","backpack","backpedal","backrest","backroom","backshift","backside","backslid","backspace","backspin","backstab","backstage","backtalk","backtrack","backup","backward","backwash","backwater","backyard","bacon","bacteria","bacterium","badass","badge","badland","badly","badness","baffle","baffling","bagel","bagful","baggage","bagged","baggie","bagginess","bagging","baggy","bagpipe","baguette","baked","bakery","bakeshop","baking","balance","balancing","balcony","balmy","balsamic","bamboo","banana","banish","banister","banjo","bankable","bankbook","banked","banker","banking","banknote","bankroll","banner","bannister","banshee","banter","barbecue","barbed","barbell","barber","barcode","barge","bargraph","barista","baritone","barley","barmaid","barman","barn","barometer","barrack","barracuda","barrel","barrette","barricade","barrier","barstool","bartender","barterer","bash","basically","basics","basil","basin","basis","basket","batboy","batch","bath","baton","bats","battalion","battered","battering","battery","batting","battle","bauble","bazooka","blabber","bladder","blade","blah","blame","blaming","blanching","blandness","blank","blaspheme","blasphemy","blast","blatancy","blatantly","blazer","blazing","bleach","bleak","bleep","blemish","blend","bless","blighted","blimp","bling","blinked","blinker","blinking","blinks","blip","blissful","blitz","blizzard","bloated","bloating","blob","blog","bloomers","blooming","blooper","blot","blouse","blubber","bluff","bluish","blunderer","blunt","blurb","blurred","blurry","blurt","blush","blustery","boaster","boastful","boasting","boat","bobbed","bobbing","bobble","bobcat","bobsled","bobtail","bodacious","body","bogged","boggle","bogus","boil","bok","bolster","bolt","bonanza","bonded","bonding","bondless","boned","bonehead","boneless","bonelike","boney","bonfire","bonnet","bonsai","bonus","bony","boogeyman","boogieman","book","boondocks","booted","booth","bootie","booting","bootlace","bootleg","boots","boozy","borax","boring","borough","borrower","borrowing","boss","botanical","botanist","botany","botch","both","bottle","bottling","bottom","bounce","bouncing","bouncy","bounding","boundless","bountiful","bovine","boxcar","boxer","boxing","boxlike","boxy","breach","breath","breeches","breeching","breeder","breeding","breeze","breezy","brethren","brewery","brewing","briar","bribe","brick","bride","bridged","brigade","bright","brilliant","brim","bring","brink","brisket","briskly","briskness","bristle","brittle","broadband","broadcast","broaden","broadly","broadness","broadside","broadways","broiler","broiling","broken","broker","bronchial","bronco","bronze","bronzing","brook","broom","brought","browbeat","brownnose","browse","browsing","bruising","brunch","brunette","brunt","brush","brussels","brute","brutishly","bubble","bubbling","bubbly","buccaneer","bucked","bucket","buckle","buckshot","buckskin","bucktooth","buckwheat","buddhism","buddhist","budding","buddy","budget","buffalo","buffed","buffer","buffing","buffoon","buggy","bulb","bulge","bulginess","bulgur","bulk","bulldog","bulldozer","bullfight","bullfrog","bullhorn","bullion","bullish","bullpen","bullring","bullseye","bullwhip","bully","bunch","bundle","bungee","bunion","bunkbed","bunkhouse","bunkmate","bunny","bunt","busboy","bush","busily","busload","bust","busybody","buzz","cabana","cabbage","cabbie","cabdriver","cable","caboose","cache","cackle","cacti","cactus","caddie","caddy","cadet","cadillac","cadmium","cage","cahoots","cake","calamari","calamity","calcium","calculate","calculus","caliber","calibrate","calm","caloric","calorie","calzone","camcorder","cameo","camera","camisole","camper","campfire","camping","campsite","campus","canal","canary","cancel","candied","candle","candy","cane","canine","canister","cannabis","canned","canning","cannon","cannot","canola","canon","canopener","canopy","canteen","canyon","capable","capably","capacity","cape","capillary","capital","capitol","capped","capricorn","capsize","capsule","caption","captivate","captive","captivity","capture","caramel","carat","caravan","carbon","cardboard","carded","cardiac","cardigan","cardinal","cardstock","carefully","caregiver","careless","caress","caretaker","cargo","caring","carless","carload","carmaker","carnage","carnation","carnival","carnivore","carol","carpenter","carpentry","carpool","carport","carried","carrot","carrousel","carry","cartel","cartload","carton","cartoon","cartridge","cartwheel","carve","carving","carwash","cascade","case","cash","casing","casino","casket","cassette","casually","casualty","catacomb","catalog","catalyst","catalyze","catapult","cataract","catatonic","catcall","catchable","catcher","catching","catchy","caterer","catering","catfight","catfish","cathedral","cathouse","catlike","catnap","catnip","catsup","cattail","cattishly","cattle","catty","catwalk","caucasian","caucus","causal","causation","cause","causing","cauterize","caution","cautious","cavalier","cavalry","caviar","cavity","cedar","celery","celestial","celibacy","celibate","celtic","cement","census","ceramics","ceremony","certainly","certainty","certified","certify","cesarean","cesspool","chafe","chaffing","chain","chair","chalice","challenge","chamber","chamomile","champion","chance","change","channel","chant","chaos","chaperone","chaplain","chapped","chaps","chapter","character","charbroil","charcoal","charger","charging","chariot","charity","charm","charred","charter","charting","chase","chasing","chaste","chastise","chastity","chatroom","chatter","chatting","chatty","cheating","cheddar","cheek","cheer","cheese","cheesy","chef","chemicals","chemist","chemo","cherisher","cherub","chess","chest","chevron","chevy","chewable","chewer","chewing","chewy","chief","chihuahua","childcare","childhood","childish","childless","childlike","chili","chill","chimp","chip","chirping","chirpy","chitchat","chivalry","chive","chloride","chlorine","choice","chokehold","choking","chomp","chooser","choosing","choosy","chop","chosen","chowder","chowtime","chrome","chubby","chuck","chug","chummy","chump","chunk","churn","chute","cider","cilantro","cinch","cinema","cinnamon","circle","circling","circular","circulate","circus","citable","citadel","citation","citizen","citric","citrus","city","civic","civil","clad","claim","clambake","clammy","clamor","clamp","clamshell","clang","clanking","clapped","clapper","clapping","clarify","clarinet","clarity","clash","clasp","class","clatter","clause","clavicle","claw","clay","clean","clear","cleat","cleaver","cleft","clench","clergyman","clerical","clerk","clever","clicker","client","climate","climatic","cling","clinic","clinking","clip","clique","cloak","clobber","clock","clone","cloning","closable","closure","clothes","clothing","cloud","clover","clubbed","clubbing","clubhouse","clump","clumsily","clumsy","clunky","clustered","clutch","clutter","coach","coagulant","coastal","coaster","coasting","coastland","coastline","coat","coauthor","cobalt","cobbler","cobweb","cocoa","coconut","cod","coeditor","coerce","coexist","coffee","cofounder","cognition","cognitive","cogwheel","coherence","coherent","cohesive","coil","coke","cola","cold","coleslaw","coliseum","collage","collapse","collar","collected","collector","collide","collie","collision","colonial","colonist","colonize","colony","colossal","colt","coma","come","comfort","comfy","comic","coming","comma","commence","commend","comment","commerce","commode","commodity","commodore","common","commotion","commute","commuting","compacted","compacter","compactly","compactor","companion","company","compare","compel","compile","comply","component","composed","composer","composite","compost","composure","compound","compress","comprised","computer","computing","comrade","concave","conceal","conceded","concept","concerned","concert","conch","concierge","concise","conclude","concrete","concur","condense","condiment","condition","condone","conducive","conductor","conduit","cone","confess","confetti","confidant","confident","confider","confiding","configure","confined","confining","confirm","conflict","conform","confound","confront","confused","confusing","confusion","congenial","congested","congrats","congress","conical","conjoined","conjure","conjuror","connected","connector","consensus","consent","console","consoling","consonant","constable","constant","constrain","constrict","construct","consult","consumer","consuming","contact","container","contempt","contend","contented","contently","contents","contest","context","contort","contour","contrite","control","contusion","convene","convent","copartner","cope","copied","copier","copilot","coping","copious","copper","copy","coral","cork","cornball","cornbread","corncob","cornea","corned","corner","cornfield","cornflake","cornhusk","cornmeal","cornstalk","corny","coronary","coroner","corporal","corporate","corral","correct","corridor","corrode","corroding","corrosive","corsage","corset","cortex","cosigner","cosmetics","cosmic","cosmos","cosponsor","cost","cottage","cotton","couch","cough","could","countable","countdown","counting","countless","country","county","courier","covenant","cover","coveted","coveting","coyness","cozily","coziness","cozy","crabbing","crabgrass","crablike","crabmeat","cradle","cradling","crafter","craftily","craftsman","craftwork","crafty","cramp","cranberry","crane","cranial","cranium","crank","crate","crave","craving","crawfish","crawlers","crawling","crayfish","crayon","crazed","crazily","craziness","crazy","creamed","creamer","creamlike","crease","creasing","creatable","create","creation","creative","creature","credible","credibly","credit","creed","creme","creole","crepe","crept","crescent","crested","cresting","crestless","crevice","crewless","crewman","crewmate","crib","cricket","cried","crier","crimp","crimson","cringe","cringing","crinkle","crinkly","crisped","crisping","crisply","crispness","crispy","criteria","critter","croak","crock","crook","croon","crop","cross","crouch","crouton","crowbar","crowd","crown","crucial","crudely","crudeness","cruelly","cruelness","cruelty","crumb","crummiest","crummy","crumpet","crumpled","cruncher","crunching","crunchy","crusader","crushable","crushed","crusher","crushing","crust","crux","crying","cryptic","crystal","cubbyhole","cube","cubical","cubicle","cucumber","cuddle","cuddly","cufflink","culinary","culminate","culpable","culprit","cultivate","cultural","culture","cupbearer","cupcake","cupid","cupped","cupping","curable","curator","curdle","cure","curfew","curing","curled","curler","curliness","curling","curly","curry","curse","cursive","cursor","curtain","curtly","curtsy","curvature","curve","curvy","cushy","cusp","cussed","custard","custodian","custody","customary","customer","customize","customs","cut","cycle","cyclic","cycling","cyclist","cylinder","cymbal","cytoplasm","cytoplast","dab","dad","daffodil","dagger","daily","daintily","dainty","dairy","daisy","dallying","dance","dancing","dandelion","dander","dandruff","dandy","danger","dangle","dangling","daredevil","dares","daringly","darkened","darkening","darkish","darkness","darkroom","darling","darn","dart","darwinism","dash","dastardly","data","datebook","dating","daughter","daunting","dawdler","dawn","daybed","daybreak","daycare","daydream","daylight","daylong","dayroom","daytime","dazzler","dazzling","deacon","deafening","deafness","dealer","dealing","dealmaker","dealt","dean","debatable","debate","debating","debit","debrief","debtless","debtor","debug","debunk","decade","decaf","decal","decathlon","decay","deceased","deceit","deceiver","deceiving","december","decency","decent","deception","deceptive","decibel","decidable","decimal","decimeter","decipher","deck","declared","decline","decode","decompose","decorated","decorator","decoy","decrease","decree","dedicate","dedicator","deduce","deduct","deed","deem","deepen","deeply","deepness","deface","defacing","defame","default","defeat","defection","defective","defendant","defender","defense","defensive","deferral","deferred","defiance","defiant","defile","defiling","define","definite","deflate","deflation","deflator","deflected","deflector","defog","deforest","defraud","defrost","deftly","defuse","defy","degraded","degrading","degrease","degree","dehydrate","deity","dejected","delay","delegate","delegator","delete","deletion","delicacy","delicate","delicious","delighted","delirious","delirium","deliverer","delivery","delouse","delta","deluge","delusion","deluxe","demanding","demeaning","demeanor","demise","democracy","democrat","demote","demotion","demystify","denatured","deniable","denial","denim","denote","dense","density","dental","dentist","denture","deny","deodorant","deodorize","departed","departure","depict","deplete","depletion","deplored","deploy","deport","depose","depraved","depravity","deprecate","depress","deprive","depth","deputize","deputy","derail","deranged","derby","derived","desecrate","deserve","deserving","designate","designed","designer","designing","deskbound","desktop","deskwork","desolate","despair","despise","despite","destiny","destitute","destruct","detached","detail","detection","detective","detector","detention","detergent","detest","detonate","detonator","detoxify","detract","deuce","devalue","deviancy","deviant","deviate","deviation","deviator","device","devious","devotedly","devotee","devotion","devourer","devouring","devoutly","dexterity","dexterous","diabetes","diabetic","diabolic","diagnoses","diagnosis","diagram","dial","diameter","diaper","diaphragm","diary","dice","dicing","dictate","dictation","dictator","difficult","diffused","diffuser","diffusion","diffusive","dig","dilation","diligence","diligent","dill","dilute","dime","diminish","dimly","dimmed","dimmer","dimness","dimple","diner","dingbat","dinghy","dinginess","dingo","dingy","dining","dinner","diocese","dioxide","diploma","dipped","dipper","dipping","directed","direction","directive","directly","directory","direness","dirtiness","disabled","disagree","disallow","disarm","disarray","disaster","disband","disbelief","disburse","discard","discern","discharge","disclose","discolor","discount","discourse","discover","discuss","disdain","disengage","disfigure","disgrace","dish","disinfect","disjoin","disk","dislike","disliking","dislocate","dislodge","disloyal","dismantle","dismay","dismiss","dismount","disobey","disorder","disown","disparate","disparity","dispatch","dispense","dispersal","dispersed","disperser","displace","display","displease","disposal","dispose","disprove","dispute","disregard","disrupt","dissuade","distance","distant","distaste","distill","distinct","distort","distract","distress","district","distrust","ditch","ditto","ditzy","dividable","divided","dividend","dividers","dividing","divinely","diving","divinity","divisible","divisibly","division","divisive","divorcee","dizziness","dizzy","doable","docile","dock","doctrine","document","dodge","dodgy","doily","doing","dole","dollar","dollhouse","dollop","dolly","dolphin","domain","domelike","domestic","dominion","dominoes","donated","donation","donator","donor","donut","doodle","doorbell","doorframe","doorknob","doorman","doormat","doornail","doorpost","doorstep","doorstop","doorway","doozy","dork","dormitory","dorsal","dosage","dose","dotted","doubling","douche","dove","down","dowry","doze","drab","dragging","dragonfly","dragonish","dragster","drainable","drainage","drained","drainer","drainpipe","dramatic","dramatize","drank","drapery","drastic","draw","dreaded","dreadful","dreadlock","dreamboat","dreamily","dreamland","dreamless","dreamlike","dreamt","dreamy","drearily","dreary","drench","dress","drew","dribble","dried","drier","drift","driller","drilling","drinkable","drinking","dripping","drippy","drivable","driven","driver","driveway","driving","drizzle","drizzly","drone","drool","droop","drop-down","dropbox","dropkick","droplet","dropout","dropper","drove","drown","drowsily","drudge","drum","dry","dubbed","dubiously","duchess","duckbill","ducking","duckling","ducktail","ducky","duct","dude","duffel","dugout","duh","duke","duller","dullness","duly","dumping","dumpling","dumpster","duo","dupe","duplex","duplicate","duplicity","durable","durably","duration","duress","during","dusk","dust","dutiful","duty","duvet","dwarf","dweeb","dwelled","dweller","dwelling","dwindle","dwindling","dynamic","dynamite","dynasty","dyslexia","dyslexic","each","eagle","earache","eardrum","earflap","earful","earlobe","early","earmark","earmuff","earphone","earpiece","earplugs","earring","earshot","earthen","earthlike","earthling","earthly","earthworm","earthy","earwig","easeful","easel","easiest","easily","easiness","easing","eastbound","eastcoast","easter","eastward","eatable","eaten","eatery","eating","eats","ebay","ebony","ebook","ecard","eccentric","echo","eclair","eclipse","ecologist","ecology","economic","economist","economy","ecosphere","ecosystem","edge","edginess","edging","edgy","edition","editor","educated","education","educator","eel","effective","effects","efficient","effort","eggbeater","egging","eggnog","eggplant","eggshell","egomaniac","egotism","egotistic","either","eject","elaborate","elastic","elated","elbow","eldercare","elderly","eldest","electable","election","elective","elephant","elevate","elevating","elevation","elevator","eleven","elf","eligible","eligibly","eliminate","elite","elitism","elixir","elk","ellipse","elliptic","elm","elongated","elope","eloquence","eloquent","elsewhere","elude","elusive","elves","email","embargo","embark","embassy","embattled","embellish","ember","embezzle","emblaze","emblem","embody","embolism","emboss","embroider","emcee","emerald","emergency","emission","emit","emote","emoticon","emotion","empathic","empathy","emperor","emphases","emphasis","emphasize","emphatic","empirical","employed","employee","employer","emporium","empower","emptier","emptiness","empty","emu","enable","enactment","enamel","enchanted","enchilada","encircle","enclose","enclosure","encode","encore","encounter","encourage","encroach","encrust","encrypt","endanger","endeared","endearing","ended","ending","endless","endnote","endocrine","endorphin","endorse","endowment","endpoint","endurable","endurance","enduring","energetic","energize","energy","enforced","enforcer","engaged","engaging","engine","engorge","engraved","engraver","engraving","engross","engulf","enhance","enigmatic","enjoyable","enjoyably","enjoyer","enjoying","enjoyment","enlarged","enlarging","enlighten","enlisted","enquirer","enrage","enrich","enroll","enslave","ensnare","ensure","entail","entangled","entering","entertain","enticing","entire","entitle","entity","entomb","entourage","entrap","entree","entrench","entrust","entryway","entwine","enunciate","envelope","enviable","enviably","envious","envision","envoy","envy","enzyme","epic","epidemic","epidermal","epidermis","epidural","epilepsy","epileptic","epilogue","epiphany","episode","equal","equate","equation","equator","equinox","equipment","equity","equivocal","eradicate","erasable","erased","eraser","erasure","ergonomic","errand","errant","erratic","error","erupt","escalate","escalator","escapable","escapade","escapist","escargot","eskimo","esophagus","espionage","espresso","esquire","essay","essence","essential","establish","estate","esteemed","estimate","estimator","estranged","estrogen","etching","eternal","eternity","ethanol","ether","ethically","ethics","euphemism","evacuate","evacuee","evade","evaluate","evaluator","evaporate","evasion","evasive","even","everglade","evergreen","everybody","everyday","everyone","evict","evidence","evident","evil","evoke","evolution","evolve","exact","exalted","example","excavate","excavator","exceeding","exception","excess","exchange","excitable","exciting","exclaim","exclude","excluding","exclusion","exclusive","excretion","excretory","excursion","excusable","excusably","excuse","exemplary","exemplify","exemption","exerciser","exert","exes","exfoliate","exhale","exhaust","exhume","exile","existing","exit","exodus","exonerate","exorcism","exorcist","expand","expanse","expansion","expansive","expectant","expedited","expediter","expel","expend","expenses","expensive","expert","expire","expiring","explain","expletive","explicit","explode","exploit","explore","exploring","exponent","exporter","exposable","expose","exposure","express","expulsion","exquisite","extended","extending","extent","extenuate","exterior","external","extinct","extortion","extradite","extras","extrovert","extrude","extruding","exuberant","fable","fabric","fabulous","facebook","facecloth","facedown","faceless","facelift","faceplate","faceted","facial","facility","facing","facsimile","faction","factoid","factor","factsheet","factual","faculty","fade","fading","failing","falcon","fall","false","falsify","fame","familiar","family","famine","famished","fanatic","fancied","fanciness","fancy","fanfare","fang","fanning","fantasize","fantastic","fantasy","fascism","fastball","faster","fasting","fastness","faucet","favorable","favorably","favored","favoring","favorite","fax","feast","federal","fedora","feeble","feed","feel","feisty","feline","felt-tip","feminine","feminism","feminist","feminize","femur","fence","fencing","fender","ferment","fernlike","ferocious","ferocity","ferret","ferris","ferry","fervor","fester","festival","festive","festivity","fetal","fetch","fever","fiber","fiction","fiddle","fiddling","fidelity","fidgeting","fidgety","fifteen","fifth","fiftieth","fifty","figment","figure","figurine","filing","filled","filler","filling","film","filter","filth","filtrate","finale","finalist","finalize","finally","finance","financial","finch","fineness","finer","finicky","finished","finisher","finishing","finite","finless","finlike","fiscally","fit","five","flaccid","flagman","flagpole","flagship","flagstick","flagstone","flail","flakily","flaky","flame","flammable","flanked","flanking","flannels","flap","flaring","flashback","flashbulb","flashcard","flashily","flashing","flashy","flask","flatbed","flatfoot","flatly","flatness","flatten","flattered","flatterer","flattery","flattop","flatware","flatworm","flavored","flavorful","flavoring","flaxseed","fled","fleshed","fleshy","flick","flier","flight","flinch","fling","flint","flip","flirt","float","flock","flogging","flop","floral","florist","floss","flounder","flyable","flyaway","flyer","flying","flyover","flypaper","foam","foe","fog","foil","folic","folk","follicle","follow","fondling","fondly","fondness","fondue","font","food","fool","footage","football","footbath","footboard","footer","footgear","foothill","foothold","footing","footless","footman","footnote","footpad","footpath","footprint","footrest","footsie","footsore","footwear","footwork","fossil","foster","founder","founding","fountain","fox","foyer","fraction","fracture","fragile","fragility","fragment","fragrance","fragrant","frail","frame","framing","frantic","fraternal","frayed","fraying","frays","freckled","freckles","freebase","freebee","freebie","freedom","freefall","freehand","freeing","freeload","freely","freemason","freeness","freestyle","freeware","freeway","freewill","freezable","freezing","freight","french","frenzied","frenzy","frequency","frequent","fresh","fretful","fretted","friction","friday","fridge","fried","friend","frighten","frightful","frigidity","frigidly","frill","fringe","frisbee","frisk","fritter","frivolous","frolic","from","front","frostbite","frosted","frostily","frosting","frostlike","frosty","froth","frown","frozen","fructose","frugality","frugally","fruit","frustrate","frying","gab","gaffe","gag","gainfully","gaining","gains","gala","gallantly","galleria","gallery","galley","gallon","gallows","gallstone","galore","galvanize","gambling","game","gaming","gamma","gander","gangly","gangrene","gangway","gap","garage","garbage","garden","gargle","garland","garlic","garment","garnet","garnish","garter","gas","gatherer","gathering","gating","gauging","gauntlet","gauze","gave","gawk","gazing","gear","gecko","geek","geiger","gem","gender","generic","generous","genetics","genre","gentile","gentleman","gently","gents","geography","geologic","geologist","geology","geometric","geometry","geranium","gerbil","geriatric","germicide","germinate","germless","germproof","gestate","gestation","gesture","getaway","getting","getup","giant","gibberish","giblet","giddily","giddiness","giddy","gift","gigabyte","gigahertz","gigantic","giggle","giggling","giggly","gigolo","gilled","gills","gimmick","girdle","giveaway","given","giver","giving","gizmo","gizzard","glacial","glacier","glade","gladiator","gladly","glamorous","glamour","glance","glancing","glandular","glare","glaring","glass","glaucoma","glazing","gleaming","gleeful","glider","gliding","glimmer","glimpse","glisten","glitch","glitter","glitzy","gloater","gloating","gloomily","gloomy","glorified","glorifier","glorify","glorious","glory","gloss","glove","glowing","glowworm","glucose","glue","gluten","glutinous","glutton","gnarly","gnat","goal","goatskin","goes","goggles","going","goldfish","goldmine","goldsmith","golf","goliath","gonad","gondola","gone","gong","good","gooey","goofball","goofiness","goofy","google","goon","gopher","gore","gorged","gorgeous","gory","gosling","gossip","gothic","gotten","gout","gown","grab","graceful","graceless","gracious","gradation","graded","grader","gradient","grading","gradually","graduate","graffiti","grafted","grafting","grain","granddad","grandkid","grandly","grandma","grandpa","grandson","granite","granny","granola","grant","granular","grape","graph","grapple","grappling","grasp","grass","gratified","gratify","grating","gratitude","gratuity","gravel","graveness","graves","graveyard","gravitate","gravity","gravy","gray","grazing","greasily","greedily","greedless","greedy","green","greeter","greeting","grew","greyhound","grid","grief","grievance","grieving","grievous","grill","grimace","grimacing","grime","griminess","grimy","grinch","grinning","grip","gristle","grit","groggily","groggy","groin","groom","groove","grooving","groovy","grope","ground","grouped","grout","grove","grower","growing","growl","grub","grudge","grudging","grueling","gruffly","grumble","grumbling","grumbly","grumpily","grunge","grunt","guacamole","guidable","guidance","guide","guiding","guileless","guise","gulf","gullible","gully","gulp","gumball","gumdrop","gumminess","gumming","gummy","gurgle","gurgling","guru","gush","gusto","gusty","gutless","guts","gutter","guy","guzzler","gyration","habitable","habitant","habitat","habitual","hacked","hacker","hacking","hacksaw","had","haggler","haiku","half","halogen","halt","halved","halves","hamburger","hamlet","hammock","hamper","hamster","hamstring","handbag","handball","handbook","handbrake","handcart","handclap","handclasp","handcraft","handcuff","handed","handful","handgrip","handgun","handheld","handiness","handiwork","handlebar","handled","handler","handling","handmade","handoff","handpick","handprint","handrail","handsaw","handset","handsfree","handshake","handstand","handwash","handwork","handwoven","handwrite","handyman","hangnail","hangout","hangover","hangup","hankering","hankie","hanky","haphazard","happening","happier","happiest","happily","happiness","happy","harbor","hardcopy","hardcore","hardcover","harddisk","hardened","hardener","hardening","hardhat","hardhead","hardiness","hardly","hardness","hardship","hardware","hardwired","hardwood","hardy","harmful","harmless","harmonica","harmonics","harmonize","harmony","harness","harpist","harsh","harvest","hash","hassle","haste","hastily","hastiness","hasty","hatbox","hatchback","hatchery","hatchet","hatching","hatchling","hate","hatless","hatred","haunt","haven","hazard","hazelnut","hazily","haziness","hazing","hazy","headache","headband","headboard","headcount","headdress","headed","header","headfirst","headgear","heading","headlamp","headless","headlock","headphone","headpiece","headrest","headroom","headscarf","headset","headsman","headstand","headstone","headway","headwear","heap","heat","heave","heavily","heaviness","heaving","hedge","hedging","heftiness","hefty","helium","helmet","helper","helpful","helping","helpless","helpline","hemlock","hemstitch","hence","henchman","henna","herald","herbal","herbicide","herbs","heritage","hermit","heroics","heroism","herring","herself","hertz","hesitancy","hesitant","hesitate","hexagon","hexagram","hubcap","huddle","huddling","huff","hug","hula","hulk","hull","human","humble","humbling","humbly","humid","humiliate","humility","humming","hummus","humongous","humorist","humorless","humorous","humpback","humped","humvee","hunchback","hundredth","hunger","hungrily","hungry","hunk","hunter","hunting","huntress","huntsman","hurdle","hurled","hurler","hurling","hurray","hurricane","hurried","hurry","hurt","husband","hush","husked","huskiness","hut","hybrid","hydrant","hydrated","hydration","hydrogen","hydroxide","hyperlink","hypertext","hyphen","hypnoses","hypnosis","hypnotic","hypnotism","hypnotist","hypnotize","hypocrisy","hypocrite","ibuprofen","ice","iciness","icing","icky","icon","icy","idealism","idealist","idealize","ideally","idealness","identical","identify","identity","ideology","idiocy","idiom","idly","igloo","ignition","ignore","iguana","illicitly","illusion","illusive","image","imaginary","imagines","imaging","imbecile","imitate","imitation","immature","immerse","immersion","imminent","immobile","immodest","immorally","immortal","immovable","immovably","immunity","immunize","impaired","impale","impart","impatient","impeach","impeding","impending","imperfect","imperial","impish","implant","implement","implicate","implicit","implode","implosion","implosive","imply","impolite","important","importer","impose","imposing","impotence","impotency","impotent","impound","imprecise","imprint","imprison","impromptu","improper","improve","improving","improvise","imprudent","impulse","impulsive","impure","impurity","iodine","iodize","ion","ipad","iphone","ipod","irate","irk","iron","irregular","irrigate","irritable","irritably","irritant","irritate","islamic","islamist","isolated","isolating","isolation","isotope","issue","issuing","italicize","italics","item","itinerary","itunes","ivory","ivy","jab","jackal","jacket","jackknife","jackpot","jailbird","jailbreak","jailer","jailhouse","jalapeno","jam","janitor","january","jargon","jarring","jasmine","jaundice","jaunt","java","jawed","jawless","jawline","jaws","jaybird","jaywalker","jazz","jeep","jeeringly","jellied","jelly","jersey","jester","jet","jiffy","jigsaw","jimmy","jingle","jingling","jinx","jitters","jittery","job","jockey","jockstrap","jogger","jogging","john","joining","jokester","jokingly","jolliness","jolly","jolt","jot","jovial","joyfully","joylessly","joyous","joyride","joystick","jubilance","jubilant","judge","judgingly","judicial","judiciary","judo","juggle","juggling","jugular","juice","juiciness","juicy","jujitsu","jukebox","july","jumble","jumbo","jump","junction","juncture","june","junior","juniper","junkie","junkman","junkyard","jurist","juror","jury","justice","justifier","justify","justly","justness","juvenile","kabob","kangaroo","karaoke","karate","karma","kebab","keenly","keenness","keep","keg","kelp","kennel","kept","kerchief","kerosene","kettle","kick","kiln","kilobyte","kilogram","kilometer","kilowatt","kilt","kimono","kindle","kindling","kindly","kindness","kindred","kinetic","kinfolk","king","kinship","kinsman","kinswoman","kissable","kisser","kissing","kitchen","kite","kitten","kitty","kiwi","kleenex","knapsack","knee","knelt","knickers","knoll","koala","kooky","kosher","krypton","kudos","kung","labored","laborer","laboring","laborious","labrador","ladder","ladies","ladle","ladybug","ladylike","lagged","lagging","lagoon","lair","lake","lance","landed","landfall","landfill","landing","landlady","landless","landline","landlord","landmark","landmass","landmine","landowner","landscape","landside","landslide","language","lankiness","lanky","lantern","lapdog","lapel","lapped","lapping","laptop","lard","large","lark","lash","lasso","last","latch","late","lather","latitude","latrine","latter","latticed","launch","launder","laundry","laurel","lavender","lavish","laxative","lazily","laziness","lazy","lecturer","left","legacy","legal","legend","legged","leggings","legible","legibly","legislate","lego","legroom","legume","legwarmer","legwork","lemon","lend","length","lens","lent","leotard","lesser","letdown","lethargic","lethargy","letter","lettuce","level","leverage","levers","levitate","levitator","liability","liable","liberty","librarian","library","licking","licorice","lid","life","lifter","lifting","liftoff","ligament","likely","likeness","likewise","liking","lilac","lilly","lily","limb","limeade","limelight","limes","limit","limping","limpness","line","lingo","linguini","linguist","lining","linked","linoleum","linseed","lint","lion","lip","liquefy","liqueur","liquid","lisp","list","litigate","litigator","litmus","litter","little","livable","lived","lively","liver","livestock","lividly","living","lizard","lubricant","lubricate","lucid","luckily","luckiness","luckless","lucrative","ludicrous","lugged","lukewarm","lullaby","lumber","luminance","luminous","lumpiness","lumping","lumpish","lunacy","lunar","lunchbox","luncheon","lunchroom","lunchtime","lung","lurch","lure","luridness","lurk","lushly","lushness","luster","lustfully","lustily","lustiness","lustrous","lusty","luxurious","luxury","lying","lyrically","lyricism","lyricist","lyrics","macarena","macaroni","macaw","mace","machine","machinist","magazine","magenta","maggot","magical","magician","magma","magnesium","magnetic","magnetism","magnetize","magnifier","magnify","magnitude","magnolia","mahogany","maimed","majestic","majesty","majorette","majority","makeover","maker","makeshift","making","malformed","malt","mama","mammal","mammary","mammogram","manager","managing","manatee","mandarin","mandate","mandatory","mandolin","manger","mangle","mango","mangy","manhandle","manhole","manhood","manhunt","manicotti","manicure","manifesto","manila","mankind","manlike","manliness","manly","manmade","manned","mannish","manor","manpower","mantis","mantra","manual","many","map","marathon","marauding","marbled","marbles","marbling","march","mardi","margarine","margarita","margin","marigold","marina","marine","marital","maritime","marlin","marmalade","maroon","married","marrow","marry","marshland","marshy","marsupial","marvelous","marxism","mascot","masculine","mashed","mashing","massager","masses","massive","mastiff","matador","matchbook","matchbox","matcher","matching","matchless","material","maternal","maternity","math","mating","matriarch","matrimony","matrix","matron","matted","matter","maturely","maturing","maturity","mauve","maverick","maximize","maximum","maybe","mayday","mayflower","moaner","moaning","mobile","mobility","mobilize","mobster","mocha","mocker","mockup","modified","modify","modular","modulator","module","moisten","moistness","moisture","molar","molasses","mold","molecular","molecule","molehill","mollusk","mom","monastery","monday","monetary","monetize","moneybags","moneyless","moneywise","mongoose","mongrel","monitor","monkhood","monogamy","monogram","monologue","monopoly","monorail","monotone","monotype","monoxide","monsieur","monsoon","monstrous","monthly","monument","moocher","moodiness","moody","mooing","moonbeam","mooned","moonlight","moonlike","moonlit","moonrise","moonscape","moonshine","moonstone","moonwalk","mop","morale","morality","morally","morbidity","morbidly","morphine","morphing","morse","mortality","mortally","mortician","mortified","mortify","mortuary","mosaic","mossy","most","mothball","mothproof","motion","motivate","motivator","motive","motocross","motor","motto","mountable","mountain","mounted","mounting","mourner","mournful","mouse","mousiness","moustache","mousy","mouth","movable","move","movie","moving","mower","mowing","much","muck","mud","mug","mulberry","mulch","mule","mulled","mullets","multiple","multiply","multitask","multitude","mumble","mumbling","mumbo","mummified","mummify","mummy","mumps","munchkin","mundane","municipal","muppet","mural","murkiness","murky","murmuring","muscular","museum","mushily","mushiness","mushroom","mushy","music","musket","muskiness","musky","mustang","mustard","muster","mustiness","musty","mutable","mutate","mutation","mute","mutilated","mutilator","mutiny","mutt","mutual","muzzle","myself","myspace","mystified","mystify","myth","nacho","nag","nail","name","naming","nanny","nanometer","nape","napkin","napped","napping","nappy","narrow","nastily","nastiness","national","native","nativity","natural","nature","naturist","nautical","navigate","navigator","navy","nearby","nearest","nearly","nearness","neatly","neatness","nebula","nebulizer","nectar","negate","negation","negative","neglector","negligee","negligent","negotiate","nemeses","nemesis","neon","nephew","nerd","nervous","nervy","nest","net","neurology","neuron","neurosis","neurotic","neuter","neutron","never","next","nibble","nickname","nicotine","niece","nifty","nimble","nimbly","nineteen","ninetieth","ninja","nintendo","ninth","nuclear","nuclei","nucleus","nugget","nullify","number","numbing","numbly","numbness","numeral","numerate","numerator","numeric","numerous","nuptials","nursery","nursing","nurture","nutcase","nutlike","nutmeg","nutrient","nutshell","nuttiness","nutty","nuzzle","nylon","oaf","oak","oasis","oat","obedience","obedient","obituary","object","obligate","obliged","oblivion","oblivious","oblong","obnoxious","oboe","obscure","obscurity","observant","observer","observing","obsessed","obsession","obsessive","obsolete","obstacle","obstinate","obstruct","obtain","obtrusive","obtuse","obvious","occultist","occupancy","occupant","occupier","occupy","ocean","ocelot","octagon","octane","october","octopus","ogle","oil","oink","ointment","okay","old","olive","olympics","omega","omen","ominous","omission","omit","omnivore","onboard","oncoming","ongoing","onion","online","onlooker","only","onscreen","onset","onshore","onslaught","onstage","onto","onward","onyx","oops","ooze","oozy","opacity","opal","open","operable","operate","operating","operation","operative","operator","opium","opossum","opponent","oppose","opposing","opposite","oppressed","oppressor","opt","opulently","osmosis","other","otter","ouch","ought","ounce","outage","outback","outbid","outboard","outbound","outbreak","outburst","outcast","outclass","outcome","outdated","outdoors","outer","outfield","outfit","outflank","outgoing","outgrow","outhouse","outing","outlast","outlet","outline","outlook","outlying","outmatch","outmost","outnumber","outplayed","outpost","outpour","output","outrage","outrank","outreach","outright","outscore","outsell","outshine","outshoot","outsider","outskirts","outsmart","outsource","outspoken","outtakes","outthink","outward","outweigh","outwit","oval","ovary","oven","overact","overall","overarch","overbid","overbill","overbite","overblown","overboard","overbook","overbuilt","overcast","overcoat","overcome","overcook","overcrowd","overdraft","overdrawn","overdress","overdrive","overdue","overeager","overeater","overexert","overfed","overfeed","overfill","overflow","overfull","overgrown","overhand","overhang","overhaul","overhead","overhear","overheat","overhung","overjoyed","overkill","overlabor","overlaid","overlap","overlay","overload","overlook","overlord","overlying","overnight","overpass","overpay","overplant","overplay","overpower","overprice","overrate","overreach","overreact","override","overripe","overrule","overrun","overshoot","overshot","oversight","oversized","oversleep","oversold","overspend","overstate","overstay","overstep","overstock","overstuff","oversweet","overtake","overthrow","overtime","overtly","overtone","overture","overturn","overuse","overvalue","overview","overwrite","owl","oxford","oxidant","oxidation","oxidize","oxidizing","oxygen","oxymoron","oyster","ozone","paced","pacemaker","pacific","pacifier","pacifism","pacifist","pacify","padded","padding","paddle","paddling","padlock","pagan","pager","paging","pajamas","palace","palatable","palm","palpable","palpitate","paltry","pampered","pamperer","pampers","pamphlet","panama","pancake","pancreas","panda","pandemic","pang","panhandle","panic","panning","panorama","panoramic","panther","pantomime","pantry","pants","pantyhose","paparazzi","papaya","paper","paprika","papyrus","parabola","parachute","parade","paradox","paragraph","parakeet","paralegal","paralyses","paralysis","paralyze","paramedic","parameter","paramount","parasail","parasite","parasitic","parcel","parched","parchment","pardon","parish","parka","parking","parkway","parlor","parmesan","parole","parrot","parsley","parsnip","partake","parted","parting","partition","partly","partner","partridge","party","passable","passably","passage","passcode","passenger","passerby","passing","passion","passive","passivism","passover","passport","password","pasta","pasted","pastel","pastime","pastor","pastrami","pasture","pasty","patchwork","patchy","paternal","paternity","path","patience","patient","patio","patriarch","patriot","patrol","patronage","patronize","pauper","pavement","paver","pavestone","pavilion","paving","pawing","payable","payback","paycheck","payday","payee","payer","paying","payment","payphone","payroll","pebble","pebbly","pecan","pectin","peculiar","peddling","pediatric","pedicure","pedigree","pedometer","pegboard","pelican","pellet","pelt","pelvis","penalize","penalty","pencil","pendant","pending","penholder","penknife","pennant","penniless","penny","penpal","pension","pentagon","pentagram","pep","perceive","percent","perch","percolate","perennial","perfected","perfectly","perfume","periscope","perish","perjurer","perjury","perkiness","perky","perm","peroxide","perpetual","perplexed","persecute","persevere","persuaded","persuader","pesky","peso","pessimism","pessimist","pester","pesticide","petal","petite","petition","petri","petroleum","petted","petticoat","pettiness","petty","petunia","phantom","phobia","phoenix","phonebook","phoney","phonics","phoniness","phony","phosphate","photo","phrase","phrasing","placard","placate","placidly","plank","planner","plant","plasma","plaster","plastic","plated","platform","plating","platinum","platonic","platter","platypus","plausible","plausibly","playable","playback","player","playful","playgroup","playhouse","playing","playlist","playmaker","playmate","playoff","playpen","playroom","playset","plaything","playtime","plaza","pleading","pleat","pledge","plentiful","plenty","plethora","plexiglas","pliable","plod","plop","plot","plow","ploy","pluck","plug","plunder","plunging","plural","plus","plutonium","plywood","poach","pod","poem","poet","pogo","pointed","pointer","pointing","pointless","pointy","poise","poison","poker","poking","polar","police","policy","polio","polish","politely","polka","polo","polyester","polygon","polygraph","polymer","poncho","pond","pony","popcorn","pope","poplar","popper","poppy","popsicle","populace","popular","populate","porcupine","pork","porous","porridge","portable","portal","portfolio","porthole","portion","portly","portside","poser","posh","posing","possible","possibly","possum","postage","postal","postbox","postcard","posted","poster","posting","postnasal","posture","postwar","pouch","pounce","pouncing","pound","pouring","pout","powdered","powdering","powdery","power","powwow","pox","praising","prance","prancing","pranker","prankish","prankster","prayer","praying","preacher","preaching","preachy","preamble","precinct","precise","precision","precook","precut","predator","predefine","predict","preface","prefix","preflight","preformed","pregame","pregnancy","pregnant","preheated","prelaunch","prelaw","prelude","premiere","premises","premium","prenatal","preoccupy","preorder","prepaid","prepay","preplan","preppy","preschool","prescribe","preseason","preset","preshow","president","presoak","press","presume","presuming","preteen","pretended","pretender","pretense","pretext","pretty","pretzel","prevail","prevalent","prevent","preview","previous","prewar","prewashed","prideful","pried","primal","primarily","primary","primate","primer","primp","princess","print","prior","prism","prison","prissy","pristine","privacy","private","privatize","prize","proactive","probable","probably","probation","probe","probing","probiotic","problem","procedure","process","proclaim","procreate","procurer","prodigal","prodigy","produce","product","profane","profanity","professed","professor","profile","profound","profusely","progeny","prognosis","program","progress","projector","prologue","prolonged","promenade","prominent","promoter","promotion","prompter","promptly","prone","prong","pronounce","pronto","proofing","proofread","proofs","propeller","properly","property","proponent","proposal","propose","props","prorate","protector","protegee","proton","prototype","protozoan","protract","protrude","proud","provable","proved","proven","provided","provider","providing","province","proving","provoke","provoking","provolone","prowess","prowler","prowling","proximity","proxy","prozac","prude","prudishly","prune","pruning","pry","psychic","public","publisher","pucker","pueblo","pug","pull","pulmonary","pulp","pulsate","pulse","pulverize","puma","pumice","pummel","punch","punctual","punctuate","punctured","pungent","punisher","punk","pupil","puppet","puppy","purchase","pureblood","purebred","purely","pureness","purgatory","purge","purging","purifier","purify","purist","puritan","purity","purple","purplish","purposely","purr","purse","pursuable","pursuant","pursuit","purveyor","pushcart","pushchair","pusher","pushiness","pushing","pushover","pushpin","pushup","pushy","putdown","putt","puzzle","puzzling","pyramid","pyromania","python","quack","quadrant","quail","quaintly","quake","quaking","qualified","qualifier","qualify","quality","qualm","quantum","quarrel","quarry","quartered","quarterly","quarters","quartet","quench","query","quicken","quickly","quickness","quicksand","quickstep","quiet","quill","quilt","quintet","quintuple","quirk","quit","quiver","quizzical","quotable","quotation","quote","rabid","race","racing","racism","rack","racoon","radar","radial","radiance","radiantly","radiated","radiation","radiator","radio","radish","raffle","raft","rage","ragged","raging","ragweed","raider","railcar","railing","railroad","railway","raisin","rake","raking","rally","ramble","rambling","ramp","ramrod","ranch","rancidity","random","ranged","ranger","ranging","ranked","ranking","ransack","ranting","rants","rare","rarity","rascal","rash","rasping","ravage","raven","ravine","raving","ravioli","ravishing","reabsorb","reach","reacquire","reaction","reactive","reactor","reaffirm","ream","reanalyze","reappear","reapply","reappoint","reapprove","rearrange","rearview","reason","reassign","reassure","reattach","reawake","rebalance","rebate","rebel","rebirth","reboot","reborn","rebound","rebuff","rebuild","rebuilt","reburial","rebuttal","recall","recant","recapture","recast","recede","recent","recess","recharger","recipient","recital","recite","reckless","reclaim","recliner","reclining","recluse","reclusive","recognize","recoil","recollect","recolor","reconcile","reconfirm","reconvene","recopy","record","recount","recoup","recovery","recreate","rectal","rectangle","rectified","rectify","recycled","recycler","recycling","reemerge","reenact","reenter","reentry","reexamine","referable","referee","reference","refill","refinance","refined","refinery","refining","refinish","reflected","reflector","reflex","reflux","refocus","refold","reforest","reformat","reformed","reformer","reformist","refract","refrain","refreeze","refresh","refried","refueling","refund","refurbish","refurnish","refusal","refuse","refusing","refutable","refute","regain","regalia","regally","reggae","regime","region","register","registrar","registry","regress","regretful","regroup","regular","regulate","regulator","rehab","reheat","rehire","rehydrate","reimburse","reissue","reiterate","rejoice","rejoicing","rejoin","rekindle","relapse","relapsing","relatable","related","relation","relative","relax","relay","relearn","release","relenting","reliable","reliably","reliance","reliant","relic","relieve","relieving","relight","relish","relive","reload","relocate","relock","reluctant","rely","remake","remark","remarry","rematch","remedial","remedy","remember","reminder","remindful","remission","remix","remnant","remodeler","remold","remorse","remote","removable","removal","removed","remover","removing","rename","renderer","rendering","rendition","renegade","renewable","renewably","renewal","renewed","renounce","renovate","renovator","rentable","rental","rented","renter","reoccupy","reoccur","reopen","reorder","repackage","repacking","repaint","repair","repave","repaying","repayment","repeal","repeated","repeater","repent","rephrase","replace","replay","replica","reply","reporter","repose","repossess","repost","repressed","reprimand","reprint","reprise","reproach","reprocess","reproduce","reprogram","reps","reptile","reptilian","repugnant","repulsion","repulsive","repurpose","reputable","reputably","request","require","requisite","reroute","rerun","resale","resample","rescuer","reseal","research","reselect","reseller","resemble","resend","resent","reset","reshape","reshoot","reshuffle","residence","residency","resident","residual","residue","resigned","resilient","resistant","resisting","resize","resolute","resolved","resonant","resonate","resort","resource","respect","resubmit","result","resume","resupply","resurface","resurrect","retail","retainer","retaining","retake","retaliate","retention","rethink","retinal","retired","retiree","retiring","retold","retool","retorted","retouch","retrace","retract","retrain","retread","retreat","retrial","retrieval","retriever","retry","return","retying","retype","reunion","reunite","reusable","reuse","reveal","reveler","revenge","revenue","reverb","revered","reverence","reverend","reversal","reverse","reversing","reversion","revert","revisable","revise","revision","revisit","revivable","revival","reviver","reviving","revocable","revoke","revolt","revolver","revolving","reward","rewash","rewind","rewire","reword","rework","rewrap","rewrite","rhyme","ribbon","ribcage","rice","riches","richly","richness","rickety","ricotta","riddance","ridden","ride","riding","rifling","rift","rigging","rigid","rigor","rimless","rimmed","rind","rink","rinse","rinsing","riot","ripcord","ripeness","ripening","ripping","ripple","rippling","riptide","rise","rising","risk","risotto","ritalin","ritzy","rival","riverbank","riverbed","riverboat","riverside","riveter","riveting","roamer","roaming","roast","robbing","robe","robin","robotics","robust","rockband","rocker","rocket","rockfish","rockiness","rocking","rocklike","rockslide","rockstar","rocky","rogue","roman","romp","rope","roping","roster","rosy","rotten","rotting","rotunda","roulette","rounding","roundish","roundness","roundup","roundworm","routine","routing","rover","roving","royal","rubbed","rubber","rubbing","rubble","rubdown","ruby","ruckus","rudder","rug","ruined","rule","rumble","rumbling","rummage","rumor","runaround","rundown","runner","running","runny","runt","runway","rupture","rural","ruse","rush","rust","rut","sabbath","sabotage","sacrament","sacred","sacrifice","sadden","saddlebag","saddled","saddling","sadly","sadness","safari","safeguard","safehouse","safely","safeness","saffron","saga","sage","sagging","saggy","said","saint","sake","salad","salami","salaried","salary","saline","salon","saloon","salsa","salt","salutary","salute","salvage","salvaging","salvation","same","sample","sampling","sanction","sanctity","sanctuary","sandal","sandbag","sandbank","sandbar","sandblast","sandbox","sanded","sandfish","sanding","sandlot","sandpaper","sandpit","sandstone","sandstorm","sandworm","sandy","sanitary","sanitizer","sank","santa","sapling","sappiness","sappy","sarcasm","sarcastic","sardine","sash","sasquatch","sassy","satchel","satiable","satin","satirical","satisfied","satisfy","saturate","saturday","sauciness","saucy","sauna","savage","savanna","saved","savings","savior","savor","saxophone","say","scabbed","scabby","scalded","scalding","scale","scaling","scallion","scallop","scalping","scam","scandal","scanner","scanning","scant","scapegoat","scarce","scarcity","scarecrow","scared","scarf","scarily","scariness","scarring","scary","scavenger","scenic","schedule","schematic","scheme","scheming","schilling","schnapps","scholar","science","scientist","scion","scoff","scolding","scone","scoop","scooter","scope","scorch","scorebook","scorecard","scored","scoreless","scorer","scoring","scorn","scorpion","scotch","scoundrel","scoured","scouring","scouting","scouts","scowling","scrabble","scraggly","scrambled","scrambler","scrap","scratch","scrawny","screen","scribble","scribe","scribing","scrimmage","script","scroll","scrooge","scrounger","scrubbed","scrubber","scruffy","scrunch","scrutiny","scuba","scuff","sculptor","sculpture","scurvy","scuttle","secluded","secluding","seclusion","second","secrecy","secret","sectional","sector","secular","securely","security","sedan","sedate","sedation","sedative","sediment","seduce","seducing","segment","seismic","seizing","seldom","selected","selection","selective","selector","self","seltzer","semantic","semester","semicolon","semifinal","seminar","semisoft","semisweet","senate","senator","send","senior","senorita","sensation","sensitive","sensitize","sensually","sensuous","sepia","september","septic","septum","sequel","sequence","sequester","series","sermon","serotonin","serpent","serrated","serve","service","serving","sesame","sessions","setback","setting","settle","settling","setup","sevenfold","seventeen","seventh","seventy","severity","shabby","shack","shaded","shadily","shadiness","shading","shadow","shady","shaft","shakable","shakily","shakiness","shaking","shaky","shale","shallot","shallow","shame","shampoo","shamrock","shank","shanty","shape","shaping","share","sharpener","sharper","sharpie","sharply","sharpness","shawl","sheath","shed","sheep","sheet","shelf","shell","shelter","shelve","shelving","sherry","shield","shifter","shifting","shiftless","shifty","shimmer","shimmy","shindig","shine","shingle","shininess","shining","shiny","ship","shirt","shivering","shock","shone","shoplift","shopper","shopping","shoptalk","shore","shortage","shortcake","shortcut","shorten","shorter","shorthand","shortlist","shortly","shortness","shorts","shortwave","shorty","shout","shove","showbiz","showcase","showdown","shower","showgirl","showing","showman","shown","showoff","showpiece","showplace","showroom","showy","shrank","shrapnel","shredder","shredding","shrewdly","shriek","shrill","shrimp","shrine","shrink","shrivel","shrouded","shrubbery","shrubs","shrug","shrunk","shucking","shudder","shuffle","shuffling","shun","shush","shut","shy","siamese","siberian","sibling","siding","sierra","siesta","sift","sighing","silenced","silencer","silent","silica","silicon","silk","silliness","silly","silo","silt","silver","similarly","simile","simmering","simple","simplify","simply","sincere","sincerity","singer","singing","single","singular","sinister","sinless","sinner","sinuous","sip","siren","sister","sitcom","sitter","sitting","situated","situation","sixfold","sixteen","sixth","sixties","sixtieth","sixtyfold","sizable","sizably","size","sizing","sizzle","sizzling","skater","skating","skedaddle","skeletal","skeleton","skeptic","sketch","skewed","skewer","skid","skied","skier","skies","skiing","skilled","skillet","skillful","skimmed","skimmer","skimming","skimpily","skincare","skinhead","skinless","skinning","skinny","skintight","skipper","skipping","skirmish","skirt","skittle","skydiver","skylight","skyline","skype","skyrocket","skyward","slab","slacked","slacker","slacking","slackness","slacks","slain","slam","slander","slang","slapping","slapstick","slashed","slashing","slate","slather","slaw","sled","sleek","sleep","sleet","sleeve","slept","sliceable","sliced","slicer","slicing","slick","slider","slideshow","sliding","slighted","slighting","slightly","slimness","slimy","slinging","slingshot","slinky","slip","slit","sliver","slobbery","slogan","sloped","sloping","sloppily","sloppy","slot","slouching","slouchy","sludge","slug","slum","slurp","slush","sly","small","smartly","smartness","smasher","smashing","smashup","smell","smelting","smile","smilingly","smirk","smite","smith","smitten","smock","smog","smoked","smokeless","smokiness","smoking","smoky","smolder","smooth","smother","smudge","smudgy","smuggler","smuggling","smugly","smugness","snack","snagged","snaking","snap","snare","snarl","snazzy","sneak","sneer","sneeze","sneezing","snide","sniff","snippet","snipping","snitch","snooper","snooze","snore","snoring","snorkel","snort","snout","snowbird","snowboard","snowbound","snowcap","snowdrift","snowdrop","snowfall","snowfield","snowflake","snowiness","snowless","snowman","snowplow","snowshoe","snowstorm","snowsuit","snowy","snub","snuff","snuggle","snugly","snugness","speak","spearfish","spearhead","spearman","spearmint","species","specimen","specked","speckled","specks","spectacle","spectator","spectrum","speculate","speech","speed","spellbind","speller","spelling","spendable","spender","spending","spent","spew","sphere","spherical","sphinx","spider","spied","spiffy","spill","spilt","spinach","spinal","spindle","spinner","spinning","spinout","spinster","spiny","spiral","spirited","spiritism","spirits","spiritual","splashed","splashing","splashy","splatter","spleen","splendid","splendor","splice","splicing","splinter","splotchy","splurge","spoilage","spoiled","spoiler","spoiling","spoils","spoken","spokesman","sponge","spongy","sponsor","spoof","spookily","spooky","spool","spoon","spore","sporting","sports","sporty","spotless","spotlight","spotted","spotter","spotting","spotty","spousal","spouse","spout","sprain","sprang","sprawl","spray","spree","sprig","spring","sprinkled","sprinkler","sprint","sprite","sprout","spruce","sprung","spry","spud","spur","sputter","spyglass","squabble","squad","squall","squander","squash","squatted","squatter","squatting","squeak","squealer","squealing","squeamish","squeegee","squeeze","squeezing","squid","squiggle","squiggly","squint","squire","squirt","squishier","squishy","stability","stabilize","stable","stack","stadium","staff","stage","staging","stagnant","stagnate","stainable","stained","staining","stainless","stalemate","staleness","stalling","stallion","stamina","stammer","stamp","stand","stank","staple","stapling","starboard","starch","stardom","stardust","starfish","stargazer","staring","stark","starless","starlet","starlight","starlit","starring","starry","starship","starter","starting","startle","startling","startup","starved","starving","stash","state","static","statistic","statue","stature","status","statute","statutory","staunch","stays","steadfast","steadier","steadily","steadying","steam","steed","steep","steerable","steering","steersman","stegosaur","stellar","stem","stench","stencil","step","stereo","sterile","sterility","sterilize","sterling","sternness","sternum","stew","stick","stiffen","stiffly","stiffness","stifle","stifling","stillness","stilt","stimulant","stimulate","stimuli","stimulus","stinger","stingily","stinging","stingray","stingy","stinking","stinky","stipend","stipulate","stir","stitch","stock","stoic","stoke","stole","stomp","stonewall","stoneware","stonework","stoning","stony","stood","stooge","stool","stoop","stoplight","stoppable","stoppage","stopped","stopper","stopping","stopwatch","storable","storage","storeroom","storewide","storm","stout","stove","stowaway","stowing","straddle","straggler","strained","strainer","straining","strangely","stranger","strangle","strategic","strategy","stratus","straw","stray","streak","stream","street","strength","strenuous","strep","stress","stretch","strewn","stricken","strict","stride","strife","strike","striking","strive","striving","strobe","strode","stroller","strongbox","strongly","strongman","struck","structure","strudel","struggle","strum","strung","strut","stubbed","stubble","stubbly","stubborn","stucco","stuck","student","studied","studio","study","stuffed","stuffing","stuffy","stumble","stumbling","stump","stung","stunned","stunner","stunning","stunt","stupor","sturdily","sturdy","styling","stylishly","stylist","stylized","stylus","suave","subarctic","subatomic","subdivide","subdued","subduing","subfloor","subgroup","subheader","subject","sublease","sublet","sublevel","sublime","submarine","submerge","submersed","submitter","subpanel","subpar","subplot","subprime","subscribe","subscript","subsector","subside","subsiding","subsidize","subsidy","subsoil","subsonic","substance","subsystem","subtext","subtitle","subtly","subtotal","subtract","subtype","suburb","subway","subwoofer","subzero","succulent","such","suction","sudden","sudoku","suds","sufferer","suffering","suffice","suffix","suffocate","suffrage","sugar","suggest","suing","suitable","suitably","suitcase","suitor","sulfate","sulfide","sulfite","sulfur","sulk","sullen","sulphate","sulphuric","sultry","superbowl","superglue","superhero","superior","superjet","superman","supermom","supernova","supervise","supper","supplier","supply","support","supremacy","supreme","surcharge","surely","sureness","surface","surfacing","surfboard","surfer","surgery","surgical","surging","surname","surpass","surplus","surprise","surreal","surrender","surrogate","surround","survey","survival","survive","surviving","survivor","sushi","suspect","suspend","suspense","sustained","sustainer","swab","swaddling","swagger","swampland","swan","swapping","swarm","sway","swear","sweat","sweep","swell","swept","swerve","swifter","swiftly","swiftness","swimmable","swimmer","swimming","swimsuit","swimwear","swinger","swinging","swipe","swirl","switch","swivel","swizzle","swooned","swoop","swoosh","swore","sworn","swung","sycamore","sympathy","symphonic","symphony","symptom","synapse","syndrome","synergy","synopses","synopsis","synthesis","synthetic","syrup","system","t-shirt","tabasco","tabby","tableful","tables","tablet","tableware","tabloid","tackiness","tacking","tackle","tackling","tacky","taco","tactful","tactical","tactics","tactile","tactless","tadpole","taekwondo","tag","tainted","take","taking","talcum","talisman","tall","talon","tamale","tameness","tamer","tamper","tank","tanned","tannery","tanning","tantrum","tapeless","tapered","tapering","tapestry","tapioca","tapping","taps","tarantula","target","tarmac","tarnish","tarot","tartar","tartly","tartness","task","tassel","taste","tastiness","tasting","tasty","tattered","tattle","tattling","tattoo","taunt","tavern","thank","that","thaw","theater","theatrics","thee","theft","theme","theology","theorize","thermal","thermos","thesaurus","these","thesis","thespian","thicken","thicket","thickness","thieving","thievish","thigh","thimble","thing","think","thinly","thinner","thinness","thinning","thirstily","thirsting","thirsty","thirteen","thirty","thong","thorn","those","thousand","thrash","thread","threaten","threefold","thrift","thrill","thrive","thriving","throat","throbbing","throng","throttle","throwaway","throwback","thrower","throwing","thud","thumb","thumping","thursday","thus","thwarting","thyself","tiara","tibia","tidal","tidbit","tidiness","tidings","tidy","tiger","tighten","tightly","tightness","tightrope","tightwad","tigress","tile","tiling","till","tilt","timid","timing","timothy","tinderbox","tinfoil","tingle","tingling","tingly","tinker","tinkling","tinsel","tinsmith","tint","tinwork","tiny","tipoff","tipped","tipper","tipping","tiptoeing","tiptop","tiring","tissue","trace","tracing","track","traction","tractor","trade","trading","tradition","traffic","tragedy","trailing","trailside","train","traitor","trance","tranquil","transfer","transform","translate","transpire","transport","transpose","trapdoor","trapeze","trapezoid","trapped","trapper","trapping","traps","trash","travel","traverse","travesty","tray","treachery","treading","treadmill","treason","treat","treble","tree","trekker","tremble","trembling","tremor","trench","trend","trespass","triage","trial","triangle","tribesman","tribunal","tribune","tributary","tribute","triceps","trickery","trickily","tricking","trickle","trickster","tricky","tricolor","tricycle","trident","tried","trifle","trifocals","trillion","trilogy","trimester","trimmer","trimming","trimness","trinity","trio","tripod","tripping","triumph","trivial","trodden","trolling","trombone","trophy","tropical","tropics","trouble","troubling","trough","trousers","trout","trowel","truce","truck","truffle","trump","trunks","trustable","trustee","trustful","trusting","trustless","truth","try","tubby","tubeless","tubular","tucking","tuesday","tug","tuition","tulip","tumble","tumbling","tummy","turban","turbine","turbofan","turbojet","turbulent","turf","turkey","turmoil","turret","turtle","tusk","tutor","tutu","tux","tweak","tweed","tweet","tweezers","twelve","twentieth","twenty","twerp","twice","twiddle","twiddling","twig","twilight","twine","twins","twirl","twistable","twisted","twister","twisting","twisty","twitch","twitter","tycoon","tying","tyke","udder","ultimate","ultimatum","ultra","umbilical","umbrella","umpire","unabashed","unable","unadorned","unadvised","unafraid","unaired","unaligned","unaltered","unarmored","unashamed","unaudited","unawake","unaware","unbaked","unbalance","unbeaten","unbend","unbent","unbiased","unbitten","unblended","unblessed","unblock","unbolted","unbounded","unboxed","unbraided","unbridle","unbroken","unbuckled","unbundle","unburned","unbutton","uncanny","uncapped","uncaring","uncertain","unchain","unchanged","uncharted","uncheck","uncivil","unclad","unclaimed","unclamped","unclasp","uncle","unclip","uncloak","unclog","unclothed","uncoated","uncoiled","uncolored","uncombed","uncommon","uncooked","uncork","uncorrupt","uncounted","uncouple","uncouth","uncover","uncross","uncrown","uncrushed","uncured","uncurious","uncurled","uncut","undamaged","undated","undaunted","undead","undecided","undefined","underage","underarm","undercoat","undercook","undercut","underdog","underdone","underfed","underfeed","underfoot","undergo","undergrad","underhand","underline","underling","undermine","undermost","underpaid","underpass","underpay","underrate","undertake","undertone","undertook","undertow","underuse","underwear","underwent","underwire","undesired","undiluted","undivided","undocked","undoing","undone","undrafted","undress","undrilled","undusted","undying","unearned","unearth","unease","uneasily","uneasy","uneatable","uneaten","unedited","unelected","unending","unengaged","unenvied","unequal","unethical","uneven","unexpired","unexposed","unfailing","unfair","unfasten","unfazed","unfeeling","unfiled","unfilled","unfitted","unfitting","unfixable","unfixed","unflawed","unfocused","unfold","unfounded","unframed","unfreeze","unfrosted","unfrozen","unfunded","unglazed","ungloved","unglue","ungodly","ungraded","ungreased","unguarded","unguided","unhappily","unhappy","unharmed","unhealthy","unheard","unhearing","unheated","unhelpful","unhidden","unhinge","unhitched","unholy","unhook","unicorn","unicycle","unified","unifier","uniformed","uniformly","unify","unimpeded","uninjured","uninstall","uninsured","uninvited","union","uniquely","unisexual","unison","unissued","unit","universal","universe","unjustly","unkempt","unkind","unknotted","unknowing","unknown","unlaced","unlatch","unlawful","unleaded","unlearned","unleash","unless","unleveled","unlighted","unlikable","unlimited","unlined","unlinked","unlisted","unlit","unlivable","unloaded","unloader","unlocked","unlocking","unlovable","unloved","unlovely","unloving","unluckily","unlucky","unmade","unmanaged","unmanned","unmapped","unmarked","unmasked","unmasking","unmatched","unmindful","unmixable","unmixed","unmolded","unmoral","unmovable","unmoved","unmoving","unnamable","unnamed","unnatural","unneeded","unnerve","unnerving","unnoticed","unopened","unopposed","unpack","unpadded","unpaid","unpainted","unpaired","unpaved","unpeeled","unpicked","unpiloted","unpinned","unplanned","unplanted","unpleased","unpledged","unplowed","unplug","unpopular","unproven","unquote","unranked","unrated","unraveled","unreached","unread","unreal","unreeling","unrefined","unrelated","unrented","unrest","unretired","unrevised","unrigged","unripe","unrivaled","unroasted","unrobed","unroll","unruffled","unruly","unrushed","unsaddle","unsafe","unsaid","unsalted","unsaved","unsavory","unscathed","unscented","unscrew","unsealed","unseated","unsecured","unseeing","unseemly","unseen","unselect","unselfish","unsent","unsettled","unshackle","unshaken","unshaved","unshaven","unsheathe","unshipped","unsightly","unsigned","unskilled","unsliced","unsmooth","unsnap","unsocial","unsoiled","unsold","unsolved","unsorted","unspoiled","unspoken","unstable","unstaffed","unstamped","unsteady","unsterile","unstirred","unstitch","unstopped","unstuck","unstuffed","unstylish","unsubtle","unsubtly","unsuited","unsure","unsworn","untagged","untainted","untaken","untamed","untangled","untapped","untaxed","unthawed","unthread","untidy","untie","until","untimed","untimely","untitled","untoasted","untold","untouched","untracked","untrained","untreated","untried","untrimmed","untrue","untruth","unturned","untwist","untying","unusable","unused","unusual","unvalued","unvaried","unvarying","unveiled","unveiling","unvented","unviable","unvisited","unvocal","unwanted","unwarlike","unwary","unwashed","unwatched","unweave","unwed","unwelcome","unwell","unwieldy","unwilling","unwind","unwired","unwitting","unwomanly","unworldly","unworn","unworried","unworthy","unwound","unwoven","unwrapped","unwritten","unzip","upbeat","upchuck","upcoming","upcountry","update","upfront","upgrade","upheaval","upheld","uphill","uphold","uplifted","uplifting","upload","upon","upper","upright","uprising","upriver","uproar","uproot","upscale","upside","upstage","upstairs","upstart","upstate","upstream","upstroke","upswing","uptake","uptight","uptown","upturned","upward","upwind","uranium","urban","urchin","urethane","urgency","urgent","urging","urologist","urology","usable","usage","useable","used","uselessly","user","usher","usual","utensil","utility","utilize","utmost","utopia","utter","vacancy","vacant","vacate","vacation","vagabond","vagrancy","vagrantly","vaguely","vagueness","valiant","valid","valium","valley","valuables","value","vanilla","vanish","vanity","vanquish","vantage","vaporizer","variable","variably","varied","variety","various","varmint","varnish","varsity","varying","vascular","vaseline","vastly","vastness","veal","vegan","veggie","vehicular","velcro","velocity","velvet","vendetta","vending","vendor","veneering","vengeful","venomous","ventricle","venture","venue","venus","verbalize","verbally","verbose","verdict","verify","verse","version","versus","vertebrae","vertical","vertigo","very","vessel","vest","veteran","veto","vexingly","viability","viable","vibes","vice","vicinity","victory","video","viewable","viewer","viewing","viewless","viewpoint","vigorous","village","villain","vindicate","vineyard","vintage","violate","violation","violator","violet","violin","viper","viral","virtual","virtuous","virus","visa","viscosity","viscous","viselike","visible","visibly","vision","visiting","visitor","visor","vista","vitality","vitalize","vitally","vitamins","vivacious","vividly","vividness","vixen","vocalist","vocalize","vocally","vocation","voice","voicing","void","volatile","volley","voltage","volumes","voter","voting","voucher","vowed","vowel","voyage","wackiness","wad","wafer","waffle","waged","wager","wages","waggle","wagon","wake","waking","walk","walmart","walnut","walrus","waltz","wand","wannabe","wanted","wanting","wasabi","washable","washbasin","washboard","washbowl","washcloth","washday","washed","washer","washhouse","washing","washout","washroom","washstand","washtub","wasp","wasting","watch","water","waviness","waving","wavy","whacking","whacky","wham","wharf","wheat","whenever","whiff","whimsical","whinny","whiny","whisking","whoever","whole","whomever","whoopee","whooping","whoops","why","wick","widely","widen","widget","widow","width","wieldable","wielder","wife","wifi","wikipedia","wildcard","wildcat","wilder","wildfire","wildfowl","wildland","wildlife","wildly","wildness","willed","willfully","willing","willow","willpower","wilt","wimp","wince","wincing","wind","wing","winking","winner","winnings","winter","wipe","wired","wireless","wiring","wiry","wisdom","wise","wish","wisplike","wispy","wistful","wizard","wobble","wobbling","wobbly","wok","wolf","wolverine","womanhood","womankind","womanless","womanlike","womanly","womb","woof","wooing","wool","woozy","word","work","worried","worrier","worrisome","worry","worsening","worshiper","worst","wound","woven","wow","wrangle","wrath","wreath","wreckage","wrecker","wrecking","wrench","wriggle","wriggly","wrinkle","wrinkly","wrist","writing","written","wrongdoer","wronged","wrongful","wrongly","wrongness","wrought","xbox","xerox","yahoo","yam","yanking","yapping","yard","yarn","yeah","yearbook","yearling","yearly","yearning","yeast","yelling","yelp","yen","yesterday","yiddish","yield","yin","yippee","yo-yo","yodel","yoga","yogurt","yonder","yoyo","yummy","zap","zealous","zebra","zen","zeppelin","zero","zestfully","zesty","zigzagged","zipfile","zipping","zippy","zips","zit","zodiac","zombie","zone","zoning","zookeeper","zoologist","zoology","zoom"]},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&this.cipherService.upsert(o)}return[2]}}))}))},e.prototype.deleteWithServer=function(e){return r(this,void 0,void 0,(function(){return i(this,(function(t){switch(t.label){case 0:return[4,this.apiService.deleteFolder(e)];case 1:return t.sent(),[4,this.delete(e)];case 2:return t.sent(),[2]}}))}))},e}();t.FolderService=m},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0)for(d=0;d0)for(d=0;d0)for(d=0;d0)for(d=0;d1)&&(t.wordSeparator=" "),null==t.capitalize&&(t.capitalize=!1),null==t.includeNumber&&(t.includeNumber=!1),n=c.EEFLongWordList.length-1,r=new Array(t.numWords),o=0,i.label=1;case 1:return oe.length&&(e.minSpecial=e.length-e.minNumber),e.numWordsn.minLength&&(n.minLength=e.data.minLength),e.data.useUpper&&(n.useUppercase=!0),e.data.useLower&&(n.useLowercase=!0),e.data.useNumbers&&(n.useNumbers=!0),null!=e.data.minNumbers&&e.data.minNumbers>n.numberCount&&(n.numberCount=e.data.minNumbers),e.data.useSpecial&&(n.useSpecial=!0),null!=e.data.minSpecial&&e.data.minSpecial>n.specialCount&&(n.specialCount=e.data.minSpecial),null!=e.data.minNumberWords&&e.data.minNumberWords>n.minNumberWords&&(n.minNumberWords=e.data.minNumberWords),e.data.capitalize&&(n.capitalize=!0),e.data.includeNumber&&(n.includeNumber=!0))})),[2,n])}}))}))},e.prototype.saveOptions=function(e){return r(this,void 0,void 0,(function(){return i(this,(function(t){switch(t.label){case 0:return[4,this.storageService.save(d,e)];case 1:return t.sent(),this.optionsCache=e,[2]}}))}))},e.prototype.getHistory=function(){return r(this,void 0,void 0,(function(){var e,t;return i(this,(function(n){switch(n.label){case 0:return[4,this.cryptoService.hasKey()];case 1:return n.sent()?this.history?[3,4]:[4,this.storageService.get(m)]:[2,new Array];case 2:return e=n.sent(),t=this,[4,this.decryptHistory(e)];case 3:t.history=n.sent(),n.label=4;case 4:return[2,this.history||new Array]}}))}))},e.prototype.addHistory=function(e){return r(this,void 0,void 0,(function(){var t,n;return i(this,(function(r){switch(r.label){case 0:return[4,this.cryptoService.hasKey()];case 1:return r.sent()?[4,this.getHistory()]:[2];case 2:return t=r.sent(),this.matchesPrevious(e,t)?[2]:(t.unshift(new s.GeneratedPasswordHistory(e,Date.now())),t.length>100&&t.pop(),[4,this.encryptHistory(t)]);case 3:return n=r.sent(),[4,this.storageService.save(m,n)];case 4:return[2,r.sent()]}}))}))},e.prototype.clear=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.history=[],[4,this.storageService.remove(m)];case 1:return[2,e.sent()]}}))}))},e.prototype.passwordStrength=function(e,t){if(void 0===t&&(t=null),null==e||0===e.length)return null;var n=["bitwarden","bit","warden"];null!=t&&t.length>0&&(n=n.concat(t));var r=Array.from(new Set(n));return o(e,r)},e.prototype.normalizeOptions=function(e,t){e.minLowercase=0,e.minUppercase=0,!e.length||e.length<5?e.length=5:e.length>128&&(e.length=128),e.lengthe.length?e.minNumber=e.length:e.minNumber>9&&(e.minNumber=9):e.minNumber=0,e.minNumbere.length?e.minSpecial=e.length:e.minSpecial>9&&(e.minSpecial=9):e.minSpecial=0,e.minSpeciale.length&&(e.minSpecial=e.length-e.minNumber),null==e.numWords||e.length<3?e.numWords=3:e.numWords>20&&(e.numWords=20),e.numWords1&&(e.wordSeparator=e.wordSeparator[0]),this.sanitizePasswordLength(e,!1)},e.prototype.capitalize=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},e.prototype.appendRandomNumberToRandomWord=function(e){return r(this,void 0,void 0,(function(){var t,n;return i(this,(function(r){switch(r.label){case 0:return null==e||e.length<=0?[2]:[4,this.cryptoService.randomNumber(0,e.length-1)];case 1:return t=r.sent(),[4,this.cryptoService.randomNumber(0,9)];case 2:return n=r.sent(),e[t]=e[t]+n,[2]}}))}))},e.prototype.encryptHistory=function(e){return r(this,void 0,void 0,(function(){var t,n=this;return i(this,(function(o){switch(o.label){case 0:return null==e||0===e.length?[2,Promise.resolve([])]:(t=e.map((function(e){return r(n,void 0,void 0,(function(){var t;return i(this,(function(n){switch(n.label){case 0:return[4,this.cryptoService.encrypt(e.password)];case 1:return t=n.sent(),[2,new s.GeneratedPasswordHistory(t.encryptedString,e.date)]}}))}))})),[4,Promise.all(t)]);case 1:return[2,o.sent()]}}))}))},e.prototype.decryptHistory=function(e){return r(this,void 0,void 0,(function(){var t,n=this;return i(this,(function(o){switch(o.label){case 0:return null==e||0===e.length?[2,Promise.resolve([])]:(t=e.map((function(e){return r(n,void 0,void 0,(function(){var t;return i(this,(function(n){switch(n.label){case 0:return[4,this.cryptoService.decryptToUtf8(new a.EncString(e.password))];case 1:return t=n.sent(),[2,new s.GeneratedPasswordHistory(t,e.date)]}}))}))})),[4,Promise.all(t)]);case 1:return[2,o.sent()]}}))}))},e.prototype.matchesPrevious=function(e,t){return null!=t&&0!==t.length&&t[t.length-1].password===e},e.prototype.shuffleArray=function(e){return r(this,void 0,void 0,(function(){var t,n,r;return i(this,(function(i){switch(i.label){case 0:t=e.length-1,i.label=1;case 1:return t>0?[4,this.cryptoService.randomNumber(0,t)]:[3,4];case 2:n=i.sent(),r=[e[n],e[t]],e[t]=r[0],e[n]=r[1],i.label=3;case 3:return t--,[3,1];case 4:return[2]}}))}))},e.prototype.sanitizePasswordLength=function(e,t){var n=0,r=0,i=e.minNumber,o=e.minSpecial;e.uppercase&&e.minUppercase<=0?n=1:e.uppercase||(n=0),e.lowercase&&e.minLowercase<=0?r=1:e.lowercase||(r=0),e.number&&e.minNumber<=0?i=1:e.number||(i=0),e.special&&e.minSpecial<=0?o=1:e.special||(o=0),(!e.length||e.length<1)&&(e.length=10);var a=n+r+i+o;e.length0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=e.revisionDate&&(n=!1),a=!1,n&&(t?(n=null!=r,a=!0):null==e.collectionIds||null==e.organizationId?n=null==r:(n=!1,a=!0)),!n&&a&&null!=e.organizationId&&null!=e.collectionIds&&e.collectionIds.length>0?[4,this.collectionService.getAll()]:[3,5];case 4:if(null!=(s=i.sent()))for(l=0;l-1){n=!0;break}i.label=5;case 5:return n?[4,this.apiService.getCipher(e.id)]:[3,9];case 6:return null==(c=i.sent())?[3,9]:[4,this.userService.getUserId()];case 7:return p=i.sent(),[4,this.cipherService.upsert(new o.CipherData(c,p))];case 8:return i.sent(),this.messagingService.send("syncedUpsertedCipher",{cipherId:e.id}),[2,this.syncCompleted(!0)];case 9:return[3,13];case 10:return null!=(u=i.sent())&&404===u.statusCode&&t?[4,this.cipherService.delete(e.id)]:[3,12];case 11:return i.sent(),this.messagingService.send("syncedDeletedCipher",{cipherId:e.id}),[2,this.syncCompleted(!0)];case 12:return[3,13];case 13:return[2,this.syncCompleted(!1)]}}))}))},e.prototype.syncDeleteCipher=function(e){return r(this,void 0,void 0,(function(){return i(this,(function(t){switch(t.label){case 0:return this.syncStarted(),[4,this.userService.isAuthenticated()];case 1:return t.sent()?[4,this.cipherService.delete(e.id)]:[3,3];case 2:return t.sent(),this.messagingService.send("syncedDeletedCipher",{cipherId:e.id}),[2,this.syncCompleted(!0)];case 3:return[2,this.syncCompleted(!1)]}}))}))},e.prototype.syncUpsertSend=function(e,t){return r(this,void 0,void 0,(function(){var n,r,o;return i(this,(function(i){switch(i.label){case 0:return this.syncStarted(),[4,this.userService.isAuthenticated()];case 1:if(!i.sent())return[3,9];i.label=2;case 2:return i.trys.push([2,8,,9]),[4,this.sendService.get(e.id)];case 3:return n=i.sent(),!t&&null==n||t&&null!=n&&n.revisionDate0&&e.push(t.domains)})),[2,this.settingsService.setEquivalentDomains(e)]}))}))},e.prototype.syncPolicies=function(e){return r(this,void 0,void 0,(function(){var t;return i(this,(function(n){switch(n.label){case 0:return t={},null!=e&&e.forEach((function(e){t[e.id]=new c.PolicyData(e)})),[4,this.policyService.replace(t)];case 1:return[2,n.sent()]}}))}))},e}();t.SyncService=d},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(160),i=n(950),o=n(951),a=function(e,t){if(null!=e)switch(this.id=e.id,this.accessId=e.accessId,this.userId=t,this.type=e.type,this.name=e.name,this.notes=e.notes,this.key=e.key,this.maxAccessCount=e.maxAccessCount,this.accessCount=e.accessCount,this.revisionDate=e.revisionDate,this.expirationDate=e.expirationDate,this.deletionDate=e.deletionDate,this.password=e.password,this.disabled=e.disable,this.hideEmail=e.hideEmail,this.type){case r.SendType.Text:this.text=new o.SendTextData(e.text);break;case r.SendType.File:this.file=new i.SendFileData(e.file)}};t.SendData=a},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]10?r=10:u>0&&(r=u)}catch(I){}if(p.has("period")&&null!=p.get("period"))try{(d=parseInt(p.get("period").trim(),null))>0&&(t=d)}catch(E){}p.has("secret")&&null!=p.get("secret")&&(o=p.get("secret")),p.has("algorithm")&&null!=p.get("algorithm")&&("sha1"!==(m=p.get("algorithm").toLowerCase())&&"sha256"!==m&&"sha512"!==m||(n=m))}else c&&(o=e.substr("steam://".length),r=5);return h=Math.round((new Date).getTime()/1e3),f=this.leftPad(this.decToHex(Math.floor(h/t)),16,"0"),v=a.Utils.fromHexToArray(f),(y=this.b32ToBytes(o)).length&&v.length?[4,this.sign(y,v,n)]:[2,null];case 1:if(0===(g=i.sent()).length)return[2,null];if(x=15&g[g.length-1],b=(127&g[x])<<24|(255&g[x+1])<<16|(255&g[x+2])<<8|255&g[x+3],S="",c)for(w=2147483647&b,C=0;C=e.length&&(e=Array(t+1-e.length).join(n)+e),e},e.prototype.decToHex=function(e){return(e<15.5?"0":"")+Math.round(e).toString(16)},e.prototype.b32ToHex=function(e){e=e.toUpperCase();for(var t="",n=0;n0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=n?[4,this.storageService.get(o.ConstantsService.vaultTimeoutActionKey)]:[3,12]);case 7:return"logOut"!==r.sent()?[3,9]:[4,this.logOut()];case 8:return r.sent(),[3,11];case 9:return[4,this.lock(!0)];case 10:r.sent(),r.label=11;case 11:r.label=12;case 12:return[2]}}))}))},e.prototype.lock=function(e){return void 0===e&&(e=!1),r(this,void 0,void 0,(function(){return i(this,(function(t){switch(t.label){case 0:return[4,this.userService.isAuthenticated()];case 1:return t.sent()?(this.biometricLocked=!0,e?[4,this.isBiometricLockSet()]:[3,5]):[2];case 2:return t.sent()&&this.platformUtilsService.supportsSecureStorage()?(this.messagingService.send("locked"),null==this.lockedCallback?[3,4]:[4,this.lockedCallback()]):[3,5];case 3:t.sent(),t.label=4;case 4:return[2];case 5:return[4,Promise.all([this.cryptoService.clearKey(),this.cryptoService.clearOrgKeys(!0),this.cryptoService.clearKeyPair(!0),this.cryptoService.clearEncKey(!0)])];case 6:return t.sent(),this.folderService.clearCache(),this.cipherService.clearCache(),this.collectionService.clearCache(),this.searchService.clearIndex(),this.messagingService.send("locked"),null==this.lockedCallback?[3,8]:[4,this.lockedCallback()];case 7:t.sent(),t.label=8;case 8:return[2]}}))}))},e.prototype.logOut=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return null==this.loggedOutCallback?[3,2]:[4,this.loggedOutCallback()];case 1:e.sent(),e.label=2;case 2:return[2]}}))}))},e.prototype.setVaultTimeoutOptions=function(e,t){return r(this,void 0,void 0,(function(){return i(this,(function(n){switch(n.label){case 0:return[4,this.storageService.save(o.ConstantsService.vaultTimeoutKey,e)];case 1:return n.sent(),[4,this.storageService.save(o.ConstantsService.vaultTimeoutActionKey,t)];case 2:return n.sent(),[4,this.cryptoService.toggleKey()];case 3:return n.sent(),[4,this.tokenService.toggleTokens()];case 4:return n.sent(),[2]}}))}))},e.prototype.isPinLockSet=function(){return r(this,void 0,void 0,(function(){var e,t;return i(this,(function(n){switch(n.label){case 0:return[4,this.storageService.get(o.ConstantsService.protectedPin)];case 1:return e=n.sent(),[4,this.storageService.get(o.ConstantsService.pinProtectedKey)];case 2:return t=n.sent(),[2,[null!=e,null!=t]]}}))}))},e.prototype.isBiometricLockSet=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return[4,this.storageService.get(o.ConstantsService.biometricUnlockKey)];case 1:return[2,e.sent()]}}))}))},e.prototype.clear=function(){return this.pinProtectedKey=null,this.storageService.remove(o.ConstantsService.protectedPin)},e}();t.VaultTimeoutService=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(710),i=n(955),o=function(){function e(e,t){void 0===t&&(t=null),this.isDev=e,this.filter=t,this.timersMap=new Map}return e.prototype.debug=function(e){this.isDev&&this.write(r.LogLevelType.Debug,e)},e.prototype.info=function(e){this.write(r.LogLevelType.Info,e)},e.prototype.warning=function(e){this.write(r.LogLevelType.Warning,e)},e.prototype.error=function(e){this.write(r.LogLevelType.Error,e)},e.prototype.write=function(e,t){if(null==this.filter||!this.filter(e))switch(e){case r.LogLevelType.Debug:case r.LogLevelType.Info:console.log(t);break;case r.LogLevelType.Warning:console.warn(t);break;case r.LogLevelType.Error:console.error(t)}},e.prototype.time=function(e){void 0===e&&(e="default"),this.timersMap.has(e)||this.timersMap.set(e,i())},e.prototype.timeEnd=function(e){void 0===e&&(e="default");var t=i(this.timersMap.get(e));return this.timersMap.delete(e),this.write(r.LogLevelType.Info,e+": "+(1e3*t[0]+t[1]/1e7)+"ms"),t},e}();t.ConsoleLogService=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.Debug=0]="Debug",e[e.Info=1]="Info",e[e.Warning=2]="Warning",e[e.Error=3]="Error"}(t.LogLevelType||(t.LogLevelType={}))},,function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.build=function(t){this.id=t.id,e.prototype.build.call(this,t),this.collectionIds=t.collectionIds},t}(n(960).Cipher);t.CipherWithIds=o},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.build=function(t){this.id=t.id,e.prototype.build.call(this,t)},t}(n(967).Collection);t.CollectionWithId=o},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.build=function(t){this.id=t.id,e.prototype.build.call(this,t)},t}(n(968).Folder);t.FolderWithId=o},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(26),a=n(25),s=n(39),l=n(118),c=n(1007);t.IgnoredProperties=["ainfo","autosubmit","notesplain","ps","scope","tags","title","uuid","notes"];var p=function(e){function n(){var t=null!==e&&e.apply(this,arguments)||this;return t.loginPropertyParsers=[t.setLoginUsername,t.setLoginPassword,t.setLoginUris],t.creditCardPropertyParsers=[t.setCreditCardNumber,t.setCreditCardVerification,t.setCreditCardCardholderName,t.setCreditCardExpiry],t.identityPropertyParsers=[t.setIdentityFirstName,t.setIdentityInitial,t.setIdentityLastName,t.setIdentityUserName,t.setIdentityEmail,t.setIdentityPhone,t.setIdentityCompany],t}return i(n,e),n.prototype.parse=function(e){var t=this,n=new o.ImportResult,r=this.parseCsv(e,!0,{quoteChar:'"',escapeChar:"\\"});return null==r?(n.success=!1,Promise.resolve(n)):(r.forEach((function(e){if(!t.isNullOrWhitespace(t.getProp(e,"title"))){var r=t.initLoginCipher();r.name=t.getValueOrDefault(t.getProp(e,"title"),"--"),t.setNotes(e,r),t.setCipherType(e,r);var i=null;for(var o in e)if(e.hasOwnProperty(o)&&!t.isNullOrWhitespace(e[o])){var a=new c.CipherImportContext(e,o,r);r.type===s.CipherType.Login&&t.setKnownLoginValue(a)||r.type===s.CipherType.Card&&t.setKnownCreditCardValue(a)||r.type===s.CipherType.Identity&&t.setKnownIdentityValue(a)||(i=t.setUnknownValue(a,i))}r.type===s.CipherType.Login&&!t.isNullOrWhitespace(i)&&t.isNullOrWhitespace(r.login.username)&&-1===i.indexOf("://")&&(r.login.username=i),t.convertToNoteIfNeeded(r),t.cleanupCipher(r),n.ciphers.push(r)}})),n.success=!0,Promise.resolve(n))},n.prototype.getProp=function(e,t){return Object.entries(e).reduce((function(e,t){return e[t[0].toLowerCase()]=t[1],e}),{})[t.toLowerCase()]},n.prototype.getPropByRegexp=function(e,t){var n=Object.keys(e).reduce((function(e,n){return n.match(t)&&e.push(n),e}),[]);return 0===n.length?null:e[n[0]]},n.prototype.getPropIncluding=function(e,t){var n=Object.keys(e).reduce((function(e,n){return n.toLowerCase().includes(t.toLowerCase())&&e.push(n),e}),[]);return 0===n.length?null:e[n[0]]},n.prototype.setNotes=function(e,t){t.notes=this.getValueOrDefault(this.getProp(e,"notesPlain"),"")+"\n"+this.getValueOrDefault(this.getProp(e,"notes"),"")+"\n",t.notes.trim()},n.prototype.setKnownLoginValue=function(e){var t=this;return this.loginPropertyParsers.reduce((function(n,r){return n||(n=r.bind(t)(e)),n}),!1)},n.prototype.setKnownCreditCardValue=function(e){var t=this;return this.creditCardPropertyParsers.reduce((function(n,r){return n||(n=r.bind(t)(e)),n}),!1)},n.prototype.setKnownIdentityValue=function(e){var t=this;return this.identityPropertyParsers.reduce((function(n,r){return n||(n=r.bind(t)(e)),n}),!1)},n.prototype.setUnknownValue=function(e,n){if(-1===t.IgnoredProperties.indexOf(e.lowerProperty)&&!e.lowerProperty.startsWith("section:")&&!e.lowerProperty.startsWith("section ")){if(null==n&&"email"===e.lowerProperty)return e.importRecord[e.property];if("created date"===e.lowerProperty||"modified date"===e.lowerProperty){var r=new Date(1e3*parseInt(e.importRecord[e.property],10)).toUTCString();return this.processKvp(e.cipher,"1Password "+e.property,r),null}e.lowerProperty.includes("password")||e.lowerProperty.includes("key")||e.lowerProperty.includes("secret")?this.processKvp(e.cipher,e.property,e.importRecord[e.property],l.FieldType.Hidden):this.processKvp(e.cipher,e.property,e.importRecord[e.property])}return null},n.prototype.setIdentityFirstName=function(e){return!(!this.isNullOrWhitespace(e.cipher.identity.firstName)||!e.lowerProperty.includes("first name"))&&(e.cipher.identity.firstName=e.importRecord[e.property],!0)},n.prototype.setIdentityInitial=function(e){return!(!this.isNullOrWhitespace(e.cipher.identity.middleName)||!e.lowerProperty.includes("initial"))&&(e.cipher.identity.middleName=e.importRecord[e.property],!0)},n.prototype.setIdentityLastName=function(e){return!(!this.isNullOrWhitespace(e.cipher.identity.lastName)||!e.lowerProperty.includes("last name"))&&(e.cipher.identity.lastName=e.importRecord[e.property],!0)},n.prototype.setIdentityUserName=function(e){return!(!this.isNullOrWhitespace(e.cipher.identity.username)||!e.lowerProperty.includes("username"))&&(e.cipher.identity.username=e.importRecord[e.property],!0)},n.prototype.setIdentityCompany=function(e){return!(!this.isNullOrWhitespace(e.cipher.identity.company)||!e.lowerProperty.includes("company"))&&(e.cipher.identity.company=e.importRecord[e.property],!0)},n.prototype.setIdentityPhone=function(e){return!(!this.isNullOrWhitespace(e.cipher.identity.phone)||!e.lowerProperty.includes("default phone"))&&(e.cipher.identity.phone=e.importRecord[e.property],!0)},n.prototype.setIdentityEmail=function(e){return!(!this.isNullOrWhitespace(e.cipher.identity.email)||!e.lowerProperty.includes("email"))&&(e.cipher.identity.email=e.importRecord[e.property],!0)},n.prototype.setCreditCardNumber=function(e){return!(!this.isNullOrWhitespace(e.cipher.card.number)||!e.lowerProperty.includes("number"))&&(e.cipher.card.number=e.importRecord[e.property],e.cipher.card.brand=this.getCardBrand(e.cipher.card.number),!0)},n.prototype.setCreditCardVerification=function(e){return!(!this.isNullOrWhitespace(e.cipher.card.code)||!e.lowerProperty.includes("verification number"))&&(e.cipher.card.code=e.importRecord[e.property],!0)},n.prototype.setCreditCardCardholderName=function(e){return!(!this.isNullOrWhitespace(e.cipher.card.cardholderName)||!e.lowerProperty.includes("cardholder name"))&&(e.cipher.card.cardholderName=e.importRecord[e.property],!0)},n.prototype.setCreditCardExpiry=function(e){return!(!this.isNullOrWhitespace(e.cipher.card.expiration)||!e.lowerProperty.includes("expiry date")||7!==e.importRecord[e.property].length)&&(e.cipher.card.expMonth=e.importRecord[e.property].substr(0,2),"0"===e.cipher.card.expMonth[0]&&(e.cipher.card.expMonth=e.cipher.card.expMonth.substr(1,1)),e.cipher.card.expYear=e.importRecord[e.property].substr(3,4),!0)},n.prototype.setLoginPassword=function(e){return!(!this.isNullOrWhitespace(e.cipher.login.password)||"password"!==e.lowerProperty)&&(e.cipher.login.password=e.importRecord[e.property],!0)},n.prototype.setLoginUsername=function(e){return!(!this.isNullOrWhitespace(e.cipher.login.username)||"username"!==e.lowerProperty)&&(e.cipher.login.username=e.importRecord[e.property],!0)},n.prototype.setLoginUris=function(e){if((null==e.cipher.login.uris||0===e.cipher.login.uris.length)&&"urls"===e.lowerProperty){var t=e.importRecord[e.property].split(this.newLineRegex);return e.cipher.login.uris=this.makeUriArray(t),!0}return"url"===e.lowerProperty&&(null==e.cipher.login.uris&&(e.cipher.login.uris=[]),e.cipher.login.uris.concat(this.makeUriArray(e.importRecord[e.property])),!0)},n}(a.BaseImporter);t.OnePasswordCsvImporter=p},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(596);t.AttachmentView=r.AttachmentView;var i=n(88);t.CardView=i.CardView;var o=n(143);t.CipherView=o.CipherView;var a=n(209);t.FieldView=a.FieldView;var s=n(144);t.IdentityView=s.IdentityView;var l=n(258);t.LoginUriView=l.LoginUriView;var c=n(159);t.LoginView=c.LoginView;var p=n(94);t.SecureNoteView=p.SecureNoteView;var u=n(1008);t.View=u.View},,,,,,,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.SyncCipherUpdate=0]="SyncCipherUpdate",e[e.SyncCipherCreate=1]="SyncCipherCreate",e[e.SyncLoginDelete=2]="SyncLoginDelete",e[e.SyncFolderDelete=3]="SyncFolderDelete",e[e.SyncCiphers=4]="SyncCiphers",e[e.SyncVault=5]="SyncVault",e[e.SyncOrgKeys=6]="SyncOrgKeys",e[e.SyncFolderCreate=7]="SyncFolderCreate",e[e.SyncFolderUpdate=8]="SyncFolderUpdate",e[e.SyncCipherDelete=9]="SyncCipherDelete",e[e.SyncSettings=10]="SyncSettings",e[e.LogOut=11]="LogOut",e[e.SyncSendCreate=12]="SyncSendCreate",e[e.SyncSendUpdate=13]="SyncSendUpdate",e[e.SyncSendDelete=14]="SyncSendDelete"}(t.NotificationType||(t.NotificationType={}))},,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(0);n(754),n(273),n(530),n(755);var i=n(756),o=n(72);r.enableProdMode(),o.platformBrowser().bootstrapModule(i.AppModule,{preserveWhitespaces:!0})},,function(e,t,n){},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n(757);var r=n(9),i=n(214),o=n(822),a=n(267),s=(n(0),n(13)),l=n(72),c=n(907),p=n(908),u=n(1065),d=n(84),m=n(139),h=n(250),f=n(460),v=n(540),y=n(459),g=n(541),x=n(544),b=n(545),S=n(546),w=n(547),C=n(548),I=n(549),E=n(550),P=n(551),k=n(552),_=n(553),A=n(554),O=n(557),T=n(556),M=n(560),B=n(561),D=n(563),R=n(562),V=n(467),j=n(466),F=n(565),U=n(567),N=n(566),z=n(568),L=n(569),G=n(573),K=n(575),q=n(570),W=n(571),H=n(572),$=n(576),Y=n(585),Q=n(583),J=n(579),X=n(584),Z=n(580),ee=n(582),te=n(586),ne=n(587),re=n(593),ie=n(594),oe=n(606),ae=n(607),se=n(608),le=n(609),ce=n(610),pe=n(611),ue=n(481),de=n(613),me=n(505),he=n(622),fe=n(507),ve=n(612),ye=n(629),ge=n(631),xe=n(630),be=n(633),Se=n(472),we=n(473),Ce=n(476),Ie=n(469),Ee=n(637),Pe=n(646),ke=n(639),_e=n(647),Ae=n(634),Oe=n(635),Te=n(648),Me=n(679),Be=n(674),De=n(680),Re=n(681),Ve=n(670),je=n(676),Fe=n(675),Ue=n(650),Ne=n(649),ze=n(283),Le=n(298),Ge=n(117),Ke=n(651),qe=n(636),We=n(470),He=n(652),$e=n(142),Ye=n(588),Qe=n(477),Je=n(589),Xe=n(590),Ze=n(478),et=n(188),tt=n(591),nt=n(592),rt=n(659),it=n(474),ot=n(471),at=n(653),st=n(663),lt=n(654),ct=n(479),pt=n(480),ut=n(491),dt=n(493),mt=n(656),ht=n(655),ft=n(494),vt=n(657),yt=n(495),gt=n(496),xt=n(260),bt=n(497),St=n(508),wt=n(624),Ct=n(626),It=n(627),Et=n(628),Pt=n(263),kt=n(506),_t=n(660),At=n(294),Ot=n(662),Tt=n(661),Mt=n(658),Bt=n(24),Dt=n(107),Rt=n(17),Vt=n(16),jt=n(65),Ft=n(1066),Ut=n(1067),Nt=n(605),zt=n(45),Lt=n(513),Gt=n(37),Kt=n(53),qt=n(291),Wt=n(514),Ht=n(10),$t=n(1068),Yt=n(252),Qt=n(4),Jt=n(1069),Xt=n(1070),Zt=n(1071),en=n(1072),tn=n(1073),nn=n(1074),rn=n(1075),on=n(1076),an=n(1077),sn=n(1078),ln=n(1079),cn=n(1080),pn=n(1081),un=n(1082),dn=n(1083),mn=n(1084),hn=n(1085),fn=n(1086),vn=n(1087),yn=n(1088),gn=n(1089),xn=n(1090),bn=n(1091),Sn=n(1092),wn=n(1093),Cn=n(1094),In=n(0),En=n(9);Qt.registerLocaleData(Jt.default,"ca"),Qt.registerLocaleData(Xt.default,"cs"),Qt.registerLocaleData(Zt.default,"da"),Qt.registerLocaleData(en.default,"de"),Qt.registerLocaleData(tn.default,"el"),Qt.registerLocaleData(nn.default,"en-GB"),Qt.registerLocaleData(rn.default,"es"),Qt.registerLocaleData(on.default,"et"),Qt.registerLocaleData(an.default,"fr"),Qt.registerLocaleData(sn.default,"he"),Qt.registerLocaleData(ln.default,"it"),Qt.registerLocaleData(cn.default,"ja"),Qt.registerLocaleData(pn.default,"ko"),Qt.registerLocaleData(un.default,"lv"),Qt.registerLocaleData(dn.default,"ml"),Qt.registerLocaleData(mn.default,"nb"),Qt.registerLocaleData(hn.default,"nl"),Qt.registerLocaleData(fn.default,"pl"),Qt.registerLocaleData(vn.default,"pt-BR"),Qt.registerLocaleData(yn.default,"pt-PT"),Qt.registerLocaleData(gn.default,"ru"),Qt.registerLocaleData(xn.default,"sk"),Qt.registerLocaleData(bn.default,"sv"),Qt.registerLocaleData(Sn.default,"uk"),Qt.registerLocaleData(wn.default,"zh-CN"),Qt.registerLocaleData(Cn.default,"zh-TW");var Pn=function(){function e(){}return e.ɵmod=In.ɵɵdefineNgModule({type:e,bootstrap:[u.AppComponent]}),e.ɵinj=In.ɵɵdefineInjector({factory:function(t){return new(t||e)},providers:[Qt.DatePipe],imports:[[l.BrowserModule,c.BrowserAnimationsModule,s.FormsModule,o.AppRoutingModule,p.ServicesModule,r.ToasterModule.forRoot(),i.InfiniteScrollModule,a.DragDropModule]]}),e}();t.AppModule=Pn,("undefined"==typeof ngJitMode||ngJitMode)&&In.ɵɵsetNgModuleScope(Pn,{declarations:[Rt.A11yTitleDirective,b.AcceptEmergencyComponent,ye.AccessComponent,S.AcceptOrganizationComponent,be.AccountComponent,_.SetPasswordComponent,Se.AddCreditComponent,xt.AddEditComponent,we.AdjustPaymentComponent,Y.AdjustSeatsComponent,Ce.AdjustStorageComponent,Vt.ApiActionDirective,Ie.ApiKeyComponent,u.AppComponent,bt.AttachmentsComponent,jt.AutofocusDirective,m.AvatarComponent,Ft.BlurClickDirective,Ut.BoxRowDirective,lt.BreachReportComponent,St.BulkActionsComponent,wt.BulkDeleteComponent,Ct.BulkMoveComponent,It.BulkRestoreComponent,Et.BulkShareComponent,Bt.CalloutComponent,Ee.ChangeEmailComponent,Pe.ChangeKdfComponent,ke.ChangePasswordComponent,Q.ChangePlanComponent,Pt.CiphersComponent,kt.CollectionsComponent,Wt.ColorPasswordPipe,_e.CreateOrganizationComponent,Ae.DeauthorizeSessionsComponent,Oe.DeleteAccountComponent,J.DeleteOrganizationComponent,Te.DomainRulesComponent,X.DownloadLicenseComponent,Me.EmergencyAccessAddEditComponent,Be.EmergencyAccessAttachmentsComponent,je.EmergencyAccessComponent,De.EmergencyAccessConfirmComponent,Re.EmergencyAccessTakeoverComponent,Ve.EmergencyAccessViewComponent,Fe.EmergencyAddEditComponent,ct.ExportComponent,pt.ExposedPasswordsReportComponent,Nt.FallbackSrcDirective,_t.FolderAddEditComponent,f.FooterComponent,v.FrontendLayoutComponent,At.GroupingsComponent,w.HintComponent,Ht.I18nPipe,Dt.IconComponent,ut.ImportComponent,dt.InactiveTwoFactorReportComponent,zt.InputVerbatimDirective,Ue.LinkSsoComponent,C.LockComponent,I.LoginComponent,d.ModalComponent,y.NavbarComponent,Ne.OptionsComponent,$.AccountComponent,ue.AddEditComponent,Z.OrganizationBillingComponent,ze.OrganizationPlansComponent,ee.OrganizationSubscriptionComponent,de.AttachmentsComponent,me.CiphersComponent,D.CollectionAddEditComponent,he.CollectionsComponent,V.EntityEventsComponent,j.EntityUsersComponent,F.EventsComponent,re.ExportComponent,ie.ExposedPasswordsReportComponent,oe.ImportComponent,ae.InactiveTwoFactorReportComponent,U.GroupAddEditComponent,fe.GroupingsComponent,N.GroupsComponent,R.CollectionsComponent,z.ManageComponent,L.PeopleComponent,K.PolicyEditComponent,G.PoliciesComponent,se.ReusedPasswordsReportComponent,te.SettingsComponent,le.ToolsComponent,ne.TwoFactorSetupComponent,q.UserAddEditComponent,W.UserConfirmComponent,H.UserGroupsComponent,Le.OrganizationsComponent,g.OrganizationLayoutComponent,ce.UnsecuredWebsitesReportComponent,ve.VaultComponent,pe.WeakPasswordsReportComponent,ht.PasswordGeneratorComponent,mt.PasswordGeneratorHistoryComponent,h.PasswordStrengthComponent,Ge.PaymentComponent,Ke.PremiumComponent,qe.ProfileComponent,We.PurgeVaultComponent,E.RecoverDeleteComponent,P.RecoverTwoFactorComponent,k.RegisterComponent,ft.ReusedPasswordsReportComponent,$t.SearchCiphersPipe,Yt.SearchPipe,Lt.SelectCopyDirective,ge.AddEditComponent,xe.SendComponent,Ot.SendInfoComponent,He.SettingsComponent,Tt.ShareComponent,A.SsoComponent,Gt.StopClickDirective,Kt.StopPropDirective,$e.TaxInfoComponent,vt.ToolsComponent,qt.TrueFalseValueDirective,Ye.TwoFactorAuthenticatorComponent,T.TwoFactorComponent,Qe.TwoFactorDuoComponent,Je.TwoFactorEmailComponent,O.TwoFactorOptionsComponent,Xe.TwoFactorRecoveryComponent,Ze.TwoFactorSetupComponent,et.TwoFactorVerifyComponent,tt.TwoFactorWebAuthnComponent,nt.TwoFactorYubiKeyComponent,yt.UnsecuredWebsitesReportComponent,rt.UpdateKeyComponent,it.UpdateLicenseComponent,ot.UserBillingComponent,x.UserLayoutComponent,at.UserSubscriptionComponent,Mt.VaultComponent,st.VerifyEmailComponent,M.VerifyEmailTokenComponent,B.VerifyRecoverDeleteComponent,gt.WeakPasswordsReportComponent],imports:[l.BrowserModule,c.BrowserAnimationsModule,s.FormsModule,o.AppRoutingModule,p.ServicesModule,En.ToasterModule,i.InfiniteScrollModule,a.DragDropModule]})},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(0);var r=n(8),i=n(540),o=n(541),a=n(544),s=n(545),l=n(546),c=n(547),p=n(548),u=n(549),d=n(550),m=n(551),h=n(552),f=n(553),v=n(554),y=n(556),g=n(560),x=n(561),b=n(562),S=n(565),w=n(566),C=n(568),I=n(569),E=n(573),P=n(576),k=n(580),_=n(582),A=n(586),O=n(587),T=n(593),M=n(594),B=n(606),D=n(607),R=n(608),V=n(609),j=n(610),F=n(611),U=n(612),N=n(629),z=n(630),L=n(633),G=n(647),K=n(648),q=n(649),W=n(298),H=n(651),$=n(652),Y=n(478),Q=n(471),J=n(653),X=n(654),Z=n(479),ee=n(480),te=n(491),ne=n(493),re=n(655),ie=n(494),oe=n(657),ae=n(495),se=n(496),le=n(658),ce=n(664),pe=n(665),ue=n(667),de=n(668),me=n(669),he=n(666),fe=n(670),ve=n(676),ye=n(0),ge=n(8),xe=[{path:"",component:i.FrontendLayoutComponent,children:[{path:"",pathMatch:"full",component:u.LoginComponent,canActivate:[me.UnauthGuardService]},{path:"2fa",component:y.TwoFactorComponent,canActivate:[me.UnauthGuardService]},{path:"register",component:h.RegisterComponent,canActivate:[me.UnauthGuardService],data:{titleId:"createAccount"}},{path:"sso",component:v.SsoComponent,canActivate:[me.UnauthGuardService],data:{titleId:"enterpriseSingleSignOn"}},{path:"set-password",component:f.SetPasswordComponent,data:{titleId:"setMasterPassword"}},{path:"hint",component:c.HintComponent,canActivate:[me.UnauthGuardService],data:{titleId:"passwordHint"}},{path:"lock",component:p.LockComponent,canActivate:[de.LockGuardService]},{path:"verify-email",component:g.VerifyEmailTokenComponent},{path:"accept-organization",component:l.AcceptOrganizationComponent,data:{titleId:"joinOrganization"}},{path:"accept-emergency",component:s.AcceptEmergencyComponent,data:{titleId:"acceptEmergency"}},{path:"recover",pathMatch:"full",redirectTo:"recover-2fa"},{path:"recover-2fa",component:m.RecoverTwoFactorComponent,canActivate:[me.UnauthGuardService],data:{titleId:"recoverAccountTwoStep"}},{path:"recover-delete",component:d.RecoverDeleteComponent,canActivate:[me.UnauthGuardService],data:{titleId:"deleteAccount"}},{path:"verify-recover-delete",component:x.VerifyRecoverDeleteComponent,canActivate:[me.UnauthGuardService],data:{titleId:"deleteAccount"}},{path:"send/:sendId/:key",component:N.AccessComponent,data:{title:"Bitwarden Send"}}]},{path:"",component:a.UserLayoutComponent,canActivate:[ue.AuthGuardService],children:[{path:"vault",component:le.VaultComponent,data:{titleId:"myVault"}},{path:"sends",component:z.SendComponent,data:{title:"Send"}},{path:"settings",component:$.SettingsComponent,children:[{path:"",pathMatch:"full",redirectTo:"account"},{path:"account",component:L.AccountComponent,data:{titleId:"myAccount"}},{path:"options",component:q.OptionsComponent,data:{titleId:"options"}},{path:"domain-rules",component:K.DomainRulesComponent,data:{titleId:"domainRules"}},{path:"two-factor",component:Y.TwoFactorSetupComponent,data:{titleId:"twoStepLogin"}},{path:"premium",component:H.PremiumComponent,data:{titleId:"goPremium"}},{path:"billing",component:Q.UserBillingComponent,data:{titleId:"billing"}},{path:"subscription",component:J.UserSubscriptionComponent,data:{titleId:"premiumMembership"}},{path:"organizations",component:W.OrganizationsComponent,data:{titleId:"organizations"}},{path:"create-organization",component:G.CreateOrganizationComponent,data:{titleId:"newOrganization"}},{path:"emergency-access",children:[{path:"",component:ve.EmergencyAccessComponent,data:{titleId:"emergencyAccess"}},{path:":id",component:fe.EmergencyAccessViewComponent,data:{titleId:"emergencyAccess"}}]}]},{path:"tools",component:oe.ToolsComponent,canActivate:[ue.AuthGuardService],children:[{path:"",pathMatch:"full",redirectTo:"generator"},{path:"import",component:te.ImportComponent,data:{titleId:"importData"}},{path:"export",component:Z.ExportComponent,data:{titleId:"exportVault"}},{path:"generator",component:re.PasswordGeneratorComponent,data:{titleId:"passwordGenerator"}},{path:"breach-report",component:X.BreachReportComponent,data:{titleId:"dataBreachReport"}},{path:"reused-passwords-report",component:ie.ReusedPasswordsReportComponent,data:{titleId:"reusedPasswordsReport"}},{path:"unsecured-websites-report",component:ae.UnsecuredWebsitesReportComponent,data:{titleId:"unsecuredWebsitesReport"}},{path:"weak-passwords-report",component:se.WeakPasswordsReportComponent,data:{titleId:"weakPasswordsReport"}},{path:"exposed-passwords-report",component:ee.ExposedPasswordsReportComponent,data:{titleId:"exposedPasswordsReport"}},{path:"inactive-two-factor-report",component:ne.InactiveTwoFactorReportComponent,data:{titleId:"inactive2faReport"}}]}]},{path:"organizations/:organizationId",component:o.OrganizationLayoutComponent,canActivate:[ue.AuthGuardService,ce.OrganizationGuardService],children:[{path:"",pathMatch:"full",redirectTo:"vault"},{path:"vault",component:U.VaultComponent,data:{titleId:"vault"}},{path:"tools",component:V.ToolsComponent,canActivate:[pe.OrganizationTypeGuardService],data:{permissions:[he.Permissions.AccessImportExport,he.Permissions.AccessReports]},children:[{path:"",pathMatch:"full",redirectTo:"import"},{path:"import",component:B.ImportComponent,canActivate:[pe.OrganizationTypeGuardService],data:{titleId:"importData",permissions:[he.Permissions.AccessImportExport]}},{path:"export",component:T.ExportComponent,canActivate:[pe.OrganizationTypeGuardService],data:{titleId:"exportVault",permissions:[he.Permissions.AccessImportExport]}},{path:"exposed-passwords-report",component:M.ExposedPasswordsReportComponent,canActivate:[pe.OrganizationTypeGuardService],data:{titleId:"exposedPasswordsReport",permissions:[he.Permissions.AccessReports]}},{path:"inactive-two-factor-report",component:D.InactiveTwoFactorReportComponent,canActivate:[pe.OrganizationTypeGuardService],data:{titleId:"inactive2faReport",permissions:[he.Permissions.AccessReports]}},{path:"reused-passwords-report",component:R.ReusedPasswordsReportComponent,canActivate:[pe.OrganizationTypeGuardService],data:{titleId:"reusedPasswordsReport",permissions:[he.Permissions.AccessReports]}},{path:"unsecured-websites-report",component:j.UnsecuredWebsitesReportComponent,canActivate:[pe.OrganizationTypeGuardService],data:{titleId:"unsecuredWebsitesReport",permissions:[he.Permissions.AccessReports]}},{path:"weak-passwords-report",component:F.WeakPasswordsReportComponent,canActivate:[pe.OrganizationTypeGuardService],data:{titleId:"weakPasswordsReport",permissions:[he.Permissions.AccessReports]}}]},{path:"manage",component:C.ManageComponent,canActivate:[pe.OrganizationTypeGuardService],data:{permissions:[he.Permissions.ManageAssignedCollections,he.Permissions.ManageAllCollections,he.Permissions.AccessEventLogs,he.Permissions.ManageGroups,he.Permissions.ManageUsers,he.Permissions.ManagePolicies]},children:[{path:"",pathMatch:"full",redirectTo:"people"},{path:"collections",component:b.CollectionsComponent,canActivate:[pe.OrganizationTypeGuardService],data:{titleId:"collections",permissions:[he.Permissions.ManageAssignedCollections,he.Permissions.ManageAllCollections]}},{path:"events",component:S.EventsComponent,canActivate:[pe.OrganizationTypeGuardService],data:{titleId:"eventLogs",permissions:[he.Permissions.AccessEventLogs]}},{path:"groups",component:w.GroupsComponent,canActivate:[pe.OrganizationTypeGuardService],data:{titleId:"groups",permissions:[he.Permissions.ManageGroups]}},{path:"people",component:I.PeopleComponent,canActivate:[pe.OrganizationTypeGuardService],data:{titleId:"people",permissions:[he.Permissions.ManageUsers]}},{path:"policies",component:E.PoliciesComponent,canActivate:[pe.OrganizationTypeGuardService],data:{titleId:"policies",permissions:[he.Permissions.ManagePolicies]}}]},{path:"settings",component:A.SettingsComponent,canActivate:[pe.OrganizationTypeGuardService],data:{permissions:[he.Permissions.ManageOrganization]},children:[{path:"",pathMatch:"full",redirectTo:"account"},{path:"account",component:P.AccountComponent,data:{titleId:"myOrganization"}},{path:"two-factor",component:O.TwoFactorSetupComponent,data:{titleId:"twoStepLogin"}},{path:"billing",component:k.OrganizationBillingComponent,data:{titleId:"billing"}},{path:"subscription",component:_.OrganizationSubscriptionComponent,data:{titleId:"subscription"}}]}]},{path:"**",redirectTo:""}],be=function(){function e(){}return e.ɵmod=ye.ɵɵdefineNgModule({type:e}),e.ɵinj=ye.ɵɵdefineInjector({factory:function(t){return new(t||e)},imports:[[r.RouterModule.forRoot(xe,{useHash:!0,paramsInheritanceStrategy:"always"})],r.RouterModule]}),e}();t.AppRoutingModule=be,("undefined"==typeof ngJitMode||ngJitMode)&&ye.ɵɵsetNgModuleScope(be,{imports:[ge.RouterModule],exports:[r.RouterModule]})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(){this.subscribers=new Map}return e.prototype.send=function(e,t){null==t?this.subscribers.forEach((function(t){t(e)})):this.subscribers.has(t)&&this.subscribers.get(t)(e)},e.prototype.subscribe=function(e,t){this.subscribers.set(e,t)},e.prototype.unsubscribe=function(e){this.subscribers.has(e)&&this.subscribers.delete(e)},e}();t.BroadcasterService=r},,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getDomain=function(e){return null}},,,,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.EmergencyAccessAcceptRequest=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.OrganizationUserAcceptRequest=r},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=5)return this.messagingService.send("logout"),[2];this.platformUtilsService.showToast("error",this.i18nService.t("errorOccurred"),this.i18nService.t("invalidPin"))}return[3,33];case 16:return[4,this.cryptoService.makeKey(this.masterPassword,this.email,e,t)];case 17:return r=i.sent(),[4,this.cryptoService.hashPassword(this.masterPassword,r)];case 18:return l=i.sent(),c=!1,null==l?[3,25]:[4,this.cryptoService.getKeyHash()];case 19:return null==(p=i.sent())?[3,20]:(c=p===l,[3,25]);case 20:(u=new s.PasswordVerificationRequest).masterPasswordHash=l,i.label=21;case 21:return i.trys.push([21,24,,25]),this.formPromise=this.apiService.postAccountVerifyPassword(u),[4,this.formPromise];case 22:return i.sent(),c=!0,[4,this.cryptoService.setKeyHash(l)];case 23:return i.sent(),[3,25];case 24:return i.sent(),[3,25];case 25:return c?this.pinSet[0]?[4,this.storageService.get(o.ConstantsService.protectedPin)]:[3,31]:[3,32];case 26:return d=i.sent(),[4,this.cryptoService.getEncKey(r)];case 27:return m=i.sent(),[4,this.cryptoService.decryptToUtf8(new a.EncString(d),m)];case 28:return h=i.sent(),[4,this.cryptoService.makePinKey(h,this.email,e,t)];case 29:return f=i.sent(),v=this.vaultTimeoutService,[4,this.cryptoService.encrypt(r.key,f)];case 30:v.pinProtectedKey=i.sent(),i.label=31;case 31:return this.setKeyAndContinue(r),[3,33];case 32:this.platformUtilsService.showToast("error",this.i18nService.t("errorOccurred"),this.i18nService.t("invalidMasterPassword")),i.label=33;case 33:return[2]}}))}))},e.prototype.logOut=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return[4,this.platformUtilsService.showDialog(this.i18nService.t("logOutConfirmation"),this.i18nService.t("logOut"),this.i18nService.t("logOut"),this.i18nService.t("cancel"))];case 1:return e.sent()&&this.messagingService.send("logout"),[2]}}))}))},e.prototype.unlockBiometric=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.biometricLock?[4,this.platformUtilsService.authenticateBiometric()]:[2];case 1:return e.sent()?[4,this.doContinue()]:[3,3];case 2:e.sent(),e.label=3;case 3:return[2]}}))}))},e.prototype.togglePassword=function(){this.showPassword=!this.showPassword,document.getElementById(this.pinLock?"pin":"masterPassword").focus()},e.prototype.setKeyAndContinue=function(e){return r(this,void 0,void 0,(function(){return i(this,(function(t){switch(t.label){case 0:return[4,this.cryptoService.setKey(e)];case 1:return t.sent(),this.doContinue(),[2]}}))}))},e.prototype.doContinue=function(){return r(this,void 0,void 0,(function(){var e;return i(this,(function(t){switch(t.label){case 0:return this.vaultTimeoutService.biometricLocked=!1,[4,this.storageService.get(o.ConstantsService.disableFaviconKey)];case 1:return e=t.sent(),[4,this.stateService.save(o.ConstantsService.disableFaviconKey,!!e)];case 2:return t.sent(),this.messagingService.send("unlocked"),null!=this.onSuccessfulSubmit?this.onSuccessfulSubmit():null!=this.router&&this.router.navigate([this.successRoute]),[2]}}))}))},e.ɵfac=function(t){return new(t||e)(c.ɵɵdirectiveInject(p.Router),c.ɵɵdirectiveInject(u.I18nService),c.ɵɵdirectiveInject(d.PlatformUtilsService),c.ɵɵdirectiveInject(m.MessagingService),c.ɵɵdirectiveInject(h.UserService),c.ɵɵdirectiveInject(f.CryptoService),c.ɵɵdirectiveInject(v.StorageService),c.ɵɵdirectiveInject(y.VaultTimeoutService),c.ɵɵdirectiveInject(g.EnvironmentService),c.ɵɵdirectiveInject(x.StateService),c.ɵɵdirectiveInject(b.ApiService))},e.ɵdir=c.ɵɵdefineDirective({type:e}),e}();t.LockComponent=S},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]-1&&(e=e.concat(this.email.substr(0,t).trim().toLowerCase().split(/[^A-Za-z0-9]/))),null!=this.name&&""!==this.name&&(e=e.concat(this.name.trim().toLowerCase().split(" "))),e},e}();t.RegisterComponent=l},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e,t,n,r,i,o,a,s){this.name=t,this.email=e,this.masterPasswordHash=n,this.masterPasswordHint=r||null,this.key=i,this.kdf=o,this.kdfIterations=a,this.referenceData=s};t.RegisterRequest=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.ReferenceEventRequest=r},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},a=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]1?[4,this.sendEmail(!1)]:[3,5];case 4:n.sent(),n.label=5;case 5:case 6:return[3,7];case 7:return[2]}}))}))},e.prototype.submit=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:if(null==this.token||""===this.token)return this.platformUtilsService.showToast("error",this.i18nService.t("errorOccurred"),this.i18nService.t("verificationCodeRequired")),[2];if(this.selectedProviderType===o.TwoFactorProviderType.WebAuthn){if(null==this.webAuthn)return[2];this.webAuthn.stop()}else this.selectedProviderType!==o.TwoFactorProviderType.Email&&this.selectedProviderType!==o.TwoFactorProviderType.Authenticator||(this.token=this.token.replace(" ","").trim());e.label=1;case 1:return e.trys.push([1,3,,4]),[4,this.doSubmit()];case 2:return e.sent(),[3,4];case 3:return e.sent(),this.selectedProviderType===o.TwoFactorProviderType.WebAuthn&&null!=this.webAuthn&&this.webAuthn.start(),[3,4];case 4:return[2]}}))}))},e.prototype.doSubmit=function(){return r(this,void 0,void 0,(function(){var e,t;return i(this,(function(n){switch(n.label){case 0:return this.formPromise=this.authService.logInTwoFactor(this.selectedProviderType,this.token,this.remember),[4,this.formPromise];case 1:return e=n.sent(),[4,this.storageService.get(l.ConstantsService.disableFaviconKey)];case 2:return t=n.sent(),[4,this.stateService.save(l.ConstantsService.disableFaviconKey,!!t)];case 3:return n.sent(),null!=this.onSuccessfulLogin&&this.onSuccessfulLogin(),e.resetMasterPassword&&(this.successRoute="set-password"),null!=this.onSuccessfulLoginNavigate?this.onSuccessfulLoginNavigate():this.router.navigate([this.successRoute],{queryParams:{identifier:this.identifier}}),[2]}}))}))},e.prototype.sendEmail=function(e){return r(this,void 0,void 0,(function(){var t;return i(this,(function(n){switch(n.label){case 0:if(this.selectedProviderType!==o.TwoFactorProviderType.Email)return[2];if(null!=this.emailPromise)return[2];n.label=1;case 1:return n.trys.push([1,3,,4]),t=new a.TwoFactorEmailRequest(this.authService.email,this.authService.masterPasswordHash),this.emailPromise=this.apiService.postTwoFactorEmail(t),[4,this.emailPromise];case 2:return n.sent(),e&&this.platformUtilsService.showToast("success",null,this.i18nService.t("verificationCodeEmailSent",this.twoFactorEmail)),[3,4];case 3:return n.sent(),[3,4];case 4:return this.emailPromise=null,[2]}}))}))},e.prototype.cleanupWebAuthn=function(){null!=this.webAuthn&&(this.webAuthn.stop(),this.webAuthn.cleanup())},Object.defineProperty(e.prototype,"authing",{get:function(){return this.authService.authingWithPassword()||this.authService.authingWithSso()||this.authService.authingWithApiKey()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"needsLock",{get:function(){return this.authService.authingWithSso()||this.authService.authingWithApiKey()},enumerable:!0,configurable:!0}),e.ɵfac=function(t){return new(t||e)(u.ɵɵdirectiveInject(d.AuthService),u.ɵɵdirectiveInject(m.Router),u.ɵɵdirectiveInject(h.I18nService),u.ɵɵdirectiveInject(f.ApiService),u.ɵɵdirectiveInject(v.PlatformUtilsService),u.ɵɵdirectiveInject(Window),u.ɵɵdirectiveInject(y.EnvironmentService),u.ɵɵdirectiveInject(g.StateService),u.ɵɵdirectiveInject(x.StorageService),u.ɵɵdirectiveInject(m.ActivatedRoute))},e.ɵdir=u.ɵɵdefineDirective({type:e}),e}();t.TwoFactorComponent=b},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e,t){this.type=t.getDevice(),this.name=t.getDeviceString(),this.identifier=e,this.pushToken=null};t.DeviceRequest=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){this.email=e};t.PreloginRequest=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t,n,r,i,o,a){null!=e&&e.length>1?(this.email=e[0],this.masterPasswordHash=e[1]):null!=t&&t.length>2?(this.code=t[0],this.codeVerifier=t[1],this.redirectUri=t[2]):null!=n&&n.length>1&&(this.clientId=n[0],this.clientSecret=n[1]),this.token=i,this.provider=r,this.remember=o,this.device=null!=a?a:null}return e.prototype.toIdentityToken=function(e){var t={scope:"api offline_access",client_id:e};if(null!=this.clientSecret)t.scope="api",t.grant_type="client_credentials",t.client_secret=this.clientSecret;else if(null!=this.masterPasswordHash&&null!=this.email)t.grant_type="password",t.username=this.email,t.password=this.masterPasswordHash;else{if(null==this.code||null==this.codeVerifier||null==this.redirectUri)throw new Error("must provide credentials or codes");t.grant_type="authorization_code",t.code=this.code,t.code_verifier=this.codeVerifier,t.redirect_uri=this.redirectUri}return this.device&&(t.deviceType=this.device.type,t.deviceIdentifier=this.device.identifier,t.deviceName=this.device.name),this.token&&null!=this.provider&&(t.twoFactorToken=this.token,t.twoFactorProvider=this.provider,t.twoFactorRemember=this.remember?"1":"0"),t},e}();t.TokenRequest=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t,n,r,i,o,a,s){this.win=e,this.webVaultUrl=t,this.webAuthnNewTab=n,this.platformUtilsService=r,this.i18nService=i,this.successCallback=o,this.errorCallback=a,this.infoCallback=s,this.iframe=null,this.parseFunction=this.parseMessage.bind(this),this.connectorLink=e.document.createElement("a")}return e.prototype.init=function(e){var t=new URLSearchParams({data:this.base64Encode(JSON.stringify(e)),parent:encodeURIComponent(this.win.document.location.href),btnText:encodeURIComponent(this.i18nService.t("webAuthnAuthenticate")),v:"1"});this.webAuthnNewTab?(t.append("locale",this.i18nService.translationLocale),this.platformUtilsService.launchUri(this.webVaultUrl+"/webauthn-fallback-connector.html?"+t)):(this.connectorLink.href=this.webVaultUrl+"/webauthn-connector.html?"+t,this.iframe=this.win.document.getElementById("webauthn_iframe"),this.iframe.allow="publickey-credentials-get "+new URL(this.webVaultUrl).origin,this.iframe.src=this.connectorLink.href,this.win.addEventListener("message",this.parseFunction,!1))},e.prototype.stop=function(){this.sendMessage("stop")},e.prototype.start=function(){this.sendMessage("start")},e.prototype.sendMessage=function(e){this.iframe&&this.iframe.src&&this.iframe.contentWindow&&this.iframe.contentWindow.postMessage(e,this.iframe.src)},e.prototype.base64Encode=function(e){return btoa(encodeURIComponent(e).replace(/%([0-9A-F]{2})/g,(function(e,t){return String.fromCharCode("0x"+t)})))},e.prototype.cleanup=function(){this.win.removeEventListener("message",this.parseFunction,!1)},e.prototype.parseMessage=function(e){if(this.validMessage(e)){var t=e.data.split("|");"success"===t[0]&&this.successCallback?this.successCallback(t[1]):"error"===t[0]&&this.errorCallback?this.errorCallback(t[1]):"info"===t[0]&&this.infoCallback&&this.infoCallback(t[1])}},e.prototype.validMessage=function(e){return null!=e.origin&&""!==e.origin&&e.origin===this.connectorLink.origin&&null!=e.data&&"string"==typeof e.data&&(0===e.data.indexOf("success|")||0===e.data.indexOf("error|")||0===e.data.indexOf("info|"))},e}();t.WebAuthn=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e,t){this.userId=e,this.token=t};t.VerifyEmailRequest=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e,t){this.userId=e,this.token=t};t.VerifyDeleteRecoverRequest=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){this.collections=[]};t.GroupRequest=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.OrganizationUserConfirmRequest=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){this.emails=[],this.collections=[]};t.OrganizationUserInviteRequest=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){this.collections=[]};t.OrganizationUserUpdateRequest=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){this.groupIds=[]};t.OrganizationUserUpdateGroupsRequest=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.AppIdService=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.LogService=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.PolicyRequest=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.OrganizationUpdateRequest=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.Charge=0]="Charge",e[e.Credit=1]="Credit",e[e.PromotionalCredit=2]="PromotionalCredit",e[e.ReferralCredit=3]="ReferralCredit",e[e.Refund=4]="Refund"}(t.TransactionType||(t.TransactionType={}))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.VerifyBankRequest=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.BitPayInvoiceRequest=r},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t}(n(577).OrganizationTaxInfoUpdateRequest);t.PaymentRequest=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.OrganizationCreateRequest=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.OrganizationUpgradeRequest=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.SeatRequest=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.StorageRequest=r},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t}(n(79).PasswordVerificationRequest);t.UpdateTwoFactorDuoRequest=o},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t}(n(79).PasswordVerificationRequest);t.TwoFactorProviderRequest=o},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t}(n(79).PasswordVerificationRequest);t.UpdateTwoFactorAuthenticatorRequest=o},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t}(n(79).PasswordVerificationRequest);t.UpdateTwoFactorEmailRequest=o},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t}(n(79).PasswordVerificationRequest);t.UpdateTwoFactorWebAuthnDeleteRequest=o},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t}(n(79).PasswordVerificationRequest);t.UpdateTwoFactorWebAuthnRequest=o},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t}(n(79).PasswordVerificationRequest);t.UpdateTwoFactorYubioOtpRequest=o},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]"+this.i18nService.t("encExportKeyWarningDesc")+"

"+this.i18nService.t("encExportAccountWarningDesc"),this.i18nService.t("confirmVaultExport"),this.i18nService.t("exportVault"),this.i18nService.t("cancel"),"warning",!0)]:[3,2];case 1:return[2,e.sent()];case 2:return[4,this.platformUtilsService.showDialog(this.i18nService.t("exportWarningDesc"),this.i18nService.t("confirmVaultExport"),this.i18nService.t("exportVault"),this.i18nService.t("cancel"),"warning")];case 3:return[2,e.sent()]}}))}))},e.prototype.togglePassword=function(){this.showPassword=!this.showPassword,document.getElementById("masterPassword").focus()},e.prototype.saved=function(){this.onSaved.emit()},e.prototype.getExportData=function(){return this.exportService.getExport(this.format)},e.prototype.getFileName=function(e){var t=this.format;return"encrypted_json"===this.format&&(e=null==e?"encrypted":"encrypted_"+e,t="json"),this.exportService.getFileName(e,t)},e.prototype.collectEvent=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return[4,this.eventService.collect(a.EventType.User_ClientExportedVault)];case 1:return e.sent(),[2]}}))}))},e.prototype.downloadFile=function(e){var t=this.getFileName();this.platformUtilsService.saveFile(this.win,e,{type:"text/plain"},t)},e.ɵfac=function(t){return new(t||e)(s.ɵɵdirectiveInject(l.CryptoService),s.ɵɵdirectiveInject(c.I18nService),s.ɵɵdirectiveInject(p.PlatformUtilsService),s.ɵɵdirectiveInject(u.ExportService),s.ɵɵdirectiveInject(d.EventService),s.ɵɵdirectiveInject(Window))},e.ɵdir=s.ɵɵdefineDirective({type:e,outputs:{onSaved:"onSaved"}}),e}();t.ExportComponent=m},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.AttachmentRequest=r},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&this.collections.length>0&&this.collections.forEach((function(e){o.collectionIds.indexOf(e.id)>-1&&(e.checked=!0)})),i.label=8;case 8:return r=this,[4,this.folderService.getAllDecrypted()];case 9:return r.folders=i.sent(),this.editMode&&this.previousCipherId!==this.cipherId&&this.eventService.collect(l.EventType.Cipher_ClientViewed,this.cipherId),this.previousCipherId=this.cipherId,[2]}}))}))},e.prototype.submit=function(){return r(this,void 0,void 0,(function(){var e;return i(this,(function(t){switch(t.label){case 0:return this.cipher.isDeleted?[2,this.restore()]:null==this.cipher.name||""===this.cipher.name?(this.platformUtilsService.showToast("error",this.i18nService.t("errorOccurred"),this.i18nService.t("nameRequired")),[2,!1]):this.editMode&&!this.cloneMode||this.allowPersonal||null!=this.cipher.organizationId?(this.editMode&&!this.cloneMode||this.cipher.type!==s.CipherType.Login||null==this.cipher.login.uris||1!==this.cipher.login.uris.length||null!=this.cipher.login.uris[0].uri&&""!==this.cipher.login.uris[0].uri||(this.cipher.login.uris=null),this.editMode&&!this.cloneMode||null==this.cipher.organizationId||(this.cipher.collectionIds=null==this.collections?[]:this.collections.filter((function(e){return e.checked})).map((function(e){return e.id}))),this.cloneMode&&(this.cipher.id=null),[4,this.encryptCipher()]):(this.platformUtilsService.showToast("error",this.i18nService.t("errorOccurred"),this.i18nService.t("personalOwnershipSubmitError")),[2,!1]);case 1:e=t.sent(),t.label=2;case 2:return t.trys.push([2,4,,5]),this.formPromise=this.saveCipher(e),[4,this.formPromise];case 3:return t.sent(),this.cipher.id=e.id,this.platformUtilsService.showToast("success",null,this.i18nService.t(this.editMode&&!this.cloneMode?"editedItem":"addedItem")),this.onSavedCipher.emit(this.cipher),this.messagingService.send(this.editMode&&!this.cloneMode?"editedCipher":"addedCipher"),[2,!0];case 4:return t.sent(),[3,5];case 5:return[2,!1]}}))}))},e.prototype.addUri=function(){this.cipher.type===s.CipherType.Login&&(null==this.cipher.login.uris&&(this.cipher.login.uris=[]),this.cipher.login.uris.push(new g.LoginUriView))},e.prototype.removeUri=function(e){if(this.cipher.type===s.CipherType.Login&&null!=this.cipher.login.uris){var t=this.cipher.login.uris.indexOf(e);t>-1&&this.cipher.login.uris.splice(t,1)}},e.prototype.addField=function(){null==this.cipher.fields&&(this.cipher.fields=[]);var e=new v.FieldView;e.type=this.addFieldType,e.newField=!0,this.cipher.fields.push(e)},e.prototype.removeField=function(e){var t=this.cipher.fields.indexOf(e);t>-1&&this.cipher.fields.splice(t,1)},e.prototype.trackByFunction=function(e,t){return e},e.prototype.cancel=function(){this.onCancelled.emit(this.cipher)},e.prototype.attachments=function(){this.onEditAttachments.emit(this.cipher)},e.prototype.share=function(){this.onShareCipher.emit(this.cipher)},e.prototype.editCollections=function(){this.onEditCollections.emit(this.cipher)},e.prototype.delete=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return[4,this.platformUtilsService.showDialog(this.i18nService.t(this.cipher.isDeleted?"permanentlyDeleteItemConfirmation":"deleteItemConfirmation"),this.i18nService.t("deleteItem"),this.i18nService.t("yes"),this.i18nService.t("no"),"warning")];case 1:if(!e.sent())return[2,!1];e.label=2;case 2:return e.trys.push([2,4,,5]),this.deletePromise=this.deleteCipher(),[4,this.deletePromise];case 3:return e.sent(),this.platformUtilsService.showToast("success",null,this.i18nService.t(this.cipher.isDeleted?"permanentlyDeletedItem":"deletedItem")),this.onDeletedCipher.emit(this.cipher),this.messagingService.send(this.cipher.isDeleted?"permanentlyDeletedCipher":"deletedCipher"),[3,5];case 4:return e.sent(),[3,5];case 5:return[2,!0]}}))}))},e.prototype.restore=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return this.cipher.isDeleted?[4,this.platformUtilsService.showDialog(this.i18nService.t("restoreItemConfirmation"),this.i18nService.t("restoreItem"),this.i18nService.t("yes"),this.i18nService.t("no"),"warning")]:[2,!1];case 1:if(!e.sent())return[2,!1];e.label=2;case 2:return e.trys.push([2,4,,5]),this.restorePromise=this.restoreCipher(),[4,this.restorePromise];case 3:return e.sent(),this.platformUtilsService.showToast("success",null,this.i18nService.t("restoredItem")),this.onRestoredCipher.emit(this.cipher),this.messagingService.send("restoredCipher"),[3,5];case 4:return e.sent(),[3,5];case 5:return[2,!0]}}))}))},e.prototype.generatePassword=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return null!=this.cipher.login&&null!=this.cipher.login.password&&this.cipher.login.password.length?[4,this.platformUtilsService.showDialog(this.i18nService.t("overwritePasswordConfirmation"),this.i18nService.t("overwritePassword"),this.i18nService.t("yes"),this.i18nService.t("no"))]:[3,2];case 1:if(!e.sent())return[2,!1];e.label=2;case 2:return this.onGeneratePassword.emit(),[2,!0]}}))}))},e.prototype.togglePassword=function(){this.showPassword=!this.showPassword,document.getElementById("loginPassword").focus(),this.editMode&&this.showPassword&&this.eventService.collect(l.EventType.Cipher_ClientToggledPasswordVisible,this.cipherId)},e.prototype.toggleCardCode=function(){this.showCardCode=!this.showCardCode,document.getElementById("cardCode").focus(),this.editMode&&this.showCardCode&&this.eventService.collect(l.EventType.Cipher_ClientToggledCardCodeVisible,this.cipherId)},e.prototype.toggleFieldValue=function(e){var t=e;t.showValue=!t.showValue,this.editMode&&t.showValue&&this.eventService.collect(l.EventType.Cipher_ClientToggledHiddenFieldVisible,this.cipherId)},e.prototype.toggleUriOptions=function(e){var t=e;t.showOptions=(null!=t.showOptions||null==e.match)&&!t.showOptions},e.prototype.loginUriMatchChanged=function(e){var t=e;t.showOptions=null==t.showOptions||t.showOptions},e.prototype.drop=function(e){o.moveItemInArray(this.cipher.fields,e.previousIndex,e.currentIndex)},e.prototype.organizationChanged=function(){return r(this,void 0,void 0,(function(){var e,t=this;return i(this,(function(n){switch(n.label){case 0:return null!=this.writeableCollections&&this.writeableCollections.forEach((function(e){return e.checked=!1})),null==this.cipher.organizationId?[3,2]:(this.collections=this.writeableCollections.filter((function(e){return e.organizationId===t.cipher.organizationId})),[4,this.userService.getOrganization(this.cipher.organizationId)]);case 1:return null!=(e=n.sent())&&(this.cipher.organizationUseTotp=e.useTotp),[3,3];case 2:this.collections=[],n.label=3;case 3:return[2]}}))}))},e.prototype.checkPassword=function(){return r(this,void 0,void 0,(function(){var e;return i(this,(function(t){switch(t.label){case 0:return null!=this.checkPasswordPromise||(null==this.cipher.login||null==this.cipher.login.password||""===this.cipher.login.password)?[2]:(this.checkPasswordPromise=this.auditService.passwordLeaked(this.cipher.login.password),[4,this.checkPasswordPromise]);case 1:return e=t.sent(),this.checkPasswordPromise=null,e>0?this.platformUtilsService.showToast("warning",null,this.i18nService.t("passwordExposed",e.toString())):this.platformUtilsService.showToast("success",null,this.i18nService.t("passwordSafe")),[2]}}))}))},e.prototype.loadCollections=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return[4,this.collectionService.getAllDecrypted()];case 1:return[2,e.sent().filter((function(e){return!e.readOnly}))]}}))}))},e.prototype.loadCipher=function(){return this.cipherService.get(this.cipherId)},e.prototype.encryptCipher=function(){return this.cipherService.encrypt(this.cipher)},e.prototype.saveCipher=function(e){return this.cipherService.saveWithServer(e)},e.prototype.deleteCipher=function(){return this.cipher.isDeleted?this.cipherService.deleteWithServer(this.cipher.id):this.cipherService.softDeleteWithServer(this.cipher.id)},e.prototype.restoreCipher=function(){return this.cipherService.restoreWithServer(this.cipher.id)},e.ɵfac=function(t){return new(t||e)(w.ɵɵdirectiveInject(C.CipherService),w.ɵɵdirectiveInject(I.FolderService),w.ɵɵdirectiveInject(E.I18nService),w.ɵɵdirectiveInject(P.PlatformUtilsService),w.ɵɵdirectiveInject(k.AuditService),w.ɵɵdirectiveInject(_.StateService),w.ɵɵdirectiveInject(A.UserService),w.ɵɵdirectiveInject(O.CollectionService),w.ɵɵdirectiveInject(T.MessagingService),w.ɵɵdirectiveInject(M.EventService),w.ɵɵdirectiveInject(B.PolicyService))},e.ɵdir=w.ɵɵdefineDirective({type:e,inputs:{cloneMode:"cloneMode",folderId:"folderId",cipherId:"cipherId",type:"type",collectionIds:"collectionIds",organizationId:"organizationId"},outputs:{onSavedCipher:"onSavedCipher",onDeletedCipher:"onDeletedCipher",onRestoredCipher:"onRestoredCipher",onCancelled:"onCancelled",onEditAttachments:"onEditAttachments",onShareCipher:"onShareCipher",onEditCollections:"onEditCollections",onGeneratePassword:"onGeneratePassword"}}),e}();t.AddEditComponent=D},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(498);t.AttachmentResponse=r.AttachmentResponse;var i=n(262);t.CipherResponse=i.CipherResponse;var o=n(499);t.CollectionResponse=o.CollectionResponse;var a=n(884);t.DeviceResponse=a.DeviceResponse;var s=n(500);t.DomainsResponse=s.DomainsResponse;var l=n(211);t.ErrorResponse=l.ErrorResponse;var c=n(501);t.FolderResponse=c.FolderResponse;var p=n(615);t.GlobalDomainResponse=p.GlobalDomainResponse;var u=n(616);t.IdentityTokenResponse=u.IdentityTokenResponse;var d=n(617);t.IdentityTwoFactorResponse=d.IdentityTwoFactorResponse;var m=n(885);t.KeysResponse=m.KeysResponse;var h=n(618);t.ListResponse=h.ListResponse;var f=n(619);t.ProfileOrganizationResponse=f.ProfileOrganizationResponse;var v=n(293);t.ProfileResponse=v.ProfileResponse;var y=n(620);t.SyncResponse=y.SyncResponse},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(t){var n=e.call(this,t)||this;return n.password=n.getResponseProperty("Password"),n.lastUsedDate=n.getResponseProperty("LastUsedDate"),n}return i(t,e),t}(n(23).BaseResponse);t.PasswordHistoryResponse=o},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(t){var n=e.call(this,t)||this;return n.id=n.getResponseProperty("Id"),n.name=n.getResponseProperty("Name"),n.identifier=n.getResponseProperty("Identifier"),n.type=n.getResponseProperty("Type"),n.creationDate=n.getResponseProperty("CreationDate"),n}return i(t,e),t}(n(23).BaseResponse);t.DeviceResponse=o},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(t){var n=e.call(this,t)||this;return n.privateKey=n.getResponseProperty("PrivateKey"),n.publicKey=n.getResponseProperty("PublicKey"),n}return i(t,e),t}(n(23).BaseResponse);t.KeysResponse=o},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]this.pageSize&&(t=this.pagedCiphersCount),this.ciphers.length>e&&(this.pagedCiphers=this.pagedCiphers.concat(this.ciphers.slice(e,e+t))),this.pagedCiphersCount=this.pagedCiphers.length,this.didScroll=this.pagedCiphers.length>this.pageSize}},e.prototype.reload=function(e,t){return void 0===e&&(e=null),void 0===t&&(t=!1),r(this,void 0,void 0,(function(){return i(this,(function(n){switch(n.label){case 0:return this.loaded=!1,this.ciphers=[],[4,this.load(e,t)];case 1:return n.sent(),[2]}}))}))},e.prototype.refresh=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return e.trys.push([0,,2,3]),this.refreshing=!0,[4,this.reload(this.filter,this.deleted)];case 1:return e.sent(),[3,3];case 2:return this.refreshing=!1,[7];case 3:return[2]}}))}))},e.prototype.applyFilter=function(e){return void 0===e&&(e=null),r(this,void 0,void 0,(function(){return i(this,(function(t){switch(t.label){case 0:return this.filter=e,[4,this.search(null)];case 1:return t.sent(),[2]}}))}))},e.prototype.search=function(e,t){return void 0===e&&(e=null),r(this,void 0,void 0,(function(){var n,o,a=this;return i(this,(function(s){switch(s.label){case 0:return this.searchPending=!1,null!=this.searchTimeout&&clearTimeout(this.searchTimeout),n=function(e){return e.isDeleted===a.deleted},null!=e?[3,3]:(o=this,[4,this.searchService.searchCiphers(this.searchText,[this.filter,n],t)]);case 1:return o.ciphers=s.sent(),[4,this.resetPaging()];case 2:return s.sent(),[2];case 3:return this.searchPending=!0,this.searchTimeout=setTimeout((function(){return r(a,void 0,void 0,(function(){var e;return i(this,(function(r){switch(r.label){case 0:return e=this,[4,this.searchService.searchCiphers(this.searchText,[this.filter,n],t)];case 1:return e.ciphers=r.sent(),[4,this.resetPaging()];case 2:return r.sent(),this.searchPending=!1,[2]}}))}))}),e),[2]}}))}))},e.prototype.selectCipher=function(e){this.onCipherClicked.emit(e)},e.prototype.rightClickCipher=function(e){this.onCipherRightClicked.emit(e)},e.prototype.addCipher=function(){this.onAddCipher.emit()},e.prototype.addCipherOptions=function(){this.onAddCipherOptions.emit()},e.prototype.isSearching=function(){return!this.searchPending&&this.searchService.isSearchable(this.searchText)},e.prototype.isPaging=function(){var e=this.isSearching();return e&&this.didScroll&&this.resetPaging(),!e&&this.ciphers.length>this.pageSize},e.prototype.resetPaging=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){return this.pagedCiphers=[],this.loadMore(),[2]}))}))},e.ɵfac=function(t){return new(t||e)(a.ɵɵdirectiveInject(s.SearchService))},e.ɵdir=a.ɵɵdefineDirective({type:e,inputs:{activeCipherId:"activeCipherId"},outputs:{onCipherClicked:"onCipherClicked",onCipherRightClicked:"onCipherRightClicked",onAddCipher:"onAddCipher",onAddCipherOptions:"onAddCipherOptions"}}),e}();t.CiphersComponent=l},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]-1})),[2]}}))}))},e.prototype.submit=function(){return r(this,void 0,void 0,(function(){var e;return i(this,(function(t){switch(t.label){case 0:if(e=this.collections.filter((function(e){return!!e.checked})).map((function(e){return e.id})),!this.allowSelectNone&&0===e.length)return this.platformUtilsService.showToast("error",this.i18nService.t("errorOccurred"),this.i18nService.t("selectOneCollection")),[2];this.cipherDomain.collectionIds=e,t.label=1;case 1:return t.trys.push([1,3,,4]),this.formPromise=this.saveCollections(),[4,this.formPromise];case 2:return t.sent(),this.onSavedCollections.emit(),this.platformUtilsService.showToast("success",null,this.i18nService.t("editedItem")),[3,4];case 3:return t.sent(),[3,4];case 4:return[2]}}))}))},e.prototype.loadCipher=function(){return this.cipherService.get(this.cipherId)},e.prototype.loadCipherCollections=function(){return this.cipherDomain.collectionIds},e.prototype.loadCollections=function(){return r(this,void 0,void 0,(function(){var e=this;return i(this,(function(t){switch(t.label){case 0:return[4,this.collectionService.getAllDecrypted()];case 1:return[2,t.sent().filter((function(t){return!t.readOnly&&t.organizationId===e.cipher.organizationId}))]}}))}))},e.prototype.saveCollections=function(){return this.cipherService.saveCollectionsWithServer(this.cipherDomain)},e.ɵfac=function(t){return new(t||e)(a.ɵɵdirectiveInject(s.CollectionService),a.ɵɵdirectiveInject(l.PlatformUtilsService),a.ɵɵdirectiveInject(c.I18nService),a.ɵɵdirectiveInject(p.CipherService))},e.ɵdir=a.ɵɵdefineDirective({type:e,inputs:{cipherId:"cipherId",allowSelectNone:"allowSelectNone"},outputs:{onSavedCollections:"onSavedCollections"}}),e}();t.CollectionsComponent=u},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0?null:this.formatDateFallbacks(this.expirationDateFallback)+"T"+this.expirationTimeFallback},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"deletionDateTimeFallback",{get:function(){return this.nullOrWhiteSpaceCount([this.deletionDateFallback,this.deletionTimeFallback])>0?null:this.formatDateFallbacks(this.deletionDateFallback)+"T"+this.deletionTimeFallback},enumerable:!0,configurable:!0}),e.prototype.load=function(){return r(this,void 0,void 0,(function(){var e,t,n,r,o,s,h,f,v,y;return i(this,(function(i){switch(i.label){case 0:return[4,this.policyService.getAll(c.PolicyType.DisableSend)];case 1:return e=i.sent(),[4,this.userService.getAllOrganizations()];case 2:return t=i.sent(),this.disableSend=t.some((function(t){return t.enabled&&t.status===l.OrganizationUserStatusType.Confirmed&&t.usePolicies&&!t.canManagePolicies&&e.some((function(e){return e.organizationId===t.id&&e.enabled}))})),[4,this.policyService.getAll(c.PolicyType.SendOptions)];case 3:return n=i.sent(),r=this,[4,t.some((function(e){return e.enabled&&e.status===l.OrganizationUserStatusType.Confirmed&&e.usePolicies&&!e.canManagePolicies&&n.some((function(t){return t.organizationId===e.id&&t.enabled&&t.data.disableHideEmail}))}))];case 4:return r.disableHideEmail=i.sent(),o=this,[4,this.userService.canAccessPremium()];case 5:return o.canAccessPremium=i.sent(),s=this,[4,this.userService.getEmailVerified()];case 6:return s.emailVerified=i.sent(),this.canAccessPremium&&this.emailVerified||(this.type=p.SendType.Text),null!=this.send?[3,10]:this.editMode?[4,this.loadSend()]:[3,9];case 7:return h=i.sent(),f=this,[4,h.decrypt()];case 8:return f.send=i.sent(),[3,10];case 9:this.send=new m.SendView,this.send.type=null==this.type?p.SendType.File:this.type,this.send.file=new u.SendFileView,this.send.text=new d.SendTextView,this.send.deletionDate=new Date,this.send.deletionDate.setDate(this.send.deletionDate.getDate()+7),i.label=10;case 10:return this.hasPassword=null!=this.send.password&&""!==this.send.password.trim(),this.isDateTimeLocalSupported?(this.deletionDate=this.dateToString(this.send.deletionDate),this.expirationDate=this.dateToString(this.send.expirationDate)):(void 0!==(v=this.dateToSplitString(this.send.deletionDate))&&v.length>0&&(this.deletionDateFallback=v[0],this.deletionTimeFallback=v[1],this.isSafari&&(this.safariDeletionTime=this.deletionTimeFallback)),void 0!==(y=this.dateToSplitString(this.send.expirationDate))&&y.length>0&&(this.expirationDateFallback=y[0],this.expirationTimeFallback=y[1],this.isSafari&&(this.safariExpirationTime=this.expirationTimeFallback))),this.isSafari&&(this.safariDeletionTimeOptions=this.safariTimeOptions(a.DeletionDate),this.safariExpirationTimeOptions=this.safariTimeOptions(a.ExpriationDate)),[2]}}))}))},e.prototype.submit=function(){var e,t;return r(this,void 0,void 0,(function(){var n,r,o,a,s,l;return i(this,(function(i){switch(i.label){case 0:if(!this.isDateTimeLocalSupported){if(this.isSafari&&(this.expirationTimeFallback=null!==(e=this.safariExpirationTime)&&void 0!==e?e:this.expirationTimeFallback,this.deletionTimeFallback=null!==(t=this.safariDeletionTime)&&void 0!==t?t:this.deletionTimeFallback),this.deletionDate=this.deletionDateTimeFallback,null!=this.expirationDateTimeFallback&&isNaN(Date.parse(this.expirationDateTimeFallback)))return this.platformUtilsService.showToast("error",this.i18nService.t("errorOccurred"),this.i18nService.t("expirationDateIsInvalid")),[2];if(isNaN(Date.parse(this.deletionDateTimeFallback)))return this.platformUtilsService.showToast("error",this.i18nService.t("errorOccurred"),this.i18nService.t("deletionDateIsInvalid")),[2];if(1===this.nullOrWhiteSpaceCount([this.expirationDateFallback,this.expirationTimeFallback]))return this.platformUtilsService.showToast("error",this.i18nService.t("errorOccurred"),this.i18nService.t("expirationDateAndTimeRequired")),[2];(this.editMode||0===this.expirationDateSelect)&&(this.expirationDate=this.expirationDateTimeFallback)}if(this.disableSend)return this.platformUtilsService.showToast("error",this.i18nService.t("errorOccurred"),this.i18nService.t("sendDisabledWarning")),[2,!1];if(null==this.send.name||""===this.send.name)return this.platformUtilsService.showToast("error",this.i18nService.t("errorOccurred"),this.i18nService.t("nameRequired")),[2,!1];if(n=null,this.send.type===p.SendType.File&&!this.editMode){if(r=document.getElementById("file"),null==(o=r.files)||0===o.length)return this.platformUtilsService.showToast("error",this.i18nService.t("errorOccurred"),this.i18nService.t("selectFile")),[2];if(n=o[0],o[0].size>524288e3)return this.platformUtilsService.showToast("error",this.i18nService.t("errorOccurred"),this.i18nService.t("maxFileSize")),[2]}return this.editMode||(a=new Date,this.deletionDateSelect>0&&((s=new Date).setHours(a.getHours()+this.deletionDateSelect),this.deletionDate=this.dateToString(s)),null!=this.expirationDateSelect&&this.expirationDateSelect>0&&((s=new Date).setHours(a.getHours()+this.expirationDateSelect),this.expirationDate=this.dateToString(s))),null!=this.password&&""===this.password.trim()&&(this.password=null),[4,this.encryptSend(n)];case 1:l=i.sent(),i.label=2;case 2:return i.trys.push([2,4,,5]),this.formPromise=this.sendService.saveWithServer(l),[4,this.formPromise];case 3:return i.sent(),null==this.send.id&&(this.send.id=l[0].id),null==this.send.accessId&&(this.send.accessId=l[0].accessId),this.platformUtilsService.showToast("success",null,this.i18nService.t(this.editMode?"editedSend":"createdSend")),this.onSavedSend.emit(this.send),this.copyLink&&this.copyLinkToClipboard(this.link),[2,!0];case 4:return i.sent(),[3,5];case 5:return[2,!1]}}))}))},e.prototype.clearExpiration=function(){this.expirationDate=null,this.expirationDateFallback=null,this.expirationTimeFallback=null,this.safariExpirationTime=null},e.prototype.copyLinkToClipboard=function(e){null!=e&&this.platformUtilsService.copyToClipboard(e)},e.prototype.delete=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return null!=this.deletePromise?[2,!1]:[4,this.platformUtilsService.showDialog(this.i18nService.t("deleteSendConfirmation"),this.i18nService.t("deleteSend"),this.i18nService.t("yes"),this.i18nService.t("no"),"warning")];case 1:if(!e.sent())return[2,!1];e.label=2;case 2:return e.trys.push([2,5,,6]),this.deletePromise=this.sendService.deleteWithServer(this.send.id),[4,this.deletePromise];case 3:return e.sent(),this.platformUtilsService.showToast("success",null,this.i18nService.t("deletedSend")),[4,this.load()];case 4:return e.sent(),this.onDeletedSend.emit(this.send),[2,!0];case 5:return e.sent(),[3,6];case 6:return[2,!1]}}))}))},e.prototype.typeChanged=function(){this.send.type!==p.SendType.File||this.alertShown||(this.canAccessPremium?this.emailVerified||(this.alertShown=!0,this.messagingService.send("emailVerificationRequired")):(this.alertShown=!0,this.messagingService.send("premiumRequired")))},e.prototype.toggleOptions=function(){this.showOptions=!this.showOptions},e.prototype.expirationDateFallbackChanged=function(){var e,t;this.isSafari?this.safariExpirationTime=null!==(e=this.safariExpirationTime)&&void 0!==e?e:"00:00":this.expirationTimeFallback=null!==(t=this.expirationTimeFallback)&&void 0!==t?t:this.datePipe.transform(new Date,"HH:mm")},e.prototype.loadSend=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){return[2,this.sendService.get(this.sendId)]}))}))},e.prototype.encryptSend=function(e){return r(this,void 0,void 0,(function(){var t;return i(this,(function(n){switch(n.label){case 0:return[4,this.sendService.encrypt(this.send,e,this.password,null)];case 1:t=n.sent();try{t[0].deletionDate=null==this.deletionDate?null:new Date(this.deletionDate)}catch(r){t[0].deletionDate=null}try{t[0].expirationDate=null==this.expirationDate?null:new Date(this.expirationDate)}catch(i){t[0].expirationDate=null}return[2,t]}}))}))},e.prototype.dateToString=function(e){return null==e?null:this.datePipe.transform(e,"yyyy-MM-ddTHH:mm")},e.prototype.formatDateFallbacks=function(e){try{return this.isSafari||(e+=" 00:00"),this.datePipe.transform(new Date(e),"yyyy-MM-dd")}catch(t){this.platformUtilsService.showToast("error",this.i18nService.t("errorOccurred"),this.i18nService.t("dateParsingError"))}},e.prototype.dateToSplitString=function(e){if(null!=e)return[this.isSafari?this.datePipe.transform(e,"MM/dd/yyyy"):this.datePipe.transform(e,"yyyy-MM-dd"),this.datePipe.transform(e,"HH:mm")]},e.prototype.togglePasswordVisible=function(){this.showPassword=!this.showPassword,document.getElementById("password").focus()},e.prototype.nullOrWhiteSpaceCount=function(e){return e.filter((function(e){return null==e||""===e.trim()})).length},e.prototype.safariTimeOptions=function(e){for(var t=[],n=[],r=[],i=[],s=1;s<=12;s++)for(var l=0;l<60;l+=15){var c=s.toString(),p=l.toString();if(s<10&&(c="0"+c),l<10&&(p="0"+p),12===s){var u={standard:c+":"+p+" AM",military:"00:"+p};n.push(u);var d={standard:c+":"+p+" PM",military:c+":"+p};t.push(d)}else{var m={standard:c+":"+p+" AM",military:c+":"+p};r.push(m);var h={standard:c+":"+p+" PM",military:s+12+":"+p};i.push(h)}}var f=o(n,r,t,i);if(e===a.ExpriationDate&&null!=this.expirationDateTimeFallback&&this.editMode){var v={standard:this.datePipe.transform(this.expirationDateTimeFallback,"hh:mm a"),military:this.datePipe.transform(this.expirationDateTimeFallback,"HH:mm")};return o([v,{standard:null,military:null}],f)}if(e===a.DeletionDate&&null!=this.deletionDateTimeFallback&&this.editMode){v={standard:this.datePipe.transform(this.deletionDateTimeFallback,"hh:mm a"),military:this.datePipe.transform(this.deletionDateTimeFallback,"HH:mm")};return o([v],f)}return o([{standard:null,military:null}],f)},e.ɵfac=function(t){return new(t||e)(h.ɵɵdirectiveInject(f.I18nService),h.ɵɵdirectiveInject(v.PlatformUtilsService),h.ɵɵdirectiveInject(y.EnvironmentService),h.ɵɵdirectiveInject(g.DatePipe),h.ɵɵdirectiveInject(x.SendService),h.ɵɵdirectiveInject(b.UserService),h.ɵɵdirectiveInject(S.MessagingService),h.ɵɵdirectiveInject(w.PolicyService))},e.ɵdir=h.ɵɵdefineDirective({type:e,inputs:{sendId:"sendId",type:"type"},outputs:{onSavedSend:"onSavedSend",onDeletedSend:"onDeletedSend",onCancelled:"onCancelled"}}),e}();t.AddEditComponent=C},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e,t){this.culture="en-US",this.name=e,this.masterPasswordHint=t||null};t.UpdateProfileRequest=r},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t}(n(638).EmailTokenRequest);t.EmailRequest=o},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t}(n(644).PasswordRequest);t.KdfRequest=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.UpdateDomainsRequest=r},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&(this.organizationId=this.organizations[0].id),this.filterCollections(),[2]}}))}))},e.prototype.filterCollections=function(){var e=this;this.writeableCollections.forEach((function(e){return e.checked=!1})),null==this.organizationId||0===this.writeableCollections.length?this.collections=[]:this.collections=this.writeableCollections.filter((function(t){return t.organizationId===e.organizationId}))},e.prototype.submit=function(){return r(this,void 0,void 0,(function(){var e,t,n=this;return i(this,(function(o){switch(o.label){case 0:return 0===(e=this.collections.filter((function(e){return!!e.checked})).map((function(e){return e.id}))).length?(this.platformUtilsService.showToast("error",this.i18nService.t("errorOccurred"),this.i18nService.t("selectOneCollection")),[2]):[4,this.cipherService.get(this.cipherId)];case 1:return[4,o.sent().decrypt()];case 2:t=o.sent(),o.label=3;case 3:return o.trys.push([3,5,,6]),this.formPromise=this.cipherService.shareWithServer(t,this.organizationId,e).then((function(){return r(n,void 0,void 0,(function(){return i(this,(function(e){return this.onSharedCipher.emit(),this.platformUtilsService.showToast("success",null,this.i18nService.t("sharedItem")),[2]}))}))})),[4,this.formPromise];case 4:return o.sent(),[2,!0];case 5:return o.sent(),[3,6];case 6:return[2,!1]}}))}))},Object.defineProperty(e.prototype,"canSave",{get:function(){if(null!=this.collections)for(var e=0;e0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=e?p[e-1]():0===p.length&&(l.delete(c),0===l.size&&a.delete(n))};o.apply(n,r).then((function(e){return u(),e})).catch((function(e){throw u(),e})).then(t,i)};p.push(s),p.length<=e&&s()}))}}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e,t){this.ids=null==e?[]:e,this.folderId=t};t.CipherBulkMoveRequest=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){this.ids=null==e?[]:e};t.CipherBulkRestoreRequest=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(511),i=function(e,t){var n=this;null!=e&&(this.ciphers=[],e.forEach((function(e){n.ciphers.push(new r.CipherWithIdRequest(e))}))),this.collectionIds=t};t.CipherBulkShareRequest=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(210),i=function(e){this.cipher=new r.CipherRequest(e),this.collectionIds=e.collectionIds};t.CipherShareRequest=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e){this.comparator=e,this.sortedCiphersByUrl=new Map,this.timeouts=new Map}return e.prototype.isCached=function(e){return this.sortedCiphersByUrl.has(e)},e.prototype.addCiphers=function(e,t){t.sort(this.comparator),this.sortedCiphersByUrl.set(e,new i(t)),this.resetTimer(e)},e.prototype.getLastUsed=function(e){return this.resetTimer(e),this.isCached(e)?this.sortedCiphersByUrl.get(e).getLastUsed():null},e.prototype.getLastLaunched=function(e){return this.isCached(e)?this.sortedCiphersByUrl.get(e).getLastLaunched():null},e.prototype.getNext=function(e){return this.resetTimer(e),this.isCached(e)?this.sortedCiphersByUrl.get(e).getNext():null},e.prototype.updateLastUsedIndex=function(e){this.isCached(e)&&this.sortedCiphersByUrl.get(e).updateLastUsedIndex()},e.prototype.clear=function(){this.sortedCiphersByUrl.clear(),this.timeouts.clear()},e.prototype.resetTimer=function(e){var t=this;clearTimeout(this.timeouts.get(e)),this.timeouts.set(e,setTimeout((function(){t.sortedCiphersByUrl.delete(e),t.timeouts.delete(e)}),3e3))},e}();t.SortedCiphersCache=r;var i=function(){function e(e){this.ciphers=e,this.lastUsedIndex=-1}return e.prototype.getLastUsed=function(){return this.lastUsedIndex=Math.max(this.lastUsedIndex,0),this.ciphers[this.lastUsedIndex]},e.prototype.getLastLaunched=function(){return this.ciphers.filter((function(e){var t;return null===(t=e.localData)||void 0===t?void 0:t.lastLaunched})).sort((function(e,t){return t.localData.lastLaunched.valueOf()-e.localData.lastLaunched.valueOf()}))[0]},e.prototype.getNextIndex=function(){return(this.lastUsedIndex+1)%this.ciphers.length},e.prototype.getNext=function(){return this.ciphers[this.getNextIndex()]},e.prototype.updateLastUsedIndex=function(){this.lastUsedIndex=this.getNextIndex()},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e,t,n){this.children=[],this.parent=n,this.node=e,this.node.name=t};t.TreeNode=r},,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){this.buffer=e};t.EncArrayBuffer=r},,,,,,function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.defaultType="",t.minLength=0,t.useUppercase=!1,t.useLowercase=!1,t.useNumbers=!1,t.numberCount=0,t.useSpecial=!1,t.specialCount=0,t.minNumberWords=0,t.capitalize=!1,t.includeNumber=!1,t}return i(t,e),t.prototype.inEffect=function(){return""!==this.defaultType||this.minLength>0||this.numberCount>0||this.specialCount>0||this.useUppercase||this.useLowercase||this.useNumbers||this.useSpecial||this.minNumberWords>0||this.capitalize||this.includeNumber},t}(n(81).default);t.PasswordGeneratorPolicyOptions=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){this.id=e.id,this.name=e.name,this.status=e.status,this.type=e.type,this.enabled=e.enabled,this.usePolicies=e.usePolicies,this.useGroups=e.useGroups,this.useDirectory=e.useDirectory,this.useEvents=e.useEvents,this.useTotp=e.useTotp,this.use2fa=e.use2fa,this.useApi=e.useApi,this.useBusinessPortal=e.useBusinessPortal,this.useSso=e.useSso,this.selfHost=e.selfHost,this.usersGetPremium=e.usersGetPremium,this.seats=e.seats,this.maxCollections=e.maxCollections,this.maxStorageGb=e.maxStorageGb,this.ssoBound=e.ssoBound,this.identifier=e.identifier,this.permissions=e.permissions,this.resetPasswordKey=e.resetPasswordKey,this.userId=e.userId};t.OrganizationData=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){null!=e&&(this.id=e.id,this.fileName=e.fileName,this.key=e.key,this.size=e.size,this.sizeName=e.sizeName)};t.SendFileData=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){null!=e&&(this.text=e.text,this.hidden=e.hidden)};t.SendTextData=r},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},a=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=0?this.browserCache=a.DeviceType.OperaBrowser:-1!==navigator.userAgent.indexOf(" Edg/")?this.browserCache=a.DeviceType.EdgeBrowser:-1!==navigator.userAgent.indexOf(" Vivaldi/")?this.browserCache=a.DeviceType.VivaldiBrowser:-1!==navigator.userAgent.indexOf(" Safari/")&&-1===navigator.userAgent.indexOf("Chrome")?this.browserCache=a.DeviceType.SafariBrowser:window.chrome&&-1!==navigator.userAgent.indexOf(" Chrome/")?this.browserCache=a.DeviceType.ChromeBrowser:-1!==navigator.userAgent.indexOf(" Trident/")?this.browserCache=a.DeviceType.IEBrowser:this.browserCache=a.DeviceType.UnknownBrowser),this.browserCache},e.prototype.getDeviceString=function(){return a.DeviceType[this.getDevice()].toLowerCase().replace("browser","")},e.prototype.isFirefox=function(){return this.getDevice()===a.DeviceType.FirefoxBrowser},e.prototype.isChrome=function(){return this.getDevice()===a.DeviceType.ChromeBrowser},e.prototype.isEdge=function(){return this.getDevice()===a.DeviceType.EdgeBrowser},e.prototype.isOpera=function(){return this.getDevice()===a.DeviceType.OperaBrowser},e.prototype.isVivaldi=function(){return this.getDevice()===a.DeviceType.VivaldiBrowser},e.prototype.isSafari=function(){return this.getDevice()===a.DeviceType.SafariBrowser},e.prototype.isIE=function(){return this.getDevice()===a.DeviceType.IEBrowser},e.prototype.isMacAppStore=function(){return!1},e.prototype.isViewOpen=function(){return Promise.resolve(!1)},e.prototype.lockTimeout=function(){return null},e.prototype.launchUri=function(e,t){var n=document.createElement("a");n.href=e,null!=t&&t.sameWindow||(n.target="_blank",n.rel="noreferrer noopener"),n.classList.add("d-none"),document.body.appendChild(n),n.click(),document.body.removeChild(n)},e.prototype.saveFile=function(e,t,n,r){var i=null,o=null,a=r.toLowerCase(),s=!0;if(a.endsWith(".pdf")?(o="application/pdf",s=!1):a.endsWith(".xlsx")?o="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":a.endsWith(".docx")?o="application/vnd.openxmlformats-officedocument.wordprocessingml.document":a.endsWith(".pptx")?o="application/vnd.openxmlformats-officedocument.presentationml.presentation":a.endsWith(".csv")?o="text/csv":a.endsWith(".png")?o="image/png":a.endsWith(".jpg")||a.endsWith(".jpeg")?o="image/jpeg":a.endsWith(".gif")&&(o="image/gif"),null!=o&&null==(n=n||{}).type&&(n.type=o),i=null==n||this.isIE()?new Blob([t]):new Blob([t],n),navigator.msSaveOrOpenBlob)navigator.msSaveBlob(i,r);else{var l=e.document.createElement("a");s?l.download=r:this.isSafari()||(l.target="_blank"),l.href=URL.createObjectURL(i),l.style.position="fixed",e.document.body.appendChild(l),l.click(),e.document.body.removeChild(l)}},e.prototype.getApplicationVersion=function(){return Promise.resolve("2.20.4")},e.prototype.supportsWebAuthn=function(e){return"undefined"!=typeof PublicKeyCredential},e.prototype.supportsDuo=function(){return!0},e.prototype.showToast=function(e,t,n,r){this.messagingService.send("showToast",{text:n,title:t,type:e,options:r})},e.prototype.showDialog=function(e,t,n,a,s,l){return void 0===l&&(l=!1),r(this,void 0,void 0,(function(){var r,c;return i(this,(function(i){switch(i.label){case 0:if(r=null,null!=s)switch(s){case"success":r="fa-check text-success";break;case"warning":r="fa-warning text-warning";break;case"error":r="fa-bolt text-danger";break;case"info":r="fa-info-circle text-info"}return c=null!=r?'':void 0,[4,o.default.fire({heightAuto:!1,buttonsStyling:!1,icon:s,iconHtml:c,text:l?null:e,html:l?e:null,title:t,showCancelButton:null!=a,cancelButtonText:a,showConfirmButton:!0,confirmButtonText:null==n?this.i18nService.t("ok"):n})];case 1:return[2,i.sent().value]}}))}))},e.prototype.isDev=function(){return!1},e.prototype.isSelfHost=function(){return"true"===(!1).toString()},e.prototype.copyToClipboard=function(e,t){var n=window,r=window.document;if(t&&(t.window||t.win)?r=(n=t.window||t.win).document:t&&t.doc&&(r=t.doc),n.clipboardData&&n.clipboardData.setData)n.clipboardData.setData("Text",e);else if(r.queryCommandSupported&&r.queryCommandSupported("copy")){var i=r.createElement("textarea");i.textContent=e,i.style.position="fixed";var o=r.body;r.body.classList.contains("modal-open")&&(o=r.body.querySelector(".modal")),o.appendChild(i),i.select();try{r.execCommand("copy")}catch(a){console.warn("Copy to clipboard failed.",a)}finally{o.removeChild(i)}}},e.prototype.readFromClipboard=function(e){throw new Error("Cannot read from clipboard on web.")},e.prototype.supportsBiometric=function(){return Promise.resolve(!1)},e.prototype.authenticateBiometric=function(){return Promise.resolve(!1)},e.prototype.supportsSecureStorage=function(){return!1},e.prototype.getDefaultSystemTheme=function(){return Promise.resolve(null)},e.prototype.onDefaultSystemThemeChange=function(){},e}();t.WebPlatformUtilsService=s},,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&e.data.forEach((function(e){var r=new l.Collection(new p.CollectionData(e));t.push(r.decrypt().then((function(e){n.push(e)})))})),Promise.all(t)}))),m.push(this.apiService.getCiphersOrganization(e).then((function(e){var t=[];return null!=e&&null!=e.data&&e.data.length>0&&e.data.filter((function(e){return null===e.deletedDate})).forEach((function(e){var n=new s.Cipher(new c.CipherData(e));t.push(n.decrypt().then((function(e){r.push(e)})))})),Promise.all(t)}))),[4,Promise.all(m)];case 1:return i.sent(),"csv"===t?(h=new Map,n.forEach((function(e){h.set(e.id,e)})),f=[],r.forEach((function(e){if(e.type===a.CipherType.Login||e.type===a.CipherType.SecureNote){var t={collections:[]};null!=e.collectionIds&&(t.collections=e.collectionIds.filter((function(e){return h.has(e)})).map((function(e){return h.get(e).name}))),y.buildCommonCipher(t,e),f.push(t)}})),[2,o.unparse(f)]):(v={encrypted:!1,collections:[],items:[]},n.forEach((function(e){var t=new d.CollectionWithId;t.build(e),v.collections.push(t)})),r.forEach((function(e){var t=new u.CipherWithIds;t.build(e),v.items.push(t)})),[2,JSON.stringify(v,null," ")])}}))}))},e.prototype.getOrganizationEncryptedExport=function(e){return r(this,void 0,void 0,(function(){var t,n,r,o;return i(this,(function(i){switch(i.label){case 0:return t=[],n=[],(r=[]).push(this.apiService.getCollections(e).then((function(e){return null!=e&&null!=e.data&&e.data.length>0&&e.data.forEach((function(e){var n=new l.Collection(new p.CollectionData(e));t.push(n)})),Promise.all([])}))),r.push(this.apiService.getCiphersOrganization(e).then((function(e){return null!=e&&null!=e.data&&e.data.length>0&&e.data.filter((function(e){return null===e.deletedDate})).forEach((function(e){var t=new s.Cipher(new c.CipherData(e));n.push(t)})),Promise.all([])}))),[4,Promise.all(r)];case 1:return i.sent(),o={encrypted:!0,collections:[],items:[]},t.forEach((function(e){var t=new d.CollectionWithId;t.build(e),o.collections.push(t)})),n.forEach((function(e){var t=new u.CipherWithIds;t.build(e),o.items.push(t)})),[2,JSON.stringify(o,null," ")]}}))}))},e.prototype.padNumber=function(e,t,n){void 0===n&&(n="0");var r=e.toString();return r.length>=t?r:new Array(t-r.length+1).join(n)+r},e.prototype.buildCommonCipher=function(e,t){switch(e.type=null,e.name=t.name,e.notes=t.notes,e.fields=null,e.login_uri=null,e.login_username=null,e.login_password=null,e.login_totp=null,t.fields&&t.fields.forEach((function(t){e.fields?e.fields+="\n":e.fields="",e.fields+=(t.name||"")+": "+t.value})),t.type){case a.CipherType.Login:e.type="login",e.login_username=t.login.username,e.login_password=t.login.password,e.login_totp=t.login.totp,t.login.uris&&(e.login_uri=[],t.login.uris.forEach((function(t){e.login_uri.push(t.uri)})));break;case a.CipherType.SecureNote:e.type="note";break;default:return}return e},e}();t.ExportService=h},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(39),i=n(143),o=n(190),a=n(105),s=n(961),l=n(962),c=n(963),p=n(964),u=n(966),d=function(){function e(){}return e.template=function(){var t=new e;return t.organizationId=null,t.collectionIds=null,t.folderId=null,t.type=r.CipherType.Login,t.name="Item name",t.notes="Some notes about this item.",t.favorite=!1,t.fields=[],t.login=null,t.secureNote=null,t.card=null,t.identity=null,t},e.toView=function(e,t){var n,o;if(void 0===t&&(t=new i.CipherView),t.type=e.type,t.folderId=e.folderId,null==t.organizationId&&(t.organizationId=e.organizationId),t.collectionIds||e.collectionIds){var a=new Set((null!==(n=t.collectionIds)&&void 0!==n?n:[]).concat(null!==(o=e.collectionIds)&&void 0!==o?o:[]));t.collectionIds=Array.from(a.values())}switch(t.name=e.name,t.notes=e.notes,t.favorite=e.favorite,null!=e.fields&&(t.fields=e.fields.map((function(e){return l.Field.toView(e)}))),e.type){case r.CipherType.Login:t.login=p.Login.toView(e.login);break;case r.CipherType.SecureNote:t.secureNote=u.SecureNote.toView(e.secureNote);break;case r.CipherType.Card:t.card=s.Card.toView(e.card);break;case r.CipherType.Identity:t.identity=c.Identity.toView(e.identity)}return t},e.toDomain=function(e,t){switch(void 0===t&&(t=new o.Cipher),t.type=e.type,t.folderId=e.folderId,null==t.organizationId&&(t.organizationId=e.organizationId),t.name=null!=e.name?new a.EncString(e.name):null,t.notes=null!=e.notes?new a.EncString(e.notes):null,t.favorite=e.favorite,null!=e.fields&&(t.fields=e.fields.map((function(e){return l.Field.toDomain(e)}))),e.type){case r.CipherType.Login:t.login=p.Login.toDomain(e.login);break;case r.CipherType.SecureNote:t.secureNote=u.SecureNote.toDomain(e.secureNote);break;case r.CipherType.Card:t.card=s.Card.toDomain(e.card);break;case r.CipherType.Identity:t.identity=c.Identity.toDomain(e.identity)}return t},e.prototype.build=function(e){var t,n;switch(this.organizationId=e.organizationId,this.folderId=e.folderId,this.type=e.type,e instanceof i.CipherView?(this.name=e.name,this.notes=e.notes):(this.name=null===(t=e.name)||void 0===t?void 0:t.encryptedString,this.notes=null===(n=e.notes)||void 0===n?void 0:n.encryptedString),this.favorite=e.favorite,null!=e.fields&&(i.CipherView,this.fields=e.fields.map((function(e){return new l.Field(e)}))),e.type){case r.CipherType.Login:this.login=new p.Login(e.login);break;case r.CipherType.SecureNote:this.secureNote=new u.SecureNote(e.secureNote);break;case r.CipherType.Card:this.card=new s.Card(e.card);break;case r.CipherType.Identity:this.identity=new c.Identity(e.identity)}},e}();t.Cipher=d},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(88),i=n(285),o=n(105),a=function(){function e(e){var t,n,i,o,a,s;null!=e&&(e instanceof r.CardView?(this.cardholderName=e.cardholderName,this.brand=e.brand,this.number=e.number,this.expMonth=e.expMonth,this.expYear=e.expYear,this.code=e.code):(this.cardholderName=null===(t=e.cardholderName)||void 0===t?void 0:t.encryptedString,this.brand=null===(n=e.brand)||void 0===n?void 0:n.encryptedString,this.number=null===(i=e.number)||void 0===i?void 0:i.encryptedString,this.expMonth=null===(o=e.expMonth)||void 0===o?void 0:o.encryptedString,this.expYear=null===(a=e.expYear)||void 0===a?void 0:a.encryptedString,this.code=null===(s=e.code)||void 0===s?void 0:s.encryptedString))}return e.template=function(){var t=new e;return t.cardholderName="John Doe",t.brand="visa",t.number="4242424242424242",t.expMonth="04",t.expYear="2023",t.code="123",t},e.toView=function(e,t){return void 0===t&&(t=new r.CardView),t.cardholderName=e.cardholderName,t.brand=e.brand,t.number=e.number,t.expMonth=e.expMonth,t.expYear=e.expYear,t.code=e.code,t},e.toDomain=function(e,t){return void 0===t&&(t=new i.Card),t.cardholderName=null!=e.cardholderName?new o.EncString(e.cardholderName):null,t.brand=null!=e.brand?new o.EncString(e.brand):null,t.number=null!=e.number?new o.EncString(e.number):null,t.expMonth=null!=e.expMonth?new o.EncString(e.expMonth):null,t.expYear=null!=e.expYear?new o.EncString(e.expYear):null,t.code=null!=e.code?new o.EncString(e.code):null,t},e}();t.Card=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(118),i=n(209),o=n(105),a=n(286),s=function(){function e(e){var t,n;null!=e&&(e instanceof i.FieldView?(this.name=e.name,this.value=e.value):(this.name=null===(t=e.name)||void 0===t?void 0:t.encryptedString,this.value=null===(n=e.value)||void 0===n?void 0:n.encryptedString),this.type=e.type)}return e.template=function(){var t=new e;return t.name="Field name",t.value="Some value",t.type=r.FieldType.Text,t},e.toView=function(e,t){return void 0===t&&(t=new i.FieldView),t.type=e.type,t.value=e.value,t.name=e.name,t},e.toDomain=function(e,t){return void 0===t&&(t=new a.Field),t.type=e.type,t.value=null!=e.value?new o.EncString(e.value):null,t.name=null!=e.name?new o.EncString(e.name):null,t},e}();t.Field=s},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(144),i=n(105),o=n(287),a=function(){function e(e){var t,n,i,o,a,s,l,c,p,u,d,m,h,f,v,y,g,x;null!=e&&(e instanceof r.IdentityView?(this.title=e.title,this.firstName=e.firstName,this.middleName=e.middleName,this.lastName=e.lastName,this.address1=e.address1,this.address2=e.address2,this.address3=e.address3,this.city=e.city,this.state=e.state,this.postalCode=e.postalCode,this.country=e.country,this.company=e.company,this.email=e.email,this.phone=e.phone,this.ssn=e.ssn,this.username=e.username,this.passportNumber=e.passportNumber,this.licenseNumber=e.licenseNumber):(this.title=null===(t=e.title)||void 0===t?void 0:t.encryptedString,this.firstName=null===(n=e.firstName)||void 0===n?void 0:n.encryptedString,this.middleName=null===(i=e.middleName)||void 0===i?void 0:i.encryptedString,this.lastName=null===(o=e.lastName)||void 0===o?void 0:o.encryptedString,this.address1=null===(a=e.address1)||void 0===a?void 0:a.encryptedString,this.address2=null===(s=e.address2)||void 0===s?void 0:s.encryptedString,this.address3=null===(l=e.address3)||void 0===l?void 0:l.encryptedString,this.city=null===(c=e.city)||void 0===c?void 0:c.encryptedString,this.state=null===(p=e.state)||void 0===p?void 0:p.encryptedString,this.postalCode=null===(u=e.postalCode)||void 0===u?void 0:u.encryptedString,this.country=null===(d=e.country)||void 0===d?void 0:d.encryptedString,this.company=null===(m=e.company)||void 0===m?void 0:m.encryptedString,this.email=null===(h=e.email)||void 0===h?void 0:h.encryptedString,this.phone=null===(f=e.phone)||void 0===f?void 0:f.encryptedString,this.ssn=null===(v=e.ssn)||void 0===v?void 0:v.encryptedString,this.username=null===(y=e.username)||void 0===y?void 0:y.encryptedString,this.passportNumber=null===(g=e.passportNumber)||void 0===g?void 0:g.encryptedString,this.licenseNumber=null===(x=e.licenseNumber)||void 0===x?void 0:x.encryptedString))}return e.template=function(){var t=new e;return t.title="Mr",t.firstName="John",t.middleName="William",t.lastName="Doe",t.address1="123 Any St",t.address2="Apt #123",t.address3=null,t.city="New York",t.state="NY",t.postalCode="10001",t.country="US",t.company="Acme Inc.",t.email="john@company.com",t.phone="5555551234",t.ssn="000-123-4567",t.username="jdoe",t.passportNumber="US-123456789",t.licenseNumber="D123-12-123-12333",t},e.toView=function(e,t){return void 0===t&&(t=new r.IdentityView),t.title=e.title,t.firstName=e.firstName,t.middleName=e.middleName,t.lastName=e.lastName,t.address1=e.address1,t.address2=e.address2,t.address3=e.address3,t.city=e.city,t.state=e.state,t.postalCode=e.postalCode,t.country=e.country,t.company=e.company,t.email=e.email,t.phone=e.phone,t.ssn=e.ssn,t.username=e.username,t.passportNumber=e.passportNumber,t.licenseNumber=e.licenseNumber,t},e.toDomain=function(e,t){return void 0===t&&(t=new o.Identity),t.title=null!=e.title?new i.EncString(e.title):null,t.firstName=null!=e.firstName?new i.EncString(e.firstName):null,t.middleName=null!=e.middleName?new i.EncString(e.middleName):null,t.lastName=null!=e.lastName?new i.EncString(e.lastName):null,t.address1=null!=e.address1?new i.EncString(e.address1):null,t.address2=null!=e.address2?new i.EncString(e.address2):null,t.address3=null!=e.address3?new i.EncString(e.address3):null,t.city=null!=e.city?new i.EncString(e.city):null,t.state=null!=e.state?new i.EncString(e.state):null,t.postalCode=null!=e.postalCode?new i.EncString(e.postalCode):null,t.country=null!=e.country?new i.EncString(e.country):null,t.company=null!=e.company?new i.EncString(e.company):null,t.email=null!=e.email?new i.EncString(e.email):null,t.phone=null!=e.phone?new i.EncString(e.phone):null,t.ssn=null!=e.ssn?new i.EncString(e.ssn):null,t.username=null!=e.username?new i.EncString(e.username):null,t.passportNumber=null!=e.passportNumber?new i.EncString(e.passportNumber):null,t.licenseNumber=null!=e.licenseNumber?new i.EncString(e.licenseNumber):null,t},e}();t.Identity=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(965),i=n(159),o=n(105),a=n(288),s=function(){function e(e){var t,n,o;null!=e&&(null!=e.uris&&(i.LoginView,this.uris=e.uris.map((function(e){return new r.LoginUri(e)}))),e instanceof i.LoginView?(this.username=e.username,this.password=e.password,this.totp=e.totp):(this.username=null===(t=e.username)||void 0===t?void 0:t.encryptedString,this.password=null===(n=e.password)||void 0===n?void 0:n.encryptedString,this.totp=null===(o=e.totp)||void 0===o?void 0:o.encryptedString))}return e.template=function(){var t=new e;return t.uris=[],t.username="jdoe",t.password="myp@ssword123",t.totp="JBSWY3DPEHPK3PXP",t},e.toView=function(e,t){return void 0===t&&(t=new i.LoginView),null!=e.uris&&(t.uris=e.uris.map((function(e){return r.LoginUri.toView(e)}))),t.username=e.username,t.password=e.password,t.totp=e.totp,t},e.toDomain=function(e,t){return void 0===t&&(t=new a.Login),null!=e.uris&&(t.uris=e.uris.map((function(e){return r.LoginUri.toDomain(e)}))),t.username=null!=e.username?new o.EncString(e.username):null,t.password=null!=e.password?new o.EncString(e.password):null,t.totp=null!=e.totp?new o.EncString(e.totp):null,t},e}();t.Login=s},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(258),i=n(105),o=n(289),a=function(){function e(e){var t;this.match=null,null!=e&&(e instanceof r.LoginUriView?this.uri=e.uri:this.uri=null===(t=e.uri)||void 0===t?void 0:t.encryptedString,this.match=e.match)}return e.template=function(){var t=new e;return t.uri="https://google.com",t.match=null,t},e.toView=function(e,t){return void 0===t&&(t=new r.LoginUriView),t.uri=e.uri,t.match=e.match,t},e.toDomain=function(e,t){return void 0===t&&(t=new o.LoginUri),t.uri=null!=e.uri?new i.EncString(e.uri):null,t.match=e.match,t},e}();t.LoginUri=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(106),i=n(94),o=n(290),a=function(){function e(e){null!=e&&(this.type=e.type)}return e.template=function(){var t=new e;return t.type=r.SecureNoteType.Generic,t},e.toView=function(e,t){return void 0===t&&(t=new i.SecureNoteView),t.type=e.type,t},e.toDomain=function(e,t){return void 0===t&&(t=new o.SecureNote),t.type=e.type,t},e}();t.SecureNote=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(156),i=n(140),o=n(105),a=function(){function e(){}return e.template=function(){var t=new e;return t.organizationId="00000000-0000-0000-0000-000000000000",t.name="Collection name",t.externalId=null,t},e.toView=function(e,t){return void 0===t&&(t=new r.CollectionView),t.name=e.name,t.externalId=e.externalId,null==t.organizationId&&(t.organizationId=e.organizationId),t},e.toDomain=function(e,t){return void 0===t&&(t=new i.Collection),t.name=null!=e.name?new o.EncString(e.name):null,t.externalId=e.externalId,null==t.organizationId&&(t.organizationId=e.organizationId),t},e.prototype.build=function(e){var t;this.organizationId=e.organizationId,e instanceof r.CollectionView?this.name=e.name:this.name=null===(t=e.name)||void 0===t?void 0:t.encryptedString,this.externalId=e.externalId},e}();t.Collection=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(127),i=n(105),o=n(516),a=function(){function e(){}return e.template=function(){var t=new e;return t.name="Folder name",t},e.toView=function(e,t){return void 0===t&&(t=new r.FolderView),t.name=e.name,t},e.toDomain=function(e,t){return void 0===t&&(t=new o.Folder),t.name=null!=e.name?new i.EncString(e.name):null,t},e.prototype.build=function(e){var t;e instanceof r.FolderView?this.name=e.name:this.name=null===(t=e.name)||void 0===t?void 0:t.encryptedString},e}();t.Folder=a},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]5e4)throw new Error("Cannot upload file, exceeds maximum size of "+5e4*a);i.label=1;case 1:i.trys.push([1,12,,13]),i.label=2;case 2:return s"})),t+=""},e.prototype.getMaxBlockSize=function(e){return s.compare(e,"2019-12-12")>=0?4194304e3:s.compare(e,"2016-05-31")>=0?104857600:4194304},e}();t.AzureFileUploadService=a;var s=function(){function e(e){this.year=0,this.month=0,this.day=0;try{var t=e.split("-").map((function(e){return Number.parseInt(e,10)}));this.year=t[0],this.month=t[1],this.day=t[2]}catch(n){}}return e.compare=function(t,n){return"string"==typeof t&&(t=new e(t)),"string"==typeof n&&(n=new e(n)),t.year!==n.year?t.year-n.year:t.month!==n.month?t.month-n.month:t.day!==n.day?t.day-n.day:0},e.prototype.compare=function(t){return e.compare(this,t)},e}()},function(e,t,n){"use strict";(function(e){var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&(o=Math.floor(r.ciphers.length/2),a=r.ciphers.length-1,this.badData(r.ciphers[0])&&this.badData(r.ciphers[o])&&this.badData(r.ciphers[a])))return[2,new Error(this.i18nService.t("importFormatError"))];i.label=2;case 2:return i.trys.push([2,4,,5]),[4,this.postImport(r,n)];case 3:return i.sent(),[3,5];case 4:return s=i.sent(),l=new m.ErrorResponse(s,400),[2,this.handleServerError(l,r)];case 5:return[2,null];case 6:return[2,new Error(this.i18nService.t("importFormatError"))]}}))}))},e.prototype.getImporter=function(e,t){void 0===t&&(t=null);var n=this.getImporterInstance(e);return null==n?null:(n.organizationId=t,n)},e.prototype.getImporterInstance=function(e){if(null==e||""===e)return null;switch(e){case"bitwardencsv":return new g.BitwardenCsvImporter;case"bitwardenjson":return new x.BitwardenJsonImporter;case"lastpasscsv":case"passboltcsv":return new j.LastPassCsvImporter;case"keepassxcsv":return new R.KeePassXCsvImporter;case"aviracsv":return new y.AviraCsvImporter;case"blurcsv":return new S.BlurCsvImporter;case"safeincloudxml":return new ne.SafeInCloudXmlImporter;case"padlockcsv":return new q.PadlockCsvImporter;case"keepass2xml":return new D.KeePass2XmlImporter;case"chromecsv":case"operacsv":case"vivaldicsv":return new C.ChromeCsvImporter;case"firefoxcsv":return new O.FirefoxCsvImporter;case"upmcsv":return new le.UpmCsvImporter;case"saferpasscsv":return new re.SaferPassCsvImporter;case"meldiumcsv":return new U.MeldiumCsvImporter;case"1password1pif":return new L.OnePassword1PifImporter;case"1passwordwincsv":return new K.OnePasswordWinCsvImporter;case"1passwordmaccsv":return new G.OnePasswordMacCsvImporter;case"keepercsv":return new V.KeeperCsvImporter;case"passworddragonxml":return new J.PasswordDragonXmlImporter;case"enpasscsv":return new _.EnpassCsvImporter;case"enpassjson":return new A.EnpassJsonImporter;case"pwsafexml":return new X.PasswordSafeXmlImporter;case"dashlanejson":return new P.DashlaneJsonImporter;case"msecurecsv":return new N.MSecureCsvImporter;case"stickypasswordxml":return new ae.StickyPasswordXmlImporter;case"truekeycsv":return new se.TrueKeyCsvImporter;case"clipperzhtml":return new I.ClipperzHtmlImporter;case"roboformcsv":return new te.RoboFormCsvImporter;case"ascendocsv":return new h.AscendoCsvImporter;case"passwordbossjson":return new Q.PasswordBossJsonImporter;case"zohovaultcsv":return new pe.ZohoVaultCsvImporter;case"splashidcsv":return new oe.SplashIdCsvImporter;case"passkeepcsv":return new W.PassKeepCsvImporter;case"gnomejson":return new M.GnomeJsonImporter;case"passwordagentcsv":return new Y.PasswordAgentCsvImporter;case"passpackcsv":return new $.PasspackCsvImporter;case"passmanjson":return new H.PassmanJsonImporter;case"avastcsv":return new f.AvastCsvImporter;case"avastjson":return new v.AvastJsonImporter;case"fsecurefsk":return new T.FSecureFskImporter;case"kasperskytxt":return new B.KasperskyTxtImporter;case"remembearcsv":return new ee.RememBearCsvImporter;case"passwordwallettxt":return new Z.PasswordWalletTxtImporter;case"mykicsv":return new z.MykiCsvImporter;case"securesafecsv":return new ie.SecureSafeCsvImporter;case"logmeoncecsv":return new F.LogMeOnceCsvImporter;case"blackberrycsv":return new b.BlackBerryCsvImporter;case"buttercupcsv":return new w.ButtercupCsvImporter;case"codebookcsv":return new E.CodebookCsvImporter;case"encryptrcsv":return new k.EncryptrCsvImporter;case"yoticsv":return new ce.YotiCsvImporter;default:return null}},e.prototype.postImport=function(e,t){return void 0===t&&(t=null),r(this,void 0,void 0,(function(){var n,r,o,a,m;return i(this,(function(i){switch(i.label){case 0:if(null!=t)return[3,10];n=new p.ImportCiphersRequest,a=0,i.label=1;case 1:return a0&&(n+="\n\n"),"Folder"!==a&&"Collection"!==a&&(n+="["+(c+1)+"] "),n+="["+a+'] "'+i.name+'": '+l})),new Error(n)},e}();t.ImportService=ue},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){this.ciphers=[],this.folders=[],this.folderRelationships=[]};t.ImportCiphersRequest=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){this.ciphers=[],this.collections=[],this.collectionRelationships=[]};t.ImportOrganizationCiphersRequest=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e,t){this.key=e,this.value=t};t.KvpRequest=r},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!1);return null==r?(n.success=!1,Promise.resolve(n)):(r.forEach((function(e){if(!(e.length<2)){var r=t.initLoginCipher();if(r.notes=t.getValueOrDefault(e[e.length-1]),r.name=t.getValueOrDefault(e[0],"--"),e.length>2&&e.length%2==0)for(var i=0;i-1?r.login.password=t.getValueOrDefault(o):null==r.login.username&&t.usernameFieldNames.indexOf(s)>-1?r.login.username=t.getValueOrDefault(o):(null==r.login.uris||0===r.login.uris.length)&&t.uriFieldNames.indexOf(s)>-1?r.login.uris=t.makeUriArray(o):t.processKvp(r,a,o)}}t.convertToNoteIfNeeded(r),t.cleanupCipher(r),n.ciphers.push(r)}})),n.success=!0,Promise.resolve(n))},t}(o.BaseImporter);t.AscendoCsvImporter=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!0);return null==r?(n.success=!1,Promise.resolve(n)):(r.forEach((function(e){var r=t.initLoginCipher();r.name=t.getValueOrDefault(e.name),r.login.uris=t.makeUriArray(e.web),r.login.password=t.getValueOrDefault(e.password),r.login.username=t.getValueOrDefault(e.login),t.cleanupCipher(r),n.ciphers.push(r)})),n.success=!0,Promise.resolve(n))},t}(o.BaseImporter);t.AvastCsvImporter=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=n(39),l=n(106),c=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=JSON.parse(e);return null==r?(n.success=!1,Promise.resolve(n)):(null!=r.logins&&r.logins.forEach((function(e){var r=t.initLoginCipher();r.name=t.getValueOrDefault(e.custName),r.notes=t.getValueOrDefault(e.note),r.login.uris=t.makeUriArray(e.url),r.login.password=t.getValueOrDefault(e.pwd),r.login.username=t.getValueOrDefault(e.loginName),t.cleanupCipher(r),n.ciphers.push(r)})),null!=r.notes&&r.notes.forEach((function(e){var r=t.initLoginCipher();r.type=s.CipherType.SecureNote,r.secureNote.type=l.SecureNoteType.Generic,r.name=t.getValueOrDefault(e.label),r.notes=t.getValueOrDefault(e.text),t.cleanupCipher(r),n.ciphers.push(r)})),null!=r.cards&&r.cards.forEach((function(e){var r=t.initLoginCipher();r.type=s.CipherType.Card,r.name=t.getValueOrDefault(e.custName),r.notes=t.getValueOrDefault(e.note),r.card.cardholderName=t.getValueOrDefault(e.holderName),r.card.number=t.getValueOrDefault(e.cardNumber),r.card.code=t.getValueOrDefault(e.cvv),r.card.brand=t.getCardBrand(r.card.number),null!=e.expirationDate&&(null!=e.expirationDate.month&&(r.card.expMonth=e.expirationDate.month+""),null!=e.expirationDate.year&&(r.card.expYear=e.expirationDate.year+"")),t.cleanupCipher(r),n.ciphers.push(r)})),n.success=!0,Promise.resolve(n))},t}(o.BaseImporter);t.AvastJsonImporter=c},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!0);return null==r?(n.success=!1,Promise.resolve(n)):(r.forEach((function(e){var r=t.initLoginCipher();r.name=t.getValueOrDefault(e.name,t.getValueOrDefault(t.nameFromUrl(e.website),"--")),r.login.uris=t.makeUriArray(e.website),r.login.password=t.getValueOrDefault(e.password),t.isNullOrWhitespace(e.username)&&!t.isNullOrWhitespace(e.secondary_username)?r.login.username=e.secondary_username:(r.login.username=t.getValueOrDefault(e.username),r.notes=t.getValueOrDefault(e.secondary_username)),t.cleanupCipher(r),n.ciphers.push(r)})),n.success=!0,Promise.resolve(n))},t}(o.BaseImporter);t.AviraCsvImporter=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=n(143),l=n(156),c=n(209),p=n(159),u=n(94),d=n(39),m=n(118),h=n(106),f=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!0);return null==r?(n.success=!1,Promise.resolve(n)):(r.forEach((function(e){t.organization&&!t.isNullOrWhitespace(e.collections)?e.collections.split(",").forEach((function(e){for(var t=!0,r=n.collections.length,i=0;ia+2&&(f.value=i[o].substr(a+2)),r.fields.push(f)}}switch(null!=e.type?e.type.toLowerCase():null){case"note":r.type=d.CipherType.SecureNote,r.secureNote=new u.SecureNoteView,r.secureNote.type=h.SecureNoteType.Generic;break;default:r.type=d.CipherType.Login,r.login=new p.LoginView,r.login.totp=t.getValueOrDefault(e.login_totp||e.totp),r.login.username=t.getValueOrDefault(e.login_username||e.username),r.login.password=t.getValueOrDefault(e.login_password||e.password);var v=t.parseSingleRowCsv(e.login_uri||e.uri);r.login.uris=t.makeUriArray(v)}n.ciphers.push(r)})),n.success=!0,Promise.resolve(n))},t}(o.BaseImporter);t.BitwardenCsvImporter=f},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},a=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]5&&(f.passwordHistory=f.passwordHistory.slice(0,5)),!this.organization&&null!=h.folderId&&e.has(h.folderId)?this.result.folderRelationships.push([this.result.ciphers.length,e.get(h.folderId)]):this.organization&&null!=h.collectionIds&&h.collectionIds.forEach((function(t){e.has(t)&&y.result.collectionRelationships.push([y.result.ciphers.length,e.get(t)])})),[4,f.decrypt()]):[3,13];case 11:v=a.sent(),this.cleanupCipher(v),this.result.ciphers.push(v),a.label=12;case 12:return d++,[3,10];case 13:return[2]}}))}))},t.prototype.parseDecrypted=function(){var e=this,t=new Map;this.organization&&null!=this.results.collections?this.results.collections.forEach((function(n){var r=p.CollectionWithId.toView(n);null!=r&&(r.id=null,r.organizationId=null,t.set(n.id,e.result.collections.length),e.result.collections.push(r))})):this.organization||null==this.results.folders||this.results.folders.forEach((function(n){var r=u.FolderWithId.toView(n);null!=r&&(r.id=null,t.set(n.id,e.result.folders.length),e.result.folders.push(r))})),this.results.items.forEach((function(n){var r=c.CipherWithIds.toView(n);r.id=null,r.folderId=null,r.organizationId=null,r.collectionIds=null,null!=r.passwordHistory&&r.passwordHistory.length>5&&(r.passwordHistory=r.passwordHistory.slice(0,5)),!e.organization&&null!=n.folderId&&t.has(n.folderId)?e.result.folderRelationships.push([e.result.ciphers.length,t.get(n.folderId)]):e.organization&&null!=n.collectionIds&&n.collectionIds.forEach((function(n){t.has(n)&&e.result.collectionRelationships.push([e.result.ciphers.length,t.get(n)])})),e.cleanupCipher(r),e.result.ciphers.push(r)}))},t}(s.BaseImporter);t.BitwardenJsonImporter=d},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!0);return null==r?(n.success=!1,Promise.resolve(n)):(r.forEach((function(e){if("list"!==e.grouping){var r=t.initLoginCipher();r.favorite="1"===e.fav,r.name=t.getValueOrDefault(e.name),r.notes=t.getValueOrDefault(e.extra),"note"!==e.grouping&&(r.login.uris=t.makeUriArray(e.url),r.login.password=t.getValueOrDefault(e.password),r.login.username=t.getValueOrDefault(e.username)),t.convertToNoteIfNeeded(r),t.cleanupCipher(r),n.ciphers.push(r)}})),n.success=!0,Promise.resolve(n))},t}(o.BaseImporter);t.BlackBerryCsvImporter=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!0);return null==r?(n.success=!1,Promise.resolve(n)):(r.forEach((function(e){"null"===e.label&&(e.label=null);var r=t.initLoginCipher();r.name=t.getValueOrDefault(e.label,t.getValueOrDefault(t.nameFromUrl(e.domain),"--")),r.login.uris=t.makeUriArray(e.domain),r.login.password=t.getValueOrDefault(e.password),t.isNullOrWhitespace(e.email)&&!t.isNullOrWhitespace(e.username)?r.login.username=e.username:(r.login.username=t.getValueOrDefault(e.email),r.notes=t.getValueOrDefault(e.username)),t.cleanupCipher(r),n.ciphers.push(r)})),n.success=!0,Promise.resolve(n))},t}(o.BaseImporter);t.BlurCsvImporter=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=["!group_id","!group_name","title","username","password","URL","id"],l=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!0);return null==r?(n.success=!1,Promise.resolve(n)):(r.forEach((function(e){t.processFolder(n,t.getValueOrDefault(e["!group_name"]));var r=t.initLoginCipher();r.name=t.getValueOrDefault(e.title,"--"),r.login.username=t.getValueOrDefault(e.username),r.login.password=t.getValueOrDefault(e.password),r.login.uris=t.makeUriArray(e.URL);var i=!1;for(var o in e)e.hasOwnProperty(o)&&(i||-1!==s.indexOf(o)||(i=!0),i&&t.processKvp(r,o,e[o]));t.cleanupCipher(r),n.ciphers.push(r)})),this.organization&&this.moveFoldersToCollections(n),n.success=!0,Promise.resolve(n))},t}(o.BaseImporter);t.ButtercupCsvImporter=l},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!0);return null==r?(n.success=!1,Promise.resolve(n)):(r.forEach((function(e){var r=t.initLoginCipher();r.name=t.getValueOrDefault(e.name,"--"),r.login.username=t.getValueOrDefault(e.username),r.login.password=t.getValueOrDefault(e.password),r.login.uris=t.makeUriArray(e.url),t.cleanupCipher(r),n.ciphers.push(r)})),n.success=!0,Promise.resolve(n))},t}(o.BaseImporter);t.ChromeCsvImporter=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseXml(e);if(null==r)return n.success=!1,Promise.resolve(n);var i=r.querySelector("textarea");return null==i||this.isNullOrWhitespace(i.textContent)?(n.errorMessage="Missing textarea.",n.success=!1,Promise.resolve(n)):(JSON.parse(i.textContent).forEach((function(e){var r=t.initLoginCipher();if(t.isNullOrWhitespace(e.label)||(r.name=e.label.split(" ")[0]),null==e.data||t.isNullOrWhitespace(e.data.notes)||(r.notes=e.data.notes.split("\\n").join("\n")),null!=e.currentVersion&&null!=e.currentVersion.fields)for(var i in e.currentVersion.fields)if(e.currentVersion.fields.hasOwnProperty(i)){var o=e.currentVersion.fields[i];switch(null!=o.actionType?o.actionType.toLowerCase():null){case"password":r.login.password=t.getValueOrDefault(o.value);break;case"email":case"username":case"user":case"name":r.login.username=t.getValueOrDefault(o.value);break;case"url":r.login.uris=t.makeUriArray(o.value);break;default:var a=null!=o.label?o.label.toLowerCase():null;null==r.login.password&&t.passwordFieldNames.indexOf(a)>-1?r.login.password=t.getValueOrDefault(o.value):null==r.login.username&&t.usernameFieldNames.indexOf(a)>-1?r.login.username=t.getValueOrDefault(o.value):(null==r.login.uris||0===r.login.uris.length)&&t.uriFieldNames.indexOf(a)>-1?r.login.uris=t.makeUriArray(o.value):t.processKvp(r,o.label,o.value)}}t.convertToNoteIfNeeded(r),t.cleanupCipher(r),n.ciphers.push(r)})),n.success=!0,Promise.resolve(n))},t}(o.BaseImporter);t.ClipperzHtmlImporter=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!0);return null==r?(n.success=!1,Promise.resolve(n)):(r.forEach((function(e){t.processFolder(n,t.getValueOrDefault(e.Category));var r=t.initLoginCipher();r.favorite="True"===t.getValueOrDefault(e.Favorite),r.name=t.getValueOrDefault(e.Entry,"--"),r.notes=t.getValueOrDefault(e.Note),r.login.username=t.getValueOrDefault(e.Username,e.Email),r.login.password=t.getValueOrDefault(e.Password),r.login.totp=t.getValueOrDefault(e.TOTP),r.login.uris=t.makeUriArray(e.Website),t.isNullOrWhitespace(e.Username)||t.processKvp(r,"Email",e.Email),t.processKvp(r,"Phone",e.Phone),t.processKvp(r,"PIN",e.PIN),t.processKvp(r,"Account",e.Account),t.processKvp(r,"Date",e.Date),t.convertToNoteIfNeeded(r),t.cleanupCipher(r),n.ciphers.push(r)})),this.organization&&this.moveFoldersToCollections(n),n.success=!0,Promise.resolve(n))},t}(o.BaseImporter);t.CodebookCsvImporter=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=n(88),l=n(143),c=n(144),p=n(94),u=n(39),d=n(106),m=new Set(["ADDRESS","AUTHENTIFIANT","BANKSTATEMENT","IDCARD","IDENTITY","PAYMENTMEANS_CREDITCARD","PAYMENTMEAN_PAYPAL","EMAIL"]),h=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){this.result=new a.ImportResult;var t=JSON.parse(e);if(null==t||0===t.length)return this.result.success=!1,Promise.resolve(this.result);for(var n in null!=t.ADDRESS&&this.processAddress(t.ADDRESS),null!=t.AUTHENTIFIANT&&this.processAuth(t.AUTHENTIFIANT),null!=t.BANKSTATEMENT&&this.processNote(t.BANKSTATEMENT,"BankAccountName"),null!=t.IDCARD&&this.processNote(t.IDCARD,"Fullname"),null!=t.PAYMENTMEANS_CREDITCARD&&this.processCard(t.PAYMENTMEANS_CREDITCARD),null!=t.IDENTITY&&this.processIdentity(t.IDENTITY),t)t.hasOwnProperty(n)&&!m.has(n)&&this.processNote(t[n],null,"Generic Note");return this.result.success=!0,Promise.resolve(this.result)},t.prototype.processAuth=function(e){var t=this;e.forEach((function(e){var n=t.initLoginCipher();n.name=t.getValueOrDefault(e.title),n.login.username=t.getValueOrDefault(e.login,t.getValueOrDefault(e.secondaryLogin)),t.isNullOrWhitespace(n.login.username)?n.login.username=t.getValueOrDefault(e.email):t.isNullOrWhitespace(e.email)||(n.notes="Email: "+e.email+"\n"),n.login.password=t.getValueOrDefault(e.password),n.login.uris=t.makeUriArray(e.domain),n.notes+=t.getValueOrDefault(e.note,""),t.convertToNoteIfNeeded(n),t.cleanupCipher(n),t.result.ciphers.push(n)}))},t.prototype.processIdentity=function(e){var t=this;e.forEach((function(e){var n=new l.CipherView;n.identity=new c.IdentityView,n.type=u.CipherType.Identity,n.name=t.getValueOrDefault(e.fullName,"");var r=n.name.split(" ");r.length>0&&(n.identity.firstName=t.getValueOrDefault(r[0])),2===r.length?n.identity.lastName=t.getValueOrDefault(r[1]):3===r.length&&(n.identity.middleName=t.getValueOrDefault(r[1]),n.identity.lastName=t.getValueOrDefault(r[2])),n.identity.username=t.getValueOrDefault(e.pseudo),t.cleanupCipher(n),t.result.ciphers.push(n)}))},t.prototype.processAddress=function(e){var t=this;e.forEach((function(e){var n=new l.CipherView;n.identity=new c.IdentityView,n.type=u.CipherType.Identity,n.name=t.getValueOrDefault(e.addressName),n.identity.address1=t.getValueOrDefault(e.addressFull),n.identity.city=t.getValueOrDefault(e.city),n.identity.state=t.getValueOrDefault(e.state),n.identity.postalCode=t.getValueOrDefault(e.zipcode),n.identity.country=t.getValueOrDefault(e.country),null!=n.identity.country&&(n.identity.country=n.identity.country.toUpperCase()),t.cleanupCipher(n),t.result.ciphers.push(n)}))},t.prototype.processCard=function(e){var t=this;e.forEach((function(e){var n=new l.CipherView;n.card=new s.CardView,n.type=u.CipherType.Card,n.name=t.getValueOrDefault(e.bank),n.card.number=t.getValueOrDefault(e.cardNumber),n.card.brand=t.getCardBrand(n.card.number),n.card.cardholderName=t.getValueOrDefault(e.owner),t.isNullOrWhitespace(n.card.brand)||(t.isNullOrWhitespace(n.name)?n.name=n.card.brand:n.name+=" - "+n.card.brand),t.cleanupCipher(n),t.result.ciphers.push(n)}))},t.prototype.processNote=function(e,t,n){var r=this;void 0===n&&(n=null),e.forEach((function(e){var i=new l.CipherView;for(var o in i.secureNote=new p.SecureNoteView,i.type=u.CipherType.SecureNote,i.secureNote.type=d.SecureNoteType.Generic,i.name=null!=n?n:r.getValueOrDefault(e[t]),e)e.hasOwnProperty(o)&&o!==t&&r.processKvp(i,o,e[o].toString());r.cleanupCipher(i),r.result.ciphers.push(i)}))},t}(o.BaseImporter);t.DashlaneJsonImporter=h},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=n(88),l=n(39),c=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!0);return null==r?(n.success=!1,Promise.resolve(n)):(r.forEach((function(e){var r=t.initLoginCipher();r.name=t.getValueOrDefault(e.Label,"--"),r.notes=t.getValueOrDefault(e.Notes);var i=t.getValueOrDefault(e.Text);t.isNullOrWhitespace(i)||(t.isNullOrWhitespace(r.notes)?r.notes=i:r.notes+="\n\n"+i);var o=e["Entry Type"];if("Password"===o)r.login.username=t.getValueOrDefault(e.Username),r.login.password=t.getValueOrDefault(e.Password),r.login.uris=t.makeUriArray(e["Site URL"]);else if("Credit Card"===o){r.type=l.CipherType.Card,r.card=new s.CardView,r.card.cardholderName=t.getValueOrDefault(e["Name on card"]),r.card.number=t.getValueOrDefault(e["Card Number"]),r.card.brand=t.getCardBrand(r.card.number),r.card.code=t.getValueOrDefault(e.CVV);var a=t.getValueOrDefault(e.Expiry);if(!t.isNullOrWhitespace(a)){var c=a.split("/");c.length>1&&(r.card.expMonth=parseInt(c[0],null).toString(),r.card.expYear=(2e3+parseInt(c[1],null)).toString())}}t.convertToNoteIfNeeded(r),t.cleanupCipher(r),n.ciphers.push(r)})),n.success=!0,Promise.resolve(n))},t}(o.BaseImporter);t.EncryptrCsvImporter=c},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=n(39),l=n(106),c=n(88),p=n(94),u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!1);if(null==r)return n.success=!1,Promise.resolve(n);var i=!0;return r.forEach((function(e){if(e.length<2||i&&("Title"===e[0]||"title"===e[0]))i=!1;else{var r=t.initLoginCipher();if(r.notes=t.getValueOrDefault(e[e.length-1]),r.name=t.getValueOrDefault(e[0],"--"),2!==e.length&&(t.containsField(e,"username")||t.containsField(e,"password")||t.containsField(e,"email")||t.containsField(e,"url"))||(r.type=s.CipherType.SecureNote,r.secureNote=new p.SecureNoteView,r.secureNote.type=l.SecureNoteType.Generic),t.containsField(e,"cardholder")&&t.containsField(e,"number")&&t.containsField(e,"expiry date")&&(r.type=s.CipherType.Card,r.card=new c.CardView),e.length>2&&e.length%2==0)for(var o=0;o0},t}(o.BaseImporter);t.EnpassCsvImporter=u},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=n(88),l=n(127),c=n(39),p=n(118),u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=JSON.parse(e);if(null==r||null==r.items||0===r.items.length)return n.success=!1,Promise.resolve(n);var i=new Map,o=new Map,s=this.buildFolderTree(r.folders);return this.flattenFolderTree(null,s,i),i.forEach((function(e,t){o.set(t,n.folders.length);var r=new l.FolderView;r.name=e,n.folders.push(r)})),r.items.forEach((function(e){null!=e.folders&&e.folders.length>0&&o.has(e.folders[0])&&n.folderRelationships.push([n.ciphers.length,o.get(e.folders[0])]);var r=t.initLoginCipher();r.name=t.getValueOrDefault(e.title),r.favorite=e.favorite>0,null!=e.template_type&&null!=e.fields&&e.fields.length>0&&(0===e.template_type.indexOf("login.")||0===e.template_type.indexOf("password.")?t.processLogin(r,e.fields):0===e.template_type.indexOf("creditcard.")?t.processCard(r,e.fields):e.template_type.indexOf("identity.")<0&&e.fields.some((function(e){return"password"===e.type&&!t.isNullOrWhitespace(e.value)}))?t.processLogin(r,e.fields):t.processNote(r,e.fields)),r.notes+="\n"+t.getValueOrDefault(e.note,""),t.convertToNoteIfNeeded(r),t.cleanupCipher(r),n.ciphers.push(r)})),n.success=!0,Promise.resolve(n)},t.prototype.processLogin=function(e,t){var n=this,r=[];t.forEach((function(t){n.isNullOrWhitespace(t.value)||"section"===t.type||("username"!==t.type&&"email"!==t.type||!n.isNullOrWhitespace(e.login.username)?"password"===t.type&&n.isNullOrWhitespace(e.login.password)?e.login.password=t.value:"totp"===t.type&&n.isNullOrWhitespace(e.login.totp)?e.login.totp=t.value:"url"===t.type?r.push(t.value):n.processKvp(e,t.label,t.value,1===t.sensitive?p.FieldType.Hidden:p.FieldType.Text):e.login.username=t.value)})),e.login.uris=this.makeUriArray(r)},t.prototype.processCard=function(e,t){var n=this;e.card=new s.CardView,e.type=c.CipherType.Card,t.forEach((function(t){n.isNullOrWhitespace(t.value)||"section"===t.type||"ccType"===t.type||("ccName"===t.type&&n.isNullOrWhitespace(e.card.cardholderName)?e.card.cardholderName=t.value:"ccNumber"===t.type&&n.isNullOrWhitespace(e.card.number)?(e.card.number=t.value,e.card.brand=n.getCardBrand(e.card.number)):"ccCvc"===t.type&&n.isNullOrWhitespace(e.card.code)?e.card.code=t.value:"ccExpiry"===t.type&&n.isNullOrWhitespace(e.card.expYear)&&n.setCardExpiration(e,t.value)||n.processKvp(e,t.label,t.value,1===t.sensitive?p.FieldType.Hidden:p.FieldType.Text))}))},t.prototype.processNote=function(e,t){var n=this;t.forEach((function(t){n.isNullOrWhitespace(t.value)||"section"===t.type||n.processKvp(e,t.label,t.value,1===t.sensitive?p.FieldType.Hidden:p.FieldType.Text)}))},t.prototype.buildFolderTree=function(e){if(null==e)return[];var t=[],n=new Map([]);return e.forEach((function(e){n.set(e.uuid,e),e.children=[]})),e.forEach((function(e){null!=e.parent_uuid&&""!==e.parent_uuid&&n.has(e.parent_uuid)?n.get(e.parent_uuid).children.push(e):t.push(e)})),t},t.prototype.flattenFolderTree=function(e,t,n){var r=this;null!=t&&t.forEach((function(t){if(null!=t.title&&""!==t.title.trim()){var i=t.title.trim();null!=e&&""!==e.trim()&&(i=e+"/"+i),n.set(t.uuid,i),null!=t.children&&0!==t.children.length&&r.flattenFolderTree(i,t.children,n)}}))},t}(o.BaseImporter);t.EnpassJsonImporter=u},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!0);return null==r?(n.success=!1,Promise.resolve(n)):(r.filter((function(e){return"chrome://FirefoxAccounts"!==e.url})).forEach((function(e){var r=t.initLoginCipher(),i=t.getValueOrDefault(e.url,t.getValueOrDefault(e.hostname));r.name=t.getValueOrDefault(t.nameFromUrl(i),"--"),r.login.username=t.getValueOrDefault(e.username),r.login.password=t.getValueOrDefault(e.password),r.login.uris=t.makeUriArray(i),t.cleanupCipher(r),n.ciphers.push(r)})),n.success=!0,Promise.resolve(n))},t}(o.BaseImporter);t.FirefoxCsvImporter=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=n(88),l=n(39),c=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=new a.ImportResult,n=JSON.parse(e);if(null==n||null==n.data)return t.success=!1,Promise.resolve(t);for(var r in n.data)if(n.data.hasOwnProperty(r)){var i=n.data[r],o=this.initLoginCipher();if(o.name=this.getValueOrDefault(i.service),o.notes=this.getValueOrDefault(i.notes),"website"===i.style)o.login.username=this.getValueOrDefault(i.username),o.login.password=this.getValueOrDefault(i.password),o.login.uris=this.makeUriArray(i.url);else{if("creditcard"!==i.style)continue;o.type=l.CipherType.Card,o.card=new s.CardView,o.card.cardholderName=this.getValueOrDefault(i.username),o.card.number=this.getValueOrDefault(i.creditNumber),o.card.brand=this.getCardBrand(o.card.number),o.card.code=this.getValueOrDefault(i.creditCvv),this.isNullOrWhitespace(i.creditExpiry)||this.setCardExpiration(o,i.creditExpiry)||this.processKvp(o,"Expiration",i.creditExpiry),this.isNullOrWhitespace(i.password)||this.processKvp(o,"PIN",i.password)}this.convertToNoteIfNeeded(o),this.cleanupCipher(o),t.ciphers.push(o)}return t.success=!0,Promise.resolve(t)},t}(o.BaseImporter);t.FSecureFskImporter=c},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=JSON.parse(e);if(null==r||0===Object.keys(r).length)return n.success=!1,Promise.resolve(n);var i=function(e){if(!r.hasOwnProperty(e)||o.isNullOrWhitespace(e)||0===r[e].length)return"continue";r[e].forEach((function(r){if(!t.isNullOrWhitespace(r.display_name)&&0===r.display_name.indexOf("http")){t.processFolder(n,e);var i=t.initLoginCipher();if(i.name=r.display_name.replace("http://","").replace("https://",""),i.name.length>30&&(i.name=i.name.substring(0,30)),i.login.password=t.getValueOrDefault(r.secret),i.login.uris=t.makeUriArray(r.display_name),null!=r.attributes)for(var o in i.login.username=null!=r.attributes?t.getValueOrDefault(r.attributes.username_value):null,r.attributes)r.attributes.hasOwnProperty(o)&&"username_value"!==o&&"xdg:schema"!==o&&t.processKvp(i,o,r.attributes[o]);t.convertToNoteIfNeeded(i),t.cleanupCipher(i),n.ciphers.push(i)}}))},o=this;for(var s in r)i(s);return this.organization&&this.moveFoldersToCollections(n),n.success=!0,Promise.resolve(n)},t}(o.BaseImporter);t.GnomeJsonImporter=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t,n,r,i,o=this,s=new a.ImportResult,l=this.splitNewLine(e).join("\n");-1!==l.indexOf("Notes\n\n")&&((i=l.split("Notes\n\n")).length>1&&(l=i[0],t=i[1]));-1!==l.indexOf("Applications\n\n")&&((i=l.split("Applications\n\n")).length>1&&(l=i[0],n=i[1]));0===l.indexOf("Websites\n\n")&&((i=l.split("Websites\n\n")).length>1&&(l=i[0],r=i[1]));var c=this.parseDataCategory(t),p=this.parseDataCategory(n),u=this.parseDataCategory(r);return c.forEach((function(e){var t=o.initLoginCipher();t.name=o.getValueOrDefault(e.get("Name")),t.notes=o.getValueOrDefault(e.get("Text")),o.cleanupCipher(t),s.ciphers.push(t)})),u.concat(p).forEach((function(e){var t=o.initLoginCipher(),n=e.has("Website name")?"Website name":"Application";t.name=o.getValueOrDefault(e.get(n),""),o.isNullOrWhitespace(e.get("Login name"))||(o.isNullOrWhitespace(t.name)||(t.name+=": "),t.name+=e.get("Login name")),t.notes=o.getValueOrDefault(e.get("Comment")),e.has("Website URL")&&(t.login.uris=o.makeUriArray(e.get("Website URL"))),t.login.username=o.getValueOrDefault(e.get("Login")),t.login.password=o.getValueOrDefault(e.get("Password")),o.cleanupCipher(t),s.ciphers.push(t)})),s.success=!0,Promise.resolve(s)},t.prototype.parseDataCategory=function(e){if(this.isNullOrWhitespace(e)||-1===e.indexOf("\n---\n"))return[];var t=[];return e.split("\n---\n").forEach((function(e){if(-1!==e.indexOf("\n")){var n,r,i=new Map;e.split("\n").forEach((function(e){if(null==n){var t,o,a=e.indexOf(":");-1!==a&&(t=e.substring(0,a),e.length>a+1&&(o=e.substring(a+2)),null!=t&&i.set(t,o),"Comment"!==t&&"Text"!==t||(n=o,r=t))}else n+="\n"+e})),null!=n&&null!=r&&i.set(r,n),0!==i.size&&t.push(i)}})),t},t}(o.BaseImporter);t.KasperskyTxtImporter=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(118),s=n(26),l=n(127),c=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.result=new s.ImportResult,t}return i(t,e),t.prototype.parse=function(e){var t=this.parseXml(e);if(null==t)return this.result.success=!1,Promise.resolve(this.result);var n=t.querySelector("KeePassFile > Root > Group");return null==n?(this.result.errorMessage="Missing `KeePassFile > Root > Group` node.",this.result.success=!1,Promise.resolve(this.result)):(this.traverse(n,!0,""),this.organization&&this.moveFoldersToCollections(this.result),this.result.success=!0,Promise.resolve(this.result))},t.prototype.traverse=function(e,t,n){var r=this,i=this.result.folders.length,o=n;if(!t){""!==o&&(o+="/");var s=this.querySelectorDirectChild(e,"Name");o+=null==s?"-":s.textContent;var c=new l.FolderView;c.name=o,this.result.folders.push(c)}this.querySelectorAllDirectChild(e,"Entry").forEach((function(e){var n=r.result.ciphers.length,o=r.initLoginCipher();r.querySelectorAllDirectChild(e,"String").forEach((function(e){var t=r.querySelectorDirectChild(e,"Value"),n=null!=t?t.textContent:null;if(!r.isNullOrWhitespace(n)){var i=r.querySelectorDirectChild(e,"Key"),s=null!=i?i.textContent:null;if("URL"===s)o.login.uris=r.makeUriArray(n);else if("UserName"===s)o.login.username=n;else if("Password"===s)o.login.password=n;else if("otp"===s)o.login.totp=n.replace("key=","");else if("Title"===s)o.name=n;else if("Notes"===s)o.notes+=n+"\n";else{var l=a.FieldType.Text,c=t.attributes;c.length>0&&null!=c.ProtectInMemory&&"True"===c.ProtectInMemory.value&&(l=a.FieldType.Hidden),r.processKvp(o,s,n,l)}}})),r.cleanupCipher(o),r.result.ciphers.push(o),t||r.result.folderRelationships.push([n,i])})),this.querySelectorAllDirectChild(e,"Group").forEach((function(e){r.traverse(e,!1,o)}))},t}(o.BaseImporter);t.KeePass2XmlImporter=c},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!0);return null==r?(n.success=!1,Promise.resolve(n)):(r.forEach((function(e){if(!t.isNullOrWhitespace(e.Title)){e.Group=!t.isNullOrWhitespace(e.Group)&&e.Group.startsWith("Root/")?e.Group.replace("Root/",""):e.Group;var r=t.isNullOrWhitespace(e.Group)?null:e.Group;t.processFolder(n,r);var i=t.initLoginCipher();i.notes=t.getValueOrDefault(e.Notes),i.name=t.getValueOrDefault(e.Title,"--"),i.login.username=t.getValueOrDefault(e.Username),i.login.password=t.getValueOrDefault(e.Password),i.login.uris=t.makeUriArray(e.URL),t.cleanupCipher(i),n.ciphers.push(i)}})),this.organization&&this.moveFoldersToCollections(n),n.success=!0,Promise.resolve(n))},t}(o.BaseImporter);t.KeePassXCsvImporter=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!1);return null==r?(n.success=!1,Promise.resolve(n)):(r.forEach((function(e){if(!(e.length<6)){t.processFolder(n,e[0]);var r=t.initLoginCipher();if(r.notes=t.getValueOrDefault(e[5])+"\n",r.name=t.getValueOrDefault(e[1],"--"),r.login.username=t.getValueOrDefault(e[2]),r.login.password=t.getValueOrDefault(e[3]),r.login.uris=t.makeUriArray(e[4]),e.length>7)for(var i=7;i-1){var n=e.ccexp.split("-");n.length>1&&(t.expYear=n[0],t.expMonth=n[1],2===t.expMonth.length&&"0"===t.expMonth[0]&&(t.expMonth=t.expMonth[1]))}return t},t.prototype.parseIdentity=function(e){var t=new p.IdentityView;return t.title=this.getValueOrDefault(e.title),t.firstName=this.getValueOrDefault(e.firstname),t.middleName=this.getValueOrDefault(e.middlename),t.lastName=this.getValueOrDefault(e.lastname),t.username=this.getValueOrDefault(e.username),t.company=this.getValueOrDefault(e.company),t.ssn=this.getValueOrDefault(e.ssn),t.address1=this.getValueOrDefault(e.address1),t.address2=this.getValueOrDefault(e.address2),t.address3=this.getValueOrDefault(e.address3),t.city=this.getValueOrDefault(e.city),t.state=this.getValueOrDefault(e.state),t.postalCode=this.getValueOrDefault(e.zip),t.country=this.getValueOrDefault(e.country),t.email=this.getValueOrDefault(e.email),t.phone=this.getValueOrDefault(e.phone),this.isNullOrWhitespace(t.title)||(t.title=t.title.charAt(0).toUpperCase()+t.title.slice(1)),t},t.prototype.parseSecureNote=function(e,t){var n=this.splitNewLine(e.extra),r=!1;if(n.length){var i=n[0].split(":");if(i.length>1&&"NoteType"===i[0]&&("Credit Card"===i[1]||"Address"===i[1])){if("Credit Card"===i[1]){var o=this.parseSecureNoteMapping(t,n,{Number:"number","Name on Card":"cardholderName","Security Code":"code","Expiration Date":"expMonth"});if(this.isNullOrWhitespace(o.expMonth)||","===o.expMonth)o.expMonth=void 0;else{var a=o.expMonth.split(","),s=a[0],l=a[1];if(this.isNullOrWhitespace(s))o.expMonth=void 0;else{var c=new Date(Date.parse(s.trim()+" 1, 2012")).getMonth()+1;isNaN(c)?o.expMonth=void 0:o.expMonth=c.toString()}this.isNullOrWhitespace(l)||(o.expYear=l)}t.type=m.CipherType.Card,t.card=o}else if("Address"===i[1]){o=this.parseSecureNoteMapping(t,n,{Title:"title","First Name":"firstName","Last Name":"lastName","Middle Name":"middleName",Company:"company","Address 1":"address1","Address 2":"address2","Address 3":"address3","City / Town":"city",State:"state","Zip / Postal Code":"postalCode",Country:"country","Email Address":"email",Username:"username"});t.type=m.CipherType.Identity,t.identity=o}r=!0}}r||(t.secureNote=new d.SecureNoteView,t.secureNote.type=h.SecureNoteType.Generic,t.notes=this.getValueOrDefault(e.extra))},t.prototype.parseSecureNoteMapping=function(e,t,n){var r=this,i={},o=!1;return t.forEach((function(t){var a=null,s=null;if(!o){if(r.isNullOrWhitespace(t))return;var l=t.indexOf(":");if(-1===l?a=t:(a=t.substring(0,l),t.length>l&&(s=t.substring(l+1))),r.isNullOrWhitespace(a)||r.isNullOrWhitespace(s)||"NoteType"===a)return}o?e.notes+="\n"+t:"Notes"===a?(r.isNullOrWhitespace(e.notes)?e.notes=s:e.notes+="\n"+s,o=!0):n.hasOwnProperty(a)?i[n[a]]=s:r.processKvp(e,a,s)})),i},t}(o.BaseImporter);t.LastPassCsvImporter=f},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!1);return null==r?(n.success=!1,Promise.resolve(n)):(r.forEach((function(e){if(!(e.length<4)){var r=t.initLoginCipher();r.name=t.getValueOrDefault(e[0],"--"),r.login.username=t.getValueOrDefault(e[2]),r.login.password=t.getValueOrDefault(e[3]),r.login.uris=t.makeUriArray(e[1]),t.cleanupCipher(r),n.ciphers.push(r)}})),n.success=!0,Promise.resolve(n))},t}(o.BaseImporter);t.LogMeOnceCsvImporter=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!0);return null==r?(n.success=!1,Promise.resolve(n)):(r.forEach((function(e){var r=t.initLoginCipher();r.name=t.getValueOrDefault(e.DisplayName,"--"),r.notes=t.getValueOrDefault(e.Notes),r.login.username=t.getValueOrDefault(e.UserName),r.login.password=t.getValueOrDefault(e.Password),r.login.uris=t.makeUriArray(e.Url),t.cleanupCipher(r),n.ciphers.push(r)})),n.success=!0,Promise.resolve(n))},t}(o.BaseImporter);t.MeldiumCsvImporter=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=n(39),l=n(106),c=n(94),p=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!1);return null==r?(n.success=!1,Promise.resolve(n)):(r.forEach((function(e){if(!(e.length<3)){var r="Unassigned"!==t.getValueOrDefault(e[0],"Unassigned")?e[0]:null;t.processFolder(n,r);var i=t.initLoginCipher();if(i.name=t.getValueOrDefault(e[2],"--"),"Web Logins"===e[1]||"Login"===e[1])i.login.uris=t.makeUriArray(e[4]),i.login.username=t.getValueOrDefault(e[5]),i.login.password=t.getValueOrDefault(e[6]),i.notes=t.isNullOrWhitespace(e[3])?null:e[3].split("\\n").join("\n");else if(e.length>3){i.type=s.CipherType.SecureNote,i.secureNote=new c.SecureNoteView,i.secureNote.type=l.SecureNoteType.Generic;for(var o=3;o0&&(t.login.uris=this.makeUriArray(r))}null!=e.secureContents.fields&&this.parseFields(e.secureContents.fields,t,"designation","value","name"),null!=e.secureContents.sections&&e.secureContents.sections.forEach((function(e){null!=e.fields&&n.parseFields(e.fields,t,"n","v","t")}))}},t.prototype.parsePasswordHistory=function(e,t){var n=this,r=e.length>5?5:e.length;t.passwordHistory=e.filter((function(e){return!n.isNullOrWhitespace(e.value)&&null!=e.time})).sort((function(e,t){return t.time-e.time})).slice(0,r).map((function(e){var t=new c.PasswordHistoryView;return t.password=e.value,t.lastUsedDate=new Date((""+e.time).length>=13?e.time:1e3*e.time),t}))},t.prototype.parseFields=function(e,t,n,r,i){var o=this;e.forEach((function(e){if(null!=e[r]&&""!==e[r].toString().trim()){var a=e[r].toString(),s=null!=e[n]?e[n].toString():null;if(t.type===u.CipherType.Login){if(o.isNullOrWhitespace(t.login.username)&&"username"===s)return void(t.login.username=a);if(o.isNullOrWhitespace(t.login.password)&&"password"===s)return void(t.login.password=a);if(o.isNullOrWhitespace(t.login.totp)&&null!=s&&s.startsWith("TOTP_"))return void(t.login.totp=a)}else if(t.type===u.CipherType.Card){if(o.isNullOrWhitespace(t.card.number)&&"ccnum"===s)return t.card.number=a,void(t.card.brand=o.getCardBrand(a));if(o.isNullOrWhitespace(t.card.code)&&"cvv"===s)return void(t.card.code=a);if(o.isNullOrWhitespace(t.card.cardholderName)&&"cardholder"===s)return void(t.card.cardholderName=a);if(o.isNullOrWhitespace(t.card.expiration)&&"expiry"===s&&6===a.length)return t.card.expMonth=a.substr(4,2),"0"===t.card.expMonth[0]&&(t.card.expMonth=t.card.expMonth.substr(1,1)),void(t.card.expYear=a.substr(0,4));if("type"===s)return}else if(t.type===u.CipherType.Identity){var l=t.identity;if(o.isNullOrWhitespace(l.firstName)&&"firstname"===s)return void(l.firstName=a);if(o.isNullOrWhitespace(l.lastName)&&"lastname"===s)return void(l.lastName=a);if(o.isNullOrWhitespace(l.middleName)&&"initial"===s)return void(l.middleName=a);if(o.isNullOrWhitespace(l.phone)&&"defphone"===s)return void(l.phone=a);if(o.isNullOrWhitespace(l.company)&&"company"===s)return void(l.company=a);if(o.isNullOrWhitespace(l.email)&&"email"===s)return void(l.email=a);if(o.isNullOrWhitespace(l.username)&&"username"===s)return void(l.username=a);if("address"===s){var c=e[r],p=c.street,m=c.city,h=c.country,f=c.zip;return l.address1=o.getValueOrDefault(p),l.city=o.getValueOrDefault(m),o.isNullOrWhitespace(h)||(l.country=h.toUpperCase()),void(l.postalCode=o.getValueOrDefault(f))}}var v=o.isNullOrWhitespace(e[i])?"no_name":e[i];if("password"!==v||null==t.passwordHistory||!t.passwordHistory.some((function(e){return e.password===a}))){var y="concealed"===e.k?d.FieldType.Hidden:d.FieldType.Text;o.processKvp(t,v,a,y)}}}))},t}(o.BaseImporter);t.OnePassword1PifImporter=h},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(715),a=n(39),s=n(716),l=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.setCipherType=function(e,t){switch(this.getValueOrDefault(this.getProp(e,"type"),"Login")){case"Credit Card":t.type=a.CipherType.Card,t.card=new s.CardView,o.IgnoredProperties.push("type");break;case"Identity":t.type=a.CipherType.Identity,t.identity=new s.IdentityView,o.IgnoredProperties.push("type");break;case"Login":case"Secure Note":o.IgnoredProperties.push("type")}},t}(o.OnePasswordCsvImporter);t.OnePasswordMacCsvImporter=l},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e,t,n){this.importRecord=e,this.property=t,this.cipher=n,this.lowerProperty=t.toLowerCase()};t.CipherImportContext=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.View=r},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(715),a=n(39),s=n(716),l=function(e){function t(){var t=e.call(this)||this;return t.identityPropertyParsers.push(t.setIdentityAddress),t}return i(t,e),t.prototype.setCipherType=function(e,t){t.type=a.CipherType.Login,t.login=new s.LoginView,this.isNullOrWhitespace(this.getPropByRegexp(e,/\d+: number/i))||this.isNullOrWhitespace(this.getPropByRegexp(e,/\d+: expiry date/i))||(t.type=a.CipherType.Card,t.card=new s.CardView),this.isNullOrWhitespace(this.getPropByRegexp(e,/name \d+: first name/i))&&this.isNullOrWhitespace(this.getPropByRegexp(e,/name \d+: initial/i))&&this.isNullOrWhitespace(this.getPropByRegexp(e,/name \d+: last name/i))&&this.isNullOrWhitespace(this.getPropByRegexp(e,/internet \d+: email/i))||(t.type=a.CipherType.Identity,t.identity=new s.IdentityView)},t.prototype.setIdentityAddress=function(e){return!!e.lowerProperty.match(/address \d+: address/i)&&(this.processKvp(e.cipher,"address",e.importRecord[e.property]),!0)},t.prototype.setCreditCardExpiry=function(e){if(this.isNullOrWhitespace(e.cipher.card.expiration)&&e.lowerProperty.includes("expiry date")){var t=e.importRecord[e.property].split("/");return e.cipher.card.expMonth=t[0],"0"===e.cipher.card.expMonth[0]&&2===e.cipher.card.expMonth.length&&(e.cipher.card.expMonth=e.cipher.card.expMonth.substr(1,1)),e.cipher.card.expYear=t[2].length>4?t[2].substr(0,4):t[2],!0}return!1},t}(o.OnePasswordCsvImporter);t.OnePasswordWinCsvImporter=l},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=n(156),l=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!1);if(null==r)return n.success=!1,Promise.resolve(n);var i=null;return r.forEach((function(e){if(null!=i){if(!(e.length<2||e.length!==i.length)){if(!t.isNullOrWhitespace(e[1]))if(t.organization){(r=e[1].split(",")).forEach((function(e){e=e.trim();for(var t=!0,r=n.collections.length,i=0;i0?r[0].trim():null;t.processFolder(n,o)}var a=t.initLoginCipher();a.name=t.getValueOrDefault(e[0],"--");for(var l=2;l-1?a.login.username=e[l]:t.passwordFieldNames.indexOf(c)>-1?a.login.password=e[l]:t.uriFieldNames.indexOf(c)>-1?a.login.uris=t.makeUriArray(e[l]):t.processKvp(a,i[l],e[l]))}t.cleanupCipher(a),n.ciphers.push(a)}}else i=e.map((function(e){return e}))})),n.success=!0,Promise.resolve(n)},t}(o.BaseImporter);t.PadlockCsvImporter=l},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!0);return null==r?(n.success=!1,Promise.resolve(n)):(r.forEach((function(e){t.processFolder(n,t.getValue("category",e));var r=t.initLoginCipher();r.notes=t.getValue("description",e),r.name=t.getValueOrDefault(t.getValue("title",e),"--"),r.login.username=t.getValue("username",e),r.login.password=t.getValue("password",e),r.login.uris=t.makeUriArray(t.getValue("site",e)),t.processKvp(r,"Password 2",t.getValue("password2",e)),t.cleanupCipher(r),n.ciphers.push(r)})),this.organization&&this.moveFoldersToCollections(n),n.success=!0,Promise.resolve(n))},t.prototype.getValue=function(e,t){return this.getValueOrDefault(t[e],this.getValueOrDefault(t[" "+e]))},t}(o.BaseImporter);t.PassKeepCsvImporter=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=JSON.parse(e);return null==r||0===r.length?(n.success=!1,Promise.resolve(n)):(r.forEach((function(e){if(null!=e.tags&&e.tags.length>0){var r=e.tags[0].text;t.processFolder(n,r)}var i=t.initLoginCipher();i.name=e.label,i.login.username=t.getValueOrDefault(e.username),t.isNullOrWhitespace(i.login.username)?i.login.username=t.getValueOrDefault(e.email):t.isNullOrWhitespace(e.email)||(i.notes="Email: "+e.email+"\n"),i.login.password=t.getValueOrDefault(e.password),i.login.uris=t.makeUriArray(e.url),i.notes+=t.getValueOrDefault(e.description,""),null!=e.otp&&(i.login.totp=t.getValueOrDefault(e.otp.secret)),null!=e.custom_fields&&e.custom_fields.forEach((function(e){switch(e.field_type){case"text":case"password":t.processKvp(i,e.label,e.value)}})),t.convertToNoteIfNeeded(i),t.cleanupCipher(i),n.ciphers.push(i)})),this.organization&&this.moveFoldersToCollections(n),n.success=!0,Promise.resolve(n))},t}(o.BaseImporter);t.PassmanJsonImporter=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=n(156),l=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!0);return null==r?(n.success=!1,Promise.resolve(n)):(r.forEach((function(e){var r=t.isNullOrWhitespace(e.Tags)?null:JSON.parse(e.Tags),i=null!=r&&null!=r.tags&&r.tags.length>0?r.tags.map((function(e){try{var n=JSON.parse(e);return t.getValueOrDefault(n.tag)}catch(r){}return null})).filter((function(e){return!t.isNullOrWhitespace(e)})):null;t.organization&&null!=i&&i.length>0?i.forEach((function(e){for(var t=!0,r=n.collections.length,i=0;i0&&t.processFolder(n,i[0]);var o=t.initLoginCipher();o.notes=t.getValueOrDefault(e.Notes,""),o.notes+="\n\n"+t.getValueOrDefault(e["Shared Notes"],"")+"\n",o.name=t.getValueOrDefault(e["Entry Name"],"--"),o.login.username=t.getValueOrDefault(e["User ID"]),o.login.password=t.getValueOrDefault(e.Password),o.login.uris=t.makeUriArray(e.URL),null!=e.__parsed_extra&&e.__parsed_extra.length>0&&e.__parsed_extra.forEach((function(e){t.isNullOrWhitespace(e)||(o.notes+="\n"+e)}));var a=t.isNullOrWhitespace(e["Extra Fields"])?null:JSON.parse(e["Extra Fields"]),l=null!=a&&null!=a.extraFields&&a.extraFields.length>0?a.extraFields.map((function(e){try{return JSON.parse(e)}catch(t){}return null})):null;null!=l&&l.forEach((function(e){null!=e&&t.processKvp(o,e.name,e.data)})),t.cleanupCipher(o),n.ciphers.push(o)})),n.success=!0,Promise.resolve(n))},t}(o.BaseImporter);t.PasspackCsvImporter=l},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!1);if(null==r)return n.success=!1,Promise.resolve(n);var i=!0;return r.forEach((function(e){if(!(5!==e.length&&e.length<9)){var r=10===e.length&&"0"===e[0],o=t.initLoginCipher();if(o.name=t.getValueOrDefault(e[r?1:0],"--"),o.login.username=t.getValueOrDefault(e[r?2:1]),o.login.password=t.getValueOrDefault(e[r?3:2]),5===e.length)i=!1,o.notes=t.getValueOrDefault(e[4]),o.login.uris=t.makeUriArray(e[3]);else{var a=t.getValueOrDefault(e[r?9:8],"(None)"),s="(None)"!==a?a.split("\\").join("/"):null;null!=s&&(s=a.split(" > ").join("/"),s=a.split(">").join("/")),t.processFolder(n,s),o.notes=t.getValueOrDefault(e[r?5:3]),o.login.uris=t.makeUriArray(e[4])}t.convertToNoteIfNeeded(o),t.cleanupCipher(o),n.ciphers.push(o)}})),i&&this.organization&&this.moveFoldersToCollections(n),n.success=!0,Promise.resolve(n)},t}(o.BaseImporter);t.PasswordAgentCsvImporter=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=n(88),l=n(127),c=n(39),p=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=JSON.parse(e);if(null==r||null==r.items)return n.success=!1,Promise.resolve(n);var i=new Map;r.folders.forEach((function(e){i.set(e.id,e.name)}));var o=new Map;return i.forEach((function(e,t){o.set(t,n.folders.length);var r=new l.FolderView;r.name=e,n.folders.push(r)})),r.items.forEach((function(e){var r=t.initLoginCipher();if(r.name=t.getValueOrDefault(e.name,"--"),r.login.uris=t.makeUriArray(e.login_url),null!=e.folder&&o.has(e.folder)&&n.folderRelationships.push([n.ciphers.length,o.get(e.folder)]),null!=e.identifiers){for(var i in t.isNullOrWhitespace(e.identifiers.notes)||(r.notes=e.identifiers.notes.split("\\r\\n").join("\n").split("\\n").join("\n")),"CreditCard"===e.type&&(r.card=new s.CardView,r.type=c.CipherType.Card),e.identifiers)if(e.identifiers.hasOwnProperty(i)){var a=e.identifiers[i],l=null!=a?a.toString():null;if(!t.isNullOrWhitespace(l)&&"notes"!==i&&"ignoreItemInSecurityScore"!==i)if("custom_fields"!==i){if(r.type===c.CipherType.Card){if("cardNumber"===i){r.card.number=l,r.card.brand=t.getCardBrand(l);continue}if("nameOnCard"===i){r.card.cardholderName=l;continue}if("security_code"===i){r.card.code=l;continue}if("expires"===i){try{var p=new Date(l);r.card.expYear=p.getFullYear().toString(),r.card.expMonth=(p.getMonth()+1).toString()}catch(u){}continue}if("cardType"===i)continue}else{if(("username"===i||"email"===i)&&t.isNullOrWhitespace(r.login.username)){r.login.username=l;continue}if("password"===i){r.login.password=l;continue}if("totp"===i){r.login.totp=l;continue}if((null==r.login.uris||0===r.login.uris.length)&&t.uriFieldNames.indexOf(i)>-1){r.login.uris=t.makeUriArray(l);continue}}t.processKvp(r,i,l)}else a.forEach((function(e){t.processKvp(r,e.name,e.value)}))}t.convertToNoteIfNeeded(r),t.cleanupCipher(r),n.ciphers.push(r)}})),n.success=!0,Promise.resolve(n)},t}(o.BaseImporter);t.PasswordBossJsonImporter=p},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseXml(e);if(null==r)return n.success=!1,Promise.resolve(n);var i=r.querySelectorAll("PasswordManager > record");return Array.from(i).forEach((function(e){var r=t.querySelectorDirectChild(e,"Category"),i=null==r||t.isNullOrWhitespace(r.textContent)||"Unfiled"===r.textContent?null:r.textContent;t.processFolder(n,i);var o=t.querySelectorDirectChild(e,"Account-Name"),a=t.querySelectorDirectChild(e,"User-Id"),s=t.querySelectorDirectChild(e,"Password"),l=t.querySelectorDirectChild(e,"URL"),c=t.querySelectorDirectChild(e,"Notes"),p=t.initLoginCipher();p.name=null!=o?t.getValueOrDefault(o.textContent,"--"):"--",p.notes=null!=c?t.getValueOrDefault(c.textContent):"",p.login.username=null!=a?t.getValueOrDefault(a.textContent):null,p.login.password=null!=s?t.getValueOrDefault(s.textContent):null,p.login.uris=null!=l?t.makeUriArray(l.textContent):null;for(var u=[],d=1;d<=10;d++)u.push("Attribute-"+d);t.querySelectorAllDirectChild(e,u.join(",")).forEach((function(e){t.isNullOrWhitespace(e.textContent)||"null"===e.textContent||t.processKvp(p,e.tagName,e.textContent)})),t.cleanupCipher(p),n.ciphers.push(p)})),this.organization&&this.moveFoldersToCollections(n),n.success=!0,Promise.resolve(n)},t}(o.BaseImporter);t.PasswordDragonXmlImporter=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseXml(e);if(null==r)return n.success=!1,Promise.resolve(n);var i=r.querySelector("passwordsafe");if(null==i)return n.errorMessage="Missing `passwordsafe` node.",n.success=!1,Promise.resolve(n);var o=i.getAttribute("delimiter"),s=r.querySelectorAll("passwordsafe > entry");return Array.from(s).forEach((function(e){var r=t.querySelectorDirectChild(e,"group"),i=null==r||t.isNullOrWhitespace(r.textContent)?null:r.textContent.split(".").join("/");t.processFolder(n,i);var a=t.querySelectorDirectChild(e,"title"),s=t.querySelectorDirectChild(e,"username"),l=t.querySelectorDirectChild(e,"email"),c=t.querySelectorDirectChild(e,"password"),p=t.querySelectorDirectChild(e,"url"),u=t.querySelectorDirectChild(e,"notes"),d=t.initLoginCipher();d.name=null!=a?t.getValueOrDefault(a.textContent,"--"):"--",d.notes=null!=u?t.getValueOrDefault(u.textContent,"").split(o).join("\n"):null,d.login.username=null!=s?t.getValueOrDefault(s.textContent):null,d.login.password=null!=c?t.getValueOrDefault(c.textContent):null,d.login.uris=null!=p?t.makeUriArray(p.textContent):null,t.isNullOrWhitespace(d.login.username)&&null!=l?d.login.username=t.getValueOrDefault(l.textContent):null==l||t.isNullOrWhitespace(l.textContent)||(d.notes=t.isNullOrWhitespace(d.notes)?"Email: "+l.textContent:d.notes+"\nEmail: "+l.textContent),t.cleanupCipher(d),n.ciphers.push(d)})),this.organization&&this.moveFoldersToCollections(n),n.success=!0,Promise.resolve(n)},t}(o.BaseImporter);t.PasswordSafeXmlImporter=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!1);return null==r?(n.success=!1,Promise.resolve(n)):(r.forEach((function(e){if(!(e.length<1)){e.length>5&&t.processFolder(n,e[5]);var r=t.initLoginCipher();r.name=t.getValueOrDefault(e[0],"--"),e.length>4&&(r.notes=t.getValueOrDefault(e[4],"").split("¬").join("\n")),e.length>2&&(r.login.username=t.getValueOrDefault(e[2])),e.length>3&&(r.login.password=t.getValueOrDefault(e[3])),e.length>1&&(r.login.uris=t.makeUriArray(e[1])),t.cleanupCipher(r),n.ciphers.push(r)}})),this.organization&&this.moveFoldersToCollections(n),n.success=!0,Promise.resolve(n))},t}(o.BaseImporter);t.PasswordWalletTxtImporter=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(39),s=n(26),l=n(88),c=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new s.ImportResult,r=this.parseCsv(e,!0);return null==r?(n.success=!1,Promise.resolve(n)):(r.forEach((function(e){if("true"!==e.trash){var r=t.initLoginCipher();if(r.name=t.getValueOrDefault(e.name),r.notes=t.getValueOrDefault(e.notes),"LoginItem"===e.type)r.login.uris=t.makeUriArray(e.website),r.login.password=t.getValueOrDefault(e.password),r.login.username=t.getValueOrDefault(e.username);else if("CreditCardItem"===e.type){r.type=a.CipherType.Card,r.card=new l.CardView,r.card.cardholderName=t.getValueOrDefault(e.cardholder),r.card.number=t.getValueOrDefault(e.number),r.card.brand=t.getCardBrand(r.card.number),r.card.code=t.getValueOrDefault(e.verification);try{var i=t.getValueOrDefault(e.expiryMonth);if(null!=i){var o=parseInt(i,null);null!=o&&o>=1&&o<=12&&(r.card.expMonth=o.toString())}}catch(d){}try{var s=t.getValueOrDefault(e.expiryYear);if(null!=s){var c=parseInt(s,null);null!=c&&(r.card.expYear=c.toString())}}catch(m){}var p=t.getValueOrDefault(e.pin);null!=p&&t.processKvp(r,"PIN",p);var u=t.getValueOrDefault(e.zipCode);null!=u&&t.processKvp(r,"Zip Code",u)}t.cleanupCipher(r),n.ciphers.push(r)}})),n.success=!0,Promise.resolve(n))},t}(o.BaseImporter);t.RememBearCsvImporter=c},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!0);if(null==r)return n.success=!1,Promise.resolve(n);var i=1;return r.forEach((function(e){var o=!t.isNullOrWhitespace(e.Folder)&&e.Folder.startsWith("/")?e.Folder.replace("/",""):e.Folder,a=t.isNullOrWhitespace(o)?null:o;t.processFolder(n,a);var s=t.initLoginCipher();if(s.notes=t.getValueOrDefault(e.Note),s.name=t.getValueOrDefault(e.Name,"--"),s.login.username=t.getValueOrDefault(e.Login),s.login.password=t.getValueOrDefault(e.Pwd),s.login.uris=t.makeUriArray(e.Url),!t.isNullOrWhitespace(e.Rf_fields)){var l=[e.Rf_fields];null!=e.__parsed_extra&&e.__parsed_extra.length>0&&(l=l.concat(e.__parsed_extra)),l.forEach((function(e){var n=e.split(":");if(!(n.length<3)){var r="-no-name-"===n[0]?null:n[0],i=4===n.length&&"rck"===n[2]?n[1]:n[2];t.processKvp(s,r,i)}}))}t.convertToNoteIfNeeded(s),t.cleanupCipher(s),i===r.length&&"--"===s.name&&t.isNullOrWhitespace(s.login.password)||(n.ciphers.push(s),i++)})),this.organization&&this.moveFoldersToCollections(n),n.success=!0,Promise.resolve(n)},t}(o.BaseImporter);t.RoboFormCsvImporter=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=n(127),l=n(94),c=n(39),p=n(106),u=n(1022),d=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseXml(e);if(null==r)return n.success=!1,Promise.resolve(n);if(null==r.querySelector("database"))return n.errorMessage="Missing `database` node.",n.success=!1,Promise.resolve(n);var i=new Map;return Array.from(r.querySelectorAll("database > label")).forEach((function(e){var r=e.getAttribute("name"),o=e.getAttribute("id");if(!t.isNullOrWhitespace(r)&&!t.isNullOrWhitespace(o)){i.set(o,n.folders.length);var a=new s.FolderView;a.name=r,n.folders.push(a)}})),Array.from(r.querySelectorAll("database > card")).forEach((function(e){if("true"!==e.getAttribute("template")&&"true"!==e.getAttribute("deleted")){var r=t.querySelectorDirectChild(e,"label_id");if(null!=r){var o=r.textContent;!t.isNullOrWhitespace(o)&&i.has(o)&&n.folderRelationships.push([n.ciphers.length,i.get(o)])}var a=t.initLoginCipher();a.name=t.getValueOrDefault(e.getAttribute("title"),"--"),"true"===e.getAttribute("star")&&(a.favorite=!0),"note"===e.getAttribute("type")?(a.type=c.CipherType.SecureNote,a.secureNote=new l.SecureNoteView,a.secureNote.type=p.SecureNoteType.Generic):Array.from(t.querySelectorAllDirectChild(e,"field")).forEach((function(e){var n=e.textContent;if(!t.isNullOrWhitespace(n)){var r=e.getAttribute("name"),i=t.getValueOrDefault(e.getAttribute("type"),"").toLowerCase();"login"===i?a.login.username=n:"password"===i||"secret"===i?t.processKvp(a,r,n,u.FieldType.Hidden):"one_time_password"===i?a.login.totp=n:"notes"===i?a.notes+=n+"\n":"weblogin"===i||"website"===i?a.login.uris=t.makeUriArray(n):t.processKvp(a,r,n)}})),Array.from(t.querySelectorAllDirectChild(e,"notes")).forEach((function(e){a.notes+=e.textContent+"\n"})),t.setPassword(a),t.cleanupCipher(a),n.ciphers.push(a)}})),this.organization&&this.moveFoldersToCollections(n),n.success=!0,Promise.resolve(n)},t.prototype.setPassword=function(e){var t=e.fields.filter((function(e){return e.type===u.FieldType.Hidden}));if(t.length){for(var n,r=0,i=t;r Database > Logins > Login");return Array.from(i).forEach((function(e){var i=e.getAttribute("ID");if(!t.isNullOrWhitespace(i)){var o=e.getAttribute("Name"),a=e.getAttribute("Password"),s=null,l=null,c=null,p=null,u=null,d=r.querySelector('root > Database > Accounts > Account > LoginLinks > Login[SourceLoginID="'+i+'"]');if(null!=d){var m=d.parentElement.parentElement;null!=m&&(s=m.getAttribute("Name"),l=m.getAttribute("Link"),p=m.getAttribute("ParentID"),c=m.getAttribute("Comments"),t.isNullOrWhitespace(c)||(c=c.split("/n").join("\n")))}t.isNullOrWhitespace(p)||(u=t.buildGroupText(r,p,""),t.processFolder(n,u));var h=t.initLoginCipher();h.name=t.getValueOrDefault(s,"--"),h.notes=t.getValueOrDefault(c),h.login.username=t.getValueOrDefault(o),h.login.password=t.getValueOrDefault(a),h.login.uris=t.makeUriArray(l),t.cleanupCipher(h),n.ciphers.push(h)}})),this.organization&&this.moveFoldersToCollections(n),n.success=!0,Promise.resolve(n)},t.prototype.buildGroupText=function(e,t,n){var r=e.querySelector('root > Database > Groups > Group[ID="'+t+'"]');return null==r?n:(this.isNullOrWhitespace(n)||(n="/"+n),n=r.getAttribute("Name")+n,this.buildGroupText(e,r.getAttribute("ParentID"),n))},t}(o.BaseImporter);t.StickyPasswordXmlImporter=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=n(88),l=n(94),c=n(39),p=n(106),u=["kind","autologin","favorite","hexcolor","protectedwithpassword","subdomainonly","type","tk_export_version","note","title","document_content"],d=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!0);return null==r?(n.success=!1,Promise.resolve(n)):(r.forEach((function(e){var r=t.initLoginCipher();if(r.favorite="true"===t.getValueOrDefault(e.favorite,"").toLowerCase(),r.name=t.getValueOrDefault(e.name,"--"),r.notes=t.getValueOrDefault(e.memo,""),r.login.username=t.getValueOrDefault(e.login),r.login.password=t.getValueOrDefault(e.password),r.login.uris=t.makeUriArray(e.url),"login"!==e.kind&&(r.name=t.getValueOrDefault(e.title,"--"),r.notes=t.getValueOrDefault(e.note,"")),"cc"===e.kind){if(r.type=c.CipherType.Card,r.card=new s.CardView,r.card.cardholderName=t.getValueOrDefault(e.cardholder),r.card.number=t.getValueOrDefault(e.number),r.card.brand=t.getCardBrand(r.card.number),!t.isNullOrWhitespace(e.expiryDate))try{var i=new Date(e.expiryDate);r.card.expYear=i.getFullYear().toString(),r.card.expMonth=(i.getMonth()+1).toString()}catch(a){}}else if("login"!==e.kind)for(var o in r.type=c.CipherType.SecureNote,r.secureNote=new l.SecureNoteView,r.secureNote.type=p.SecureNoteType.Generic,t.isNullOrWhitespace(r.notes)||(r.notes=t.getValueOrDefault(e.document_content,"")),e)e.hasOwnProperty(o)&&u.indexOf(o.toLowerCase())<0&&!t.isNullOrWhitespace(e[o])&&t.processKvp(r,o,e[o]);t.cleanupCipher(r),n.ciphers.push(r)})),n.success=!0,Promise.resolve(n))},t}(o.BaseImporter);t.TrueKeyCsvImporter=d},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!1);return null==r?(n.success=!1,Promise.resolve(n)):(r.forEach((function(e){if(5===e.length){var r=t.initLoginCipher();r.name=t.getValueOrDefault(e[0],"--"),r.notes=t.getValueOrDefault(e[4]),r.login.username=t.getValueOrDefault(e[1]),r.login.password=t.getValueOrDefault(e[2]),r.login.uris=t.makeUriArray(e[3]),t.cleanupCipher(r),n.ciphers.push(r)}})),n.success=!0,Promise.resolve(n))},t}(o.BaseImporter);t.UpmCsvImporter=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!0);return null==r?(n.success=!1,Promise.resolve(n)):(r.forEach((function(e){var r=t.initLoginCipher();r.name=t.getValueOrDefault(e.Name,"--"),r.login.username=t.getValueOrDefault(e["User name"]),r.login.password=t.getValueOrDefault(e.Password),r.login.uris=t.makeUriArray(e.URL),t.cleanupCipher(r),n.ciphers.push(r)})),n.success=!0,Promise.resolve(n))},t}(o.BaseImporter);t.YotiCsvImporter=s},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),a=n(26),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.parse=function(e){var t=this,n=new a.ImportResult,r=this.parseCsv(e,!0);return null==r?(n.success=!1,Promise.resolve(n)):(r.forEach((function(e){if(!t.isNullOrWhitespace(e["Password Name"])||!t.isNullOrWhitespace(e["Secret Name"])){t.processFolder(n,t.getValueOrDefault(e.ChamberName));var r=t.initLoginCipher();r.favorite="1"===t.getValueOrDefault(e.Favorite,"0"),r.notes=t.getValueOrDefault(e.Notes),r.name=t.getValueOrDefault(e["Password Name"],t.getValueOrDefault(e["Secret Name"],"--")),r.login.uris=t.makeUriArray(t.getValueOrDefault(e["Password URL"],t.getValueOrDefault(e["Secret URL"]))),t.parseData(r,e.SecretData),t.parseData(r,e.CustomData),t.convertToNoteIfNeeded(r),t.cleanupCipher(r),n.ciphers.push(r)}})),this.organization&&this.moveFoldersToCollections(n),n.success=!0,Promise.resolve(n))},t.prototype.parseData=function(e,t){var n=this;this.isNullOrWhitespace(t)||this.splitNewLine(t).forEach((function(t){var r=t.indexOf(":");if(!(r<0)){var i=t.substring(0,r),o=t.length>r?t.substring(r+1):null;if(!n.isNullOrWhitespace(i)&&!n.isNullOrWhitespace(o)&&"SecretType"!==i){var a=i.toLowerCase();null==e.login.username&&n.usernameFieldNames.indexOf(a)>-1?e.login.username=o:null==e.login.password&&n.passwordFieldNames.indexOf(a)>-1?e.login.password=o:n.processKvp(e,i,o)}}}))},t}(o.BaseImporter);t.ZohoVaultCsvImporter=s},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]t.minComplexity&&(t.minComplexity=e.data.minComplexity),null!=e.data.minLength&&e.data.minLength>t.minLength&&(t.minLength=e.data.minLength),e.data.requireUpper&&(t.requireUpper=!0),e.data.requireLower&&(t.requireLower=!0),e.data.requireNumbers&&(t.requireNumbers=!0),e.data.requireSpecial&&(t.requireSpecial=!0))})),[2,t]}}))}))},e.prototype.evaluateMasterPassword=function(e,t,n){return null==n||!(n.minComplexity>0&&n.minComplexity>e)&&(!(n.minLength>0&&n.minLength>t.length)&&((!n.requireUpper||t.toLocaleLowerCase()!==t)&&((!n.requireLower||t.toLocaleUpperCase()!==t)&&(!(n.requireNumbers&&!/[0-9]/.test(t))&&!(n.requireSpecial&&!/[!@#$%\^&*]/g.test(t))))))},e}();t.PolicyService=c},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.minComplexity=0,t.minLength=0,t.requireUpper=!1,t.requireLower=!1,t.requireNumbers=!1,t.requireSpecial=!1,t}return i(t,e),t}(n(81).default);t.MasterPasswordPolicyOptions=o},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]"))},e.prototype.indexCiphers=function(e,t){return r(this,void 0,void 0,(function(){var n,r,s=this;return i(this,(function(i){switch(i.label){case 0:return this.indexing?[2]:(this.logService.time("search indexing"),this.indexing=!0,this.indexedEntityId=e,this.index=null,(n=new o.Builder).ref("id"),n.field("shortid",{boost:100,extractor:function(e){return e.id.substr(0,8)}}),n.field("name",{boost:10}),n.field("subtitle",{boost:5,extractor:function(e){return null!=e.subTitle&&e.type===a.CipherType.Card?e.subTitle.replace(/\*/g,""):e.subTitle}}),n.field("notes"),n.field("login.username",{extractor:function(e){return e.type===a.CipherType.Login&&null!=e.login?e.login.username:null}}),n.field("login.uris",{boost:2,extractor:function(e){return s.uriExtractor(e)}}),n.field("fields",{extractor:function(e){return s.fieldExtractor(e,!1)}}),n.field("fields_joined",{extractor:function(e){return s.fieldExtractor(e,!0)}}),n.field("attachments",{extractor:function(e){return s.attachmentExtractor(e,!1)}}),n.field("attachments_joined",{extractor:function(e){return s.attachmentExtractor(e,!0)}}),n.field("organizationid",{extractor:function(e){return e.organizationId}}),(r=t)?[3,2]:[4,this.cipherService.getAllDecrypted()]);case 1:r=i.sent(),i.label=2;case 2:return(t=r).forEach((function(e){return n.add(e)})),this.index=n.build(),this.indexing=!1,this.logService.timeEnd("search indexing"),[2]}}))}))},e.prototype.searchCiphers=function(e,t,n){return void 0===t&&(t=null),void 0===n&&(n=null),r(this,void 0,void 0,(function(){var r,a,s,l,c;return i(this,(function(i){switch(i.label){case 0:return r=[],null!=e&&(e=e.trim().toLowerCase()),""===e&&(e=null),null!=n?[3,2]:[4,this.cipherService.getAllDecrypted()];case 1:n=i.sent(),i.label=2;case 2:return null!=t&&Array.isArray(t)&&t.length>0?n=n.filter((function(e){return t.every((function(t){return null==t||t(e)}))})):null!=t&&(n=n.filter(t)),this.isSearchable(e)?this.indexing?[4,new Promise((function(e){return setTimeout(e,250)}))]:[3,5]:[2,n];case 3:return i.sent(),this.indexing?[4,new Promise((function(e){return setTimeout(e,500)}))]:[3,5];case 4:i.sent(),i.label=5;case 5:if(null==(a=this.getIndexForSearch()))return[2,this.searchCiphersBasic(n,e)];if(s=new Map,n.forEach((function(e){return s.set(e.id,e)})),l=null,null!=e&&e.length>1&&0===e.indexOf(">"))try{l=a.search(e.substr(1).trim())}catch(p){}else c=o.Query.wildcard.LEADING|o.Query.wildcard.TRAILING,l=a.query((function(t){o.tokenizer(e).forEach((function(e){var n=e.toString();t.term(n,{fields:["name"],wildcard:c}),t.term(n,{fields:["subtitle"],wildcard:c}),t.term(n,{fields:["login.uris"],wildcard:c}),t.term(n,{})}))}));return null!=l&&l.forEach((function(e){s.has(e.ref)&&r.push(s.get(e.ref))})),[2,r]}}))}))},e.prototype.searchCiphersBasic=function(e,t,n){return void 0===n&&(n=!1),t=t.trim().toLowerCase(),e.filter((function(e){return n===e.isDeleted&&(null!=e.name&&e.name.toLowerCase().indexOf(t)>-1||(!!(t.length>=8&&e.id.startsWith(t))||(null!=e.subTitle&&e.subTitle.toLowerCase().indexOf(t)>-1||!!(e.login&&null!=e.login.uri&&e.login.uri.toLowerCase().indexOf(t)>-1))))}))},e.prototype.searchSends=function(e,t){return t=t.trim().toLocaleLowerCase(),e.filter((function(e){var n,r,i;return null!=e.name&&e.name.toLowerCase().indexOf(t)>-1||(!!(t.length>=8&&(e.id.startsWith(t)||e.accessId.toLocaleLowerCase().startsWith(t)||null!=(null===(n=e.file)||void 0===n?void 0:n.id)&&e.file.id.startsWith(t)))||(null!=e.notes&&e.notes.toLowerCase().indexOf(t)>-1||(null!=(null===(r=e.text)||void 0===r?void 0:r.text)&&e.text.text.toLowerCase().indexOf(t)>-1||(null!=(null===(i=e.file)||void 0===i?void 0:i.fileName)&&e.file.fileName.toLowerCase().indexOf(t)>-1||void 0))))}))},e.prototype.getIndexForSearch=function(){return this.index},e.prototype.fieldExtractor=function(e,t){if(!e.hasFields)return null;var n=[];return e.fields.forEach((function(e){null!=e.name&&n.push(e.name),e.type===s.FieldType.Text&&null!=e.value&&n.push(e.value)})),0===(n=n.filter((function(e){return""!==e.trim()}))).length?null:t?n.join(" "):n},e.prototype.attachmentExtractor=function(e,t){if(!e.hasAttachments)return null;var n=[];return e.attachments.forEach((function(e){null!=e&&null!=e.fileName&&(t&&e.fileName.indexOf(".")>-1?n.push(e.fileName.substr(0,e.fileName.lastIndexOf("."))):n.push(e.fileName))})),0===(n=n.filter((function(e){return""!==e.trim()}))).length?null:t?n.join(" "):n},e.prototype.uriExtractor=function(e){if(e.type!==a.CipherType.Login||null==e.login||!e.login.hasUris)return null;var t=[];return e.login.uris.forEach((function(e){if(null!=e.uri&&""!==e.uri)if(null==e.hostname){var n=e.uri;if(e.match!==l.UriMatchType.RegularExpression){var r=n.indexOf("://");r>-1&&(n=n.substr(r+3));var i=n.search(/\?|&|#/);i>-1&&(n=n.substring(0,i))}t.push(n)}else t.push(e.hostname)})),t.length>0?t:null},e}();t.SearchService=c},,function(e,t,n){"use strict";(function(e){var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(t){o(t)}}function s(e){try{l(r.throw(e))}catch(t){o(t)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]-1||n.indexOf(" Version/9.")>-1)}return e.prototype.pbkdf2=function(e,t,n,s){return r(this,void 0,void 0,(function(){var r,l,c,p,u,d,m,h,f;return i(this,(function(i){switch(i.label){case 0:return this.isIE||this.isOldSafari?(r="sha256"===n?32:64,l=this.toByteString(e),c=this.toByteString(t),p=o.pbkdf2(l,c,s,r,n),[2,a.Utils.fromByteStringToArray(p).buffer]):(u="sha256"===n?256:512,d=this.toBuf(e),m=this.toBuf(t),h={name:"PBKDF2",salt:m,iterations:s,hash:{name:this.toWebCryptoAlgorithm(n)}},[4,this.subtle.importKey("raw",d,{name:"PBKDF2"},!1,["deriveBits"])]);case 1:return f=i.sent(),[4,this.subtle.deriveBits(h,f,u)];case 2:return[2,i.sent()]}}))}))},e.prototype.hkdf=function(e,t,n,o,a){return r(this,void 0,void 0,(function(){var r,s,l,c;return i(this,(function(i){switch(i.label){case 0:return r=this.toBuf(t),s=this.toBuf(n),l={name:"HKDF",salt:r,info:s,hash:{name:this.toWebCryptoAlgorithm(a)}},[4,this.subtle.importKey("raw",e,{name:"HKDF"},!1,["deriveBits"])];case 1:return c=i.sent(),[4,this.subtle.deriveBits(l,c,8*o)];case 2:return[2,i.sent()]}}))}))},e.prototype.hkdfExpand=function(e,t,n,o){return r(this,void 0,void 0,(function(){var r,a,s,l,c,p,u,d,m,h;return i(this,(function(i){switch(i.label){case 0:if(n>255*(r="sha256"===o?32:64))throw new Error("outputByteSize is too large.");if(new Uint8Array(e).length=n)return[3,4];i.label=3;case 3:return d++,[3,1];case 4:return[2,u.slice(0,n).buffer]}}))}))},e.prototype.hash=function(e,t){return r(this,void 0,void 0,(function(){var n,r,s;return i(this,(function(i){switch(i.label){case 0:return this.isIE&&"sha1"===t||"md5"===t?(n="md5"===t?o.md.md5.create():o.md.sha1.create(),r=this.toByteString(e),n.update(r,"raw"),[2,a.Utils.fromByteStringToArray(n.digest().data).buffer]):(s=this.toBuf(e),[4,this.subtle.digest({name:this.toWebCryptoAlgorithm(t)},s)]);case 1:return[2,i.sent()]}}))}))},e.prototype.hmac=function(e,t,n){return r(this,void 0,void 0,(function(){var r,s,l,c,p;return i(this,(function(i){switch(i.label){case 0:return this.isIE&&"sha512"===n?(r=o.hmac.create(),s=this.toByteString(t),l=this.toByteString(e),r.start(n,s),r.update(l,"raw"),[2,a.Utils.fromByteStringToArray(r.digest().data).buffer]):(c={name:"HMAC",hash:{name:this.toWebCryptoAlgorithm(n)}},[4,this.subtle.importKey("raw",t,c,!1,["sign"])]);case 1:return p=i.sent(),[4,this.subtle.sign(c,p,e)];case 2:return[2,i.sent()]}}))}))},e.prototype.compare=function(e,t){return r(this,void 0,void 0,(function(){var n,r,o,a,s,l,c,p;return i(this,(function(i){switch(i.label){case 0:return[4,this.randomBytes(32)];case 1:return n=i.sent(),r={name:"HMAC",hash:{name:"SHA-256"}},[4,this.subtle.importKey("raw",n,r,!1,["sign"])];case 2:return o=i.sent(),[4,this.subtle.sign(r,o,e)];case 3:return a=i.sent(),[4,this.subtle.sign(r,o,t)];case 4:if(s=i.sent(),a.byteLength!==s.byteLength)return[2,!1];for(l=new Uint8Array(a),c=new Uint8Array(s),p=0;p0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]"})),n.body=r,n.bodyOutputType=s.BodyOutputType.TrustedHtml}null!=e.options&&(!0===e.options.trustedHtml&&(n.bodyOutputType=s.BodyOutputType.TrustedHtml),null!=e.options.timeout&&e.options.timeout>0&&(n.timeout=e.options.timeout)),this.toasterService.popAsync(n)},e.prototype.idleStateChanged=function(){this.isIdle?this.notificationsService.disconnectFromInactivity():this.notificationsService.reconnectFromActivity()},e.prototype.setFullWidth=function(){return r(this,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return[4,this.storageService.get("enableFullWidth")];case 1:return e.sent()?document.body.classList.add("full-width"):document.body.classList.remove("full-width"),[2]}}))}))},e.ɵfac=function(t){return new(t||e)(u.ɵɵdirectiveInject(d.BroadcasterService),u.ɵɵdirectiveInject(m.UserService),u.ɵɵdirectiveInject(h.TokenService),u.ɵɵdirectiveInject(f.FolderService),u.ɵɵdirectiveInject(v.SettingsService),u.ɵɵdirectiveInject(y.SyncService),u.ɵɵdirectiveInject(g.PasswordGenerationService),u.ɵɵdirectiveInject(x.CipherService),u.ɵɵdirectiveInject(b.AuthService),u.ɵɵdirectiveInject(S.Router),u.ɵɵdirectiveInject(w.ToasterService),u.ɵɵdirectiveInject(C.I18nService),u.ɵɵdirectiveInject(I.PlatformUtilsService),u.ɵɵdirectiveInject(u.NgZone),u.ɵɵdirectiveInject(E.VaultTimeoutService),u.ɵɵdirectiveInject(P.StorageService),u.ɵɵdirectiveInject(k.CryptoService),u.ɵɵdirectiveInject(_.CollectionService),u.ɵɵdirectiveInject(A.DomSanitizer),u.ɵɵdirectiveInject(O.SearchService),u.ɵɵdirectiveInject(T.NotificationsService),u.ɵɵdirectiveInject(M.RouterService),u.ɵɵdirectiveInject(B.StateService),u.ɵɵdirectiveInject(D.EventService),u.ɵɵdirectiveInject(R.PolicyService))},e.ɵcmp=u.ɵɵdefineComponent({type:e,selectors:[["app-root"]],decls:4,vars:1,consts:[["aria-live","polite",3,"toasterconfig"]],template:function(e,t){1&e&&(u.ɵɵelement(0,"toaster-container",0),u.ɵɵtext(1,"\n"),u.ɵɵelement(2,"router-outlet"),u.ɵɵtext(3,"\n")),2&e&&u.ɵɵproperty("toasterconfig",t.toasterConfig)},directives:[w.ToasterContainerComponent,S.RouterOutlet],encapsulation:2}),e}();t.AppComponent=V},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(0);var r=n(0),i=function(){function e(e){this.el=e}return e.prototype.onClick=function(){this.el.nativeElement.blur()},e.ɵfac=function(t){return new(t||e)(r.ɵɵdirectiveInject(r.ElementRef))},e.ɵdir=r.ɵɵdefineDirective({type:e,selectors:[["","appBlurClick",""]],hostBindings:function(e,t){1&e&&r.ɵɵlistener("click",(function(){return t.onClick()}))}}),e}();t.BlurClickDirective=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(0);var r=n(0),i=function(){function e(e){this.elRef=e,this.el=null,this.el=e.nativeElement}return e.prototype.ngOnInit=function(){var e=this;this.formEls=Array.from(this.el.querySelectorAll('input:not([type="hidden"]), select, textarea')),this.formEls.forEach((function(t){t.addEventListener("focus",(function(t){e.el.classList.add("active")}),!1),t.addEventListener("blur",(function(t){e.el.classList.remove("active")}),!1)}))},e.prototype.onClick=function(e){var t=e.target;if((t===this.el||t.classList.contains("progress")||t.classList.contains("progress-bar"))&&this.formEls.length>0){var n=this.formEls[0];if("input"===n.tagName.toLowerCase()){var r=n;if(null!=r.type&&"checkbox"===r.type.toLowerCase())return void r.click()}n.focus()}},e.ɵfac=function(t){return new(t||e)(r.ɵɵdirectiveInject(r.ElementRef))},e.ɵdir=r.ɵɵdefineDirective({type:e,selectors:[["","appBoxRow",""]],hostBindings:function(e,t){1&e&&r.ɵɵlistener("click",(function(e){return t.onClick(e)}))}}),e}();t.BoxRowDirective=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(0);var r=n(0),i=function(){function e(){}return e.prototype.transform=function(e,t,n){return void 0===n&&(n=!1),null==e||0===e.length?[]:null==t||t.length<2?e.filter((function(e){return n!==e.isDeleted})):(t=t.trim().toLowerCase(),e.filter((function(e){return n===e.isDeleted&&(null!=e.name&&e.name.toLowerCase().indexOf(t)>-1||(!!(t.length>=8&&e.id.startsWith(t))||(null!=e.subTitle&&e.subTitle.toLowerCase().indexOf(t)>-1||!!(e.login&&null!=e.login.uri&&e.login.uri.toLowerCase().indexOf(t)>-1))))})))},e.ɵfac=function(t){return new(t||e)},e.ɵpipe=r.ɵɵdefinePipe({name:"searchCiphers",type:e,pure:!0}),e}();t.SearchCiphersPipe=i}]); -//# sourceMappingURL=main.6edbb1cdf4d2e063961a.js.map \ No newline at end of file diff --git a/app/main.6edbb1cdf4d2e063961a.js.map b/app/main.6edbb1cdf4d2e063961a.js.map deleted file mode 100644 index b08ff990..00000000 --- a/app/main.6edbb1cdf4d2e063961a.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./jslib/src/abstractions/i18n.service.ts","webpack:///./jslib/src/abstractions/platformUtils.service.ts","webpack:///./jslib/src/abstractions/api.service.ts","webpack:///./jslib/src/abstractions/user.service.ts","webpack:///./jslib/src/angular/pipes/i18n.pipe.ts","webpack:///./jslib/src/abstractions/messaging.service.ts","webpack:///./jslib/src/angular/directives/api-action.directive.ts","webpack:///./jslib/src/angular/directives/a11y-title.directive.ts","webpack:///./jslib/src/abstractions/crypto.service.ts","webpack:///./jslib/src/abstractions/cipher.service.ts","webpack:///./jslib/src/models/response/baseResponse.ts","webpack:///./jslib/src/angular/components/callout.component.ts","webpack:///./jslib/src/angular/components/callout.component.html","webpack:///./jslib/src/importers/baseImporter.ts","webpack:///./jslib/src/models/domain/importResult.ts","webpack:///./jslib/src/misc/utils.ts","webpack:///./jslib/src/abstractions/passwordGeneration.service.ts","webpack:///./jslib/src/angular/directives/stop-click.directive.ts","webpack:///./jslib/src/abstractions/state.service.ts","webpack:///./jslib/src/enums/cipherType.ts","webpack:///./jslib/src/abstractions/collection.service.ts","webpack:///./jslib/src/abstractions/storage.service.ts","webpack:///./jslib/src/abstractions/policy.service.ts","webpack:///./jslib/src/angular/directives/input-verbatim.directive.ts","webpack:///./jslib/src/abstractions/folder.service.ts","webpack:///./jslib/src/angular/directives/stop-prop.directive.ts","webpack:///./jslib/src/abstractions/auth.service.ts","webpack:///./jslib/src/abstractions/sync.service.ts","webpack:///./jslib/src/abstractions/environment.service.ts","webpack:///./jslib/src/angular/directives/autofocus.directive.ts","webpack:///./jslib/src/services/constants.service.ts","webpack:///./jslib/src/abstractions/event.service.ts","webpack:///./jslib/src/models/request/passwordVerificationRequest.ts","webpack:///./jslib/src/abstractions/search.service.ts","webpack:///./jslib/src/models/domain/domainBase.ts","webpack:///./src/app/modal.component.ts","webpack:///./jslib/src/abstractions/audit.service.ts","webpack:///./jslib/src/models/view/cardView.ts","webpack:///./jslib/src/abstractions/vaultTimeout.service.ts","webpack:///./jslib/src/models/view/secureNoteView.ts","webpack:///./jslib/src/abstractions/token.service.ts","webpack:///./jslib/src/abstractions/cryptoFunction.service.ts","webpack:///./jslib/src/models/domain/encString.ts","webpack:///./jslib/src/enums/secureNoteType.ts","webpack:///./jslib/src/angular/components/icon.component.ts","webpack:///./jslib/src/angular/components/icon.component.html","webpack:///./jslib/src/angular/services/broadcaster.service.ts","webpack:///./jslib/src/enums/twoFactorProviderType.ts","webpack:///./jslib/src/abstractions/totp.service.ts","webpack:///./src/app/settings/payment.component.ts","webpack:///./src/app/settings/payment.component.html","webpack:///./jslib/src/enums/fieldType.ts","webpack:///./jslib/src/models/view/folderView.ts","webpack:///./src/app/components/avatar.component.ts","webpack:///./jslib/src/models/domain/collection.ts","webpack:///./jslib/src/enums/policyType.ts","webpack:///./src/app/settings/tax-info.component.ts","webpack:///./src/app/settings/tax-info.component.html","webpack:///./jslib/src/models/view/cipherView.ts","webpack:///./jslib/src/models/view/identityView.ts","webpack:///./jslib/src/models/data/collectionData.ts","webpack:///./jslib/src/models/view/collectionView.ts","webpack:///./jslib/src/enums/organizationUserStatusType.ts","webpack:///./jslib/src/models/data/cipherData.ts","webpack:///./jslib/src/models/view/loginView.ts","webpack:///./jslib/src/enums/sendType.ts","webpack:///./src/app/settings/two-factor-verify.component.ts","webpack:///./src/app/settings/two-factor-verify.component.html","webpack:///./jslib/src/abstractions/export.service.ts","webpack:///./jslib/src/models/domain/cipher.ts","webpack:///./jslib/src/abstractions/send.service.ts","webpack:///./jslib/src/models/view/fieldView.ts","webpack:///./jslib/src/models/request/cipherRequest.ts","webpack:///./jslib/src/models/response/errorResponse.ts","webpack:///./jslib/src/angular/services/validation.service.ts","webpack:///./src/app/services/router.service.ts","webpack:///./jslib/src/enums/kdfType.ts","webpack:///./src/app/components/password-strength.component.ts","webpack:///./src/app/components/password-strength.component.html","webpack:///./jslib/src/enums/organizationUserType.ts","webpack:///./jslib/src/angular/pipes/search.pipe.ts","webpack:///./src/app/services/event.service.ts","webpack:///./jslib/src/enums/eventType.ts","webpack:///./jslib/src/enums/paymentMethodType.ts","webpack:///./src/app/settings/two-factor-base.component.ts","webpack:///./src/app/tools/cipher-report.component.ts","webpack:///./jslib/src/models/view/loginUriView.ts","webpack:///./jslib/src/enums/uriMatchType.ts","webpack:///./src/app/vault/add-edit.component.ts","webpack:///./src/app/vault/add-edit.component.html","webpack:///./jslib/src/abstractions/import.service.ts","webpack:///./jslib/src/models/response/cipherResponse.ts","webpack:///./src/app/vault/ciphers.component.ts","webpack:///./src/app/vault/ciphers.component.html","webpack:///./jslib/src/enums/encryptionType.ts","webpack:///./jslib/src/services/auth.service.ts","webpack:///./jslib/src/models/request/selectionReadOnlyRequest.ts","webpack:///./jslib/src/enums/deviceType.ts","webpack:///./jslib/src/abstractions/settings.service.ts","webpack:///./jslib/src/enums/planType.ts","webpack:///./src/app/settings/organization-plans.component.ts","webpack:///./src/app/settings/organization-plans.component.html","webpack:///./jslib/src/models/domain/symmetricCryptoKey.ts","webpack:///./jslib/src/models/domain/card.ts","webpack:///./jslib/src/models/domain/field.ts","webpack:///./jslib/src/models/domain/identity.ts","webpack:///./jslib/src/models/domain/login.ts","webpack:///./jslib/src/models/domain/loginUri.ts","webpack:///./jslib/src/models/domain/secureNote.ts","webpack:///./jslib/src/angular/directives/true-false-value.directive.ts","webpack:///./jslib/src/models/response/selectionReadOnlyResponse.ts","webpack:///./jslib/src/models/response/profileResponse.ts","webpack:///./src/app/vault/groupings.component.ts","webpack:///./src/app/vault/groupings.component.html","webpack:///./jslib/src/models/domain/organization.ts","webpack:///./jslib/src/models/view/sendFileView.ts","webpack:///./jslib/src/models/view/sendTextView.ts","webpack:///./src/app/settings/organizations.component.ts","webpack:///./src/app/settings/organizations.component.html","webpack:///./src/app/layouts/navbar.component.ts","webpack:///./src/app/layouts/navbar.component.html","webpack:///./src/app/layouts/footer.component.ts","webpack:///./src/app/layouts/footer.component.html","webpack:///./jslib/src/models/request/keysRequest.ts","webpack:///./jslib/src/models/domain/policy.ts","webpack:///./jslib/src/models/data/policyData.ts","webpack:///./jslib/src/angular/components/change-password.component.ts","webpack:///./src/app/organizations/manage/entity-users.component.ts","webpack:///./src/app/organizations/manage/entity-users.component.html","webpack:///./src/app/organizations/manage/entity-events.component.ts","webpack:///./src/app/organizations/manage/entity-events.component.html","webpack:///./jslib/src/models/api/permissionsApi.ts","webpack:///./src/app/settings/api-key.component.ts","webpack:///./src/app/settings/api-key.component.html","webpack:///./src/app/settings/purge-vault.component.ts","webpack:///./src/app/settings/purge-vault.component.html","webpack:///./src/app/settings/user-billing.component.ts","webpack:///./src/app/settings/user-billing.component.html","webpack:///./src/app/settings/add-credit.component.ts","webpack:///./src/app/settings/add-credit.component.html","webpack:///./src/app/settings/adjust-payment.component.ts","webpack:///./src/app/settings/adjust-payment.component.html","webpack:///./src/app/settings/update-license.component.ts","webpack:///./src/app/settings/update-license.component.html","webpack:///./jslib/src/enums/productType.ts","webpack:///./src/app/settings/adjust-storage.component.ts","webpack:///./src/app/settings/adjust-storage.component.html","webpack:///./src/app/settings/two-factor-duo.component.ts","webpack:///./src/app/settings/two-factor-duo.component.html","webpack:///./src/app/settings/two-factor-setup.component.ts","webpack:///./src/app/settings/two-factor-setup.component.html","webpack:///./src/app/tools/export.component.ts","webpack:///./src/app/tools/export.component.html","webpack:///./src/app/tools/exposed-passwords-report.component.ts","webpack:///./src/app/tools/exposed-passwords-report.component.html","webpack:///./src/app/organizations/vault/add-edit.component.ts","webpack:///./jslib/src/models/data/attachmentData.ts","webpack:///./jslib/src/models/data/cardData.ts","webpack:///./jslib/src/models/data/fieldData.ts","webpack:///./jslib/src/models/data/identityData.ts","webpack:///./jslib/src/models/data/loginData.ts","webpack:///./jslib/src/models/data/loginUriData.ts","webpack:///./jslib/src/models/data/secureNoteData.ts","webpack:///./jslib/src/models/domain/attachment.ts","webpack:///./jslib/src/models/view/passwordHistoryView.ts","webpack:///./src/app/tools/import.component.ts","webpack:///./src/app/tools/import.component.html","webpack:///./src/app/tools/inactive-two-factor-report.component.ts","webpack:///./src/app/tools/inactive-two-factor-report.component.html","webpack:///./src/app/tools/reused-passwords-report.component.ts","webpack:///./src/app/tools/reused-passwords-report.component.html","webpack:///./src/app/tools/unsecured-websites-report.component.ts","webpack:///./src/app/tools/unsecured-websites-report.component.html","webpack:///./src/app/tools/weak-passwords-report.component.ts","webpack:///./src/app/tools/weak-passwords-report.component.html","webpack:///./src/app/vault/attachments.component.ts","webpack:///./src/app/vault/attachments.component.html","webpack:///./jslib/src/models/response/attachmentResponse.ts","webpack:///./jslib/src/models/response/collectionResponse.ts","webpack:///./jslib/src/models/response/domainsResponse.ts","webpack:///./jslib/src/models/response/folderResponse.ts","webpack:///./jslib/src/models/response/sendResponse.ts","webpack:///./jslib/src/models/api/sendFileApi.ts","webpack:///./jslib/src/models/api/sendTextApi.ts","webpack:///./src/app/organizations/vault/ciphers.component.ts","webpack:///./src/app/vault/collections.component.ts","webpack:///./src/app/vault/collections.component.html","webpack:///./src/app/organizations/vault/groupings.component.ts","webpack:///./src/app/vault/bulk-actions.component.ts","webpack:///./src/app/vault/bulk-actions.component.html","webpack:///./jslib/src/models/domain/sendFile.ts","webpack:///./jslib/src/models/domain/sendText.ts","webpack:///./jslib/src/models/request/cipherWithIdRequest.ts","webpack:///./jslib/src/models/request/folderRequest.ts","webpack:///./jslib/src/angular/directives/select-copy.directive.ts","webpack:///./jslib/src/angular/pipes/color-password.pipe.ts","webpack:///./jslib/src/models/data/folderData.ts","webpack:///./jslib/src/models/domain/folder.ts","webpack:///./jslib/src/abstractions/notifications.service.ts","webpack:///./$_lazy_route_resource lazy namespace object","webpack:///./src/app/layouts/frontend-layout.component.ts","webpack:///./src/app/layouts/frontend-layout.component.html","webpack:///./src/app/layouts/organization-layout.component.ts","webpack:///./src/app/layouts/organization-layout.component.html","webpack:///./src/app/layouts/user-layout.component.ts","webpack:///./src/app/layouts/user-layout.component.html","webpack:///./src/app/accounts/accept-emergency.component.ts","webpack:///./src/app/accounts/accept-emergency.component.html","webpack:///./src/app/accounts/accept-organization.component.ts","webpack:///./src/app/accounts/accept-organization.component.html","webpack:///./src/app/accounts/hint.component.ts","webpack:///./src/app/accounts/hint.component.html","webpack:///./src/app/accounts/lock.component.ts","webpack:///./src/app/accounts/lock.component.html","webpack:///./src/app/accounts/login.component.ts","webpack:///./src/app/accounts/login.component.html","webpack:///./src/app/accounts/recover-delete.component.ts","webpack:///./src/app/accounts/recover-delete.component.html","webpack:///./src/app/accounts/recover-two-factor.component.ts","webpack:///./src/app/accounts/recover-two-factor.component.html","webpack:///./src/app/accounts/register.component.ts","webpack:///./src/app/accounts/register.component.html","webpack:///./src/app/accounts/set-password.component.ts","webpack:///./src/app/accounts/set-password.component.html","webpack:///./src/app/accounts/sso.component.ts","webpack:///./src/app/accounts/sso.component.html","webpack:///./jslib/src/angular/components/sso.component.ts","webpack:///./src/app/accounts/two-factor.component.ts","webpack:///./src/app/accounts/two-factor.component.html","webpack:///./src/app/accounts/two-factor-options.component.ts","webpack:///./src/app/accounts/two-factor-options.component.html","webpack:///./jslib/src/models/request/twoFactorEmailRequest.ts","webpack:///./jslib/src/models/domain/authResult.ts","webpack:///./src/app/accounts/verify-email-token.component.ts","webpack:///./src/app/accounts/verify-email-token.component.html","webpack:///./src/app/accounts/verify-recover-delete.component.ts","webpack:///./src/app/accounts/verify-recover-delete.component.html","webpack:///./src/app/organizations/manage/collections.component.ts","webpack:///./src/app/organizations/manage/collections.component.html","webpack:///./src/app/organizations/manage/collection-add-edit.component.ts","webpack:///./src/app/organizations/manage/collection-add-edit.component.html","webpack:///./jslib/src/models/request/collectionRequest.ts","webpack:///./src/app/organizations/manage/events.component.ts","webpack:///./src/app/organizations/manage/events.component.html","webpack:///./src/app/organizations/manage/groups.component.ts","webpack:///./src/app/organizations/manage/groups.component.html","webpack:///./src/app/organizations/manage/group-add-edit.component.ts","webpack:///./src/app/organizations/manage/group-add-edit.component.html","webpack:///./src/app/organizations/manage/manage.component.ts","webpack:///./src/app/organizations/manage/manage.component.html","webpack:///./src/app/organizations/manage/people.component.ts","webpack:///./src/app/organizations/manage/people.component.html","webpack:///./src/app/organizations/manage/user-add-edit.component.ts","webpack:///./src/app/organizations/manage/user-add-edit.component.html","webpack:///./src/app/organizations/manage/user-confirm.component.ts","webpack:///./src/app/organizations/manage/user-confirm.component.html","webpack:///./src/app/organizations/manage/user-groups.component.ts","webpack:///./src/app/organizations/manage/user-groups.component.html","webpack:///./src/app/organizations/manage/policies.component.ts","webpack:///./src/app/organizations/manage/policies.component.html","webpack:///./jslib/src/abstractions/index.ts","webpack:///./src/app/organizations/manage/policy-edit.component.ts","webpack:///./src/app/organizations/manage/policy-edit.component.html","webpack:///./src/app/organizations/settings/account.component.ts","webpack:///./src/app/organizations/settings/account.component.html","webpack:///./jslib/src/models/request/organizationTaxInfoUpdateRequest.ts","webpack:///./jslib/src/models/request/taxInfoUpdateRequest.ts","webpack:///./src/app/organizations/settings/delete-organization.component.ts","webpack:///./src/app/organizations/settings/delete-organization.component.html","webpack:///./src/app/organizations/settings/organization-billing.component.ts","webpack:///./src/services/webConstants.ts","webpack:///./src/app/organizations/settings/organization-subscription.component.ts","webpack:///./src/app/organizations/settings/organization-subscription.component.html","webpack:///./src/app/organizations/settings/change-plan.component.ts","webpack:///./src/app/organizations/settings/change-plan.component.html","webpack:///./src/app/organizations/settings/download-license.component.ts","webpack:///./src/app/organizations/settings/download-license.component.html","webpack:///./src/app/organizations/settings/adjust-seats.component.ts","webpack:///./src/app/organizations/settings/adjust-seats.component.html","webpack:///./src/app/organizations/settings/settings.component.ts","webpack:///./src/app/organizations/settings/settings.component.html","webpack:///./src/app/organizations/settings/two-factor-setup.component.ts","webpack:///./src/app/settings/two-factor-authenticator.component.ts","webpack:///./src/app/settings/two-factor-authenticator.component.html","webpack:///./src/app/settings/two-factor-email.component.ts","webpack:///./src/app/settings/two-factor-email.component.html","webpack:///./src/app/settings/two-factor-recovery.component.ts","webpack:///./src/app/settings/two-factor-recovery.component.html","webpack:///./src/app/settings/two-factor-webauthn.component.ts","webpack:///./src/app/settings/two-factor-webauthn.component.html","webpack:///./src/app/settings/two-factor-yubikey.component.ts","webpack:///./src/app/settings/two-factor-yubikey.component.html","webpack:///./src/app/organizations/tools/export.component.ts","webpack:///./src/app/organizations/tools/exposed-passwords-report.component.ts","webpack:///./jslib/src/models/data/passwordHistoryData.ts","webpack:///./jslib/src/models/view/attachmentView.ts","webpack:///./jslib/src/models/domain/password.ts","webpack:///./jslib/src/models/request/cipherCreateRequest.ts","webpack:///./jslib/src/models/api/cardApi.ts","webpack:///./jslib/src/models/api/fieldApi.ts","webpack:///./jslib/src/models/api/identityApi.ts","webpack:///./jslib/src/models/api/loginApi.ts","webpack:///./jslib/src/models/api/loginUriApi.ts","webpack:///./jslib/src/models/api/secureNoteApi.ts","webpack:///./jslib/src/angular/directives/fallback-src.directive.ts","webpack:///./src/app/organizations/tools/import.component.ts","webpack:///./src/app/organizations/tools/inactive-two-factor-report.component.ts","webpack:///./src/app/organizations/tools/reused-passwords-report.component.ts","webpack:///./src/app/organizations/tools/tools.component.ts","webpack:///./src/app/organizations/tools/tools.component.html","webpack:///./src/app/organizations/tools/unsecured-websites-report.component.ts","webpack:///./src/app/organizations/tools/weak-passwords-report.component.ts","webpack:///./src/app/organizations/vault/vault.component.ts","webpack:///./src/app/organizations/vault/vault.component.html","webpack:///./src/app/organizations/vault/attachments.component.ts","webpack:///./jslib/src/angular/components/attachments.component.ts","webpack:///./jslib/src/models/response/globalDomainResponse.ts","webpack:///./jslib/src/models/response/identityTokenResponse.ts","webpack:///./jslib/src/models/response/identityTwoFactorResponse.ts","webpack:///./jslib/src/models/response/listResponse.ts","webpack:///./jslib/src/models/response/profileOrganizationResponse.ts","webpack:///./jslib/src/models/response/syncResponse.ts","webpack:///./jslib/src/models/response/policyResponse.ts","webpack:///./src/app/organizations/vault/collections.component.ts","webpack:///./jslib/src/models/request/cipherCollectionsRequest.ts","webpack:///./src/app/vault/bulk-delete.component.ts","webpack:///./src/app/vault/bulk-delete.component.html","webpack:///./jslib/src/models/request/cipherBulkDeleteRequest.ts","webpack:///./src/app/vault/bulk-move.component.ts","webpack:///./src/app/vault/bulk-move.component.html","webpack:///./src/app/vault/bulk-restore.component.ts","webpack:///./src/app/vault/bulk-restore.component.html","webpack:///./src/app/vault/bulk-share.component.ts","webpack:///./src/app/vault/bulk-share.component.html","webpack:///./src/app/send/access.component.ts","webpack:///./src/app/send/access.component.html","webpack:///./src/app/send/send.component.ts","webpack:///./src/app/send/send.component.html","webpack:///./src/app/send/add-edit.component.ts","webpack:///./src/app/send/add-edit.component.html","webpack:///./jslib/src/models/view/sendView.ts","webpack:///./src/app/settings/account.component.ts","webpack:///./src/app/settings/account.component.html","webpack:///./src/app/settings/deauthorize-sessions.component.ts","webpack:///./src/app/settings/deauthorize-sessions.component.html","webpack:///./src/app/settings/delete-account.component.ts","webpack:///./src/app/settings/delete-account.component.html","webpack:///./src/app/settings/profile.component.ts","webpack:///./src/app/settings/profile.component.html","webpack:///./src/app/settings/change-email.component.ts","webpack:///./src/app/settings/change-email.component.html","webpack:///./jslib/src/models/request/emailTokenRequest.ts","webpack:///./src/app/settings/change-password.component.ts","webpack:///./src/app/settings/change-password.component.html","webpack:///./jslib/src/enums/emergencyAccessStatusType.ts","webpack:///./jslib/src/models/request/emergencyAccessUpdateRequest.ts","webpack:///./jslib/src/models/request/folderWithIdRequest.ts","webpack:///./jslib/src/models/request/organizationUserResetPasswordEnrollmentRequest.ts","webpack:///./jslib/src/models/request/passwordRequest.ts","webpack:///./jslib/src/models/request/updateKeyRequest.ts","webpack:///./src/app/settings/change-kdf.component.ts","webpack:///./src/app/settings/change-kdf.component.html","webpack:///./src/app/settings/create-organization.component.ts","webpack:///./src/app/settings/create-organization.component.html","webpack:///./src/app/settings/domain-rules.component.ts","webpack:///./src/app/settings/domain-rules.component.html","webpack:///./src/app/settings/options.component.ts","webpack:///./src/app/settings/options.component.html","webpack:///./src/app/settings/link-sso.component.ts","webpack:///./src/app/settings/link-sso.component.html","webpack:///./src/app/settings/premium.component.ts","webpack:///./src/app/settings/premium.component.html","webpack:///./src/app/settings/settings.component.ts","webpack:///./src/app/settings/settings.component.html","webpack:///./src/app/settings/user-subscription.component.ts","webpack:///./src/app/settings/user-subscription.component.html","webpack:///./src/app/tools/breach-report.component.ts","webpack:///./src/app/tools/breach-report.component.html","webpack:///./src/app/tools/password-generator.component.ts","webpack:///./src/app/tools/password-generator.component.html","webpack:///./src/app/tools/password-generator-history.component.ts","webpack:///./src/app/tools/password-generator-history.component.html","webpack:///./src/app/tools/tools.component.ts","webpack:///./src/app/tools/tools.component.html","webpack:///./src/app/vault/vault.component.ts","webpack:///./src/app/vault/vault.component.html","webpack:///./src/app/settings/update-key.component.ts","webpack:///./src/app/settings/update-key.component.html","webpack:///./src/app/vault/folder-add-edit.component.ts","webpack:///./src/app/vault/folder-add-edit.component.html","webpack:///./src/app/vault/share.component.ts","webpack:///./src/app/vault/share.component.html","webpack:///./src/app/vault/send-info.component.ts","webpack:///./src/app/vault/send-info.component.html","webpack:///./src/app/settings/verify-email.component.ts","webpack:///./src/app/settings/verify-email.component.html","webpack:///./src/app/services/organization-guard.service.ts","webpack:///./src/app/services/organization-type-guard.service.ts","webpack:///./jslib/src/enums/permissions.ts","webpack:///./jslib/src/angular/services/auth-guard.service.ts","webpack:///./jslib/src/angular/services/lock-guard.service.ts","webpack:///./jslib/src/angular/services/unauth-guard.service.ts","webpack:///./src/app/settings/emergency-access-view.component.ts","webpack:///./src/app/settings/emergency-access-view.component.html","webpack:///./jslib/src/models/domain/encryptedObject.ts","webpack:///./jslib/src/models/domain/environmentUrls.ts","webpack:///./jslib/src/models/domain/generatedPasswordHistory.ts","webpack:///./src/app/settings/emergency-access-attachments.component.ts","webpack:///./src/app/settings/emergency-add-edit.component.ts","webpack:///./src/app/settings/emergency-access.component.ts","webpack:///./src/app/settings/emergency-access.component.html","webpack:///./jslib/src/enums/emergencyAccessType.ts","webpack:///./jslib/src/models/response/emergencyAccessResponse.ts","webpack:///./src/app/settings/emergency-access-add-edit.component.ts","webpack:///./src/app/settings/emergency-access-add-edit.component.html","webpack:///./src/app/settings/emergency-access-confirm.component.ts","webpack:///./src/app/settings/emergency-access-confirm.component.html","webpack:///./src/app/settings/emergency-access-takeover.component.ts","webpack:///./src/app/settings/emergency-access-takeover.component.html","webpack:///./jslib/src/services/api.service.ts","webpack:///./jslib/src/models/response/organizationResponse.ts","webpack:///./jslib/src/models/response/planResponse.ts","webpack:///./jslib/src/models/response/subscriptionResponse.ts","webpack:///./jslib/src/models/response/twoFactorWebAuthnResponse.ts","webpack:///./jslib/src/services/appId.service.ts","webpack:///./jslib/src/services/audit.service.ts","webpack:///./jslib/src/services/cipher.service.ts","webpack:///./jslib/src/misc/sequentialize.ts","webpack:///./jslib/src/services/collection.service.ts","webpack:///./jslib/src/misc/serviceUtils.ts","webpack:///./jslib/src/services/container.service.ts","webpack:///./jslib/src/services/crypto.service.ts","webpack:///./jslib/src/misc/wordlist.ts","webpack:///./jslib/src/services/environment.service.ts","webpack:///./jslib/src/services/folder.service.ts","webpack:///./jslib/src/services/i18n.service.ts","webpack:///./jslib/src/services/passwordGeneration.service.ts","webpack:///./jslib/src/services/settings.service.ts","webpack:///./jslib/src/services/state.service.ts","webpack:///./jslib/src/services/sync.service.ts","webpack:///./jslib/src/models/data/sendData.ts","webpack:///./jslib/src/services/token.service.ts","webpack:///./jslib/src/services/totp.service.ts","webpack:///./jslib/src/services/user.service.ts","webpack:///./jslib/src/services/vaultTimeout.service.ts","webpack:///./jslib/src/services/consoleLog.service.ts","webpack:///./jslib/src/enums/logLevelType.ts","webpack:///./jslib/src/models/export/cipherWithIds.ts","webpack:///./jslib/src/models/export/collectionWithId.ts","webpack:///./jslib/src/models/export/folderWithId.ts","webpack:///./jslib/src/importers/onepasswordImporters/onepasswordCsvImporter.ts","webpack:///./jslib/src/models/view/index.ts","webpack:///./jslib/src/enums/notificationType.ts","webpack:///./src/app/main.ts","webpack:///./src/app/app.module.ts","webpack:///./src/app/app-routing.module.ts","webpack:///./jslib/src/services/broadcaster.service.ts","webpack:///./jslib/src/misc/tldjs.noop.ts","webpack:///./jslib/src/models/request/emergencyAccessAcceptRequest.ts","webpack:///./jslib/src/models/request/organizationUserAcceptRequest.ts","webpack:///./jslib/src/angular/components/hint.component.ts","webpack:///./jslib/src/models/request/passwordHintRequest.ts","webpack:///./jslib/src/angular/components/lock.component.ts","webpack:///./jslib/src/angular/components/login.component.ts","webpack:///./jslib/src/models/request/deleteRecoverRequest.ts","webpack:///./jslib/src/models/request/twoFactorRecoveryRequest.ts","webpack:///./jslib/src/angular/components/register.component.ts","webpack:///./jslib/src/models/request/registerRequest.ts","webpack:///./jslib/src/models/request/referenceEventRequest.ts","webpack:///./jslib/src/angular/components/set-password.component.ts","webpack:///./jslib/src/models/request/setPasswordRequest.ts","webpack:///./jslib/src/angular/components/two-factor-options.component.ts","webpack:///./jslib/src/angular/components/modal.component.ts","webpack:///./jslib/src/angular/components/two-factor.component.ts","webpack:///./jslib/src/models/request/deviceRequest.ts","webpack:///./jslib/src/models/request/preloginRequest.ts","webpack:///./jslib/src/models/request/tokenRequest.ts","webpack:///./jslib/src/misc/webauthn.ts","webpack:///./jslib/src/models/request/verifyEmailRequest.ts","webpack:///./jslib/src/models/request/verifyDeleteRecoverRequest.ts","webpack:///./jslib/src/models/request/groupRequest.ts","webpack:///./jslib/src/models/request/organizationUserConfirmRequest.ts","webpack:///./jslib/src/models/request/organizationUserInviteRequest.ts","webpack:///./jslib/src/models/request/organizationUserUpdateRequest.ts","webpack:///./jslib/src/models/request/organizationUserUpdateGroupsRequest.ts","webpack:///./jslib/src/abstractions/appId.service.ts","webpack:///./jslib/src/abstractions/log.service.ts","webpack:///./jslib/src/models/request/policyRequest.ts","webpack:///./jslib/src/models/request/organizationUpdateRequest.ts","webpack:///./jslib/src/enums/transactionType.ts","webpack:///./jslib/src/models/request/verifyBankRequest.ts","webpack:///./jslib/src/models/request/bitPayInvoiceRequest.ts","webpack:///./jslib/src/models/request/paymentRequest.ts","webpack:///./jslib/src/models/request/organizationCreateRequest.ts","webpack:///./jslib/src/models/request/organizationUpgradeRequest.ts","webpack:///./jslib/src/models/request/seatRequest.ts","webpack:///./jslib/src/models/request/storageRequest.ts","webpack:///./jslib/src/models/request/updateTwoFactorDuoRequest.ts","webpack:///./jslib/src/models/request/twoFactorProviderRequest.ts","webpack:///./jslib/src/models/request/updateTwoFactorAuthenticatorRequest.ts","webpack:///./jslib/src/models/request/updateTwoFactorEmailRequest.ts","webpack:///./jslib/src/models/request/updateTwoFactorWebAuthnDeleteRequest.ts","webpack:///./jslib/src/models/request/updateTwoFactorWebAuthnRequest.ts","webpack:///./jslib/src/models/request/updateTwoFactorYubioOtpRequest.ts","webpack:///./jslib/src/angular/components/export.component.ts","webpack:///./jslib/src/models/request/attachmentRequest.ts","webpack:///./jslib/src/angular/components/add-edit.component.ts","webpack:///./jslib/src/models/response/index.ts","webpack:///./jslib/src/models/response/passwordHistoryResponse.ts","webpack:///./jslib/src/models/response/deviceResponse.ts","webpack:///./jslib/src/models/response/keysResponse.ts","webpack:///./jslib/src/angular/components/ciphers.component.ts","webpack:///./jslib/src/angular/components/collections.component.ts","webpack:///./jslib/src/angular/components/groupings.component.ts","webpack:///./jslib/src/models/domain/sendAccess.ts","webpack:///./jslib/src/models/view/sendAccessView.ts","webpack:///./jslib/src/models/request/sendAccessRequest.ts","webpack:///./jslib/src/angular/components/send/send.component.ts","webpack:///./jslib/src/angular/components/send/add-edit.component.ts","webpack:///./jslib/src/models/request/updateProfileRequest.ts","webpack:///./jslib/src/models/request/emailRequest.ts","webpack:///./jslib/src/models/request/kdfRequest.ts","webpack:///./jslib/src/models/request/updateDomainsRequest.ts","webpack:///./jslib/src/angular/components/password-generator.component.ts","webpack:///./jslib/src/angular/components/password-generator-history.component.ts","webpack:///./jslib/src/angular/components/folder-add-edit.component.ts","webpack:///./jslib/src/angular/components/share.component.ts","webpack:///./jslib/src/models/data/index.ts","webpack:///./jslib/src/models/domain/index.ts","webpack:///./jslib/src/models/request/emergencyAccessConfirmRequest.ts","webpack:///./jslib/src/models/request/emergencyAccessInviteRequest.ts","webpack:///./jslib/src/models/request/emergencyAccessPasswordRequest.ts","webpack:///./src/app/services/services.module.ts","webpack:///./src/services/broadcasterMessaging.service.ts","webpack:///./src/services/htmlStorage.service.ts","webpack:///./jslib/src/services/index.ts","webpack:///./jslib/src/models/response/apiKeyResponse.ts","webpack:///./jslib/src/models/response/attachmentUploadDataResponse.ts","webpack:///./jslib/src/models/response/billingResponse.ts","webpack:///./jslib/src/models/response/breachAccountResponse.ts","webpack:///./jslib/src/models/response/eventResponse.ts","webpack:///./jslib/src/models/response/groupResponse.ts","webpack:///./jslib/src/models/response/organizationSubscriptionResponse.ts","webpack:///./jslib/src/models/response/organizationUserResponse.ts","webpack:///./jslib/src/models/response/paymentResponse.ts","webpack:///./jslib/src/models/response/preloginResponse.ts","webpack:///./jslib/src/models/response/sendAccessResponse.ts","webpack:///./jslib/src/models/response/sendFileDownloadDataResponse.ts","webpack:///./jslib/src/models/response/sendFileUploadDataResponse.ts","webpack:///./jslib/src/models/response/taxInfoResponse.ts","webpack:///./jslib/src/models/response/taxRateResponse.ts","webpack:///./jslib/src/models/response/twoFactorAuthenticatorResponse.ts","webpack:///./jslib/src/models/response/twoFactorDuoResponse.ts","webpack:///./jslib/src/models/response/twoFactorEmailResponse.ts","webpack:///./jslib/src/models/response/twoFactorProviderResponse.ts","webpack:///./jslib/src/models/response/twoFactorRescoverResponse.ts","webpack:///./jslib/src/models/response/twoFactorYubiKeyResponse.ts","webpack:///./jslib/src/models/response/userKeyResponse.ts","webpack:///./jslib/src/misc/throttle.ts","webpack:///./jslib/src/models/request/cipherBulkMoveRequest.ts","webpack:///./jslib/src/models/request/cipherBulkRestoreRequest.ts","webpack:///./jslib/src/models/request/cipherBulkShareRequest.ts","webpack:///./jslib/src/models/request/cipherShareRequest.ts","webpack:///./jslib/src/models/domain/sortedCiphersCache.ts","webpack:///./jslib/src/models/domain/treeNode.ts","webpack:///./jslib/src/models/domain/encArrayBuffer.ts","webpack:///./jslib/src/models/domain/passwordGeneratorPolicyOptions.ts","webpack:///./jslib/src/models/data/organizationData.ts","webpack:///./jslib/src/models/data/sendFileData.ts","webpack:///./jslib/src/models/data/sendTextData.ts","webpack:///./src/services/i18n.service.ts","webpack:///./src/services/memoryStorage.service.ts","webpack:///./src/services/webPlatformUtils.service.ts","webpack:///./jslib/src/services/event.service.ts","webpack:///./jslib/src/models/data/eventData.ts","webpack:///./jslib/src/models/request/eventRequest.ts","webpack:///./jslib/src/services/export.service.ts","webpack:///./jslib/src/models/export/cipher.ts","webpack:///./jslib/src/models/export/card.ts","webpack:///./jslib/src/models/export/field.ts","webpack:///./jslib/src/models/export/identity.ts","webpack:///./jslib/src/models/export/login.ts","webpack:///./jslib/src/models/export/loginUri.ts","webpack:///./jslib/src/models/export/secureNote.ts","webpack:///./jslib/src/models/export/collection.ts","webpack:///./jslib/src/models/export/folder.ts","webpack:///./jslib/src/services/fileUpload.service.ts","webpack:///./jslib/src/enums/fileUploadType.ts","webpack:///./jslib/src/services/azureFileUpload.service.ts","webpack:///./jslib/src/services/bitwardenFileUpload.service.ts","webpack:///./jslib/src/services/import.service.ts","webpack:///./jslib/src/models/request/importCiphersRequest.ts","webpack:///./jslib/src/models/request/importOrganizationCiphersRequest.ts","webpack:///./jslib/src/models/request/kvpRequest.ts","webpack:///./jslib/src/importers/ascendoCsvImporter.ts","webpack:///./jslib/src/importers/avastCsvImporter.ts","webpack:///./jslib/src/importers/avastJsonImporter.ts","webpack:///./jslib/src/importers/aviraCsvImporter.ts","webpack:///./jslib/src/importers/bitwardenCsvImporter.ts","webpack:///./jslib/src/importers/bitwardenJsonImporter.ts","webpack:///./jslib/src/importers/blackBerryCsvImporter.ts","webpack:///./jslib/src/importers/blurCsvImporter.ts","webpack:///./jslib/src/importers/buttercupCsvImporter.ts","webpack:///./jslib/src/importers/chromeCsvImporter.ts","webpack:///./jslib/src/importers/clipperzHtmlImporter.ts","webpack:///./jslib/src/importers/codebookCsvImporter.ts","webpack:///./jslib/src/importers/dashlaneJsonImporter.ts","webpack:///./jslib/src/importers/encryptrCsvImporter.ts","webpack:///./jslib/src/importers/enpassCsvImporter.ts","webpack:///./jslib/src/importers/enpassJsonImporter.ts","webpack:///./jslib/src/importers/firefoxCsvImporter.ts","webpack:///./jslib/src/importers/fsecureFskImporter.ts","webpack:///./jslib/src/importers/gnomeJsonImporter.ts","webpack:///./jslib/src/importers/kasperskyTxtImporter.ts","webpack:///./jslib/src/importers/keepass2XmlImporter.ts","webpack:///./jslib/src/importers/keepassxCsvImporter.ts","webpack:///./jslib/src/importers/keeperCsvImporter.ts","webpack:///./jslib/src/importers/lastpassCsvImporter.ts","webpack:///./jslib/src/importers/logMeOnceCsvImporter.ts","webpack:///./jslib/src/importers/meldiumCsvImporter.ts","webpack:///./jslib/src/importers/msecureCsvImporter.ts","webpack:///./jslib/src/importers/mykiCsvImporter.ts","webpack:///./jslib/src/importers/onepasswordImporters/onepassword1PifImporter.ts","webpack:///./jslib/src/importers/onepasswordImporters/onepasswordMacCsvImporter.ts","webpack:///./jslib/src/importers/onepasswordImporters/cipherImportContext.ts","webpack:///./jslib/src/models/view/view.ts","webpack:///./jslib/src/importers/onepasswordImporters/onepasswordWinCsvImporter.ts","webpack:///./jslib/src/importers/padlockCsvImporter.ts","webpack:///./jslib/src/importers/passkeepCsvImporter.ts","webpack:///./jslib/src/importers/passmanJsonImporter.ts","webpack:///./jslib/src/importers/passpackCsvImporter.ts","webpack:///./jslib/src/importers/passwordAgentCsvImporter.ts","webpack:///./jslib/src/importers/passwordBossJsonImporter.ts","webpack:///./jslib/src/importers/passwordDragonXmlImporter.ts","webpack:///./jslib/src/importers/passwordSafeXmlImporter.ts","webpack:///./jslib/src/importers/passwordWalletTxtImporter.ts","webpack:///./jslib/src/importers/rememBearCsvImporter.ts","webpack:///./jslib/src/importers/roboformCsvImporter.ts","webpack:///./jslib/src/importers/safeInCloudXmlImporter.ts","webpack:///./jslib/src/enums/index.ts","webpack:///./jslib/src/importers/saferpassCsvImport.ts","webpack:///./jslib/src/importers/secureSafeCsvImporter.ts","webpack:///./jslib/src/importers/splashIdCsvImporter.ts","webpack:///./jslib/src/importers/stickyPasswordXmlImporter.ts","webpack:///./jslib/src/importers/truekeyCsvImporter.ts","webpack:///./jslib/src/importers/upmCsvImporter.ts","webpack:///./jslib/src/importers/yotiCsvImporter.ts","webpack:///./jslib/src/importers/zohoVaultCsvImporter.ts","webpack:///./jslib/src/services/notifications.service.ts","webpack:///./jslib/src/models/response/notificationResponse.ts","webpack:///./jslib/src/services/policy.service.ts","webpack:///./jslib/src/models/domain/masterPasswordPolicyOptions.ts","webpack:///./jslib/src/services/search.service.ts","webpack:///./jslib/src/services/send.service.ts","webpack:///./jslib/src/models/request/sendRequest.ts","webpack:///./jslib/src/models/domain/send.ts","webpack:///./jslib/src/services/webCryptoFunction.service.ts","webpack:///./jslib/src/models/domain/decryptParameters.ts","webpack:///./jslib/src/abstractions/fileUpload.service.ts","webpack:///./src/app/app.component.ts","webpack:///./src/app/app.component.html","webpack:///./jslib/src/angular/directives/blur-click.directive.ts","webpack:///./jslib/src/angular/directives/box-row.directive.ts","webpack:///./jslib/src/angular/pipes/search-ciphers.pipe.ts"],"names":["i","chunkIds","length","deferredModules","j","deferredModule","enumerable","get","getter","value","key","bind","module","Object","prototype","hasOwnProperty","call","object","property","jsonpArray","webpackJsonpCallback","I18nService","PlatformUtilsService","ApiService","UserService","i18nService","transform","id","p1","p2","p3","this","t","I18nPipe","MessagingService","el","validationService","ngOnChanges","changes","appApiAction","then","nativeElement","loading","response","e","showError","ApiActionDirective","renderer","title","ngOnInit","hasAttribute","setAttribute","A11yTitleDirective","CryptoService","CipherService","getResponseProperty","propertyName","exactName","Error","undefined","otherCasePropertyName","charAt","toUpperCase","toLowerCase","slice","BaseResponse","type","calloutStyle","icon","CalloutComponent","organizationId","logService","ConsoleLogService","newLineRegex","passwordFieldNames","usernameFieldNames","notesFieldNames","uriFieldNames","parseCsvOptions","encoding","skipEmptyLines","parseXml","data","doc","DOMParser","parseFromString","querySelector","parseCsv","header","options","parseOptions","assign","splitNewLine","join","trim","result","papa","parse","errors","forEach","row","warning","message","parseSingleRowCsv","rowData","isNullOrWhitespace","parsedRow","makeUriArray","uri","loginUri","LoginUriView","fixUri","match","u","push","indexOf","substring","nameFromUrl","url","hostname","Utils","getHostname","startsWith","replace","str","getValueOrDefault","defaultValue","split","getCardBrand","cardNum","re","RegExp","test","setCardExpiration","cipher","expiration","parts","month","year","substr","card","expMonth","expYear","moveFoldersToCollections","folderRelationships","r","collectionRelationships","collections","folders","map","f","collection","CollectionView","name","querySelectorDirectChild","parentEl","query","els","querySelectorAllDirectChild","Array","from","querySelectorAll","filter","parentNode","initLoginCipher","CipherView","favorite","notes","fields","login","LoginView","CipherType","Login","cleanupCipher","processKvp","FieldType","Text","search","field","FieldView","processFolder","folderName","folderIndex","hasFolder","addFolder","FolderView","ciphers","convertToNoteIfNeeded","username","password","uris","SecureNote","secureNote","SecureNoteView","SecureNoteType","Generic","BaseImporter","success","ImportResult","nodeURL","window","init","inited","isNode","process","release","isBrowser","isNativeScript","isMobileBrowser","isMobile","isAppleMobileBrowser","isAppleMobile","global","fromB64ToArray","Uint8Array","Buffer","binaryString","atob","bytes","charCodeAt","fromUrlB64ToArray","fromUrlB64ToB64","fromHexToArray","parseInt","fromUtf8ToArray","strUtf8","unescape","encodeURIComponent","arr","fromByteStringToArray","fromBufferToB64","buffer","toString","binary","byteLength","String","fromCharCode","btoa","fromBufferToUrlB64","fromB64toUrlB64","b64Str","fromBufferToUtf8","encodedString","apply","decodeURIComponent","escape","fromBufferToByteString","fromBufferToHex","x","urlB64Str","output","fromUrlB64ToUtf8","fromB64ToUtf8","fromUtf8ToB64","utfStr","newGuid","c","Math","random","isGuid","uriString","getUrl","getHost","host","getDomain","httpUrl","tldEndingRegex","getUrlObject","validIpAddress","urlDomain","tldjs","domain","getQueryParams","Map","pair","set","getSortFunction","prop","a","b","collator","compare","localeCompare","nameOf","target","source","ipString","win","mobile","navigator","userAgent","vendor","opera","URL","hasProtocol","anchor","document","createElement","href","PasswordGenerationService","onClick","$event","preventDefault","StopClickDirective","StateService","CollectionService","StorageService","PolicyService","condition","disableComplete","InputVerbatimDirective","FolderService","stopPropagation","StopPropDirective","AuthService","SyncService","EnvironmentService","autofocus","focus","AutofocusDirective","environmentUrlsKey","ConstantsService","disableGaKey","disableAddLoginNotificationKey","disableContextMenuItemKey","disableFaviconKey","disableBadgeCounterKey","disableAutoTotpCopyKey","enableAutoFillOnPageLoadKey","vaultTimeoutKey","vaultTimeoutActionKey","lastActiveKey","neverDomainsKey","installedVersionKey","localeKey","themeKey","collapsedGroupingsKey","autoConfirmFingerprints","dontShowCardsCurrentTab","dontShowIdentitiesCurrentTab","defaultUriMatch","pinProtectedKey","protectedPin","clearClipboardKey","eventCollectionKey","ssoCodeVerifierKey","ssoStateKey","biometricUnlockKey","biometricText","biometricAwaitingAcceptance","biometricFingerprintValidated","disableChangedPasswordNotificationKey","EventService","PasswordVerificationRequest","indexedEntityId","SearchService","buildDomainModel","dataObj","alreadyEncrypted","notEncList","objProp","EncString","buildDataModel","notEncStringList","encryptedString","decryptObj","viewModel","orgId","promises","self","theProp","p","Promise","resolve","mapProp","decrypt","val","all","componentFactoryResolver","messagingService","ngOnDestroy","show","parentContainer","fade","setComponentParameters","factory","resolveComponentFactory","componentRef","container","createComponent","instance","modals","jq","modal","on","onShow","emit","send","onShown","find","onClose","onClosed","clear","close","ModalComponent","AuditService","cardholderName","code","_brand","_number","_subTitle","repeat","brand","number","count","exp","formatYear","CardView","VaultTimeoutService","n","TokenService","CryptoFunctionService","encryptedStringOrType","iv","mac","encType","encryptionType","headerPieces","encPieces","EncryptionType","AesCbc128_HmacSha256_B64","AesCbc256_B64","AesCbc256_HmacSha256_B64","Rsa2048_OaepSha256_B64","Rsa2048_OaepSha1_B64","decryptedValue","containerService","bitwardenContainerService","cryptoService","getCryptoService","getOrgKey","decryptToUtf8","IconMap","environmentService","stateService","iconsUrl","baseUrl","imageEnabled","load","setLoginIcon","Card","Identity","hostnameUri","isWebsite","image","fallbackImage","IconComponent","BroadcasterService","TwoFactorProviderType","TotpService","StripeElementStyle","base","color","fontFamily","fontSize","fontSmoothing","invalid","StripeElementClasses","empty","platformUtilsService","apiService","showMethods","showOptions","method","PaymentMethodType","hideBank","hidePaypal","hideCredit","bank","routing_number","account_number","account_holder_name","account_holder_type","currency","country","paymentMethodType","btInstance","stripe","stripeElements","stripeCardNumberElement","stripeCardExpiryElement","stripeCardCvcElement","stripeScript","src","async","onload","Stripe","isDev","WebConstants","stripeTestKey","stripeLiveKey","elements","setStripeElement","btScript","PayPal","BankAccount","Credit","head","appendChild","removeChild","setTimeout","body","btStylesheet","changeMethod","braintree","dropin","create","authorization","btSandboxKey","btProductionKey","paymentOptionPriority","paypal","flow","buttonStyle","label","size","shape","createErr","console","error","createPaymentToken","reject","requestPaymentMethod","payload","nonce","catch","err","postSetupPayment","clientSecret","handleCardSetup","setupIntent","status","payment_method","createToken","token","handleStripeCardPayment","successCallback","paymentIntent","style","classes","placeholder","mount","PaymentComponent","revisionDate","sanitizer","cryptoFunctionService","charCount","textColor","fontWeight","dynamic","circle","generate","email","hash","hashBytes","chars","upperData","getFirstLetters","charObj","getCharText","stringToColor","svg","getSvg","html","outerHTML","svgHtml","text","svgTag","backgroundColor","width","height","character","textTag","textContent","AvatarComponent","obj","externalId","readOnly","hidePasswords","Collection","PolicyType","route","onCountryChanged","EventEmitter","taxInfo","taxId","line1","line2","city","state","postalCode","includeTaxId","pristine","parent","params","subscribe","getOrganizationTaxInfo","getTaxInfo","getTaxRates","taxRates","localTaxRate","rate","getTaxInfoRequest","request","OrganizationTaxInfoUpdateRequest","TaxInfoUpdateRequest","submitTaxInfo","hasChanged","putOrganizationTaxInfo","putTaxInfo","changeCountry","TaxInfoComponent","folderId","organizationUseTotp","edit","viewPassword","identity","IdentityView","attachments","passwordHistory","collectionIds","deletedDate","localData","subTitle","hasAttachments","passwordRevisionDate","middleName","address1","address2","address3","company","phone","ssn","passportNumber","licenseNumber","_firstName","_lastName","firstName","lastName","address","addressPart2","CollectionData","OrganizationUserStatusType","userId","LoginData","SecureNoteData","CardData","IdentityData","FieldData","AttachmentData","ph","PasswordHistoryData","CipherData","l","totp","hasUris","some","canLaunch","launchUri","SendType","toasterService","onAuthed","submit","masterPassword","popAsync","hashPassword","masterPasswordHash","formPromise","getTwoFactorRecover","Duo","OrganizationDuo","getTwoFactorOrganizationDuo","getTwoFactorDuo","Email","getTwoFactorEmail","WebAuthn","getTwoFactorWebAuthn","Authenticator","getTwoFactorAuthenticator","Yubikey","getTwoFactorYubiKey","TwoFactorVerifyComponent","ExportService","Date","Attachment","Field","Password","encKey","model","reduce","promise","attachment","decAttachment","decField","decPh","toCipherData","toISOString","toLoginData","toSecureNoteData","toCardData","toIdentityData","toFieldData","toAttachmentData","toPasswordHistoryData","Cipher","SendService","newField","showValue","lastKnownRevisionDate","LoginApi","LoginUriApi","SecureNoteApi","CardApi","IdentityApi","FieldApi","lastUsedDate","attachments2","fileName","attachmentRequest","AttachmentRequest","CipherRequest","identityResponse","errorModel","responseErrorModel","validationErrors","statusCode","getSingleMessage","getAllMessages","messages","item","prefix","lastSep","lastIndexOf","ErrorResponse","defaultErrorMessage","concat","showToast","timeout","ValidationService","router","activatedRoute","titleService","previousUrl","currentUrl","events","event","NavigationEnd","titleId","rawTitle","child","firstChild","snapshot","newTitle","setTitle","getPreviousUrl","setPreviousUrl","RouterService","KdfType","showText","scoreWidth","score","PasswordStrengthComponent","OrganizationUserType","items","searchText","prop1","prop2","prop3","SearchPipe","getDefaultDateFilters","d","end","getFullYear","getMonth","getDate","setDate","start","toDateTimeLocalString","formatDateFilters","filterStart","filterEnd","isNaN","getTime","getEventInfo","ev","EventOptions","appInfo","getAppInfo","deviceType","getEventMessage","appIcon","appName","msg","EventType","User_LoggedIn","User_ChangedPassword","User_Updated2fa","User_Disabled2fa","User_Recovered2fa","User_FailedLogIn","User_FailedLogIn2fa","User_ClientExportedVault","Cipher_Created","formatCipherId","Cipher_Updated","Cipher_Deleted","Cipher_SoftDeleted","Cipher_Restored","Cipher_AttachmentCreated","Cipher_AttachmentDeleted","Cipher_Shared","Cipher_ClientViewed","Cipher_ClientToggledPasswordVisible","Cipher_ClientToggledHiddenFieldVisible","Cipher_ClientToggledCardCodeVisible","Cipher_ClientCopiedHiddenField","Cipher_ClientCopiedPassword","Cipher_ClientCopiedCardCode","Cipher_ClientAutofilled","Cipher_UpdatedCollections","Collection_Created","formatCollectionId","Collection_Updated","Collection_Deleted","Group_Created","formatGroupId","Group_Updated","Group_Deleted","OrganizationUser_Invited","formatOrgUserId","OrganizationUser_Confirmed","OrganizationUser_Updated","OrganizationUser_Removed","OrganizationUser_UpdatedGroups","OrganizationUser_UnlinkedSso","OrganizationUser_ResetPassword_Enroll","OrganizationUser_ResetPassword_Withdraw","Organization_Updated","Organization_PurgedVault","Policy_Updated","formatPolicyId","DeviceType","Android","iOS","UWP","ChromeExtension","FirefoxExtension","OperaExtension","EdgeExtension","VivaldiExtension","SafariExtension","WindowsDesktop","MacOsDesktop","LinuxDesktop","ChromeBrowser","FirefoxBrowser","OperaBrowser","SafariBrowser","VivaldiBrowser","EdgeBrowser","IEBrowser","UnknownBrowser","shortId","getShortId","cipherId","cipherInfo","makeAnchor","groupId","collectionId","organizationUserId","policyId","innerHTML","date","pad","getHours","getMinutes","num","norm","floor","abs","EventInfo","onUpdated","twoFactorProviderType","enabled","authed","auth","authResponse","enable","enableFunction","disable","showDialog","TwoFactorProviderRequest","putTwoFactorOrganizationDisable","putTwoFactorDisable","TwoFactorBaseComponent","userService","requiresPaid","hasLoaded","setCiphers","selectCipher","childComponent","cipherAddEditModalRef","organization","AddEditComponent","onSavedCipher","onDeletedCipher","onRestoredCipher","checkAccess","useTotp","canAccessPremium","accessPremium","CipherReportComponent","ViewContainerRef","CanLaunchWhitelist","_uri","_domain","_hostname","_host","_canLaunch","UriMatchType","RegularExpression","cipherService","folderService","auditService","collectionService","totpService","passwordGenerationService","eventService","policyService","showRevisionDate","hasPasswordHistory","viewingPasswordHistory","viewOnly","passwordRevisionDisplayDate","cleanUp","totpUpdateCode","getTimeInterval","totpTick","totpInterval","setInterval","toggleFavorite","launch","copy","typeI18nKey","aType","copyToClipboard","editMode","collect","generatePassword","confirmed","getOptions","premiumRequired","upgradeOrganization","viewHistory","clearInterval","getCode","totpCode","half","totpCodeFormatted","allowOwnershipAssignment","cloneMode","ownershipOptions","allowPersonal","intervalSeconds","epoch","round","mod","totpSec","totpDash","totpLow","ImportService","AttachmentResponse","h","PasswordHistoryResponse","CipherResponse","searchService","showAddNew","onAttachmentsClicked","onShareClicked","onCollectionsClicked","onCloneClicked","cipherType","userHasPremiumAccess","pageSize","selectAll","share","clone","delete","actionPromise","permanent","isDeleted","deleteCipher","refresh","restore","restoreWithServer","displayTotpCopyButton","select","selectCount","checkCipher","checked","getSelected","getSelectedIds","hasTotp","deleteWithServer","softDeleteWithServer","showFixOldAttachments","hasOldAttachments","CiphersComponent","TwoFactorProviders","description","priority","sort","premium","tokenService","appIdService","vaultTimeoutService","setCryptoKeys","selectedTwoFactorProviderType","logIn","makePreloginKey","hashedPassword","logInHelper","logInSso","codeVerifier","redirectUrl","logInApiKey","clientId","logInTwoFactor","twoFactorProvider","twoFactorToken","remember","ssoRedirectUrl","logInComplete","logInSsoComplete","logInApiKeyComplete","logOut","callback","getSupportedTwoFactorProviders","providers","twoFactorProvidersData","has","supportsDuo","supportsWebAuthn","getDefaultTwoFactorProvider","webAuthnSupported","providerType","providerPriority","provider","kdf","kdfIterations","postPrelogin","PreloginRequest","preloginResponse","makeKey","authingWithApiKey","authingWithSso","authingWithPassword","getTwoFactorToken","storedTwoFactorToken","getAppId","appId","deviceRequest","DeviceRequest","emailPassword","codeCodeVerifier","clientIdClientSecret","TokenRequest","Remember","postIdentityToken","clearState","AuthResult","twoFactor","accessToken","twoFactorResponse","twoFactorProviders2","twoFactorProviders","tokenResponse","resetMasterPassword","setTwoFactorToken","setTokens","refreshToken","setInformation","getUserId","getEmail","setKey","setKeyHash","setEncKey","privateKey","makeKeyPair","keyPair","postAccountKeys","KeysRequest","setEncPrivateKey","biometricLocked","SelectionReadOnlyRequest","SettingsService","PlanType","syncService","showFree","showCancel","product","ProductType","Free","plan","onSuccess","onCanceled","selfHosted","ownedBusiness","premiumAccessAddon","additionalStorage","additionalSeats","productTypes","singleOrgPolicyBlock","freeTrial","isSelfHost","getPlans","plans","Enterprise","Teams","selectedPlan","isAnnual","validPlans","Custom","canBeUsedByBusiness","legacyYear","disabled","additionalStoragePriceMonthly","additionalStoragePricePerGb","seatPriceMonthly","seatPrice","additionalStorageTotal","hasAdditionalStorageOption","seatTotal","hasAdditionalSeatsOption","subTotal","basePrice","hasPremiumAccessOption","premiumAccessOptionPrice","taxComponent","taxRate","subtotal","taxCharges","changedProduct","selectablePlans","baseSeats","trialPeriodDays","changedOwnedBusiness","TeamsAnnually","changedCountry","paymentComponent","cancel","getAll","SingleOrg","policies","getAllOrganizations","orgs","org","Owner","Admin","Invited","includes","files","createOrganization","fileEl","getElementById","doSubmit","tokenResult","makeShareKey","shareKey","encrypt","collectionCt","fd","FormData","append","postOrganizationLicense","OrganizationCreateRequest","collectionName","billingEmail","planType","paymentToken","businessName","additionalStorageGb","billingAddressPostalCode","billingAddressCountry","taxIdNumber","billingAddressLine1","billingAddressLine2","billingAddressCity","billingAddressState","postOrganization","OrganizationUpgradeRequest","postOrganizationUpgrade","paymentIntentClientSecret","refreshIdentityToken","fullSync","navigate","OrganizationPlansComponent","macKey","keyB64","encKeyB64","macKeyB64","SymmetricCryptoKey","LoginUri","view","toLoginUriData","LoginUriData","elementRef","trueValue","falseValue","propagateChange","_","onHostChange","writeValue","setProperty","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","TrueFalseValueDirective","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","SelectionReadOnlyResponse","organizations","emailVerified","masterPasswordHint","culture","twoFactorEnabled","securityStamp","o","ProfileOrganizationResponse","ProfileResponse","storageService","onSearchTextChanged","searchPlaceholder","searchTextChanged","GroupingsComponent","selectType","usePolicies","useGroups","useDirectory","useEvents","use2fa","useApi","useBusinessPortal","useSso","selfHost","usersGetPremium","seats","maxCollections","maxStorageGb","ssoBound","identifier","permissions","resetPasswordKey","Confirmed","Manager","isAdmin","accessBusinessPortal","accessEventLogs","accessImportExport","accessReports","manageAllCollections","isManager","manageAssignedCollections","manageGroups","manageSso","managePolicies","manageUsers","Organization","sizeName","SendFileView","hidden","SendTextView","vault","loaded","resetPasswordFeatureFlag","unlinkSso","deleteSsoUser","leave","postLeaveOrganization","toggleResetPasswordEnrollment","keyString","toastStringRef","isResetPasswordEnrolled","getEncKey","orgSymKey","encryptedKey","OrganizationUserResetPasswordEnrollmentRequest","putOrganizationUserResetPasswordEnrollment","OrganizationsComponent","getName","lock","NavbarComponent","getApplicationVersion","version","FooterComponent","publicKey","encryptedPrivateKey","Policy","PolicyData","getMasterPasswordPolicyOptions","enforcedPolicyOptions","getPasswordScoreAlertDisplay","minComplexity","strongPassword","setupSubmitActions","getKdf","getKdfIterations","makeEncKey","remakeEncKey","performSubmitActions","masterPasswordRetype","strengthResult","passwordStrength","getPasswordStrengthUserInput","evaluateMasterPassword","updatePasswordStrength","masterPasswordStrengthTimeout","clearTimeout","masterPasswordScore","userInput","atPosition","ChangePasswordComponent","onEditedUsers","organizationUserType","organizationUserStatusType","showSelected","selectedCount","allUsers","loadUsers","getOrganizationUsers","users","entity","getGroupUsers","entityId","s","user","getCollectionUsers","accessAll","check","selectedChanged","filterSelected","selections","putGroupUsers","putCollectionUsers","EntityUsersComponent","showUser","orgUsersUserIdMap","orgUsersIdMap","defaultDates","loadEvents","clearExisting","refreshPromise","morePromise","dates","getEventsOrganizationUser","continuationToken","getEventsCipher","actingUserId","eventInfo","userName","userEmail","ip","ipAddress","EntityEventsComponent","manageCiphers","manageResetPassword","PermissionsApi","postKey","apiKey","keyType","ApiKeyComponent","postPurgeCiphers","PurgeVaultComponent","firstLoaded","showAdjustPayment","showAddCredit","transactionType","TransactionType","getOrganizationBilling","billing","getUserBilling","verifyBank","VerifyBankRequest","amount1","verifyAmount1","amount2","verifyAmount2","verifyBankPromise","postOrganizationVerifyBank","addCredit","paymentSourceInApp","closeAddCredit","changePayment","closePayment","balance","paymentSource","AppleInApp","GoogleInApp","invoices","transactions","UserBillingComponent","onAdded","ppButtonFormAction","buttonActionProduction","ppButtonBusinessId","businessIdProduction","ppLoading","buttonActionSandbox","businessIdSandbox","creditAmount","ppButtonCustomField","getOrganization","subject","returnUrl","location","ppButtonFormRef","BitPay","req","BitPayInvoiceRequest","credit","amount","creditAmountNumber","postBitPayInvoice","bitPayUrl","formatAmount","floatAmount","parseFloat","toFixed","AddCreditComponent","ElementRef","onAdjusted","PaymentRequest","taxInfoComponent","postAccountPayment","postOrganizationPayment","AdjustPaymentComponent","updatePromise","postAccountLicense","postOrganizationLicenseUpdate","UpdateLicenseComponent","storageGbPrice","add","interval","storageAdjustment","StorageRequest","storageGbAdjustment","action","postAccountStorage","postOrganizationStorage","relativeTo","AdjustStorageComponent","processResponse","UpdateTwoFactorDuoRequest","integrationKey","ikey","secretKey","skey","putTwoFactorOrganizationDuo","putTwoFactorDuo","TwoFactorDuoComponent","showPolicyWarning","filterProvider","getTwoFactorProviders","evaluatePolicies","manage","openModal","authenticatorModalRef","TwoFactorAuthenticatorComponent","updateStatus","yubikeyModalRef","TwoFactorYubiKeyComponent","duoModalRef","emailModalRef","TwoFactorEmailComponent","webAuthnModalRef","TwoFactorWebAuthnComponent","recoveryCode","recoveryModalRef","TwoFactorRecoveryComponent","ref","TwoFactorAuthentication","TwoFactorSetupComponent","exportService","saved","ExportComponent","exposedPasswordMap","getAllCiphers","allCiphers","exposedPasswordCiphers","passwordLeaked","exposedCount","getAllDecrypted","canManageCipher","ExposedPasswordsReportComponent","originalCipher","canManageAllCollections","loadCollections","loadCipher","getCipherAdmin","encryptCipher","saveCipher","putCipherAdmin","CipherCreateRequest","postCipherAdmin","deleteCipherAdmin","putDeleteCipherAdmin","AttachmentView","orgKey","decryptToBytes","decValue","PasswordHistoryView","importService","format","successNavigate","setImportOptions","importOptions","importer","getImporter","fileContents","getFileContents","content","import","getFormatInstructionTitle","results","featuredImportOptions","regularImportOptions","fire","heightAuto","buttonsStyling","iconHtml","input","inputValue","inputAttributes","showConfirmButton","confirmButtonText","onOpen","popupEl","scrollTo","file","reader","FileReader","readAsText","evt","pre","onerror","ImportComponent","services","cipherDocs","load2fa","fetch","Request","json","categoryName","responseJson","serviceName","category","service","InactiveTwoFactorReportComponent","ciphersWithPasswords","passwordUseMap","reusedPasswordCiphers","ReusedPasswordsReportComponent","unsecuredCiphers","UnsecuredWebsitesReportComponent","passwordStrengthMap","passwordStrengthCache","weakPasswordCiphers","isUserNameNotEmpty","getCacheKey","hasUserName","cacheKey","scoreKey","WeakPasswordsReportComponent","reupload","reuploadCipherAttachment","AttachmentsComponent","CollectionResponse","CollectionDetailsResponse","groups","g","CollectionGroupDetailsResponse","globalEquivalentDomains","equivalentDomains","GlobalDomainResponse","DomainsResponse","FolderResponse","accessId","maxAccessCount","accessCount","expirationDate","deletionDate","hideEmail","SendTextApi","SendFileApi","SendResponse","onEventsClicked","accessEvents","getAllFromApiForOrganization","indexCiphers","applyFilter","deleted","CollectionsComponent","getCollections","collectionDomains","decryptMany","unassignedCollection","getAllNested","nestedCollections","collapse","grouping","isCollapsed","bulkDelete","selectedIds","ciphersComponent","bulkDeleteModalRef","BulkDeleteComponent","cipherIds","onDeleted","bulkRestore","bulkRestoreModalRef","BulkRestoreComponent","onRestored","bulkShare","selectedCiphers","bulkShareModalRef","BulkShareComponent","onShared","bulkMove","bulkMoveModalRef","BulkMoveComponent","onMoved","BulkActionsComponent","SendFile","SendText","CipherWithIdRequest","folder","FolderRequest","onCopy","copyText","selection","getSelection","rangeCount","getRangeAt","stringEndPos","newLinePos","SelectCopyDirective","colorizedPassword","isSpecial","ColorPasswordPipe","FolderData","Folder","NotificationsService","webpackEmptyAsyncContext","keys","exports","classList","remove","FrontendLayoutComponent","broadcasterService","ngZone","businessUrl","enterpriseUrl","run","command","unsubscribe","goToBusinessPortal","businessTokenPromise","getEnterprisePortalSignInToken","showManageTab","showToolsTab","isOwner","canManageUsers","canManageAssignedCollections","canManageGroups","canManagePolicies","canAccessEventLogs","canAccessImportExport","canAccessReports","canAccessBusinessPortal","OrganizationLayoutComponent","UserLayoutComponent","fired","queryParams","qParams","errorMessage","isAuthenticated","EmergencyAccessAcceptRequest","postEmergencyAccessAccept","toast","save","AcceptEmergencyComponent","OrganizationUserAcceptRequest","postOrganizationUserAccept","orgName","organizationName","AcceptOrganizationComponent","HintComponent","routerService","onSuccessfulSubmit","successRoute","LockComponent","togglePassword","authService","onSuccessfulLoginNavigate","goAfterLogIn","queryParamsSub","orgInvite","emergencyInvite","loginRedirect","LoginComponent","DeleteRecoverRequest","postAccountRecoverDelete","RecoverDeleteComponent","TwoFactorRecoveryRequest","postTwoFactorRecover","RecoverTwoFactorComponent","showCreateOrgMessage","layout","referenceData","ReferenceEventRequest","reference","cookie","pop","shift","invite","getPoliciesByToken","policiesData","RegisterComponent","SetPasswordComponent","redirectUri","origin","storedIdentifier","SsoComponent","loggingIn","twoFactorRoute","changePasswordRoute","checkState","getOrgIdentiferFromState","codeChallenge","returnUri","includeUserIdentifier","initiateSsoFormPromise","preValidate","buildAuthorizeUrl","authorizeUrl","sameWindow","preValidateSso","passwordOptions","uppercase","lowercase","numbers","special","codeVerifierHash","identityBaseUrl","getSsoUserIdentifier","userIdentifier","orgIdFromState","onSuccessfulLoginTwoFactorNavigate","sso","onSuccessfulLoginChangePasswordNavigate","disableFavicon","onSuccessfulLogin","stateSplit","checkStateSplit","anotherMethod","twoFactorOptionsModal","TwoFactorOptionsComponent","onProviderSelected","selectedProviderType","onRecoverSelected","TwoFactorComponent","recover","TwoFactorEmailRequest","postAccountVerifyEmailToken","VerifyEmailRequest","VerifyEmailTokenComponent","VerifyDeleteRecoverRequest","postAccountRecoverDeleteToken","VerifyRecoverDeleteComponent","didScroll","pagedCollectionsCount","getUserCollections","resetPaging","loadMore","pagedLength","pagedCollections","pagedSize","addEditModalRef","CollectionAddEditComponent","onSavedCollection","onDeletedCollection","removeCollection","deleteCollection","usersModalRef","entityName","isSearching","isSearchable","isPaging","searching","index","splice","accessGroups","getGroups","groupsResponse","getCollectionDetails","group","CollectionRequest","putCollection","postCollection","deletePromise","getEventsOrganization","EventsComponent","pagedGroupsCount","pagedGroups","GroupAddEditComponent","onSavedGroup","onDeletedGroup","removeGroup","deleteGroup","GroupsComponent","access","getGroupDetails","GroupRequest","putGroup","postGroup","accessPolicies","ManageComponent","statusMap","pagedUsersCount","viewEvents","pagedUsers","Accepted","confirmedCount","acceptedCount","UserAddEditComponent","onSavedUser","onDeletedUser","removeUser","groupsModalRef","UserGroupsComponent","deleteOrganizationUser","reinvite","postOrganizationUserReinvite","confirm","confirmUser","doConfirmation","mapIndex","updateUser","autoConfirm","confirmModalRef","UserConfirmComponent","onConfirmedUser","getUserPublicKey","publicKeyResponse","log","getFingerprint","eventsModalRef","rsaEncrypt","OrganizationUserConfirmRequest","postOrganizationUserConfirm","PeopleComponent","User","showCustom","getOrganizationUser","setRequestPermissions","clearPermissions","OrganizationUserUpdateRequest","putOrganizationUser","OrganizationUserInviteRequest","emails","postOrganizationUserInvite","dontAskAgain","fingerprint","getOrganizationUserGroups","userGroups","ug","OrganizationUserUpdateGroupsRequest","groupIds","putOrganizationUserGroups","userCanAccessBusinessPortal","policiesEnabledMap","display","MasterPassword","PasswordGenerator","RequireSso","PersonalOwnership","DisableSend","SendOptions","policyIdFromEvents","orgPolicies","orgPolicy","getPolicies","op","editModalRef","PolicyEditComponent","onSavedPolicy","goToEnterprisePortal","enterpriseTokenPromise","PoliciesComponent","AppIdService","LogService","policyType","masterPassMinComplexity","passwordScores","defaultTypes","getPolicy","policy","passGenDefaultType","defaultType","passGenMinLength","minLength","passGenUseUpper","useUpper","passGenUseLower","useLower","passGenUseNumbers","useNumbers","passGenUseSpecial","useSpecial","passGenMinNumbers","minNumbers","passGenMinSpecial","minSpecial","passGenMinNumberWords","minNumberWords","passGenCapitalize","capitalize","passGenIncludeNumber","includeNumber","masterPassMinLength","masterPassRequireUpper","requireUpper","masterPassRequireLower","requireLower","masterPassRequireNumbers","requireNumbers","masterPassRequireSpecial","requireSpecial","sendDisableHideEmail","disableHideEmail","PolicyRequest","putPolicy","canUseApi","OrganizationUpdateRequest","putOrganization","taxFormPromise","deleteOrganization","deleteModalRef","DeleteOrganizationComponent","purgeVault","purgeModalRef","viewApiKey","apiKeyModalRef","postOrganizationApiKey","scope","grantType","apiKeyTitle","apiKeyWarning","apiKeyDescription","rotateApiKey","rotateApiKeyModalRef","isRotation","postOrganizationRotateApiKey","AccountComponent","OrganizationBillingComponent","adjustSeatsAdd","showAdjustSeats","adjustStorageAdd","showAdjustStorage","showUpdateLicense","showDownloadLicense","showChangePlan","getOrganizationSubscription","sub","reinstate","reinstatePromise","postOrganizationReinstate","cancelPromise","postOrganizationCancel","changePlan","subscription","closeChangePlan","changed","downloadLicense","closeDownloadLicense","updateLicense","closeUpdateLicense","updated","adjustSeats","closeSeats","adjustStorage","closeStorage","cancelled","cancelAtEndDate","upcomingInvoice","storageGb","storagePercentage","OrganizationSubscriptionComponent","onChanged","defaultUpgradePlan","FamiliesAnnually","defaultUpgradeProduct","Families","ChangePlanComponent","onDownloaded","installationId","getOrganizationLicense","license","licenseString","JSON","stringify","saveFile","DownloadLicenseComponent","seatAdjustment","SeatRequest","postOrganizationSeat","AdjustSeatsComponent","access2fa","SettingsComponent","duoComp","getTwoFactorOrganizationProviders","qrScript","UpdateTwoFactorAuthenticatorRequest","putTwoFactorAuthenticator","QRious","element","sendEmail","emailPromise","postTwoFactorEmailSetup","sentEmail","UpdateTwoFactorEmailRequest","putTwoFactorEmail","print","w","open","write","onafterprint","formatString","keyIdAvailable","keysConfiguredCount","webAuthnResponse","UpdateTwoFactorWebAuthnRequest","deviceResponse","putTwoFactorWebAuthn","removePromise","UpdateTwoFactorWebAuthnDeleteRequest","deleteTwoFactorWebAuthn","readKey","challengePromise","getTwoFactorWebAuthnChallenge","challenge","readDevice","webAuthnChallenge","resetWebAuthn","credentials","webAuthnListening","webAuthnError","listening","k","configured","migrated","nfc","UpdateTwoFactorYubioOtpRequest","key1","key2","key3","key4","key5","putTwoFactorYubiKey","disablePromise","existingKey","padRight","max","getExportData","getOrganizationExport","getFileName","collectEvent","manageableCiphers","onError","appFallbackSrc","FallbackSrcDirective","ToolsComponent","changeDetectorRef","trashCleanupWarning","groupingsComponent","successfully","detectChanges","selectedAll","reload","selectedTrash","filterDeleted","selectedType","filterCipherType","selectedCollectionId","filterCollection","clearGroupingFilters","clearFilters","go","filterSearchText","editCipherAttachments","attachmentsModalRef","madeAttachmentChanges","onUploadedAttachment","onDeletedAttachment","editCipherCollections","collectionsModalRef","onSavedCollections","addCipher","component","editCipher","cloneCipher","replaceUrl","VaultComponent","saveCipherAttachment","saveAttachmentWithServer","cipherDomain","deleteCipherAttachment","attachmentId","deleteCipherAttachmentAdmin","onReuploadedAttachment","deletePromises","reuploadPromises","emergencyAccessId","hasUpdatedKey","download","downloading","canAccessAttachments","getAttachmentData","attachmentDownloadResponse","cache","arrayBuffer","buf","decryptFromBytes","decBuf","hasEncKey","admin","saveAttachmentRawWithServer","foundAttachment","a2","deleteAttachmentWithServer","Window","domains","excluded","access_token","expiresIn","expires_in","refresh_token","tokenType","token_type","IdentityTokenResponse","IdentityTwoFactorResponse","dr","ListResponse","sends","profile","PolicyResponse","SyncResponse","allowSelectNone","loadCipherCollections","saveCollections","CipherCollectionsRequest","putCipherCollectionsAdmin","deleteCiphers","deleteCiphersAdmin","deleteManyWithServer","softDeleteManyWithServer","deleteRequest","CipherBulkDeleteRequest","deleteManyCiphersAdmin","putDeleteManyCiphersAdmin","ids","moveManyWithServer","restoreManyWithServer","nonShareableCount","shareableCiphers","writeableCollections","allCollections","filterCollections","checkedCollectionIds","shareManyWithServer","sendType","passwordRequired","unavailable","maskedText","creatorIdentifier","sendId","decKey","getSendFileDownloadData","accessRequest","downloadData","toggleText","keyArray","SendAccessRequest","pbkdf2","passwordHash","sendResponse","postSendAccess","sendAccess","SendAccess","makeSendKey","AccessComponent","sendService","addSend","disableSend","editSend","sendAddEditModalRef","onSavedSend","onDeletedSend","SendComponent","datePipe","copyLinkToClipboard","link","SendView","deauthorizeSessions","deauthModalRef","DeauthorizeSessionsComponent","deleteAccount","DeleteAccountComponent","viewUserApiKey","viewUserApiKeyModalRef","postUserApiKey","rotateUserApiKey","rotateUserApiKeyModalRef","postUserRotateApiKey","postSecurityStamp","getProfile","UpdateProfileRequest","putProfile","ProfileComponent","tokenSent","newEmail","EmailTokenRequest","postEmailToken","EmailRequest","newKey","newMasterPasswordHash","newEncKey","postEmail","reset","ChangeEmailComponent","rotateEncKey","rotateEncKeyClicked","currentMasterPassword","PasswordRequest","postPassword","updateKey","getPrivateKey","encPrivateKey","UpdateKeyRequest","FolderWithIdRequest","postAccountKey","updateEmergencyAccesses","updateAllResetPasswordKeys","getEmergencyAccessTrusted","emergencyAccess","allowedStatuses","EmergencyAccessStatusType","RecoveryInitiated","RecoveryApproved","filteredAccesses","details","granteeId","updateRequest","EmergencyAccessUpdateRequest","waitTimeDays","keyEncrypted","putEmergencyAccess","PBKDF2_SHA256","kdfOptions","KdfRequest","postAccountKdf","ChangeKdfComponent","orgPlansComponent","EnterpriseAnnually","CreateOrganizationComponent","custom","getSettingsDomains","toggleExcluded","globalDomain","customize","UpdateDomainsRequest","excludedGlobalEquivalentDomains","d2","putSettingsDomains","indexTrackBy","DomainRulesComponent","vaultTimeout","vaultTimeoutAction","vaultTimeouts","localeOptions","supportedTranslationLocales","locale","localeNames","disableIcons","enableGravatars","enableFullWidth","startingLocale","setVaultTimeoutOptions","vaultTimeoutActionChanged","newValue","OptionsComponent","ngAfterContentInit","LinkSsoComponent","premiumPrice","getPremium","getEmailVerified","finalizePremium","postPremium","paymentResponse","PremiumComponent","getUserSubscription","usingInAppPurchase","postReinstatePremium","postCancelPremium","UserSubscriptionComponent","breachedAccounts","checkedUsername","BreachReportComponent","history","historyModalRef","PasswordGeneratorHistoryComponent","lengthChanged","minNumberChanged","minSpecialChanged","PasswordGeneratorComponent","saveOptions","regenerate","favorites","showVerifyEmail","showBrowserOutdated","showUpdateKey","showPremiumCallout","organizationsComponent","selectedFavorites","filterFavorites","selectedFolder","selectedFolderId","filterFolder","shareCipher","shareModalRef","ShareComponent","onSharedCipher","folderAddEditModalRef","FolderAddEditComponent","onSavedFolder","loadFolders","editFolder","onDeletedFolder","updateKeyModalRef","UpdateKeyComponent","makeRequest","getKey","SendInfoComponent","postAccountVerifyEmail","VerifyEmailComponent","canActivate","OrganizationGuardService","Permissions","AccessBusinessPortal","AccessEventLogs","AccessImportExport","AccessReports","ManageAllCollections","ManageAssignedCollections","ManageGroups","ManageOrganization","ManagePolicies","ManageUsers","OrganizationTypeGuardService","routerState","isLocked","promptBiometric","AuthGuardService","LockGuardService","UnauthGuardService","EmergencyAddEditComponent","postEmergencyAccessView","viewAttachments","EmergencyAccessAttachmentsComponent","decCiphers","rsaDecrypt","oldKeyBuffer","oldEncKey","cipherResponse","cipherData","getLocaleSortingFunction","EmergencyAccessViewComponent","EncryptedObject","EnvironmentUrls","GeneratedPasswordHistory","emergencyAccessType","EmergencyAccessType","emergencyAccessStatusType","isOrganizationOwner","trustedContacts","getEmergencyAccessGranted","grantedContacts","EmergencyAccessAddEditComponent","onSaved","contact","postEmergencyAccessReinvite","EmergencyAccessConfirmComponent","onConfirmed","deleteEmergencyAccess","EmergencyAccessGranteeDetailsResponse","removeGrantee","removeGrantor","requestAccess","postEmergencyAccessInitiate","approve","View","postEmergencyAccessApprove","postEmergencyAccessReject","takeover","EmergencyAccessTakeoverComponent","takeoverModalRef","onDone","EmergencyAccessConfirmRequest","postEmergencyAccessConfirm","EmergencyAccessComponent","creationDate","grantorId","EmergencyAccessGrantorDetailsResponse","EmergencyAccessTakeoverResponse","EmergencyAccessViewResponse","waitTimes","getEmergencyAccess","waitTime","EmergencyAccessInviteRequest","postEmergencyAccessInvite","getEmergencyGrantorPolicies","policyResponse","postEmergencyAccessTakeover","takeoverResponse","EmergencyAccessPasswordRequest","postEmergencyAccessPassword","logoutCallback","customUserAgent","urlsSet","isWebClient","isDesktopClient","usingBaseUrl","device","getDevice","setUrls","urls","apiBaseUrl","eventsBaseUrl","api","headers","Headers","qsStringify","toIdentityToken","identityClientId","getCredentials","isJsonResponse","TwoFactorProviders2","clearTwoFactorToken","doRefreshToken","BillingResponse","SubscriptionResponse","TaxInfoResponse","PreloginResponse","setPassword","getAccountRevisionDate","postPasswordHint","postRegister","PaymentResponse","postIapCheck","postAccountVerifyPassword","ApiKeyResponse","getFolder","postFolder","putFolder","deleteFolder","getSend","apiUrl","SendAccessResponse","SendFileDownloadDataResponse","getSends","postSend","postFileTypeSend","SendFileUploadDataResponse","renewSendFileUploadUrl","fileId","postSendFile","postSendFileLegacy","putSend","putSendRemovePassword","deleteSend","getCipher","getCiphersOrganization","postCipher","postCipherCreate","putCipher","deleteManyCiphers","putMoveCiphers","putShareCipher","putShareCiphers","putCipherCollections","path","postImportCiphers","postImportOrganizationCiphers","putDeleteCipher","putDeleteManyCiphers","putRestoreCipher","putRestoreCipherAdmin","putRestoreManyCiphers","postCipherAttachment","AttachmentUploadDataResponse","postCipherAttachmentLegacy","postCipherAttachmentAdminLegacy","postShareCipherAttachment","renewAttachmentUploadUrl","postAttachmentFile","deleteCollectionUser","GroupDetailsResponse","GroupResponse","deleteGroupUser","OrganizationUserDetailsResponse","OrganizationUserUserDetailsResponse","PlanResponse","postImportDirectory","TaxRateResponse","getSync","TwoFactorProviderResponse","TwoFactorAuthenticatorResponse","TwoFactorEmailResponse","TwoFactorDuoResponse","TwoFactorYubiKeyResponse","TwoFactorWebAuthnResponse","ChallengeResponse","TwoFactorRecoverResponse","rawId","extensions","getClientExtensionResults","AttestationObject","attestationObject","clientDataJson","clientDataJSON","postTwoFactorEmail","OrganizationResponse","OrganizationSubscriptionResponse","getEvents","addEventParameters","EventResponse","postEventsCollect","getActiveBearerToken","authHeader","UserKeyResponse","getHibpBreach","BreachAccountResponse","getToken","tokenNeedsRefresh","nativeFetch","handleError","hasResponse","requestInit","tokenError","isTextResponse","Message","getRefreshToken","decodedToken","decodeToken","grant_type","client_id","typeHeader","businessAddress1","businessAddress2","businessAddress3","businessCountry","businessTaxNumber","nameLocalizationKey","descriptionLocalizationKey","baseStorageGb","maxUsers","maxAdditionalSeats","maxAdditionalStorage","hasSelfHost","hasPolicies","hasGroups","hasDirectory","hasEvents","has2fa","hasApi","hasSso","upgradeSortOrder","displaySortOrder","stripePlanId","stripeSeatPlanId","stripeStoragePlanId","stripePremiumAccessPlanId","storageName","BillingSubscriptionResponse","BillingSubscriptionUpcomingInvoiceResponse","trialEndDate","periodStartDate","periodEndDate","cancelledDate","BillingSubscriptionItemResponse","quantity","KeyResponse","attestation","authenticatorSelection","excludeCredentials","pubKeyCredParams","rp","makeAndGetAppId","getAnonymousAppId","existingId","guid","hashStart","hashEnding","leakedHashes","v","throttle","Keys","DomainMatchBlacklist","Set","settingsService","fileUploadService","sortedCiphersCache","SortedCiphersCache","sortCiphersByLastUsed","_decryptedCipherCache","clearIndex","clearCache","decryptedCipherCache","existingCipher","hasFields","existingHiddenFields","Hidden","ef","matchedField","encryptObjProperty","encryptCipherData","encryptFields","encryptPasswordHistories","encryptAttachments","attachmentsModel","encAttachments","fieldsModel","encFields","encryptField","encField","fieldModel","Boolean","phModels","encPhs","encryptPasswordHistory","encPh","phModel","hasKey","getAllDecryptedForGrouping","groupingId","getAllDecryptedForUrl","includeOtherTypes","defaultMatch","eqDomainsPromise","getEquivalentDomains","eqDomains","matches","eqDomain","matchingDomains","Domain","domainUrlHost","Host","urlHost","Exact","StartsWith","Never","getLastUsedForUrl","getCipherForUrl","getLastLaunchedForUrl","getNextCipherForUrl","updateLastUsedIndexForUrl","updateLastUsedIndex","updateLastUsedDate","ciphersLocalData","cached","updateLastLaunchedDate","lastLaunched","saveNeverDomain","saveWithServer","upsert","shareWithServer","attachmentPromises","shareAttachmentWithServer","encCipher","CipherShareRequest","encCiphers","CipherBulkShareRequest","unencryptedFile","readAsArrayBuffer","cData","filename","encFileName","dataEncKey","encryptToBytes","encData","fileSize","adminRequest","uploadDataResponse","cipherMiniResponse","uploadCipherAttachment","legacyServerAttachmentFileUpload","blob","Blob","filepath","contentType","saveCollectionsWithServer","CipherBulkMoveRequest","deleteAttachment","aLastUsed","bLastUsed","bothNotNull","sortCiphersByLastUsedThenName","aName","bName","softDelete","setDeletedDate","clearDeletedDate","constructor","CipherBulkRestoreRequest","restores","attachmentView","attachmentResponse","theObj","modelProp","lastUsed","isCached","addCiphers","getLastLaunched","getLastUsed","getNext","sequentialize","propertyKey","descriptor","originalMethod","caches","getCache","argsCacheKey","args","onFinally","decryptedCollectionCache","decCollections","nodes","collectionCopy","ServiceUtils","nestedTraverse","getNested","getTreeNodeObject","nodeTree","partIndex","delimiter","partName","node","TreeNode","children","newPartName","attachToWindow","attachToGlobal","ContainerService","secureStorageService","platformUtilService","option","biometric","supportsSecureStorage","keyHash","setOrgKeys","orgKeys","getKeyHash","encKeyCipher","decEncKey","stretchKey","getPublicKey","rsaExtractPublicKey","keyFingerprint","hkdfExpand","userFingerprint","hashPhrase","getOrgKeys","encOrgKeys","clearKey","legacyEtmKey","clearKeyHash","clearEncKey","memoryOnly","clearKeyPair","clearOrgKeys","clearPinProtectedKey","clearKeys","toggleKey","salt","makeKeyFromPin","pin","protectedKeyCs","makePinKey","pinKey","randomBytes","rsaGenerateKeyPair","publicB64","privateEnc","keyMaterial","hkdf","sendKey","getKeyForEncryption","theKey","buildEncKey","plainValue","plainBuf","aesEncrypt","encObj","encValue","macLen","encBytes","EncArrayBuffer","Rsa2048_OaepSha256_HmacSha256_B64","Rsa2048_OaepSha1_HmacSha256_B64","alg","encString","aesDecryptToBytes","decipher","aesDecryptToUtf8","encBuf","ctBytes","ivBytes","macBytes","randomNumber","min","rval","range","bitsNeeded","ceil","log2","bytesNeeded","mask","pow","byteArray","macData","hmac","keyForEnc","resolveLegacyKey","fastParams","aesDecryptFastParameters","hmacFast","computedMac","compareFast","aesDecryptFast","aesDecrypt","minimumEntropy","entropyPerWord","EEFLongWordList","numWords","hashArr","entropyAvailable","phrase","hashNumber","bigInt","fromArray","remainder","divide","encKeyEnc","notificationsService","getWebVaultUrl","webVaultUrl","setUrlsFromStorage","urlsObj","icons","notifications","webVault","enterprise","envUrls","identityUrl","notificationsUrl","eventsUrl","formatUrl","decryptedFolderCache","decFolders","noneFolder","folderCopy","cId","updates","systemLanguage","localesDirectory","getLocalesJson","defaultMessages","localeMessages","translationLocale","Intl","Collator","numeric","sensitivity","loadMessages","translate","messagesObj","formattedLocale","locales","placeholders","placeProp","replaceToken","replaceContent","DefaultOptions","ambiguous","minNumber","minUppercase","minLowercase","wordSeparator","generatePassphrase","sanitizePasswordLength","positions","shuffleArray","allCharSet","lowercaseCharSet","uppercaseCharSet","numberCharSet","specialCharSet","positionChars","randomCharIndex","listLength","wordList","wordIndex","appendRandomNumberToRandomWord","optionsCache","enforcePasswordGeneratorPoliciesOnOptions","enforcedOptions","getPasswordGeneratorPolicyOptions","useUppercase","useLowercase","numberCount","specialCount","PasswordGeneratorPolicyOptions","currentPolicy","getHistory","encrypted","decryptHistory","addHistory","currentHistory","matchesPrevious","unshift","now","encryptHistory","newHistory","userInputs","globalUserInputs","finalUserInputs","zxcvbn","normalizeOptions","decrypted","array","forGeneration","minUppercaseCalc","minLowercaseCalc","minNumberCalc","minSpecialCalc","settingsCache","getSettingsKey","setEquivalentDomains","setSettingsKey","getSettings","settings","purge","syncInProgress","getLastSync","lastSync","setLastSync","toJSON","forceSync","allowThrowOnError","syncStarted","syncCompleted","needsSync","needsSyncing","syncProfile","syncFolders","syncCollections","syncCiphers","syncSends","syncSettings","syncPolicies","syncUpsertFolder","notification","isEdit","localFolder","remoteFolder","syncDeleteFolder","syncUpsertCipher","shouldUpdate","localCipher","checkCollections","remoteCipher","syncDeleteCipher","syncUpsertSend","localSend","remoteSend","SendData","syncDeleteSend","getSecurityStamp","stamp","setSecurityStamp","setEmailVerified","OrganizationData","replaceOrganizations","SendTextData","File","SendFileData","setToken","setRefreshToken","skipTokenStorage","toggleTokens","clearToken","decoded","getTokenExpirationDate","setUTCSeconds","tokenSecondsRemaining","offsetSeconds","msRemaining","valueOf","minutes","email_verified","getIssuer","iss","B32Chars","SteamChars","period","digits","keyB32","isOtpAuth","isSteamAuth","digitParams","periodParam","algParam","timeHex","leftPad","decToHex","timeBytes","keyBytes","b32ToBytes","sign","offset","otp","fullCode","trunc","isAutoCopyEnabled","b32ToHex","cleanedInput","bits","hex","byteIndex","chunk","signature","clearOrganizations","lockedCallback","loggedOutCallback","checkOnInterval","startCheck","checkVaultTimeout","isBiometricLockSet","isViewOpen","lockTimeout","lastActive","vaultTimeoutSeconds","allowSoftLock","isPinLockSet","timersMap","debug","LogLevelType","Debug","info","Info","Warning","level","warn","time","hrtime","timeEnd","elapsed","build","CipherWithIds","CollectionWithId","FolderWithId","IgnoredProperties","loginPropertyParsers","setLoginUsername","setLoginPassword","setLoginUris","creditCardPropertyParsers","setCreditCardNumber","setCreditCardVerification","setCreditCardCardholderName","setCreditCardExpiry","identityPropertyParsers","setIdentityFirstName","setIdentityInitial","setIdentityLastName","setIdentityUserName","setIdentityEmail","setIdentityPhone","setIdentityCompany","quoteChar","escapeChar","getProp","setNotes","setCipherType","altUsername","context","CipherImportContext","setKnownLoginValue","setKnownCreditCardValue","setKnownIdentityValue","setUnknownValue","entries","agg","entry","getPropByRegexp","regexp","matchingKeys","getPropIncluding","includesMap","importRecord","func","lowerProperty","readableDate","toUTCString","OnePasswordCsvImporter","NotificationType","enableProdMode","platformBrowser","bootstrapModule","preserveWhitespaces","registerLocaleData","AppModule","AppComponent","DatePipe","BrowserModule","BrowserAnimationsModule","FormsModule","AppRoutingModule","ServicesModule","ToasterModule","forRoot","InfiniteScrollModule","DragDropModule","BlurClickDirective","BoxRowDirective","SearchCiphersPipe","routes","pathMatch","redirectTo","RouterModule","useHash","paramsInheritanceStrategy","subscribers","messageCallback","PasswordHintRequest","showPassword","pinLock","webVaultHostname","invalidPinAttempts","pinSet","supportsBiometric","biometricLock","vaultUrl","failed","decPin","setKeyAndContinue","passwordValid","storedKeyHash","unlockBiometric","authenticateBiometric","doContinue","rememberEmail","launchSsoBrowser","ssoRedirectUri","ssoCodeVerifier","webUrl","confirmMasterPassword","hint","showTerms","acceptPolicies","useLowerKdf","isIE","RegisterRequest","confirmField","syncLoading","SetPasswordRequest","orgIdentifier","onSuccessfulChangePassword","choose","backdrop","className","addEventListener","webAuthnReady","webAuthnNewTab","webAuthn","twoFactorEmail","loginRoute","authing","needsLock","cleanupWebAuthn","providerData","DuoWebSDK","iframe","sig_request","Signature","submit_callback","sig","stop","doToast","cleanup","getDeviceString","pushToken","codes","client_secret","code_verifier","redirect_uri","deviceIdentifier","deviceName","twoFactorRemember","errorCallback","infoCallback","parseFunction","parseMessage","connectorLink","URLSearchParams","base64Encode","btnText","allow","sendMessage","contentWindow","postMessage","removeEventListener","validMessage","warningDialog","downloadFile","encryptedFormat","getExport","extension","csv","onCancelled","onEditAttachments","onShareCipher","onEditCollections","onGeneratePassword","showCardCode","fieldType","addFieldType","currentDate","typeOptions","cardBrandOptions","cardExpMonthOptions","identityTitleOptions","addFieldTypeOptions","uriMatchOptions","myEmail","addEditCipherInfo","organizationChanged","previousCipherId","addUri","removeUri","addField","removeField","trackByFunction","editCollections","restorePromise","restoreCipher","toggleCardCode","toggleFieldValue","toggleUriOptions","loginUriMatchChanged","drop","moveItemInArray","previousIndex","currentIndex","checkPassword","checkPasswordPromise","DeviceResponse","KeysResponse","activeCipherId","onCipherClicked","onCipherRightClicked","onAddCipher","onAddCipherOptions","pagedCiphers","searchPending","searchTimeout","pagedCiphersCount","refreshing","indexedCiphers","deletedFilter","searchCiphers","rightClickCipher","addCipherOptions","selectedCollectionIds","showFolders","showCollections","showFavorites","showTrash","onAllClicked","onFavoritesClicked","onTrashClicked","onCipherTypeClicked","onFolderClicked","onAddFolder","onEditFolder","onCollectionClicked","setLoaded","collapsedGroupings","nestedFolders","clearSelections","selectFavorites","selectTrash","selectFolder","selectCollection","idPrefix","SendAccessView","expired","filteredSends","hasSearched","onSuccessfulLoad","applyTextSearch","removePassword","removePasswordWithServer","onSuccessfulRemovePassword","onSuccessfulDelete","sendLinkBaseUrl","urlB64Key","searchSends","DateField","copyLink","deletionDateSelect","expirationDateSelect","alertShown","deletionDateOptions","expirationDateOptions","isSafari","isFirefox","nullOrWhiteSpaceCount","expirationDateFallback","expirationTimeFallback","formatDateFallbacks","deletionDateFallback","deletionTimeFallback","disableSendPolicies","sendOptionsPolicies","loadSend","hasPassword","isDateTimeLocalSupported","dateToString","deletionDateParts","dateToSplitString","safariDeletionTime","expirationDateParts","safariExpirationTime","safariDeletionTimeOptions","safariTimeOptions","DeletionDate","safariExpirationTimeOptions","ExpriationDate","deletionDateTimeFallback","expirationDateTimeFallback","setHours","encryptSend","encSend","clearExpiration","typeChanged","toggleOptions","expirationDateFallbackChanged","sendData","dateString","togglePasswordVisible","strarray","noon","midnight","ams","pms","m","hour","midnightOption","standard","military","noonOption","amOption","pmOption","validTimes","previousValue","showSelect","onSelected","avoidAmbiguous","optionsResponse","sliderChanged","sliderInput","copyOptions","cipherView","language","BroadcasterMessagingService","WebPlatformUtilsService","HtmlStorageService","MemoryStorageService","WebCryptoFunctionService","consoleLogService","FileUploadService","eventLoggingService","initFactory","htmlEl","documentElement","theme","useValue","APP_INITIALIZER","useFactory","deps","LOCALE_ID","subscriber","arg","localStorageKeys","localStorageStartsWithKeys","memoryStorageStartsWithKeys","memoryStorage","isLocalStorage","localStorage","getItem","isMemoryStorage","sessionStorage","setItem","removeItem","swKey","fileUploadType","BillingSourceResponse","BillingTransactionResponse","BillingInvoiceResponse","cardBrand","needsVerification","pdfUrl","paid","createdDate","refunded","partiallyRefunded","refundedAmount","addedDate","breachDate","dataClasses","isActive","isVerified","logoPath","modifiedDate","pwnCount","OrganizationUserResponse","userProfile","taxIdType","limit","throttleKey","allThrottles","getThrottles","throttles","argsThrottleKey","queue","exec","comparator","sortedCiphersByUrl","timeouts","Ciphers","resetTimer","lastUsedIndex","y","getNextIndex","inEffect","filePath","store","browserCache","chrome","isChrome","isEdge","isOpera","isVivaldi","isMacAppStore","rel","click","blobData","blobOptions","fileNameLower","doDownload","endsWith","msSaveOrOpenBlob","msSaveBlob","createObjectURL","position","confirmText","cancelText","bodyIsHtml","iconClasses","iconHtmlStr","showCancelButton","cancelButtonText","clipboardData","setData","queryCommandSupported","textarea","copyEl","contains","execCommand","readFromClipboard","getDefaultSystemTheme","onDefaultSystemThemeChange","uploadEvents","eventType","uploadImmediately","orgIds","eventCollection","EventData","EventRequest","clearEvents","getEncryptedExport","getDecryptedExport","getOrganizationEncryptedExport","getOrganizationDecryptedExport","padNumber","getSeconds","buildCommonCipher","unparse","jsonDoc","collectionPromises","decCol","cipherPromises","decCipher","padCharacter","numString","login_uri","login_username","login_password","login_totp","template","toView","values","toDomain","azureFileUploadService","AzureFileUploadService","bitwardenFileUploadService","BitwardenFileUploadService","uploadSendFile","uploadData","encryptedFileData","FileUploadType","Direct","Azure","upload","renewalCallback","encryptedFileName","azureUploadBlob","azureUploadBlocks","urlObject","searchParams","blobResponse","blockSize","getMaxBlockSize","blockIndex","numBlocks","blocksStaged","renewUrlIfNecessary","blockUrl","blockId","encodedBlockId","blockData","blockHeaders","blockRequest","blockResponse","blockListUrl","blockListXml","expiry","setTime","utfBlockId","blockIdList","xml","Version","day","Number","compareTo","apiCall","getImportOptions","importResult","halfway","last","badData","postImport","errorResponse","handleServerError","getImporterInstance","BitwardenCsvImporter","BitwardenJsonImporter","LastPassCsvImporter","KeePassXCsvImporter","AviraCsvImporter","BlurCsvImporter","SafeInCloudXmlImporter","PadlockCsvImporter","KeePass2XmlImporter","ChromeCsvImporter","FirefoxCsvImporter","UpmCsvImporter","SaferPassCsvImporter","MeldiumCsvImporter","OnePassword1PifImporter","OnePasswordWinCsvImporter","OnePasswordMacCsvImporter","KeeperCsvImporter","PasswordDragonXmlImporter","EnpassCsvImporter","EnpassJsonImporter","PasswordSafeXmlImporter","DashlaneJsonImporter","MSecureCsvImporter","StickyPasswordXmlImporter","TrueKeyCsvImporter","ClipperzHtmlImporter","RoboFormCsvImporter","AscendoCsvImporter","PasswordBossJsonImporter","ZohoVaultCsvImporter","SplashIdCsvImporter","PassKeepCsvImporter","GnomeJsonImporter","PasswordAgentCsvImporter","PasspackCsvImporter","PassmanJsonImporter","AvastCsvImporter","AvastJsonImporter","FSecureFskImporter","KasperskyTxtImporter","RememBearCsvImporter","PasswordWalletTxtImporter","MykiCsvImporter","SecureSafeCsvImporter","LogMeOnceCsvImporter","BlackBerryCsvImporter","ButtercupCsvImporter","CodebookCsvImporter","EncryptrCsvImporter","YotiCsvImporter","ImportCiphersRequest","KvpRequest","ImportOrganizationCiphersRequest","itemType","fieldLower","web","logins","custName","note","pwd","loginName","cards","holderName","cardNumber","cvv","website","secondary_username","col","addCollection","collectionIndex","delimPosition","parseEncrypted","parseDecrypted","groupingsMap","fav","extra","OfficialProps","processingCustomFields","currentVersion","actionType","labelLower","Category","Favorite","Entry","Note","Username","TOTP","Website","Phone","PIN","Account","HandledResults","ADDRESS","processAddress","AUTHENTIFIANT","processAuth","BANKSTATEMENT","processNote","IDCARD","PAYMENTMEANS_CREDITCARD","processCard","IDENTITY","processIdentity","credential","secondaryLogin","fullName","nameParts","pseudo","addressName","addressFull","zipcode","owner","nameProperty","Label","Notes","CVV","Expiry","expParts","firstRow","containsField","fieldValue","fieldName","fieldNameLower","foldersMap","foldersIndexMap","folderTree","buildFolderTree","flattenFolderTree","template_type","processLogin","sensitive","uuid","parent_uuid","titlePrefix","tree","creditNumber","creditCvv","creditExpiry","keyRing","display_name","secret","attributes","attr","username_value","notesData","applicationsData","websitesData","workingData","parseDataCategory","applications","websites","nameKey","itemComment","itemCommentKey","colonIndex","rootGroup","traverse","isRootNode","groupPrefixName","groupName","nameEl","cipherIndex","entryString","valueEl","keyEl","attrs","ProtectInMemory","Title","Group","buildBaseCipher","parseSecureNote","parseCard","parseIdentity","ccnum","cardCipher","profilename","firstname","lastname","ccname","cccsc","ccexp","ccexpParts","middlename","zip","extraParts","processedNote","typeParts","mappedData","parseSecureNoteMapping","monthString","processingNotes","extraPart","DisplayName","UserName","Url","nickname","additionalInfo","twoFactAuthToken","cardName","exp_month","exp_year","firstAddressLine","secondAddressLine","zipCode","line","trashed","processStandardItem","processWinOpVaultItem","overview","URLs","parsePasswordHistory","notesPlain","parseFields","sections","section","openContents","faveIndex","typeName","secureContents","maxSize","designationKey","valueKey","fieldDesignation","street","setIdentityAddress","expSplit","tags","tag","getValue","custom_fields","customField","field_type","tagsJson","Tags","tagJson","__parsed_extra","fieldsJson","extraFields","fieldJson","newVersion","altFormat","login_url","identifiers","valObj","expDate","cf","records","record","categoryText","accountName","tagName","passwordSafe","notesDelimiter","getAttribute","groupText","trash","cardholder","verification","expiryMonth","expMonthNumber","expiryYear","expYearNumber","Name","Pwd","Rf_fields","labelEl","cardEl","labelIdEl","labelId","fieldEl","notesEl","candidates","choice","Comment","parseFieldsToNotes","startIndex","loginNodes","loginNode","accountId","usernameText","passwordText","titleText","linkText","notesText","accountLogin","account","parentElement","buildGroupText","PropertiesToIgnore","memo","kind","expiryDate","document_content","ChamberName","parseData","SecretData","CustomData","connected","inactive","reconnectTimer","signalrConnection","off","signalR","HubConnectionBuilder","withUrl","accessTokenFactory","skipNegotiation","transport","HttpTransportType","WebSockets","withHubProtocol","signalRMsgPack","MessagePackHubProtocol","processNotification","NotificationResponse","onclose","reconnect","isAuthedAndUnlocked","updateConnection","sync","reconnectFromActivity","disconnectFromInactivity","contextId","payloadUserId","UserId","myUserId","SyncCipherCreate","SyncCipherUpdate","SyncCipherDelete","SyncLoginDelete","SyncFolderCreate","SyncFolderUpdate","SyncFolderDelete","SyncVault","SyncCiphers","SyncSettings","SyncOrgKeys","LogOut","SyncSendCreate","SyncSendUpdate","SyncSendDelete","SyncCipherNotification","SyncFolderNotification","UserNotification","SyncSendNotification","policyCache","MasterPasswordPolicyOptions","newPassword","toLocaleLowerCase","toLocaleUpperCase","indexing","searchableMinLength","builder","lunr","Builder","boost","extractor","uriExtractor","fieldExtractor","attachmentExtractor","isArray","every","getIndexForSearch","searchCiphersBasic","ciphersMap","searchResults","Query","wildcard","LEADING","TRAILING","q","tokenizer","term","joined","protocolIndex","queryIndex","decryptedSendCache","fileData","Send","cryptoKey","ArrayBuffer","encryptFileData","parseFile","decSends","SendRequest","legacyServerSendFileUpload","encFileData","fileLength","crypto","subtle","ua","isOldSafari","algorithm","iterations","forgeLen","passwordBytes","toByteString","saltBytes","derivedKeyBytes","forge","wcLen","passwordBuf","toBuf","saltBuf","pbkdf2Params","toWebCryptoAlgorithm","importKey","impKey","deriveBits","ikm","outputByteSize","infoBuf","hkdfParams","prk","hashLen","infoArr","runningOkmLength","previousT","okm","md","md5","sha1","valueBytes","update","digest","valueBuf","signingAlgorithm","mac1","mac2","arr1","arr2","getBytes","rand","Uint32Array","util","createBuffer","putInt32","DecryptParameters","meta","encKeyByteString","macKeyByteString","decode64","parameters","dataBuffer","createDecipher","finish","rsaParams","impPrivateKey","exportKey","jwkPrivateKey","jwkPublicKeyParams","kty","ext","impPublicKey","modulusLength","publicExponent","generateKey","getRandomValues","encodeUtf8","toasterConfig","ToasterConfig","showCloseButton","mouseoverTimerStop","animation","lastActivity","idleTimer","isIdle","runOutsideAngular","onmousemove","recordActivity","onmousedown","ontouchstart","onclick","onscroll","onkeypress","setFullWidth","idleStateChanged","sanitize","SecurityContext","HTML","bodyOutputType","BodyOutputType","TrustedHtml","trustedHtml","blur","elRef","formEls","formEl","inputEl"],"mappings":"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,gBAAgBQ,IAEhC,MAAO,CAAP,EAAOJ,UAGG,YAAAhD,YAAd,SAA0B7vF,EAAyB+qB,G,yGAE3CooE,EAAuB,KACA,KAAvBnzF,EAAIA,IAAIgO,WAAR,MACe,GAAM3M,KAAKssF,WAAW3tF,I,OACzB,OADN+rE,EAAS,SACH,GAAM1qE,KAAK4nC,QAAQle,EAAQghD,I,cAAvConB,EAAY,S,oBACkB,KAAvBnzF,EAAIA,IAAIgO,WAAR,MACK,GAAM3M,KAAK4nC,QAAQle,EAAQ/qB,I,cAAvCmzF,EAAY,S,aAEZ,MAAM,IAAInwF,MAAM,qB,OAEpB,MAAO,CAAC,EAAD,CAAC,IAAI,EAAAioC,mBAAmBlgB,GAASooE,YAjmB5C,GADC,EAAA/H,eAAc,WAAM,qB,iDACA,EAAAngD,qB,8DA4ErB,GADC,EAAAmgD,eAAc,WAAM,sB,mHAwhBzB,EA1rBA,GAAa,EAAAzoF,iB,8EC9BA,EAAA8vF,gBAAkB,CAC3B,SACA,UACA,YACA,QACA,UACA,UACA,SACA,OACA,WACA,WACA,WACA,UACA,UACA,SACA,WACA,UACA,WACA,WACA,WACA,WACA,UACA,UACA,WACA,SACA,SACA,UACA,YACA,YACA,UACA,WACA,WACA,WACA,UACA,WACA,SACA,OACA,QACA,WACA,UACA,OACA,UACA,UACA,SACA,SACA,WACA,YACA,SACA,WACA,WACA,WACA,UACA,OACA,UACA,YACA,WACA,WACA,UACA,YACA,OACA,SACA,WACA,YACA,YACA,YACA,YACA,SACA,QACA,YACA,WACA,SACA,UACA,SACA,SACA,WACA,QACA,SACA,YACA,YACA,YACA,YACA,YACA,OACA,UACA,SACA,SACA,QACA,YACA,SACA,QACA,UACA,QACA,WACA,UACA,YACA,QACA,YACA,YACA,SACA,WACA,YACA,UACA,QACA,OACA,OACA,OACA,MACA,OACA,YACA,QACA,YACA,QACA,UACA,UACA,YACA,QACA,QACA,YACA,WACA,SACA,QACA,QACA,WACA,WACA,UACA,WACA,SACA,OACA,QACA,QACA,QACA,YACA,QACA,WACA,UACA,WACA,WACA,OACA,WACA,SACA,SACA,WACA,QACA,YACA,QACA,WACA,YACA,YACA,WACA,YACA,YACA,SACA,YACA,YACA,SACA,UACA,UACA,WACA,OACA,QACA,QACA,QACA,UACA,WACA,UACA,WACA,QACA,SACA,WACA,QACA,YACA,UACA,QACA,QACA,SACA,WACA,SACA,YACA,SACA,UACA,WACA,YACA,UACA,YACA,UACA,SACA,UACA,UACA,UACA,SACA,SACA,WACA,OACA,YACA,UACA,QACA,SACA,SACA,SACA,UACA,UACA,YACA,YACA,UACA,SACA,UACA,YACA,YACA,WACA,QACA,YACA,QACA,QACA,WACA,YACA,WACA,WACA,UACA,WACA,UACA,YACA,UACA,YACA,WACA,WACA,WACA,SACA,UACA,YACA,WACA,SACA,WACA,WACA,YACA,WACA,YACA,WACA,YACA,YACA,YACA,YACA,SACA,UACA,QACA,QACA,UACA,SACA,UACA,SACA,WACA,WACA,UACA,SACA,WACA,QACA,SACA,UACA,YACA,SACA,UACA,YACA,YACA,WACA,WACA,YACA,UACA,WACA,QACA,YACA,YACA,UACA,QACA,YACA,YACA,YACA,YACA,WACA,WACA,UACA,UACA,QACA,QACA,WACA,QACA,OACA,WACA,YACA,YACA,WACA,OACA,QACA,WACA,WACA,QACA,QACA,YACA,UACA,WACA,QACA,SACA,UACA,SACA,UACA,UACA,UACA,SACA,UACA,OACA,QACA,QACA,SACA,UACA,UACA,QACA,SACA,UACA,SACA,YACA,WACA,QACA,MACA,SACA,YACA,SACA,YACA,UACA,QACA,QACA,OACA,QACA,QACA,SACA,YACA,SACA,WACA,SACA,UACA,WACA,UACA,UACA,YACA,YACA,YACA,SACA,WACA,QACA,OACA,WACA,OACA,SACA,YACA,UACA,SACA,SACA,UACA,YACA,WACA,YACA,YACA,SACA,QACA,SACA,WACA,YACA,YACA,WACA,UACA,YACA,WACA,UACA,UACA,WACA,QACA,WACA,YACA,SACA,YACA,SACA,SACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,SACA,SACA,WACA,SACA,UACA,WACA,QACA,WACA,UACA,OACA,QACA,QACA,SACA,QACA,QACA,SACA,UACA,SACA,QACA,OACA,OACA,SACA,WACA,SACA,SACA,WACA,YACA,YACA,WACA,SACA,SACA,YACA,WACA,WACA,UACA,YACA,WACA,WACA,YACA,UACA,UACA,WACA,YACA,WACA,WACA,YACA,WACA,WACA,YACA,WACA,WACA,YACA,WACA,YACA,SACA,WACA,WACA,YACA,WACA,QACA,WACA,YACA,SACA,QACA,UACA,QACA,UACA,SACA,WACA,QACA,SACA,UACA,SACA,SACA,YACA,UACA,QACA,UACA,WACA,QACA,SACA,WACA,SACA,UACA,YACA,UACA,QACA,WACA,SACA,SACA,SACA,WACA,QACA,WACA,WACA,SACA,SACA,UACA,WACA,WACA,SACA,YACA,UACA,SACA,WACA,SACA,UACA,SACA,UACA,QACA,WACA,UACA,WACA,SACA,UACA,SACA,OACA,YACA,UACA,YACA,SACA,WACA,YACA,UACA,WACA,YACA,WACA,OACA,YACA,SACA,QACA,QACA,QACA,SACA,SACA,QACA,OACA,QACA,OACA,YACA,WACA,YACA,UACA,UACA,SACA,SACA,UACA,UACA,UACA,QACA,OACA,QACA,UACA,YACA,YACA,QACA,YACA,YACA,QACA,WACA,YACA,SACA,UACA,SACA,QACA,QACA,UACA,QACA,QACA,WACA,QACA,QACA,UACA,UACA,WACA,SACA,OACA,WACA,QACA,WACA,UACA,WACA,OACA,OACA,WACA,WACA,UACA,OACA,SACA,UACA,QACA,SACA,YACA,QACA,QACA,UACA,SACA,QACA,QACA,WACA,UACA,WACA,WACA,OACA,SACA,UACA,SACA,SACA,UACA,UACA,YACA,OACA,SACA,SACA,QACA,OACA,MACA,UACA,OACA,UACA,SACA,UACA,WACA,QACA,WACA,WACA,WACA,QACA,UACA,SACA,SACA,QACA,OACA,YACA,YACA,OACA,YACA,SACA,QACA,SACA,UACA,WACA,UACA,QACA,QACA,QACA,SACA,UACA,WACA,YACA,OACA,YACA,WACA,SACA,QACA,OACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,YACA,YACA,SACA,SACA,QACA,SACA,UACA,OACA,SACA,SACA,WACA,YACA,UACA,WACA,SACA,SACA,WACA,UACA,UACA,QACA,QACA,QACA,QACA,UACA,UACA,SACA,YACA,OACA,QACA,QACA,UACA,UACA,YACA,UACA,UACA,YACA,YACA,UACA,UACA,YACA,YACA,YACA,UACA,WACA,SACA,SACA,YACA,SACA,SACA,WACA,QACA,QACA,UACA,WACA,YACA,SACA,WACA,WACA,SACA,WACA,QACA,QACA,WACA,QACA,YACA,SACA,WACA,SACA,YACA,SACA,SACA,SACA,WACA,WACA,YACA,YACA,WACA,WACA,UACA,QACA,SACA,UACA,SACA,SACA,UACA,UACA,QACA,OACA,QACA,YACA,SACA,OACA,UACA,YACA,YACA,WACA,WACA,UACA,UACA,UACA,WACA,WACA,WACA,QACA,QACA,SACA,SACA,SACA,UACA,YACA,WACA,QACA,OACA,SACA,OACA,SACA,UACA,OACA,WACA,OACA,SACA,UACA,SACA,YACA,QACA,UACA,QACA,SACA,QACA,SACA,SACA,QACA,QACA,WACA,UACA,OACA,UACA,OACA,WACA,WACA,UACA,YACA,WACA,UACA,YACA,OACA,UACA,UACA,UACA,YACA,QACA,SACA,WACA,SACA,WACA,UACA,WACA,SACA,QACA,SACA,SACA,UACA,SACA,QACA,OACA,SACA,WACA,WACA,SACA,UACA,SACA,SACA,SACA,QACA,YACA,SACA,UACA,SACA,UACA,UACA,WACA,OACA,YACA,UACA,UACA,SACA,YACA,UACA,UACA,UACA,YACA,UACA,YACA,UACA,UACA,QACA,UACA,SACA,YACA,SACA,UACA,WACA,WACA,YACA,YACA,YACA,WACA,SACA,YACA,QACA,SACA,UACA,UACA,WACA,UACA,YACA,WACA,YACA,QACA,YACA,YACA,UACA,UACA,UACA,SACA,YACA,QACA,SACA,WACA,SACA,UACA,YACA,YACA,QACA,UACA,UACA,UACA,OACA,OACA,SACA,SACA,SACA,WACA,WACA,WACA,WACA,UACA,WACA,WACA,WACA,WACA,YACA,UACA,YACA,UACA,WACA,SACA,UACA,WACA,WACA,UACA,YACA,WACA,UACA,SACA,SACA,SACA,UACA,YACA,SACA,QACA,UACA,YACA,SACA,SACA,YACA,QACA,UACA,YACA,UACA,WACA,WACA,UACA,SACA,SACA,QACA,SACA,YACA,WACA,WACA,SACA,SACA,SACA,WACA,WACA,YACA,YACA,YACA,UACA,WACA,WACA,QACA,WACA,QACA,QACA,UACA,YACA,UACA,YACA,WACA,SACA,SACA,UACA,QACA,QACA,YACA,WACA,UACA,QACA,UACA,YACA,YACA,WACA,UACA,WACA,UACA,UACA,QACA,UACA,UACA,WACA,QACA,UACA,SACA,WACA,WACA,WACA,UACA,WACA,SACA,WACA,UACA,QACA,QACA,SACA,SACA,OACA,YACA,UACA,QACA,YACA,SACA,QACA,QACA,UACA,QACA,WACA,SACA,UACA,QACA,QACA,YACA,YACA,YACA,WACA,YACA,YACA,QACA,QACA,QACA,OACA,WACA,SACA,WACA,WACA,QACA,WACA,WACA,SACA,YACA,UACA,QACA,UACA,WACA,SACA,OACA,SACA,UACA,WACA,SACA,SACA,QACA,OACA,SACA,QACA,QACA,QACA,QACA,QACA,WACA,QACA,SACA,WACA,SACA,WACA,WACA,YACA,SACA,UACA,UACA,WACA,UACA,SACA,SACA,OACA,QACA,QACA,OACA,QACA,WACA,SACA,SACA,QACA,YACA,QACA,WACA,UACA,UACA,WACA,UACA,WACA,UACA,QACA,QACA,QACA,UACA,SACA,WACA,OACA,OACA,QACA,QACA,QACA,UACA,QACA,SACA,YACA,WACA,QACA,SACA,UACA,SACA,UACA,WACA,QACA,SACA,WACA,OACA,SACA,QACA,UACA,QACA,QACA,UACA,WACA,UACA,UACA,WACA,QACA,SACA,UACA,WACA,YACA,QACA,WACA,SACA,SACA,YACA,SACA,UACA,QACA,YACA,UACA,UACA,WACA,YACA,YACA,OACA,WACA,SACA,UACA,SACA,QACA,UACA,MACA,WACA,SACA,UACA,SACA,YACA,YACA,YACA,WACA,YACA,WACA,WACA,OACA,OACA,OACA,OACA,WACA,WACA,UACA,WACA,SACA,YACA,YACA,UACA,SACA,YACA,WACA,WACA,WACA,SACA,WACA,OACA,OACA,OACA,UACA,QACA,QACA,SACA,QACA,WACA,UACA,UACA,WACA,UACA,YACA,YACA,SACA,YACA,UACA,YACA,YACA,YACA,YACA,YACA,YACA,UACA,UACA,SACA,UACA,SACA,YACA,WACA,WACA,YACA,UACA,YACA,WACA,WACA,YACA,WACA,YACA,UACA,UACA,UACA,WACA,UACA,YACA,UACA,QACA,YACA,UACA,WACA,WACA,SACA,WACA,YACA,YACA,UACA,YACA,YACA,UACA,OACA,UACA,WACA,YACA,YACA,WACA,YACA,YACA,WACA,YACA,UACA,WACA,UACA,WACA,WACA,WACA,YACA,YACA,YACA,YACA,WACA,WACA,UACA,YACA,UACA,WACA,YACA,YACA,YACA,UACA,UACA,YACA,YACA,YACA,WACA,YACA,YACA,YACA,UACA,WACA,YACA,UACA,YACA,WACA,UACA,YACA,YACA,WACA,UACA,UACA,UACA,UACA,WACA,UACA,YACA,UACA,UACA,YACA,OACA,SACA,SACA,UACA,SACA,UACA,SACA,OACA,QACA,OACA,WACA,YACA,UACA,SACA,SACA,SACA,YACA,YACA,WACA,WACA,YACA,QACA,WACA,UACA,WACA,YACA,SACA,UACA,WACA,UACA,YACA,YACA,UACA,SACA,SACA,WACA,YACA,SACA,SACA,YACA,OACA,UACA,SACA,QACA,QACA,QACA,YACA,YACA,WACA,YACA,UACA,SACA,UACA,WACA,QACA,UACA,WACA,UACA,SACA,WACA,OACA,WACA,YACA,WACA,WACA,SACA,WACA,UACA,WACA,YACA,YACA,SACA,QACA,YACA,QACA,UACA,UACA,QACA,QACA,QACA,UACA,WACA,WACA,WACA,WACA,SACA,SACA,UACA,YACA,QACA,UACA,UACA,YACA,SACA,WACA,YACA,SACA,WACA,WACA,WACA,WACA,WACA,SACA,QACA,QACA,SACA,QACA,QACA,WACA,UACA,WACA,YACA,UACA,WACA,UACA,WACA,OACA,UACA,QACA,QACA,QACA,UACA,SACA,WACA,UACA,UACA,UACA,WACA,UACA,YACA,SACA,WACA,UACA,QACA,QACA,QACA,QACA,OACA,QACA,SACA,UACA,UACA,QACA,QACA,UACA,UACA,YACA,UACA,YACA,UACA,QACA,YACA,SACA,UACA,WACA,WACA,YACA,UACA,WACA,YACA,UACA,UACA,WACA,QACA,OACA,SACA,UACA,UACA,YACA,OACA,UACA,UACA,WACA,SACA,SACA,WACA,WACA,YACA,WACA,UACA,YACA,WACA,UACA,YACA,UACA,QACA,SACA,UACA,UACA,UACA,SACA,OACA,SACA,SACA,SACA,SACA,YACA,UACA,QACA,QACA,QACA,UACA,SACA,UACA,SACA,SACA,YACA,QACA,QACA,QACA,OACA,SACA,UACA,YACA,UACA,YACA,WACA,YACA,UACA,MACA,QACA,SACA,UACA,UACA,WACA,SACA,YACA,YACA,MACA,MACA,WACA,SACA,QACA,WACA,SACA,QACA,QACA,WACA,QACA,UACA,YACA,SACA,WACA,QACA,SACA,SACA,WACA,YACA,QACA,WACA,WACA,YACA,UACA,WACA,WACA,UACA,OACA,OACA,YACA,OACA,YACA,OACA,WACA,SACA,WACA,WACA,UACA,OACA,SACA,WACA,UACA,WACA,WACA,UACA,UACA,UACA,UACA,WACA,SACA,YACA,WACA,SACA,UACA,YACA,QACA,OACA,YACA,SACA,WACA,QACA,UACA,WACA,SACA,QACA,SACA,SACA,QACA,QACA,YACA,QACA,WACA,SACA,WACA,YACA,WACA,UACA,SACA,YACA,YACA,UACA,YACA,UACA,YACA,WACA,OACA,WACA,UACA,SACA,YACA,YACA,YACA,QACA,WACA,SACA,WACA,YACA,SACA,SACA,OACA,OACA,SACA,SACA,WACA,SACA,WACA,SACA,UACA,SACA,YACA,YACA,YACA,WACA,UACA,YACA,WACA,WACA,WACA,UACA,SACA,WACA,SACA,WACA,UACA,YACA,WACA,YACA,YACA,QACA,WACA,UACA,UACA,SACA,SACA,OACA,WACA,YACA,WACA,SACA,YACA,QACA,WACA,QACA,WACA,YACA,SACA,WACA,WACA,WACA,YACA,YACA,YACA,WACA,YACA,WACA,UACA,QACA,SACA,WACA,SACA,YACA,YACA,WACA,SACA,YACA,WACA,SACA,WACA,YACA,YACA,WACA,SACA,QACA,SACA,QACA,UACA,SACA,UACA,UACA,OACA,YACA,YACA,WACA,YACA,SACA,UACA,YACA,WACA,SACA,SACA,SACA,WACA,YACA,YACA,UACA,UACA,QACA,WACA,SACA,SACA,WACA,QACA,UACA,YACA,UACA,YACA,YACA,WACA,WACA,YACA,YACA,UACA,WACA,WACA,UACA,UACA,UACA,UACA,YACA,WACA,WACA,SACA,YACA,YACA,WACA,YACA,YACA,SACA,WACA,YACA,WACA,UACA,QACA,UACA,WACA,UACA,UACA,YACA,WACA,SACA,UACA,YACA,UACA,WACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,WACA,YACA,YACA,UACA,OACA,WACA,SACA,YACA,QACA,OACA,SACA,UACA,YACA,WACA,YACA,WACA,WACA,YACA,YACA,MACA,WACA,YACA,WACA,OACA,SACA,OACA,WACA,QACA,SACA,SACA,UACA,SACA,QACA,UACA,SACA,YACA,QACA,QACA,SACA,SACA,UACA,UACA,UACA,SACA,SACA,UACA,WACA,YACA,YACA,WACA,YACA,WACA,YACA,WACA,WACA,WACA,SACA,WACA,WACA,UACA,YACA,WACA,UACA,UACA,YACA,WACA,WACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,WACA,OACA,YACA,UACA,OACA,UACA,YACA,YACA,WACA,WACA,YACA,SACA,UACA,WACA,UACA,WACA,SACA,YACA,YACA,WACA,WACA,YACA,YACA,YACA,WACA,UACA,YACA,WACA,UACA,WACA,UACA,YACA,UACA,WACA,WACA,UACA,WACA,UACA,WACA,UACA,WACA,WACA,WACA,WACA,QACA,QACA,QACA,YACA,UACA,WACA,WACA,WACA,WACA,SACA,WACA,YACA,YACA,WACA,WACA,WACA,YACA,QACA,SACA,SACA,OACA,WACA,WACA,QACA,QACA,QACA,QACA,OACA,SACA,YACA,SACA,QACA,UACA,SACA,WACA,WACA,WACA,WACA,UACA,WACA,UACA,QACA,QACA,SACA,WACA,YACA,WACA,UACA,UACA,WACA,WACA,WACA,WACA,UACA,QACA,OACA,YACA,SACA,SACA,OACA,SACA,WACA,SACA,OACA,OACA,QACA,OACA,OACA,WACA,YACA,YACA,WACA,YACA,WACA,UACA,UACA,YACA,WACA,YACA,QACA,UACA,UACA,OACA,UACA,WACA,YACA,YACA,WACA,YACA,YACA,YACA,SACA,SACA,WACA,SACA,SACA,QACA,OACA,UACA,QACA,QACA,QACA,UACA,WACA,YACA,WACA,WACA,SACA,WACA,SACA,SACA,WACA,UACA,UACA,UACA,QACA,QACA,QACA,YACA,UACA,WACA,UACA,UACA,UACA,QACA,QACA,WACA,SACA,OACA,MACA,SACA,YACA,UACA,WACA,UACA,WACA,WACA,QACA,OACA,OACA,SACA,SACA,MACA,OACA,SACA,WACA,OACA,UACA,WACA,WACA,MACA,OACA,SACA,YACA,YACA,UACA,UACA,WACA,SACA,SACA,OACA,OACA,UACA,OACA,QACA,QACA,QACA,UACA,UACA,WACA,UACA,YACA,UACA,WACA,UACA,WACA,WACA,OACA,QACA,UACA,UACA,UACA,SACA,UACA,QACA,UACA,UACA,WACA,WACA,WACA,UACA,UACA,UACA,YACA,YACA,UACA,YACA,SACA,SACA,UACA,QACA,UACA,SACA,WACA,SACA,YACA,YACA,SACA,WACA,UACA,QACA,SACA,SACA,OACA,OACA,QACA,QACA,QACA,YACA,OACA,SACA,UACA,YACA,UACA,WACA,YACA,UACA,YACA,YACA,OACA,WACA,SACA,OACA,UACA,SACA,WACA,YACA,WACA,MACA,YACA,UACA,YACA,SACA,YACA,SACA,SACA,WACA,WACA,YACA,UACA,YACA,SACA,QACA,YACA,UACA,SACA,QACA,YACA,UACA,SACA,YACA,WACA,WACA,WACA,UACA,YACA,YACA,WACA,SACA,MACA,WACA,WACA,YACA,QACA,UACA,SACA,MACA,UACA,WACA,MACA,YACA,QACA,YACA,WACA,YACA,QACA,UACA,QACA,QACA,UACA,SACA,UACA,YACA,YACA,QACA,WACA,UACA,SACA,SACA,WACA,SACA,YACA,QACA,UACA,YACA,WACA,OACA,QACA,WACA,UACA,WACA,UACA,UACA,WACA,WACA,YACA,WACA,YACA,WACA,WACA,WACA,WACA,UACA,UACA,YACA,QACA,MACA,SACA,YACA,SACA,YACA,YACA,WACA,UACA,YACA,SACA,SACA,YACA,YACA,WACA,UACA,UACA,WACA,WACA,YACA,QACA,SACA,UACA,UACA,YACA,YACA,UACA,YACA,WACA,YACA,YACA,WACA,YACA,WACA,SACA,WACA,WACA,UACA,WACA,SACA,UACA,WACA,WACA,YACA,UACA,SACA,UACA,YACA,YACA,YACA,UACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,SACA,SACA,SACA,UACA,UACA,SACA,SACA,YACA,WACA,YACA,WACA,SACA,UACA,SACA,SACA,YACA,SACA,SACA,WACA,UACA,WACA,UACA,YACA,WACA,WACA,WACA,UACA,WACA,QACA,OACA,SACA,OACA,WACA,YACA,YACA,WACA,WACA,YACA,WACA,WACA,UACA,QACA,SACA,WACA,UACA,UACA,YACA,SACA,YACA,YACA,WACA,SACA,SACA,UACA,YACA,SACA,SACA,UACA,QACA,QACA,WACA,YACA,YACA,WACA,WACA,WACA,SACA,YACA,YACA,WACA,UACA,QACA,UACA,YACA,YACA,SACA,WACA,WACA,YACA,YACA,WACA,UACA,UACA,WACA,UACA,QACA,YACA,SACA,YACA,WACA,UACA,QACA,WACA,YACA,YACA,UACA,UACA,OACA,YACA,YACA,YACA,WACA,WACA,QACA,WACA,UACA,OACA,QACA,YACA,SACA,QACA,UACA,UACA,WACA,YACA,YACA,YACA,SACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,SACA,YACA,YACA,YACA,YACA,QACA,OACA,YACA,SACA,UACA,SACA,QACA,WACA,OACA,SACA,YACA,WACA,WACA,SACA,UACA,YACA,YACA,YACA,YACA,YACA,QACA,SACA,WACA,YACA,SACA,SACA,WACA,UACA,YACA,WACA,UACA,UACA,UACA,YACA,WACA,WACA,YACA,SACA,WACA,UACA,YACA,YACA,WACA,YACA,SACA,YACA,WACA,WACA,UACA,YACA,YACA,SACA,YACA,UACA,YACA,YACA,QACA,SACA,WACA,WACA,YACA,WACA,WACA,WACA,YACA,UACA,SACA,WACA,SACA,YACA,UACA,UACA,SACA,YACA,UACA,UACA,OACA,SACA,UACA,SACA,OACA,QACA,UACA,OACA,WACA,SACA,SACA,WACA,UACA,UACA,YACA,QACA,UACA,OACA,UACA,YACA,YACA,UACA,UACA,WACA,SACA,UACA,WACA,SACA,YACA,YACA,UACA,WACA,WACA,MACA,QACA,UACA,SACA,SACA,OACA,OACA,SACA,SACA,WACA,WACA,WACA,WACA,WACA,QACA,QACA,UACA,SACA,UACA,WACA,YACA,WACA,SACA,SACA,QACA,SACA,SACA,WACA,UACA,YACA,QACA,QACA,QACA,QACA,UACA,SACA,WACA,WACA,YACA,UACA,UACA,QACA,WACA,QACA,UACA,SACA,WACA,SACA,SACA,SACA,UACA,OACA,SACA,QACA,WACA,SACA,WACA,WACA,UACA,UACA,YACA,QACA,WACA,QACA,UACA,WACA,WACA,YACA,SACA,UACA,UACA,WACA,MACA,OACA,UACA,UACA,WACA,WACA,YACA,YACA,QACA,UACA,QACA,QACA,YACA,UACA,WACA,WACA,OACA,UACA,YACA,YACA,YACA,WACA,WACA,SACA,QACA,UACA,WACA,SACA,WACA,UACA,YACA,YACA,WACA,UACA,WACA,WACA,WACA,YACA,YACA,WACA,OACA,UACA,SACA,QACA,QACA,SACA,SACA,QACA,QACA,OACA,QACA,QACA,QACA,WACA,OACA,SACA,UACA,QACA,WACA,UACA,UACA,QACA,SACA,UACA,WACA,OACA,MACA,MACA,OACA,QACA,OACA,WACA,SACA,WACA,SACA,WACA,SACA,OACA,OACA,OACA,UACA,WACA,WACA,YACA,SACA,WACA,WACA,WACA,UACA,WACA,UACA,WACA,UACA,WACA,YACA,WACA,UACA,WACA,WACA,WACA,SACA,SACA,UACA,WACA,WACA,MACA,QACA,WACA,WACA,UACA,YACA,WACA,YACA,WACA,QACA,QACA,UACA,UACA,YACA,SACA,UACA,QACA,WACA,WACA,WACA,UACA,UACA,UACA,WACA,WACA,UACA,WACA,SACA,YACA,WACA,YACA,WACA,UACA,WACA,YACA,WACA,UACA,SACA,WACA,SACA,YACA,WACA,QACA,UACA,UACA,WACA,SACA,SACA,QACA,SACA,WACA,YACA,YACA,WACA,QACA,SACA,UACA,QACA,UACA,YACA,SACA,OACA,QACA,YACA,UACA,WACA,WACA,YACA,SACA,QACA,QACA,SACA,WACA,YACA,WACA,QACA,YACA,SACA,MACA,QACA,MACA,YACA,UACA,QACA,OACA,YACA,WACA,UACA,SACA,SACA,UACA,YACA,SACA,YACA,WACA,OACA,SACA,QACA,SACA,SACA,WACA,UACA,MACA,SACA,UACA,SACA,SACA,UACA,SACA,UACA,SACA,UACA,SACA,MACA,WACA,YACA,SACA,UACA,WACA,QACA,OACA,OACA,SACA,OACA,QACA,OACA,SACA,MACA,SACA,UACA,WACA,WACA,QACA,UACA,YACA,SACA,QACA,YACA,WACA,YACA,UACA,YACA,WACA,WACA,SACA,YACA,YACA,YACA,WACA,YACA,UACA,YACA,UACA,UACA,UACA,QACA,QACA,YACA,SACA,UACA,YACA,QACA,OACA,WACA,YACA,WACA,SACA,WACA,SACA,SACA,SACA,QACA,UACA,SACA,WACA,QACA,QACA,SACA,QACA,UACA,UACA,UACA,QACA,YACA,SACA,YACA,UACA,SACA,WACA,YACA,QACA,UACA,QACA,WACA,UACA,WACA,UACA,SACA,UACA,UACA,UACA,UACA,SACA,UACA,SACA,UACA,WACA,WACA,SACA,YACA,YACA,UACA,WACA,QACA,QACA,QACA,UACA,WACA,UACA,OACA,SACA,YACA,UACA,SACA,OACA,OACA,WACA,OACA,UACA,QACA,WACA,WACA,YACA,OACA,UACA,QACA,UACA,OACA,OACA,OACA,QACA,WACA,YACA,QACA,SACA,OACA,SACA,OACA,SACA,WACA,OACA,UACA,SACA,SACA,SACA,OACA,OACA,OACA,WACA,YACA,WACA,YACA,SACA,SACA,WACA,UACA,YACA,WACA,WACA,UACA,WACA,QACA,WACA,WACA,UACA,UACA,UACA,WACA,UACA,SACA,UACA,QACA,WACA,QACA,QACA,UACA,YACA,QACA,QACA,YACA,UACA,UACA,YACA,WACA,SACA,YACA,SACA,YACA,YACA,UACA,QACA,OACA,UACA,WACA,WACA,YACA,SACA,QACA,UACA,WACA,OACA,YACA,OACA,QACA,YACA,WACA,WACA,QACA,UACA,YACA,QACA,YACA,QACA,SACA,WACA,OACA,UACA,OACA,WACA,SACA,QACA,QACA,SACA,WACA,SACA,QACA,SACA,UACA,QACA,QACA,SACA,UACA,QACA,OACA,SACA,WACA,WACA,UACA,UACA,YACA,UACA,WACA,SACA,QACA,YACA,WACA,WACA,QACA,UACA,YACA,QACA,OACA,WACA,QACA,OACA,UACA,UACA,YACA,UACA,QACA,SACA,WACA,OACA,OACA,QACA,QACA,UACA,OACA,SACA,MACA,UACA,WACA,YACA,WACA,UACA,WACA,SACA,SACA,UACA,UACA,MACA,UACA,QACA,OACA,UACA,OACA,SACA,SACA,YACA,SACA,UACA,SACA,UACA,YACA,UACA,WACA,WACA,YACA,WACA,WACA,YACA,YACA,WACA,SACA,UACA,WACA,UACA,WACA,YACA,YACA,YACA,UACA,UACA,WACA,WACA,UACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,YACA,WACA,WACA,YACA,YACA,WACA,WACA,UACA,WACA,SACA,YACA,SACA,QACA,YACA,YACA,UACA,WACA,UACA,YACA,QACA,SACA,WACA,WACA,YACA,WACA,WACA,WACA,YACA,UACA,WACA,YACA,SACA,WACA,WACA,WACA,YACA,WACA,QACA,UACA,WACA,YACA,YACA,YACA,UACA,UACA,UACA,QACA,UACA,OACA,SACA,QACA,UACA,YACA,QACA,SACA,YACA,WACA,UACA,WACA,YACA,OACA,UACA,SACA,QACA,QACA,SACA,WACA,SACA,WACA,SACA,OACA,WACA,WACA,YACA,YACA,YACA,SACA,SACA,YACA,WACA,UACA,WACA,WACA,WACA,YACA,YACA,WACA,WACA,YACA,UACA,WACA,YACA,YACA,UACA,WACA,OACA,OACA,QACA,UACA,YACA,UACA,QACA,UACA,YACA,QACA,SACA,SACA,SACA,UACA,UACA,WACA,WACA,UACA,YACA,QACA,WACA,QACA,SACA,SACA,YACA,QACA,WACA,SACA,UACA,UACA,UACA,UACA,QACA,YACA,WACA,WACA,UACA,WACA,SACA,SACA,WACA,OACA,MACA,OACA,OACA,OACA,QACA,SACA,WACA,SACA,QACA,YACA,WACA,UACA,SACA,YACA,WACA,YACA,WACA,WACA,SACA,SACA,YACA,YACA,SACA,WACA,SACA,OACA,SACA,UACA,WACA,WACA,SACA,SACA,SACA,UACA,SACA,YACA,UACA,QACA,OACA,UACA,OACA,SACA,YACA,MACA,SACA,UACA,WACA,YACA,WACA,YACA,YACA,YACA,SACA,WACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,MACA,UACA,QACA,OACA,OACA,MACA,WACA,WACA,WACA,UACA,YACA,YACA,WACA,WACA,WACA,SACA,QACA,OACA,QACA,WACA,SACA,SACA,YACA,WACA,WACA,QACA,YACA,WACA,UACA,WACA,UACA,YACA,WACA,UACA,YACA,WACA,WACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,WACA,SACA,SACA,YACA,UACA,WACA,YACA,YACA,WACA,SACA,UACA,YACA,YACA,WACA,UACA,YACA,YACA,QACA,WACA,YACA,WACA,SACA,WACA,YACA,YACA,WACA,UACA,YACA,UACA,WACA,YACA,WACA,UACA,YACA,YACA,YACA,UACA,YACA,SACA,WACA,SACA,SACA,MACA,OACA,SACA,OACA,QACA,MACA,OACA,YACA,WACA,YACA,YACA,WACA,WACA,UACA,WACA,WACA,YACA,YACA,UACA,QACA,UACA,YACA,UACA,OACA,YACA,SACA,QACA,MACA,MACA,SACA,SACA,YACA,UACA,WACA,YACA,SACA,YACA,WACA,MACA,UACA,UACA,SACA,UACA,UACA,WACA,QACA,OACA,QACA,UACA,UACA,OACA,UACA,YACA,OACA,OACA,YACA,UACA,QACA,SACA,SACA,MACA,QACA,SACA,QACA,SACA,WACA,OACA,UACA,UACA,MACA,SACA,YACA,SACA,UACA,OACA,UACA,WACA,WACA,YACA,QACA,OACA,MACA,SACA,WACA,YACA,SACA,UACA,WACA,YACA,WACA,QACA,YACA,WACA,YACA,OACA,SACA,WACA,UACA,QACA,YACA,QACA,UACA,UACA,OACA,SACA,QACA,OACA,WACA,WACA,OACA,SACA,UACA,SACA,UACA,WACA,SACA,QACA,OACA,UACA,YACA,UACA,SACA,WACA,WACA,QACA,WACA,UACA,SACA,QACA,QACA,SACA,WACA,OACA,MACA,OACA,SACA,OACA,WACA,WACA,SACA,OACA,OACA,WACA,WACA,YACA,WACA,OACA,SACA,SACA,WACA,SACA,WACA,UACA,UACA,UACA,OACA,UACA,UACA,YACA,WACA,SACA,UACA,UACA,OACA,SACA,QACA,OACA,UACA,WACA,OACA,QACA,WACA,QACA,QACA,QACA,SACA,UACA,QACA,OACA,UACA,UACA,WACA,YACA,WACA,SACA,SACA,QACA,UACA,WACA,SACA,UACA,SACA,OACA,OACA,QACA,SACA,WACA,WACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YACA,YACA,WACA,YACA,WACA,YACA,QACA,UACA,SACA,QACA,SACA,UACA,SACA,OACA,QACA,OACA,OACA,QACA,OACA,QACA,OACA,SACA,WACA,UACA,SACA,WACA,SACA,UACA,UACA,SACA,WACA,SACA,WACA,SACA,WACA,OACA,WACA,OACA,SACA,QACA,SACA,SACA,WACA,UACA,UACA,YACA,OACA,UACA,SACA,YACA,UACA,QACA,OACA,SACA,OACA,OACA,UACA,SACA,UACA,YACA,WACA,SACA,UACA,QACA,WACA,SACA,WACA,YACA,YACA,SACA,UACA,YACA,UACA,UACA,WACA,MACA,OACA,SACA,UACA,UACA,WACA,SACA,WACA,WACA,SACA,QACA,QACA,OACA,OACA,UACA,YACA,QACA,QACA,UACA,WACA,OACA,QACA,WACA,WACA,SACA,SACA,WACA,UACA,OACA,OACA,MACA,UACA,UACA,SACA,OACA,OACA,WACA,YACA,SACA,SACA,SACA,UACA,QACA,SACA,QACA,YACA,UACA,SACA,SACA,YACA,YACA,QACA,UACA,YACA,WACA,YACA,YACA,SACA,WACA,UACA,SACA,YACA,WACA,YACA,UACA,UACA,SACA,QACA,WACA,WACA,YACA,YACA,OACA,QACA,OACA,YACA,OACA,SACA,WACA,SACA,YACA,UACA,YACA,WACA,QACA,YACA,SACA,QACA,YACA,WACA,WACA,SACA,WACA,WACA,QACA,OACA,UACA,YACA,WACA,UACA,SACA,UACA,WACA,QACA,YACA,WACA,YACA,YACA,YACA,UACA,YACA,WACA,WACA,SACA,WACA,UACA,YACA,WACA,WACA,QACA,YACA,SACA,YACA,OACA,OACA,SACA,UACA,YACA,UACA,WACA,UACA,WACA,UACA,YACA,WACA,SACA,SACA,QACA,QACA,YACA,UACA,UACA,UACA,YACA,WACA,YACA,SACA,UACA,UACA,YACA,QACA,UACA,SACA,UACA,QACA,WACA,SACA,SACA,SACA,OACA,MACA,WACA,YACA,UACA,UACA,WACA,QACA,QACA,YACA,YACA,SACA,WACA,SACA,SACA,UACA,WACA,SACA,YACA,SACA,UACA,SACA,QACA,YACA,SACA,YACA,YACA,UACA,SACA,YACA,SACA,UACA,WACA,SACA,UACA,UACA,UACA,YACA,WACA,UACA,WACA,YACA,WACA,WACA,YACA,OACA,SACA,YACA,YACA,SACA,SACA,SACA,SACA,WACA,WACA,WACA,QACA,WACA,WACA,UACA,QACA,SACA,YACA,SACA,UACA,SACA,WACA,WACA,UACA,QACA,SACA,SACA,WACA,SACA,UACA,YACA,SACA,UACA,YACA,WACA,QACA,WACA,OACA,YACA,WACA,WACA,UACA,MACA,YACA,SACA,WACA,WACA,YACA,YACA,YACA,WACA,UACA,UACA,WACA,WACA,WACA,YACA,WACA,WACA,WACA,WACA,WACA,WACA,UACA,YACA,UACA,WACA,UACA,YACA,QACA,SACA,WACA,SACA,YACA,WACA,UACA,WACA,YACA,YACA,YACA,WACA,MACA,SACA,WACA,UACA,YACA,WACA,WACA,WACA,QACA,YACA,WACA,YACA,YACA,UACA,WACA,SACA,QACA,OACA,WACA,YACA,SACA,WACA,YACA,SACA,YACA,QACA,QACA,YACA,WACA,UACA,WACA,UACA,WACA,QACA,YACA,YACA,QACA,QACA,UACA,OACA,QACA,SACA,QACA,SACA,OACA,OACA,MACA,MACA,WACA,QACA,OACA,SACA,UACA,WACA,WACA,YACA,YACA,SACA,WACA,QACA,YACA,UACA,QACA,QACA,WACA,UACA,YACA,SACA,QACA,YACA,QACA,YACA,WACA,SACA,UACA,YACA,WACA,QACA,QACA,SACA,YACA,QACA,UACA,UACA,SACA,YACA,QACA,UACA,SACA,WACA,OACA,YACA,YACA,SACA,OACA,SACA,SACA,SACA,UACA,YACA,UACA,OACA,QACA,MACA,OACA,OACA,SACA,QACA,YACA,OACA,SACA,SACA,UACA,QACA,SACA,UACA,YACA,WACA,SACA,WACA,UACA,SACA,WACA,WACA,WACA,YACA,OACA,SACA,UACA,SACA,WACA,SACA,WACA,SACA,YACA,SACA,SACA,WACA,WACA,YACA,WACA,YACA,YACA,UACA,UACA,OACA,SACA,OACA,UACA,QACA,OACA,MACA,YACA,SACA,WACA,WACA,SACA,UACA,QACA,OACA,SACA,WACA,WACA,QACA,QACA,SACA,SACA,WACA,YACA,QACA,WACA,QACA,UACA,SACA,UACA,SACA,UACA,SACA,UACA,SACA,WACA,UACA,WACA,YACA,UACA,WACA,WACA,UACA,UACA,UACA,UACA,UACA,SACA,WACA,WACA,YACA,QACA,SACA,QACA,MACA,MACA,QACA,MACA,YACA,WACA,WACA,SACA,WACA,UACA,WACA,YACA,SACA,YACA,OACA,UACA,YACA,YACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,YACA,WACA,SACA,YACA,SACA,UACA,YACA,YACA,WACA,WACA,SACA,QACA,SACA,UACA,SACA,UACA,UACA,OACA,MACA,OACA,WACA,OACA,MACA,QACA,WACA,QACA,OACA,UACA,WACA,OACA,WACA,UACA,WACA,UACA,QACA,SACA,WACA,OACA,WACA,QACA,UACA,YACA,UACA,OACA,SACA,OACA,OACA,OACA,OACA,UACA,OACA,OACA,WACA,UACA,YACA,YACA,YACA,WACA,QACA,UACA,WACA,SACA,WACA,WACA,YACA,YACA,MACA,YACA,UACA,QACA,QACA,OACA,QACA,QACA,SACA,UACA,SACA,WACA,WACA,WACA,WACA,UACA,WACA,UACA,WACA,WACA,QACA,WACA,SACA,WACA,WACA,UACA,WACA,SACA,UACA,SACA,UACA,UACA,WACA,WACA,UACA,YACA,YACA,UACA,UACA,SACA,UACA,UACA,WACA,WACA,WACA,UACA,WACA,WACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,UACA,WACA,SACA,OACA,QACA,OACA,UACA,UACA,WACA,UACA,WACA,WACA,YACA,YACA,WACA,YACA,WACA,WACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,UACA,YACA,YACA,YACA,UACA,WACA,WACA,WACA,WACA,YACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YACA,WACA,YACA,WACA,UACA,UACA,WACA,WACA,WACA,YACA,YACA,WACA,UACA,YACA,WACA,YACA,YACA,WACA,YACA,YACA,WACA,WACA,WACA,UACA,YACA,WACA,YACA,YACA,YACA,WACA,YACA,YACA,WACA,WACA,YACA,YACA,YACA,WACA,YACA,WACA,UACA,WACA,WACA,WACA,UACA,YACA,WACA,YACA,MACA,SACA,UACA,YACA,UACA,YACA,SACA,WACA,SACA,QACA,QACA,YACA,UACA,WACA,WACA,WACA,SACA,SACA,UACA,SACA,WACA,UACA,QACA,QACA,SACA,UACA,SACA,YACA,OACA,WACA,YACA,SACA,WACA,WACA,UACA,WACA,SACA,UACA,WACA,QACA,WACA,OACA,YACA,QACA,UACA,WACA,YACA,UACA,YACA,SACA,QACA,YACA,YACA,SACA,QACA,UACA,UACA,WACA,YACA,SACA,UACA,YACA,WACA,YACA,YACA,YACA,WACA,YACA,YACA,YACA,WACA,WACA,YACA,SACA,UACA,YACA,SACA,SACA,QACA,UACA,UACA,SACA,WACA,SACA,SACA,UACA,UACA,UACA,SACA,UACA,YACA,SACA,UACA,YACA,QACA,WACA,WACA,UACA,WACA,YACA,WACA,UACA,UACA,UACA,YACA,WACA,WACA,WACA,QACA,SACA,SACA,UACA,SACA,WACA,UACA,QACA,YACA,SACA,WACA,YACA,OACA,WACA,UACA,QACA,YACA,UACA,SACA,YACA,YACA,SACA,WACA,QACA,YACA,WACA,SACA,SACA,UACA,UACA,WACA,SACA,QACA,QACA,SACA,UACA,WACA,UACA,SACA,SACA,QACA,SACA,WACA,WACA,YACA,WACA,WACA,YACA,WACA,UACA,SACA,OACA,SACA,WACA,UACA,SACA,UACA,UACA,YACA,WACA,UACA,YACA,QACA,SACA,UACA,WACA,YACA,MACA,WACA,UACA,QACA,YACA,YACA,YACA,YACA,UACA,YACA,SACA,WACA,UACA,YACA,QACA,OACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,QACA,OACA,YACA,YACA,SACA,YACA,QACA,SACA,WACA,QACA,YACA,SACA,YACA,YACA,QACA,UACA,UACA,SACA,UACA,YACA,SACA,UACA,YACA,QACA,YACA,QACA,SACA,WACA,UACA,UACA,WACA,QACA,UACA,QACA,SACA,UACA,UACA,SACA,WACA,UACA,WACA,WACA,UACA,WACA,YACA,YACA,WACA,WACA,SACA,UACA,YACA,YACA,UACA,WACA,YACA,WACA,UACA,UACA,WACA,UACA,YACA,WACA,QACA,WACA,QACA,SACA,YACA,SACA,WACA,YACA,UACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,UACA,WACA,SACA,OACA,YACA,UACA,QACA,MACA,OACA,OACA,OACA,UACA,UACA,WACA,YACA,SACA,QACA,SACA,QACA,SACA,QACA,SACA,SACA,QACA,SACA,WACA,QACA,OACA,YACA,UACA,YACA,UACA,SACA,OACA,OACA,UACA,OACA,SACA,SACA,QACA,WACA,WACA,UACA,WACA,YACA,OACA,SACA,WACA,WACA,SACA,YACA,WACA,UACA,SACA,WACA,QACA,OACA,SACA,WACA,WACA,SACA,UACA,SACA,UACA,WACA,SACA,SACA,UACA,YACA,UACA,UACA,QACA,SACA,WACA,QACA,UACA,OACA,WACA,YACA,UACA,QACA,SACA,MACA,WACA,SACA,WACA,UACA,WACA,YACA,SACA,UACA,WACA,YACA,UACA,WACA,WACA,UACA,YACA,UACA,SACA,WACA,YACA,UACA,UACA,SACA,YACA,YACA,UACA,YACA,WACA,YACA,YACA,SACA,UACA,WACA,WACA,UACA,WACA,YACA,WACA,UACA,SACA,UACA,SACA,YACA,YACA,YACA,SACA,UACA,YACA,UACA,QACA,UACA,YACA,UACA,YACA,YACA,WACA,UACA,SACA,UACA,UACA,YACA,UACA,UACA,WACA,SACA,YACA,WACA,QACA,SACA,YACA,UACA,UACA,SACA,QACA,WACA,QACA,QACA,QACA,SACA,SACA,WACA,UACA,UACA,YACA,QACA,YACA,WACA,WACA,YACA,QACA,UACA,YACA,UACA,YACA,UACA,WACA,YACA,WACA,WACA,UACA,UACA,UACA,UACA,YACA,YACA,YACA,UACA,WACA,YACA,UACA,YACA,UACA,WACA,YACA,WACA,YACA,YACA,YACA,WACA,YACA,WACA,WACA,QACA,QACA,YACA,SACA,WACA,YACA,SACA,YACA,WACA,WACA,YACA,WACA,UACA,QACA,UACA,YACA,WACA,SACA,YACA,YACA,WACA,WACA,QACA,WACA,SACA,SACA,WACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,UACA,UACA,WACA,YACA,QACA,SACA,QACA,YACA,QACA,UACA,MACA,UACA,SACA,YACA,SACA,SACA,MACA,OACA,YACA,OACA,UACA,QACA,YACA,OACA,SACA,SACA,QACA,WACA,YACA,YACA,UACA,WACA,OACA,QACA,SACA,QACA,WACA,YACA,WACA,SACA,WACA,YACA,QACA,UACA,WACA,SACA,SACA,UACA,SACA,SACA,WACA,YACA,OACA,QACA,YACA,WACA,UACA,WACA,WACA,YACA,SACA,YACA,UACA,WACA,UACA,SACA,QACA,UACA,OACA,SACA,WACA,UACA,YACA,SACA,QACA,WACA,QACA,WACA,QACA,UACA,YACA,YACA,UACA,UACA,QACA,UACA,UACA,SACA,YACA,YACA,WACA,UACA,SACA,QACA,UACA,UACA,YACA,YACA,YACA,QACA,QACA,QACA,UACA,YACA,QACA,OACA,SACA,YACA,WACA,YACA,QACA,QACA,OACA,SACA,SACA,OACA,SACA,QACA,SACA,WACA,YACA,WACA,YACA,WACA,QACA,SACA,SACA,OACA,OACA,SACA,SACA,UACA,SACA,UACA,UACA,WACA,UACA,SACA,OACA,SACA,QACA,SACA,WACA,OACA,SACA,QACA,YACA,SACA,SACA,SACA,UACA,SACA,UACA,UACA,UACA,QACA,OACA,SACA,SACA,OACA,UACA,SACA,QACA,SACA,SACA,UACA,YACA,WACA,QACA,YACA,WACA,WACA,UACA,WACA,OACA,YACA,WACA,UACA,YACA,YACA,YACA,WACA,SACA,WACA,WACA,WACA,UACA,YACA,SACA,QACA,UACA,SACA,SACA,UACA,SACA,UACA,UACA,WACA,WACA,SACA,SACA,YACA,SACA,SACA,SACA,SACA,YACA,YACA,UACA,SACA,WACA,UACA,WACA,YACA,UACA,YACA,YACA,SACA,YACA,UACA,YACA,YACA,YACA,SACA,SACA,UACA,SACA,WACA,WACA,SACA,YACA,YACA,UACA,WACA,WACA,YACA,WACA,UACA,UACA,UACA,YACA,YACA,UACA,YACA,SACA,YACA,UACA,WACA,WACA,WACA,YACA,YACA,SACA,SACA,UACA,SACA,WACA,WACA,WACA,WACA,YACA,UACA,UACA,WACA,UACA,UACA,YACA,SACA,YACA,YACA,UACA,SACA,WACA,YACA,SACA,SACA,UACA,UACA,SACA,SACA,SACA,WACA,YACA,WACA,UACA,YACA,UACA,UACA,WACA,YACA,QACA,SACA,SACA,YACA,YACA,UACA,YACA,UACA,YACA,SACA,WACA,UACA,YACA,YACA,UACA,WACA,WACA,QACA,QACA,UACA,UACA,YACA,WACA,WACA,WACA,UACA,QACA,UACA,YACA,UACA,SACA,SACA,SACA,WACA,SACA,YACA,OACA,SACA,SACA,UACA,UACA,WACA,SACA,WACA,WACA,YACA,YACA,QACA,UACA,YACA,SACA,UACA,SACA,YACA,UACA,UACA,UACA,WACA,SACA,WACA,YACA,YACA,WACA,YACA,YACA,UACA,UACA,WACA,WACA,YACA,WACA,SACA,SACA,SACA,WACA,UACA,SACA,UACA,YACA,YACA,UACA,SACA,SACA,WACA,YACA,SACA,WACA,WACA,SACA,WACA,UACA,SACA,UACA,QACA,WACA,SACA,YACA,SACA,YACA,YACA,UACA,UACA,WACA,YACA,YACA,YACA,OACA,UACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,UACA,UACA,YACA,UACA,QACA,SACA,WACA,UACA,SACA,WACA,WACA,WACA,WACA,SACA,SACA,QACA,UACA,UACA,YACA,YACA,YACA,WACA,WACA,UACA,WACA,YACA,YACA,YACA,SACA,WACA,WACA,WACA,WACA,SACA,WACA,UACA,WACA,SACA,SACA,WACA,YACA,YACA,SACA,WACA,YACA,SACA,YACA,YACA,UACA,UACA,UACA,UACA,WACA,SACA,SACA,WACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,YACA,YACA,QACA,SACA,UACA,SACA,UACA,UACA,WACA,QACA,SACA,UACA,UACA,UACA,SACA,UACA,YACA,WACA,WACA,UACA,YACA,YACA,SACA,YACA,SACA,WACA,UACA,YACA,UACA,UACA,WACA,YACA,SACA,SACA,WACA,YACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,QACA,SACA,UACA,OACA,SACA,SACA,WACA,UACA,UACA,WACA,SACA,OACA,SACA,UACA,OACA,UACA,QACA,QACA,UACA,SACA,OACA,OACA,QACA,UACA,OACA,UACA,WACA,WACA,UACA,SACA,WACA,UACA,OACA,SACA,OACA,UACA,UACA,QACA,QACA,YACA,WACA,YACA,YACA,UACA,WACA,SACA,UACA,QACA,UACA,OACA,QACA,WACA,SACA,WACA,SACA,SACA,WACA,YACA,UACA,WACA,YACA,WACA,QACA,QACA,QACA,OACA,OACA,SACA,SACA,OACA,SACA,UACA,UACA,WACA,WACA,WACA,YACA,UACA,YACA,UACA,UACA,QACA,SACA,QACA,SACA,SACA,UACA,SACA,UACA,OACA,SACA,SACA,MACA,SACA,OACA,SACA,WACA,UACA,QACA,YACA,UACA,SACA,UACA,QACA,OACA,SACA,UACA,QACA,OACA,OACA,OACA,MACA,UACA,WACA,YACA,SACA,YACA,SACA,YACA,UACA,WACA,QACA,UACA,SACA,YACA,YACA,SACA,WACA,UACA,OACA,OACA,UACA,QACA,OACA,QACA,OACA,QACA,SACA,WACA,SACA,SACA,QACA,SACA,QACA,OACA,WACA,SACA,UACA,YACA,YACA,OACA,SACA,WACA,WACA,WACA,YACA,SACA,UACA,WACA,UACA,YACA,UACA,SACA,WACA,UACA,UACA,YACA,UACA,YACA,YACA,WACA,QACA,WACA,YACA,OACA,QACA,UACA,YACA,QACA,UACA,YACA,UACA,OACA,YACA,QACA,UACA,WACA,QACA,YACA,YACA,UACA,WACA,WACA,YACA,QACA,QACA,SACA,UACA,QACA,UACA,SACA,QACA,YACA,MACA,UACA,SACA,UACA,WACA,QACA,UACA,WACA,UACA,WACA,OACA,UACA,UACA,WACA,QACA,YACA,SACA,WACA,YACA,SACA,QACA,UACA,YACA,WACA,QACA,YACA,SACA,WACA,YACA,SACA,WACA,YACA,WACA,UACA,UACA,YACA,QACA,QACA,WACA,QACA,QACA,UACA,QACA,SACA,YACA,YACA,SACA,YACA,SACA,UACA,QACA,WACA,SACA,YACA,UACA,WACA,WACA,SACA,WACA,WACA,WACA,YACA,YACA,QACA,UACA,UACA,SACA,WACA,SACA,WACA,YACA,SACA,SACA,UACA,YACA,WACA,WACA,UACA,UACA,WACA,QACA,QACA,WACA,YACA,SACA,UACA,WACA,YACA,YACA,SACA,UACA,SACA,YACA,SACA,UACA,WACA,WACA,QACA,SACA,WACA,WACA,WACA,SACA,WACA,UACA,UACA,UACA,SACA,WACA,YACA,YACA,WACA,OACA,UACA,WACA,WACA,YACA,YACA,UACA,WACA,YACA,SACA,UACA,OACA,SACA,WACA,YACA,YACA,YACA,YACA,WACA,QACA,YACA,SACA,SACA,SACA,WACA,YACA,SACA,SACA,YACA,UACA,WACA,QACA,UACA,UACA,SACA,WACA,UACA,UACA,SACA,WACA,QACA,YACA,YACA,UACA,UACA,WACA,SACA,QACA,SACA,UACA,YACA,UACA,SACA,QACA,QACA,WACA,UACA,YACA,UACA,QACA,QACA,UACA,UACA,QACA,UACA,WACA,QACA,SACA,QACA,UACA,QACA,YACA,UACA,UACA,UACA,YACA,QACA,SACA,OACA,QACA,QACA,QACA,QACA,UACA,SACA,WACA,SACA,SACA,UACA,WACA,YACA,SACA,UACA,SACA,UACA,QACA,UACA,YACA,UACA,QACA,OACA,QACA,YACA,QACA,QACA,WACA,UACA,WACA,WACA,QACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,UACA,YACA,SACA,YACA,SACA,QACA,QACA,UACA,WACA,WACA,SACA,WACA,UACA,UACA,QACA,UACA,YACA,YACA,WACA,QACA,SACA,WACA,WACA,YACA,WACA,SACA,SACA,SACA,SACA,SACA,UACA,WACA,YACA,SACA,QACA,SACA,WACA,UACA,UACA,YACA,OACA,QACA,OACA,MACA,UACA,WACA,UACA,SACA,SACA,SACA,OACA,UACA,WACA,WACA,SACA,SACA,UACA,OACA,YACA,QACA,OACA,OACA,SACA,YACA,SACA,YACA,SACA,WACA,SACA,UACA,YACA,SACA,UACA,SACA,WACA,WACA,UACA,SACA,UACA,MACA,QACA,SACA,SACA,SACA,UACA,WACA,YACA,UACA,UACA,QACA,UACA,WACA,YACA,UACA,UACA,OACA,SACA,SACA,WACA,SACA,UACA,YACA,WACA,WACA,UACA,SACA,SACA,SACA,OACA,QACA,QACA,QACA,SACA,UACA,UACA,WACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,SACA,YACA,UACA,WACA,WACA,QACA,UACA,WACA,WACA,UACA,QACA,YACA,UACA,OACA,UACA,UACA,WACA,YACA,SACA,QACA,OACA,UACA,QACA,WACA,YACA,UACA,WACA,QACA,UACA,OACA,OACA,QACA,QACA,QACA,SACA,QACA,YACA,SACA,SACA,UACA,QACA,SACA,YACA,UACA,WACA,YACA,WACA,WACA,QACA,WACA,YACA,SACA,OACA,OACA,SACA,WACA,SACA,SACA,UACA,WACA,SACA,OACA,YACA,UACA,SACA,OACA,OACA,QACA,QACA,MACA,QACA,UACA,YACA,UACA,WACA,UACA,QACA,WACA,QACA,YACA,QACA,QACA,QACA,UACA,QACA,OACA,SACA,YACA,YACA,UACA,QACA,UACA,SACA,UACA,SACA,SACA,WACA,YACA,SACA,WACA,QACA,UACA,UACA,OACA,QACA,QACA,SACA,QACA,QACA,SACA,WACA,QACA,QACA,UACA,WACA,SACA,UACA,SACA,QACA,UACA,UACA,QACA,QACA,WACA,YACA,YACA,UACA,YACA,WACA,WACA,YACA,YACA,YACA,WACA,UACA,WACA,WACA,YACA,WACA,QACA,OACA,QACA,UACA,SACA,WACA,QACA,YACA,YACA,WACA,YACA,UACA,WACA,UACA,WACA,SACA,YACA,YACA,WACA,YACA,SACA,QACA,YACA,UACA,WACA,YACA,UACA,WACA,QACA,OACA,SACA,YACA,SACA,SACA,QACA,SACA,QACA,QACA,UACA,SACA,UACA,UACA,WACA,UACA,WACA,QACA,SACA,WACA,YACA,UACA,YACA,WACA,YACA,UACA,WACA,SACA,WACA,WACA,SACA,WACA,WACA,WACA,UACA,WACA,UACA,UACA,WACA,SACA,SACA,YACA,SACA,SACA,UACA,QACA,WACA,SACA,QACA,QACA,QACA,WACA,SACA,SACA,WACA,YACA,UACA,UACA,WACA,SACA,UACA,SACA,QACA,SACA,SACA,SACA,QACA,QACA,QACA,SACA,YACA,YACA,SACA,SACA,SACA,SACA,SACA,OACA,OACA,OACA,UACA,WACA,WACA,QACA,SACA,WACA,SACA,WACA,WACA,YACA,SACA,WACA,YACA,YACA,WACA,UACA,YACA,QACA,WACA,WACA,SACA,SACA,SACA,YACA,UACA,YACA,YACA,SACA,QACA,UACA,QACA,QACA,UACA,WACA,WACA,YACA,UACA,WACA,YACA,YACA,YACA,WACA,WACA,UACA,UACA,QACA,QACA,QACA,SACA,WACA,YACA,SACA,UACA,WACA,WACA,YACA,UACA,QACA,WACA,UACA,YACA,UACA,WACA,SACA,WACA,UACA,WACA,UACA,YACA,UACA,UACA,WACA,QACA,QACA,SACA,YACA,SACA,UACA,SACA,UACA,YACA,UACA,QACA,YACA,WACA,WACA,YACA,QACA,QACA,QACA,YACA,WACA,YACA,YACA,UACA,OACA,SACA,UACA,OACA,SACA,UACA,YACA,YACA,WACA,YACA,UACA,OACA,QACA,UACA,UACA,YACA,SACA,WACA,YACA,QACA,YACA,YACA,UACA,WACA,UACA,WACA,WACA,WACA,SACA,WACA,SACA,UACA,YACA,OACA,SACA,QACA,QACA,QACA,QACA,QACA,YACA,YACA,YACA,UACA,QACA,QACA,SACA,QACA,QACA,YACA,YACA,WACA,UACA,UACA,WACA,YACA,WACA,UACA,YACA,YACA,QACA,QACA,QACA,WACA,UACA,WACA,YACA,WACA,WACA,YACA,YACA,WACA,WACA,YACA,WACA,UACA,QACA,QACA,SACA,SACA,SACA,WACA,YACA,QACA,SACA,UACA,SACA,WACA,SACA,SACA,SACA,SACA,WACA,SACA,WACA,SACA,SACA,WACA,YACA,WACA,YACA,SACA,YACA,UACA,WACA,QACA,SACA,QACA,UACA,UACA,UACA,WACA,SACA,QACA,UACA,UACA,SACA,QACA,UACA,WACA,SACA,UACA,YACA,QACA,QACA,UACA,UACA,WACA,QACA,SACA,WACA,SACA,UACA,YACA,UACA,WACA,SACA,QACA,YACA,YACA,YACA,UACA,WACA,WACA,WACA,YACA,UACA,WACA,SACA,WACA,UACA,YACA,WACA,YACA,YACA,WACA,SACA,UACA,WACA,YACA,YACA,YACA,UACA,YACA,YACA,UACA,UACA,WACA,YACA,YACA,UACA,WACA,SACA,WACA,WACA,UACA,SACA,SACA,YACA,UACA,YACA,OACA,UACA,SACA,SACA,OACA,WACA,YACA,UACA,SACA,YACA,WACA,QACA,UACA,QACA,WACA,WACA,WACA,SACA,UACA,UACA,UACA,SACA,OACA,SACA,WACA,YACA,SACA,YACA,YACA,YACA,WACA,WACA,WACA,WACA,YACA,YACA,SACA,WACA,SACA,UACA,YACA,UACA,YACA,SACA,WACA,UACA,YACA,YACA,SACA,UACA,WACA,UACA,UACA,UACA,UACA,WACA,UACA,YACA,YACA,WACA,SACA,WACA,UACA,YACA,WACA,QACA,UACA,UACA,WACA,YACA,YACA,OACA,YACA,UACA,YACA,OACA,WACA,QACA,OACA,QACA,QACA,QACA,QACA,QACA,SACA,UACA,UACA,YACA,YACA,UACA,WACA,WACA,WACA,UACA,WACA,QACA,QACA,SACA,SACA,UACA,UACA,QACA,SACA,QACA,QACA,QACA,WACA,WACA,YACA,WACA,UACA,UACA,WACA,UACA,WACA,WACA,YACA,YACA,QACA,SACA,UACA,UACA,QACA,WACA,SACA,SACA,YACA,UACA,YACA,UACA,SACA,WACA,QACA,OACA,UACA,WACA,UACA,UACA,WACA,UACA,YACA,MACA,UACA,OACA,SACA,SACA,WACA,OACA,QACA,SACA,WACA,QACA,SACA,OACA,SACA,UACA,UACA,UACA,WACA,UACA,WACA,WACA,UACA,UACA,OACA,YACA,SACA,SACA,UACA,QACA,SACA,SACA,WACA,OACA,SACA,QACA,YACA,UACA,QACA,WACA,SACA,WACA,SACA,QACA,SACA,QACA,OACA,OACA,UACA,YACA,OACA,QACA,QACA,WACA,WACA,UACA,UACA,YACA,QACA,SACA,WACA,UACA,UACA,YACA,WACA,WACA,QACA,UACA,QACA,QACA,SACA,UACA,WACA,WACA,YACA,YACA,UACA,WACA,SACA,QACA,QACA,QACA,WACA,SACA,SACA,WACA,YACA,SACA,SACA,SACA,WACA,SACA,YACA,SACA,WACA,YACA,YACA,UACA,WACA,OACA,QACA,WACA,WACA,OACA,YACA,UACA,QACA,QACA,QACA,SACA,WACA,UACA,OACA,QACA,UACA,UACA,YACA,YACA,WACA,UACA,OACA,SACA,OACA,OACA,QACA,SACA,UACA,YACA,UACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,OACA,UACA,OACA,SACA,SACA,SACA,UACA,YACA,SACA,SACA,SACA,QACA,UACA,QACA,WACA,UACA,QACA,UACA,YACA,UACA,UACA,WACA,YACA,QACA,UACA,SACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,WACA,UACA,YACA,UACA,UACA,WACA,QACA,QACA,SACA,WACA,WACA,OACA,YACA,WACA,YACA,UACA,QACA,SACA,OACA,UACA,UACA,YACA,SACA,SACA,QACA,WACA,SACA,QACA,WACA,YACA,WACA,UACA,YACA,UACA,UACA,WACA,WACA,WACA,UACA,YACA,SACA,WACA,WACA,UACA,QACA,SACA,YACA,WACA,UACA,YACA,UACA,WACA,WACA,UACA,OACA,SACA,WACA,UACA,UACA,UACA,WACA,WACA,SACA,WACA,UACA,UACA,YACA,SACA,WACA,QACA,SACA,QACA,QACA,UACA,QACA,SACA,YACA,UACA,WACA,WACA,YACA,QACA,MACA,QACA,WACA,UACA,UACA,UACA,MACA,UACA,QACA,SACA,WACA,QACA,SACA,UACA,WACA,WACA,YACA,OACA,SACA,UACA,SACA,SACA,OACA,QACA,OACA,MACA,QACA,QACA,QACA,WACA,SACA,YACA,SACA,QACA,QACA,UACA,YACA,OACA,WACA,QACA,QACA,QACA,YACA,UACA,UACA,WACA,SACA,SACA,UACA,SACA,QACA,OACA,QACA,WACA,YACA,QACA,YACA,WACA,SACA,YACA,SACA,YACA,YACA,WACA,UACA,YACA,YACA,YACA,YACA,YACA,UACA,UACA,UACA,YACA,WACA,SACA,SACA,WACA,WACA,YACA,YACA,UACA,WACA,YACA,UACA,YACA,WACA,WACA,YACA,WACA,WACA,WACA,UACA,WACA,WACA,YACA,UACA,YACA,YACA,UACA,UACA,SACA,YACA,YACA,UACA,QACA,SACA,UACA,SACA,YACA,WACA,WACA,YACA,WACA,WACA,WACA,SACA,YACA,YACA,WACA,UACA,UACA,UACA,UACA,YACA,UACA,YACA,WACA,QACA,YACA,UACA,YACA,SACA,YACA,YACA,WACA,WACA,YACA,YACA,WACA,WACA,YACA,WACA,YACA,YACA,UACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,YACA,YACA,YACA,YACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,UACA,SACA,YACA,UACA,YACA,WACA,UACA,WACA,UACA,SACA,WACA,SACA,YACA,UACA,WACA,YACA,WACA,YACA,WACA,UACA,YACA,SACA,YACA,YACA,YACA,SACA,WACA,UACA,YACA,UACA,WACA,WACA,YACA,YACA,UACA,WACA,YACA,SACA,YACA,WACA,WACA,YACA,WACA,WACA,WACA,WACA,SACA,UACA,WACA,YACA,YACA,WACA,YACA,UACA,WACA,YACA,UACA,YACA,WACA,YACA,WACA,UACA,YACA,SACA,SACA,UACA,WACA,UACA,UACA,YACA,YACA,QACA,YACA,YACA,YACA,YACA,YACA,QACA,WACA,YACA,SACA,WACA,OACA,YACA,WACA,WACA,UACA,SACA,YACA,YACA,UACA,UACA,UACA,WACA,WACA,YACA,UACA,SACA,YACA,YACA,YACA,YACA,UACA,WACA,WACA,QACA,YACA,WACA,WACA,WACA,YACA,YACA,UACA,WACA,WACA,YACA,UACA,SACA,YACA,WACA,WACA,WACA,WACA,YACA,YACA,YACA,YACA,UACA,WACA,UACA,YACA,UACA,WACA,YACA,UACA,YACA,WACA,UACA,YACA,YACA,WACA,YACA,SACA,WACA,SACA,YACA,WACA,UACA,WACA,WACA,YACA,WACA,YACA,YACA,YACA,YACA,WACA,SACA,YACA,WACA,UACA,WACA,UACA,YACA,YACA,SACA,SACA,YACA,YACA,YACA,WACA,SACA,YACA,YACA,WACA,SACA,YACA,YACA,UACA,SACA,YACA,SACA,WACA,WACA,SACA,SACA,WACA,UACA,WACA,YACA,YACA,UACA,WACA,WACA,YACA,WACA,WACA,SACA,WACA,YACA,SACA,YACA,YACA,WACA,WACA,WACA,YACA,YACA,YACA,WACA,YACA,WACA,WACA,SACA,WACA,WACA,SACA,WACA,WACA,YACA,WACA,WACA,YACA,YACA,WACA,YACA,YACA,WACA,YACA,UACA,YACA,YACA,WACA,WACA,WACA,SACA,UACA,WACA,YACA,UACA,UACA,YACA,WACA,UACA,WACA,WACA,SACA,QACA,QACA,UACA,WACA,WACA,YACA,SACA,YACA,YACA,YACA,YACA,UACA,YACA,SACA,UACA,WACA,UACA,UACA,WACA,SACA,UACA,WACA,WACA,YACA,WACA,YACA,WACA,WACA,YACA,UACA,WACA,YACA,SACA,WACA,YACA,UACA,QACA,YACA,SACA,WACA,YACA,SACA,UACA,YACA,YACA,YACA,SACA,YACA,WACA,UACA,UACA,YACA,YACA,QACA,SACA,UACA,WACA,YACA,SACA,UACA,UACA,WACA,SACA,SACA,SACA,WACA,YACA,SACA,OACA,QACA,UACA,WACA,UACA,SACA,SACA,UACA,SACA,UACA,WACA,UACA,UACA,WACA,WACA,UACA,SACA,UACA,SACA,WACA,SACA,SACA,UACA,QACA,SACA,WACA,UACA,SACA,SACA,YACA,UACA,SACA,QACA,UACA,OACA,YACA,OACA,QACA,QACA,UACA,UACA,UACA,SACA,SACA,QACA,UACA,SACA,SACA,WACA,WACA,WACA,YACA,UACA,YACA,UACA,QACA,SACA,SACA,YACA,QACA,UACA,SACA,SACA,WACA,UACA,YACA,WACA,WACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,SACA,WACA,OACA,QACA,SACA,YACA,SACA,WACA,SACA,WACA,UACA,SACA,YACA,WACA,WACA,YACA,UACA,QACA,QACA,YACA,WACA,UACA,UACA,SACA,QACA,UACA,SACA,YACA,WACA,UACA,OACA,SACA,OACA,UACA,OACA,WACA,YACA,SACA,QACA,OACA,WACA,UACA,QACA,WACA,SACA,UACA,WACA,YACA,WACA,UACA,UACA,YACA,WACA,UACA,UACA,YACA,WACA,SACA,SACA,QACA,QACA,UACA,WACA,QACA,OACA,YACA,UACA,WACA,UACA,UACA,SACA,WACA,UACA,QACA,QACA,WACA,WACA,UACA,WACA,YACA,UACA,YACA,QACA,WACA,WACA,UACA,WACA,QACA,UACA,OACA,WACA,SACA,UACA,UACA,QACA,SACA,UACA,QACA,QACA,SACA,YACA,MACA,QACA,SACA,QACA,QACA,QACA,SACA,QACA,OACA,SACA,OACA,UACA,SACA,SACA,QACA,OACA,UACA,SACA,UACA,SACA,WACA,YACA,YACA,WACA,YACA,UACA,SACA,SACA,YACA,UACA,UACA,WACA,YACA,UACA,OACA,UACA,QACA,QACA,WACA,SACA,OACA,WACA,SACA,OACA,QACA,QACA,WACA,QACA,YACA,SACA,QACA,WACA,UACA,QACA,WACA,UACA,WACA,SACA,MACA,OACA,SACA,QACA,SACA,QACA,QACA,YACA,UACA,OACA,OACA,YACA,WACA,UACA,SACA,WACA,WACA,WACA,WACA,SACA,WACA,SACA,YACA,UACA,SACA,YACA,OACA,OACA,QACA,UACA,OACA,OACA,UACA,SACA,WACA,SACA,OACA,QACA,WACA,SACA,OACA,SACA,OACA,OACA,WACA,QACA,UACA,SACA,SACA,WACA,SACA,MACA,OACA,YACA,YACA,YACA,YACA,YACA,UACA,OACA,OACA,SACA,OACA,QACA,OACA,OACA,UACA,UACA,YACA,QACA,YACA,YACA,QACA,QACA,QACA,MACA,UACA,QACA,SACA,WACA,UACA,WACA,SACA,UACA,UACA,UACA,UACA,QACA,UACA,UACA,YACA,UACA,WACA,UACA,YACA,UACA,OACA,QACA,QACA,MACA,UACA,UACA,OACA,OACA,OACA,WACA,WACA,SACA,WACA,QACA,UACA,OACA,MACA,YACA,UACA,QACA,MACA,SACA,QACA,QACA,OACA,SACA,SACA,OACA,QACA,MACA,UACA,QACA,MACA,WACA,OACA,YACA,QACA,YACA,UACA,UACA,QACA,OACA,MACA,SACA,SACA,OACA,SACA,YACA,YACA,UACA,S,68CCjmPJ,aAEA,QAOA,aAUI,WAAoB71E,EAAgCuwB,EACxCimD,GADQ,KAAAx2E,aAAgC,KAAAuwB,iBACxC,KAAAimD,uBAoGhB,OAlGI,YAAAC,eAAA,WACI,OAAwB,MAApBhyF,KAAKiyF,YACEjyF,KAAKiyF,YACLjyF,KAAK+Z,QACL/Z,KAAK+Z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O1sB,KAAK4E,aAAaq8F,EAAQc,aAAad,EAAQ9hG,aACzE,IAInB,EApRA,CAAqD,EAAAkL,cAA/B,EAAA+3F,0B,8ECXtB,aAAS,EAAAllD,eAAA,EAAAA,eACT,YAAS,EAAAhlC,SAAA,EAAAA,SACT,aAAS,EAAA5P,WAAA,EAAAA,WACT,aAAS,EAAAc,UAAA,EAAAA,UACT,aAAS,EAAAgc,aAAA,EAAAA,aACT,aAAS,EAAArgB,aAAA,EAAAA,aACT,aAAS,EAAA4D,UAAA,EAAAA,UACT,YAAS,EAAAuB,eAAA,EAAAA,eACT,cAAS,EAAAwrE,KAAA,EAAAA,M,uFCRT,SAAY2sB,GACR,2CACA,2CACA,yCACA,2CACA,iCAEA,6BACA,iCACA,2CACA,2CACA,2CACA,oCAEA,wBAEA,wCACA,wCACA,wCAlBJ,CAAY,EAAAA,mBAAA,EAAAA,iBAAgB,M,wGCA5B,WAGA,OACA,OACA,OAGA,EAAQ,K,qBAKJ,EAAAC,iBAGJ,EAAAC,kBAAyBC,gBAAgB,EAAD,UAAY,CAAEC,qBAAqB,K,iGChB3E,OAEA,WACA,SAEA,SAEA,SAEA,GADA,KACA,OACA,QACA,SAEA,SAEA,UACA,QAEA,SACA,SAEA,SACA,SACA,SACA,SACA,SAEA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SAEA,SAGA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SAEA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UAIA,UACA,UAGA,UACA,UAGA,UAGA,UACA,UAGA,UAIA,UACA,UACA,UACA,UACA,UACA,UAEA,UACA,UACA,UAEA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UAEA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UAEA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UAEA,SACA,UAEA,SACA,SACA,SACA,WACA,WACA,UACA,SACA,UACA,SACA,SACA,UAEA,UACA,SACA,WACA,UAEA,QAIA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,W,gBAEA,GAAAC,mBAAmB,WAAU,MAC7B,GAAAA,mBAAmB,WAAU,MAC7B,GAAAA,mBAAmB,WAAU,MAC7B,GAAAA,mBAAmB,WAAU,MAC7B,GAAAA,mBAAmB,WAAU,MAC7B,GAAAA,mBAAmB,WAAY,SAC/B,GAAAA,mBAAmB,WAAU,MAC7B,GAAAA,mBAAmB,WAAU,MAC7B,GAAAA,mBAAmB,WAAU,MAC7B,GAAAA,mBAAmB,WAAU,MAC7B,GAAAA,mBAAmB,WAAU,MAC7B,GAAAA,mBAAmB,WAAU,MAC7B,GAAAA,mBAAmB,WAAU,MAC7B,GAAAA,mBAAmB,WAAU,MAC7B,GAAAA,mBAAmB,WAAU,MAC7B,GAAAA,mBAAmB,WAAU,MAC7B,GAAAA,mBAAmB,WAAU,MAC7B,GAAAA,mBAAmB,WAAU,MAC7B,GAAAA,mBAAmB,WAAY,SAC/B,GAAAA,mBAAmB,WAAY,SAC/B,GAAAA,mBAAmB,WAAU,MAC7B,GAAAA,mBAAmB,WAAU,MAC7B,GAAAA,mBAAmB,WAAU,MAC7B,GAAAA,mBAAmB,WAAU,MAC7B,GAAAA,mBAAmB,WAAY,SAC/B,GAAAA,mBAAmB,WAAY,SAE/B,gC,wCA+MaC,EAAS,WAFN,EAAAC,gB,8DAEHD,IAAS,UAHP,CAAC,GAAAE,UAAS,SA3MZ,CACL,EAAAC,cACA,EAAAC,wBACA,EAAAC,YACA,EAAAC,iBACA,EAAAC,eACA,EAAAC,cAAcC,UACd,EAAAC,qBACA,EAAAC,mB,EATR,GA+Ma,EAAAX,c,iEAAAA,GAAS,eAnMd,GAAAthG,mBACA,EAAAqnD,yBACA,GAAA8f,gBACA,EAAAzf,4BACA,GAAA4Q,iBACA,EAAA3O,qBACA,GAAA5S,mBACA,GAAAlhB,iBACA,GAAAyhB,uBACA,EAAAqkB,qBACA,GAAAtjB,uBACA,GAAA34C,mBACA,GAAA2zC,gBACA,EAAAkuD,aACA,GAAArhD,qBACA,GAAAvvC,mBACA,EAAAyQ,gBACA,GAAA8gF,mBACA,GAAAC,gBACA,GAAA3zB,sBACA,GAAA9qB,qBACA,GAAAhB,oBACA,GAAAc,kBACA,GAAAT,qBACA,GAAAK,mBACA,GAAAniD,iBACA,GAAAyoE,qBACA,GAAAgC,mBACA,GAAAt7B,wBACA,EAAA0qB,oBACA,GAAAz+B,iBACA,GAAAulB,qBACA,GAAA+C,kBACA,GAAAknB,4BACA,GAAA3D,6BACA,GAAAE,uBACA,EAAA7Q,4BACA,GAAAiV,qBACA,EAAAjR,yBACA,GAAAiY,gCACA,GAAAnB,oCACA,GAAAyC,yBACA,GAAAlB,gCACA,GAAAa,iCACA,GAAA5B,6BACA,GAAAX,0BACA,GAAA33B,gBACA,GAAAS,gCACA,GAAA2kB,qBACA,GAAAuQ,uBACA,EAAAzhC,gBACA,EAAA2W,wBACA,GAAAva,mBACA,EAAA8c,cACA,GAAA9oD,SACA,GAAAua,cACA,GAAAglC,gBACA,GAAAY,iCACA,GAAA9uC,uBACA,GAAAu9D,iBACA,EAAA1lB,cACA,EAAAS,eACA,EAAAxyC,eACA,EAAAs4B,gBACA,GAAAi/B,iBACA,mBACA,oBACA,EAAAhV,6BACA,GAAArwB,2BACA,GAAAsyB,kCACA,wBACA,oBACA,6BACA,wBACA,wBACA,uBACA,kBACA,mBACA,mCACA,mBACA,oCACA,wBACA,sBACA,kBACA,uBACA,kBACA,kBACA,sBACA,oBACA,kCACA,qBACA,kBACA,2BACA,uBACA,uBACA,sBACA,GAAArsB,uBACA,EAAAuY,4BACA,oCACA,kBACA,gCACA,GAAAqoB,2BACA,GAAAJ,kCACA,EAAA5hD,0BACA,GAAA3N,iBACA,GAAA4uD,iBACA,GAAAjF,iBACA,GAAAx1B,oBACA,EAAAoV,uBACA,EAAAG,0BACA,EAAAY,kBACA,GA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","file":"app/main.6edbb1cdf4d2e063961a.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([753,2]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export abstract class I18nService {\n locale: string;\n supportedTranslationLocales: string[];\n translationLocale: string;\n collator: Intl.Collator;\n localeNames: Map;\n t: (id: string, p1?: string, p2?: string, p3?: string) => string;\n translate: (id: string, p1?: string, p2?: string, p3?: string) => string;\n}\n","import { DeviceType } from '../enums/deviceType';\n\nexport abstract class PlatformUtilsService {\n identityClientId: string;\n getDevice: () => DeviceType;\n getDeviceString: () => string;\n isFirefox: () => boolean;\n isChrome: () => boolean;\n isEdge: () => boolean;\n isOpera: () => boolean;\n isVivaldi: () => boolean;\n isSafari: () => boolean;\n isIE: () => boolean;\n isMacAppStore: () => boolean;\n isViewOpen: () => Promise;\n /**\n * @deprecated This only ever returns null. Pull from your platform's storage using ConstantsService.vaultTimeoutKey\n */\n lockTimeout: () => number;\n launchUri: (uri: string, options?: any) => void;\n saveFile: (win: Window, blobData: any, blobOptions: any, fileName: string) => void;\n getApplicationVersion: () => Promise;\n supportsWebAuthn: (win: Window) => boolean;\n supportsDuo: () => boolean;\n showToast: (type: 'error' | 'success' | 'warning' | 'info', title: string, text: string | string[],\n options?: any) => void;\n showDialog: (body: string, title?: string, confirmText?: string, cancelText?: string,\n type?: string, bodyIsHtml?: boolean) => Promise;\n isDev: () => boolean;\n isSelfHost: () => boolean;\n copyToClipboard: (text: string, options?: any) => void;\n readFromClipboard: (options?: any) => Promise;\n supportsBiometric: () => Promise;\n authenticateBiometric: () => Promise;\n getDefaultSystemTheme: () => Promise<'light' | 'dark'>;\n onDefaultSystemThemeChange: (callback: ((theme: 'light' | 'dark') => unknown)) => unknown;\n supportsSecureStorage: () => boolean;\n}\n","import { PolicyType } from '../enums/policyType';\n\nimport { EnvironmentUrls } from '../models/domain/environmentUrls';\nimport { AttachmentRequest } from '../models/request/attachmentRequest';\n\nimport { BitPayInvoiceRequest } from '../models/request/bitPayInvoiceRequest';\nimport { CipherBulkDeleteRequest } from '../models/request/cipherBulkDeleteRequest';\nimport { CipherBulkMoveRequest } from '../models/request/cipherBulkMoveRequest';\nimport { CipherBulkRestoreRequest } from '../models/request/cipherBulkRestoreRequest';\nimport { CipherBulkShareRequest } from '../models/request/cipherBulkShareRequest';\nimport { CipherCollectionsRequest } from '../models/request/cipherCollectionsRequest';\nimport { CipherCreateRequest } from '../models/request/cipherCreateRequest';\nimport { CipherRequest } from '../models/request/cipherRequest';\nimport { CipherShareRequest } from '../models/request/cipherShareRequest';\nimport { CollectionRequest } from '../models/request/collectionRequest';\nimport { DeleteRecoverRequest } from '../models/request/deleteRecoverRequest';\nimport { EmailRequest } from '../models/request/emailRequest';\nimport { EmailTokenRequest } from '../models/request/emailTokenRequest';\nimport { EmergencyAccessAcceptRequest } from '../models/request/emergencyAccessAcceptRequest';\nimport { EmergencyAccessConfirmRequest } from '../models/request/emergencyAccessConfirmRequest';\nimport { EmergencyAccessInviteRequest } from '../models/request/emergencyAccessInviteRequest';\nimport { EmergencyAccessPasswordRequest } from '../models/request/emergencyAccessPasswordRequest';\nimport { EmergencyAccessUpdateRequest } from '../models/request/emergencyAccessUpdateRequest';\nimport { EventRequest } from '../models/request/eventRequest';\nimport { FolderRequest } from '../models/request/folderRequest';\nimport { GroupRequest } from '../models/request/groupRequest';\nimport { IapCheckRequest } from '../models/request/iapCheckRequest';\nimport { ImportCiphersRequest } from '../models/request/importCiphersRequest';\nimport { ImportDirectoryRequest } from '../models/request/importDirectoryRequest';\nimport { ImportOrganizationCiphersRequest } from '../models/request/importOrganizationCiphersRequest';\nimport { KdfRequest } from '../models/request/kdfRequest';\nimport { KeysRequest } from '../models/request/keysRequest';\nimport { OrganizationCreateRequest } from '../models/request/organizationCreateRequest';\nimport { OrganizationTaxInfoUpdateRequest } from '../models/request/organizationTaxInfoUpdateRequest';\nimport { OrganizationUpdateRequest } from '../models/request/organizationUpdateRequest';\nimport { OrganizationUpgradeRequest } from '../models/request/organizationUpgradeRequest';\nimport { OrganizationUserAcceptRequest } from '../models/request/organizationUserAcceptRequest';\nimport { OrganizationUserConfirmRequest } from '../models/request/organizationUserConfirmRequest';\nimport { OrganizationUserInviteRequest } from '../models/request/organizationUserInviteRequest';\nimport { OrganizationUserResetPasswordEnrollmentRequest } from '../models/request/organizationUserResetPasswordEnrollmentRequest';\nimport { OrganizationUserUpdateGroupsRequest } from '../models/request/organizationUserUpdateGroupsRequest';\nimport { OrganizationUserUpdateRequest } from '../models/request/organizationUserUpdateRequest';\nimport { PasswordHintRequest } from '../models/request/passwordHintRequest';\nimport { PasswordRequest } from '../models/request/passwordRequest';\nimport { PasswordVerificationRequest } from '../models/request/passwordVerificationRequest';\nimport { PaymentRequest } from '../models/request/paymentRequest';\nimport { PolicyRequest } from '../models/request/policyRequest';\nimport { PreloginRequest } from '../models/request/preloginRequest';\nimport { RegisterRequest } from '../models/request/registerRequest';\nimport { SeatRequest } from '../models/request/seatRequest';\nimport { SelectionReadOnlyRequest } from '../models/request/selectionReadOnlyRequest';\nimport { SendAccessRequest } from '../models/request/sendAccessRequest';\nimport { SendRequest } from '../models/request/sendRequest';\nimport { SetPasswordRequest } from '../models/request/setPasswordRequest';\nimport { StorageRequest } from '../models/request/storageRequest';\nimport { TaxInfoUpdateRequest } from '../models/request/taxInfoUpdateRequest';\nimport { TokenRequest } from '../models/request/tokenRequest';\nimport { TwoFactorEmailRequest } from '../models/request/twoFactorEmailRequest';\nimport { TwoFactorProviderRequest } from '../models/request/twoFactorProviderRequest';\nimport { TwoFactorRecoveryRequest } from '../models/request/twoFactorRecoveryRequest';\nimport { UpdateDomainsRequest } from '../models/request/updateDomainsRequest';\nimport { UpdateKeyRequest } from '../models/request/updateKeyRequest';\nimport { UpdateProfileRequest } from '../models/request/updateProfileRequest';\nimport { UpdateTwoFactorAuthenticatorRequest } from '../models/request/updateTwoFactorAuthenticatorRequest';\nimport { UpdateTwoFactorDuoRequest } from '../models/request/updateTwoFactorDuoRequest';\nimport { UpdateTwoFactorEmailRequest } from '../models/request/updateTwoFactorEmailRequest';\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from '../models/request/updateTwoFactorWebAuthnDeleteRequest';\nimport { UpdateTwoFactorWebAuthnRequest } from '../models/request/updateTwoFactorWebAuthnRequest';\nimport { UpdateTwoFactorYubioOtpRequest } from '../models/request/updateTwoFactorYubioOtpRequest';\nimport { VerifyBankRequest } from '../models/request/verifyBankRequest';\nimport { VerifyDeleteRecoverRequest } from '../models/request/verifyDeleteRecoverRequest';\nimport { VerifyEmailRequest } from '../models/request/verifyEmailRequest';\n\nimport { ApiKeyResponse } from '../models/response/apiKeyResponse';\nimport { AttachmentResponse } from '../models/response/attachmentResponse';\nimport { AttachmentUploadDataResponse } from '../models/response/attachmentUploadDataResponse';\nimport { BillingResponse } from '../models/response/billingResponse';\nimport { BreachAccountResponse } from '../models/response/breachAccountResponse';\nimport { CipherResponse } from '../models/response/cipherResponse';\nimport {\n CollectionGroupDetailsResponse,\n CollectionResponse,\n} from '../models/response/collectionResponse';\nimport { DomainsResponse } from '../models/response/domainsResponse';\nimport {\n EmergencyAccessGranteeDetailsResponse,\n EmergencyAccessGrantorDetailsResponse,\n EmergencyAccessTakeoverResponse,\n EmergencyAccessViewResponse\n} from '../models/response/emergencyAccessResponse';\nimport { EventResponse } from '../models/response/eventResponse';\nimport { FolderResponse } from '../models/response/folderResponse';\nimport {\n GroupDetailsResponse,\n GroupResponse,\n} from '../models/response/groupResponse';\nimport { IdentityTokenResponse } from '../models/response/identityTokenResponse';\nimport { IdentityTwoFactorResponse } from '../models/response/identityTwoFactorResponse';\nimport { ListResponse } from '../models/response/listResponse';\nimport { OrganizationResponse } from '../models/response/organizationResponse';\nimport { OrganizationSubscriptionResponse } from '../models/response/organizationSubscriptionResponse';\nimport {\n OrganizationUserDetailsResponse,\n OrganizationUserUserDetailsResponse,\n} from '../models/response/organizationUserResponse';\nimport { PaymentResponse } from '../models/response/paymentResponse';\nimport { PlanResponse } from '../models/response/planResponse';\nimport { PolicyResponse } from '../models/response/policyResponse';\nimport { PreloginResponse } from '../models/response/preloginResponse';\nimport { ProfileResponse } from '../models/response/profileResponse';\nimport { SelectionReadOnlyResponse } from '../models/response/selectionReadOnlyResponse';\nimport { SendAccessResponse } from '../models/response/sendAccessResponse';\nimport { SendFileDownloadDataResponse } from '../models/response/sendFileDownloadDataResponse';\nimport { SendFileUploadDataResponse } from '../models/response/sendFileUploadDataResponse';\nimport { SendResponse } from '../models/response/sendResponse';\nimport { SubscriptionResponse } from '../models/response/subscriptionResponse';\nimport { SyncResponse } from '../models/response/syncResponse';\nimport { TaxInfoResponse } from '../models/response/taxInfoResponse';\nimport { TaxRateResponse } from '../models/response/taxRateResponse';\nimport { TwoFactorAuthenticatorResponse } from '../models/response/twoFactorAuthenticatorResponse';\nimport { TwoFactorDuoResponse } from '../models/response/twoFactorDuoResponse';\nimport { TwoFactorEmailResponse } from '../models/response/twoFactorEmailResponse';\nimport { TwoFactorProviderResponse } from '../models/response/twoFactorProviderResponse';\nimport { TwoFactorRecoverResponse } from '../models/response/twoFactorRescoverResponse';\nimport { ChallengeResponse, TwoFactorWebAuthnResponse } from '../models/response/twoFactorWebAuthnResponse';\nimport { TwoFactorYubiKeyResponse } from '../models/response/twoFactorYubiKeyResponse';\nimport { UserKeyResponse } from '../models/response/userKeyResponse';\n\nimport { SendAccessView } from '../models/view/sendAccessView';\n\nexport abstract class ApiService {\n urlsSet: boolean;\n apiBaseUrl: string;\n identityBaseUrl: string;\n eventsBaseUrl: string;\n\n setUrls: (urls: EnvironmentUrls) => void;\n postIdentityToken: (request: TokenRequest) => Promise;\n refreshIdentityToken: () => Promise;\n\n getProfile: () => Promise;\n getUserBilling: () => Promise;\n getUserSubscription: () => Promise;\n getTaxInfo: () => Promise;\n putProfile: (request: UpdateProfileRequest) => Promise;\n putTaxInfo: (request: TaxInfoUpdateRequest) => Promise;\n postPrelogin: (request: PreloginRequest) => Promise;\n postEmailToken: (request: EmailTokenRequest) => Promise;\n postEmail: (request: EmailRequest) => Promise;\n postPassword: (request: PasswordRequest) => Promise;\n setPassword: (request: SetPasswordRequest) => Promise;\n postSecurityStamp: (request: PasswordVerificationRequest) => Promise;\n deleteAccount: (request: PasswordVerificationRequest) => Promise;\n getAccountRevisionDate: () => Promise;\n postPasswordHint: (request: PasswordHintRequest) => Promise;\n postRegister: (request: RegisterRequest) => Promise;\n postPremium: (data: FormData) => Promise;\n postIapCheck: (request: IapCheckRequest) => Promise;\n postReinstatePremium: () => Promise;\n postCancelPremium: () => Promise;\n postAccountStorage: (request: StorageRequest) => Promise;\n postAccountPayment: (request: PaymentRequest) => Promise;\n postAccountLicense: (data: FormData) => Promise;\n postAccountKey: (request: UpdateKeyRequest) => Promise;\n postAccountKeys: (request: KeysRequest) => Promise;\n postAccountVerifyEmail: () => Promise;\n postAccountVerifyEmailToken: (request: VerifyEmailRequest) => Promise;\n postAccountVerifyPassword: (request: PasswordVerificationRequest) => Promise;\n postAccountRecoverDelete: (request: DeleteRecoverRequest) => Promise;\n postAccountRecoverDeleteToken: (request: VerifyDeleteRecoverRequest) => Promise;\n postAccountKdf: (request: KdfRequest) => Promise;\n getEnterprisePortalSignInToken: () => Promise;\n postUserApiKey: (id: string, request: PasswordVerificationRequest) => Promise;\n postUserRotateApiKey: (id: string, request: PasswordVerificationRequest) => Promise;\n\n getFolder: (id: string) => Promise;\n postFolder: (request: FolderRequest) => Promise;\n putFolder: (id: string, request: FolderRequest) => Promise;\n deleteFolder: (id: string) => Promise;\n\n getSend: (id: string) => Promise;\n postSendAccess: (id: string, request: SendAccessRequest, apiUrl?: string) => Promise;\n getSends: () => Promise>;\n postSend: (request: SendRequest) => Promise;\n postFileTypeSend: (request: SendRequest) => Promise;\n postSendFile: (sendId: string, fileId: string, data: FormData) => Promise;\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n postSendFileLegacy: (data: FormData) => Promise;\n putSend: (id: string, request: SendRequest) => Promise;\n putSendRemovePassword: (id: string) => Promise;\n deleteSend: (id: string) => Promise;\n getSendFileDownloadData: (send: SendAccessView, request: SendAccessRequest, apiUrl?: string) => Promise;\n renewSendFileUploadUrl: (sendId: string, fileId: string) => Promise;\n\n getCipher: (id: string) => Promise;\n getCipherAdmin: (id: string) => Promise;\n getAttachmentData: (cipherId: string, attachmentId: string, emergencyAccessId?: string) => Promise;\n getCiphersOrganization: (organizationId: string) => Promise>;\n postCipher: (request: CipherRequest) => Promise;\n postCipherCreate: (request: CipherCreateRequest) => Promise;\n postCipherAdmin: (request: CipherCreateRequest) => Promise;\n putCipher: (id: string, request: CipherRequest) => Promise;\n putCipherAdmin: (id: string, request: CipherRequest) => Promise;\n deleteCipher: (id: string) => Promise;\n deleteCipherAdmin: (id: string) => Promise;\n deleteManyCiphers: (request: CipherBulkDeleteRequest) => Promise;\n deleteManyCiphersAdmin: (request: CipherBulkDeleteRequest) => Promise;\n putMoveCiphers: (request: CipherBulkMoveRequest) => Promise;\n putShareCipher: (id: string, request: CipherShareRequest) => Promise;\n putShareCiphers: (request: CipherBulkShareRequest) => Promise;\n putCipherCollections: (id: string, request: CipherCollectionsRequest) => Promise;\n putCipherCollectionsAdmin: (id: string, request: CipherCollectionsRequest) => Promise;\n postPurgeCiphers: (request: PasswordVerificationRequest, organizationId?: string) => Promise;\n postImportCiphers: (request: ImportCiphersRequest) => Promise;\n postImportOrganizationCiphers: (organizationId: string, request: ImportOrganizationCiphersRequest) => Promise;\n putDeleteCipher: (id: string) => Promise;\n putDeleteCipherAdmin: (id: string) => Promise;\n putDeleteManyCiphers: (request: CipherBulkDeleteRequest) => Promise;\n putDeleteManyCiphersAdmin: (request: CipherBulkDeleteRequest) => Promise;\n putRestoreCipher: (id: string) => Promise;\n putRestoreCipherAdmin: (id: string) => Promise;\n putRestoreManyCiphers: (request: CipherBulkRestoreRequest) => Promise>;\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n postCipherAttachmentLegacy: (id: string, data: FormData) => Promise;\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n postCipherAttachmentAdminLegacy: (id: string, data: FormData) => Promise;\n postCipherAttachment: (id: string, request: AttachmentRequest) => Promise;\n deleteCipherAttachment: (id: string, attachmentId: string) => Promise;\n deleteCipherAttachmentAdmin: (id: string, attachmentId: string) => Promise;\n postShareCipherAttachment: (id: string, attachmentId: string, data: FormData,\n organizationId: string) => Promise;\n renewAttachmentUploadUrl: (id: string, attachmentId: string) => Promise;\n postAttachmentFile: (id: string, attachmentId: string, data: FormData) => Promise;\n\n getCollectionDetails: (organizationId: string, id: string) => Promise;\n getUserCollections: () => Promise>;\n getCollections: (organizationId: string) => Promise>;\n getCollectionUsers: (organizationId: string, id: string) => Promise;\n postCollection: (organizationId: string, request: CollectionRequest) => Promise;\n putCollectionUsers: (organizationId: string, id: string, request: SelectionReadOnlyRequest[]) => Promise;\n putCollection: (organizationId: string, id: string, request: CollectionRequest) => Promise;\n deleteCollection: (organizationId: string, id: string) => Promise;\n deleteCollectionUser: (organizationId: string, id: string, organizationUserId: string) => Promise;\n\n getGroupDetails: (organizationId: string, id: string) => Promise;\n getGroups: (organizationId: string) => Promise>;\n getGroupUsers: (organizationId: string, id: string) => Promise;\n postGroup: (organizationId: string, request: GroupRequest) => Promise;\n putGroup: (organizationId: string, id: string, request: GroupRequest) => Promise;\n putGroupUsers: (organizationId: string, id: string, request: string[]) => Promise;\n deleteGroup: (organizationId: string, id: string) => Promise;\n deleteGroupUser: (organizationId: string, id: string, organizationUserId: string) => Promise;\n\n getPolicy: (organizationId: string, type: PolicyType) => Promise;\n getPolicies: (organizationId: string) => Promise>;\n getPoliciesByToken: (organizationId: string, token: string, email: string, organizationUserId: string) =>\n Promise>;\n putPolicy: (organizationId: string, type: PolicyType, request: PolicyRequest) => Promise;\n\n getOrganizationUser: (organizationId: string, id: string) => Promise;\n getOrganizationUserGroups: (organizationId: string, id: string) => Promise;\n getOrganizationUsers: (organizationId: string) => Promise>;\n postOrganizationUserInvite: (organizationId: string, request: OrganizationUserInviteRequest) => Promise;\n postOrganizationUserReinvite: (organizationId: string, id: string) => Promise;\n postOrganizationUserAccept: (organizationId: string, id: string,\n request: OrganizationUserAcceptRequest) => Promise;\n postOrganizationUserConfirm: (organizationId: string, id: string,\n request: OrganizationUserConfirmRequest) => Promise;\n putOrganizationUser: (organizationId: string, id: string, request: OrganizationUserUpdateRequest) => Promise;\n putOrganizationUserGroups: (organizationId: string, id: string,\n request: OrganizationUserUpdateGroupsRequest) => Promise;\n putOrganizationUserResetPasswordEnrollment: (organizationId: string, userId: string,\n request: OrganizationUserResetPasswordEnrollmentRequest) => Promise;\n deleteOrganizationUser: (organizationId: string, id: string) => Promise;\n\n getSync: () => Promise;\n postImportDirectory: (organizationId: string, request: ImportDirectoryRequest) => Promise;\n\n getSettingsDomains: () => Promise;\n putSettingsDomains: (request: UpdateDomainsRequest) => Promise;\n\n getTwoFactorProviders: () => Promise>;\n getTwoFactorOrganizationProviders: (organizationId: string) => Promise>;\n getTwoFactorAuthenticator: (request: PasswordVerificationRequest) => Promise;\n getTwoFactorEmail: (request: PasswordVerificationRequest) => Promise;\n getTwoFactorDuo: (request: PasswordVerificationRequest) => Promise;\n getTwoFactorOrganizationDuo: (organizationId: string,\n request: PasswordVerificationRequest) => Promise;\n getTwoFactorYubiKey: (request: PasswordVerificationRequest) => Promise;\n getTwoFactorWebAuthn: (request: PasswordVerificationRequest) => Promise;\n getTwoFactorWebAuthnChallenge: (request: PasswordVerificationRequest) => Promise;\n getTwoFactorRecover: (request: PasswordVerificationRequest) => Promise;\n putTwoFactorAuthenticator: (\n request: UpdateTwoFactorAuthenticatorRequest) => Promise;\n putTwoFactorEmail: (request: UpdateTwoFactorEmailRequest) => Promise;\n putTwoFactorDuo: (request: UpdateTwoFactorDuoRequest) => Promise;\n putTwoFactorOrganizationDuo: (organizationId: string,\n request: UpdateTwoFactorDuoRequest) => Promise;\n putTwoFactorYubiKey: (request: UpdateTwoFactorYubioOtpRequest) => Promise;\n putTwoFactorWebAuthn: (request: UpdateTwoFactorWebAuthnRequest) => Promise;\n deleteTwoFactorWebAuthn: (request: UpdateTwoFactorWebAuthnDeleteRequest) => Promise;\n putTwoFactorDisable: (request: TwoFactorProviderRequest) => Promise;\n putTwoFactorOrganizationDisable: (organizationId: string,\n request: TwoFactorProviderRequest) => Promise;\n postTwoFactorRecover: (request: TwoFactorRecoveryRequest) => Promise;\n postTwoFactorEmailSetup: (request: TwoFactorEmailRequest) => Promise;\n postTwoFactorEmail: (request: TwoFactorEmailRequest) => Promise;\n\n getEmergencyAccessTrusted: () => Promise>;\n getEmergencyAccessGranted: () => Promise>;\n getEmergencyAccess: (id: string) => Promise;\n getEmergencyGrantorPolicies: (id: string) => Promise>;\n putEmergencyAccess: (id: string, request: EmergencyAccessUpdateRequest) => Promise;\n deleteEmergencyAccess: (id: string) => Promise;\n postEmergencyAccessInvite: (request: EmergencyAccessInviteRequest) => Promise;\n postEmergencyAccessReinvite: (id: string) => Promise;\n postEmergencyAccessAccept: (id: string, request: EmergencyAccessAcceptRequest) => Promise;\n postEmergencyAccessConfirm: (id: string, request: EmergencyAccessConfirmRequest) => Promise;\n postEmergencyAccessInitiate: (id: string) => Promise;\n postEmergencyAccessApprove: (id: string) => Promise;\n postEmergencyAccessReject: (id: string) => Promise;\n postEmergencyAccessTakeover: (id: string) => Promise;\n postEmergencyAccessPassword: (id: string, request: EmergencyAccessPasswordRequest) => Promise;\n postEmergencyAccessView: (id: string) => Promise;\n\n getOrganization: (id: string) => Promise;\n getOrganizationBilling: (id: string) => Promise;\n getOrganizationSubscription: (id: string) => Promise;\n getOrganizationLicense: (id: string, installationId: string) => Promise;\n getOrganizationTaxInfo: (id: string) => Promise;\n postOrganization: (request: OrganizationCreateRequest) => Promise;\n putOrganization: (id: string, request: OrganizationUpdateRequest) => Promise;\n putOrganizationTaxInfo: (id: string, request: OrganizationTaxInfoUpdateRequest) => Promise;\n postLeaveOrganization: (id: string) => Promise;\n postOrganizationLicense: (data: FormData) => Promise;\n postOrganizationLicenseUpdate: (id: string, data: FormData) => Promise;\n postOrganizationApiKey: (id: string, request: PasswordVerificationRequest) => Promise;\n postOrganizationRotateApiKey: (id: string, request: PasswordVerificationRequest) => Promise;\n postOrganizationUpgrade: (id: string, request: OrganizationUpgradeRequest) => Promise;\n postOrganizationSeat: (id: string, request: SeatRequest) => Promise;\n postOrganizationStorage: (id: string, request: StorageRequest) => Promise;\n postOrganizationPayment: (id: string, request: PaymentRequest) => Promise;\n postOrganizationVerifyBank: (id: string, request: VerifyBankRequest) => Promise;\n postOrganizationCancel: (id: string) => Promise;\n postOrganizationReinstate: (id: string) => Promise;\n deleteOrganization: (id: string, request: PasswordVerificationRequest) => Promise;\n getPlans: () => Promise>;\n getTaxRates: () => Promise>;\n\n getEvents: (start: string, end: string, token: string) => Promise>;\n getEventsCipher: (id: string, start: string, end: string, token: string) => Promise>;\n getEventsOrganization: (id: string, start: string, end: string,\n token: string) => Promise>;\n getEventsOrganizationUser: (organizationId: string, id: string,\n start: string, end: string, token: string) => Promise>;\n postEventsCollect: (request: EventRequest[]) => Promise;\n\n deleteSsoUser: (organizationId: string) => Promise;\n getSsoUserIdentifier: () => Promise;\n\n getUserPublicKey: (id: string) => Promise;\n\n getHibpBreach: (username: string) => Promise;\n\n postBitPayInvoice: (request: BitPayInvoiceRequest) => Promise;\n postSetupPayment: () => Promise;\n\n getActiveBearerToken: () => Promise;\n fetch: (request: Request) => Promise;\n nativeFetch: (request: Request) => Promise;\n\n preValidateSso: (identifier: string) => Promise;\n}\n","import { OrganizationData } from '../models/data/organizationData';\nimport { Organization } from '../models/domain/organization';\n\nimport { KdfType } from '../enums/kdfType';\n\nexport abstract class UserService {\n setInformation: (userId: string, email: string, kdf: KdfType, kdfIterations: number) => Promise;\n setEmailVerified: (emailVerified: boolean) => Promise;\n setSecurityStamp: (stamp: string) => Promise;\n getUserId: () => Promise;\n getEmail: () => Promise;\n getSecurityStamp: () => Promise;\n getKdf: () => Promise;\n getKdfIterations: () => Promise;\n getEmailVerified: () => Promise;\n clear: () => Promise;\n isAuthenticated: () => Promise;\n canAccessPremium: () => Promise;\n getOrganization: (id: string) => Promise;\n getAllOrganizations: () => Promise;\n replaceOrganizations: (organizations: { [id: string]: OrganizationData; }) => Promise;\n clearOrganizations: (userId: string) => Promise;\n}\n","import {\n Pipe,\n PipeTransform,\n} from '@angular/core';\n\nimport { I18nService } from '../../abstractions/i18n.service';\n\n@Pipe({\n name: 'i18n',\n})\nexport class I18nPipe implements PipeTransform {\n constructor(private i18nService: I18nService) { }\n\n transform(id: string, p1?: string, p2?: string, p3?: string): string {\n return this.i18nService.t(id, p1, p2, p3);\n }\n}\n","export abstract class MessagingService {\n send: (subscriber: string, arg?: any) => void;\n}\n","import {\n Directive,\n ElementRef,\n Input,\n OnChanges,\n} from '@angular/core';\n\nimport { ValidationService } from '../services/validation.service';\n\n@Directive({\n selector: '[appApiAction]',\n})\nexport class ApiActionDirective implements OnChanges {\n @Input() appApiAction: Promise;\n\n constructor(private el: ElementRef, private validationService: ValidationService) { }\n\n ngOnChanges(changes: any) {\n if (this.appApiAction == null || this.appApiAction.then == null) {\n return;\n }\n\n this.el.nativeElement.loading = true;\n\n this.appApiAction.then((response: any) => {\n this.el.nativeElement.loading = false;\n }, (e: any) => {\n this.el.nativeElement.loading = false;\n this.validationService.showError(e);\n });\n }\n}\n","import {\n Directive,\n ElementRef,\n Input,\n Renderer2,\n} from '@angular/core';\n\n@Directive({\n selector: '[appA11yTitle]',\n})\nexport class A11yTitleDirective {\n @Input() set appA11yTitle(title: string) {\n this.title = title;\n }\n\n private title: string;\n\n constructor(private el: ElementRef, private renderer: Renderer2) { }\n\n ngOnInit() {\n if (!this.el.nativeElement.hasAttribute('title')) {\n this.renderer.setAttribute(this.el.nativeElement, 'title', this.title);\n }\n if (!this.el.nativeElement.hasAttribute('aria-label')) {\n this.renderer.setAttribute(this.el.nativeElement, 'aria-label', this.title);\n }\n }\n}\n","import { EncArrayBuffer } from '../models/domain/encArrayBuffer';\nimport { EncString } from '../models/domain/encString';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nimport { ProfileOrganizationResponse } from '../models/response/profileOrganizationResponse';\n\nimport { KdfType } from '../enums/kdfType';\n\nexport abstract class CryptoService {\n setKey: (key: SymmetricCryptoKey) => Promise;\n setKeyHash: (keyHash: string) => Promise<{}>;\n setEncKey: (encKey: string) => Promise<{}>;\n setEncPrivateKey: (encPrivateKey: string) => Promise<{}>;\n setOrgKeys: (orgs: ProfileOrganizationResponse[]) => Promise<{}>;\n getKey: () => Promise;\n getKeyHash: () => Promise;\n getEncKey: (key?: SymmetricCryptoKey) => Promise;\n getPublicKey: () => Promise;\n getPrivateKey: () => Promise;\n getFingerprint: (userId: string, publicKey?: ArrayBuffer) => Promise;\n getOrgKeys: () => Promise>;\n getOrgKey: (orgId: string) => Promise;\n hasKey: () => Promise;\n hasEncKey: () => Promise;\n clearKey: () => Promise;\n clearKeyHash: () => Promise;\n clearEncKey: (memoryOnly?: boolean) => Promise;\n clearKeyPair: (memoryOnly?: boolean) => Promise;\n clearOrgKeys: (memoryOnly?: boolean) => Promise;\n clearPinProtectedKey: () => Promise;\n clearKeys: () => Promise;\n toggleKey: () => Promise;\n makeKey: (password: string, salt: string, kdf: KdfType, kdfIterations: number) => Promise;\n makeKeyFromPin: (pin: string, salt: string, kdf: KdfType, kdfIterations: number,\n protectedKeyCs?: EncString) => Promise;\n makeShareKey: () => Promise<[EncString, SymmetricCryptoKey]>;\n makeKeyPair: (key?: SymmetricCryptoKey) => Promise<[string, EncString]>;\n makePinKey: (pin: string, salt: string, kdf: KdfType, kdfIterations: number) => Promise;\n makeSendKey: (keyMaterial: ArrayBuffer) => Promise;\n hashPassword: (password: string, key: SymmetricCryptoKey) => Promise;\n makeEncKey: (key: SymmetricCryptoKey) => Promise<[SymmetricCryptoKey, EncString]>;\n remakeEncKey: (key: SymmetricCryptoKey, encKey?: SymmetricCryptoKey) => Promise<[SymmetricCryptoKey, EncString]>;\n encrypt: (plainValue: string | ArrayBuffer, key?: SymmetricCryptoKey) => Promise;\n encryptToBytes: (plainValue: ArrayBuffer, key?: SymmetricCryptoKey) => Promise;\n rsaEncrypt: (data: ArrayBuffer, publicKey?: ArrayBuffer) => Promise;\n rsaDecrypt: (encValue: string) => Promise;\n decryptToBytes: (encString: EncString, key?: SymmetricCryptoKey) => Promise;\n decryptToUtf8: (encString: EncString, key?: SymmetricCryptoKey) => Promise;\n decryptFromBytes: (encBuf: ArrayBuffer, key: SymmetricCryptoKey) => Promise;\n randomNumber: (min: number, max: number) => Promise;\n}\n","import { CipherType } from '../enums/cipherType';\nimport { UriMatchType } from '../enums/uriMatchType';\n\nimport { CipherData } from '../models/data/cipherData';\n\nimport { Cipher } from '../models/domain/cipher';\nimport { Field } from '../models/domain/field';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nimport { CipherView } from '../models/view/cipherView';\nimport { FieldView } from '../models/view/fieldView';\n\nexport abstract class CipherService {\n decryptedCipherCache: CipherView[];\n\n clearCache: () => void;\n encrypt: (model: CipherView, key?: SymmetricCryptoKey, originalCipher?: Cipher) => Promise;\n encryptFields: (fieldsModel: FieldView[], key: SymmetricCryptoKey) => Promise;\n encryptField: (fieldModel: FieldView, key: SymmetricCryptoKey) => Promise;\n get: (id: string) => Promise;\n getAll: () => Promise;\n getAllDecrypted: () => Promise;\n getAllDecryptedForGrouping: (groupingId: string, folder?: boolean) => Promise;\n getAllDecryptedForUrl: (url: string, includeOtherTypes?: CipherType[],\n defaultMatch?: UriMatchType) => Promise;\n getAllFromApiForOrganization: (organizationId: string) => Promise;\n getLastUsedForUrl: (url: string) => Promise;\n getLastLaunchedForUrl: (url: string) => Promise;\n getNextCipherForUrl: (url: string) => Promise;\n updateLastUsedIndexForUrl: (url: string) => void;\n updateLastUsedDate: (id: string) => Promise;\n updateLastLaunchedDate: (id: string) => Promise;\n saveNeverDomain: (domain: string) => Promise;\n saveWithServer: (cipher: Cipher) => Promise;\n shareWithServer: (cipher: CipherView, organizationId: string, collectionIds: string[]) => Promise;\n shareManyWithServer: (ciphers: CipherView[], organizationId: string, collectionIds: string[]) => Promise;\n saveAttachmentWithServer: (cipher: Cipher, unencryptedFile: any, admin?: boolean) => Promise;\n saveAttachmentRawWithServer: (cipher: Cipher, filename: string, data: ArrayBuffer,\n admin?: boolean) => Promise;\n saveCollectionsWithServer: (cipher: Cipher) => Promise;\n upsert: (cipher: CipherData | CipherData[]) => Promise;\n replace: (ciphers: { [id: string]: CipherData; }) => Promise;\n clear: (userId: string) => Promise;\n moveManyWithServer: (ids: string[], folderId: string) => Promise;\n delete: (id: string | string[]) => Promise;\n deleteWithServer: (id: string) => Promise;\n deleteManyWithServer: (ids: string[]) => Promise;\n deleteAttachment: (id: string, attachmentId: string) => Promise;\n deleteAttachmentWithServer: (id: string, attachmentId: string) => Promise;\n sortCiphersByLastUsed: (a: any, b: any) => number;\n sortCiphersByLastUsedThenName: (a: any, b: any) => number;\n getLocaleSortingFunction: () => (a: CipherView, b: CipherView) => number;\n softDelete: (id: string | string[]) => Promise;\n softDeleteWithServer: (id: string) => Promise;\n softDeleteManyWithServer: (ids: string[]) => Promise;\n restore: (cipher: { id: string, revisionDate: string; } | { id: string, revisionDate: string; }[]) => Promise;\n restoreWithServer: (id: string) => Promise;\n restoreManyWithServer: (ids: string[]) => Promise;\n}\n","export abstract class BaseResponse {\n private response: any;\n\n constructor(response: any) {\n this.response = response;\n }\n\n protected getResponseProperty(propertyName: string, response: any = null, exactName = false): any {\n if (propertyName == null || propertyName === '') {\n throw new Error('propertyName must not be null/empty.');\n }\n if (response == null && this.response != null) {\n response = this.response;\n }\n if (response == null) {\n return null;\n }\n if (!exactName && response[propertyName] === undefined) {\n let otherCasePropertyName: string = null;\n if (propertyName.charAt(0) === propertyName.charAt(0).toUpperCase()) {\n otherCasePropertyName = propertyName.charAt(0).toLowerCase();\n } else {\n otherCasePropertyName = propertyName.charAt(0).toUpperCase();\n }\n if (propertyName.length > 1) {\n otherCasePropertyName += propertyName.slice(1);\n }\n\n propertyName = otherCasePropertyName;\n if (response[propertyName] === undefined) {\n propertyName = propertyName.toLowerCase();\n }\n if (response[propertyName] === undefined) {\n propertyName = propertyName.toUpperCase();\n }\n }\n return response[propertyName];\n }\n}\n","import {\n Component,\n Input,\n OnInit,\n} from '@angular/core';\n\nimport { I18nService } from '../../abstractions/i18n.service';\n\n@Component({\n selector: 'app-callout',\n templateUrl: 'callout.component.html',\n})\nexport class CalloutComponent implements OnInit {\n @Input() type = 'info';\n @Input() icon: string;\n @Input() title: string;\n @Input() clickable: boolean;\n\n calloutStyle: string;\n\n constructor(private i18nService: I18nService) { }\n\n ngOnInit() {\n this.calloutStyle = this.type;\n\n if (this.type === 'warning' || this.type === 'danger') {\n if (this.type === 'danger') {\n this.calloutStyle = 'danger';\n }\n if (this.title === undefined) {\n this.title = this.i18nService.t('warning');\n }\n if (this.icon === undefined) {\n this.icon = 'fa-warning';\n }\n } else if (this.type === 'error') {\n this.calloutStyle = 'danger';\n if (this.title === undefined) {\n this.title = this.i18nService.t('error');\n }\n if (this.icon === undefined) {\n this.icon = 'fa-bolt';\n }\n } else if (this.type === 'tip') {\n this.calloutStyle = 'success';\n if (this.title === undefined) {\n this.title = this.i18nService.t('tip');\n }\n if (this.icon === undefined) {\n this.icon = 'fa-lightbulb-o';\n }\n }\n }\n}\n","

\n

\n \n {{title}}\n

\n \n
\n","import * as papa from 'papaparse';\n\nimport { LogService } from '../abstractions/log.service';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherView } from '../models/view/cipherView';\nimport { CollectionView } from '../models/view/collectionView';\nimport { LoginUriView } from '../models/view/loginUriView';\n\nimport { Utils } from '../misc/utils';\n\nimport { FieldView } from '../models/view/fieldView';\nimport { FolderView } from '../models/view/folderView';\nimport { LoginView } from '../models/view/loginView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { FieldType } from '../enums/fieldType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nimport { ConsoleLogService } from '../services/consoleLog.service';\n\nexport abstract class BaseImporter {\n organizationId: string = null;\n\n protected logService: LogService = new ConsoleLogService(false);\n\n protected newLineRegex = /(?:\\r\\n|\\r|\\n)/;\n\n protected passwordFieldNames = [\n 'password', 'pass word', 'passphrase', 'pass phrase',\n 'pass', 'code', 'code word', 'codeword',\n 'secret', 'secret word', 'personpwd',\n 'key', 'keyword', 'key word', 'keyphrase', 'key phrase',\n 'form_pw', 'wppassword', 'pin', 'pwd', 'pw', 'pword', 'passwd',\n 'p', 'serial', 'serial#', 'license key', 'reg #',\n\n // Non-English names\n 'passwort',\n ];\n\n protected usernameFieldNames = [\n 'user', 'name', 'user name', 'username', 'login name',\n 'email', 'e-mail', 'id', 'userid', 'user id',\n 'login', 'form_loginname', 'wpname', 'mail',\n 'loginid', 'login id', 'log', 'personlogin',\n 'first name', 'last name', 'card#', 'account #',\n 'member', 'member #',\n\n // Non-English names\n 'nom', 'benutzername',\n ];\n\n protected notesFieldNames = [\n 'note', 'notes', 'comment', 'comments', 'memo',\n 'description', 'free form', 'freeform',\n 'free text', 'freetext', 'free',\n\n // Non-English names\n 'kommentar',\n ];\n\n protected uriFieldNames: string[] = [\n 'url', 'hyper link', 'hyperlink', 'link',\n 'host', 'hostname', 'host name', 'server', 'address',\n 'hyper ref', 'href', 'web', 'website', 'web site', 'site',\n 'web-site', 'uri',\n\n // Non-English names\n 'ort', 'adresse',\n ];\n\n protected parseCsvOptions = {\n encoding: 'UTF-8',\n skipEmptyLines: false,\n };\n\n protected get organization() {\n return this.organizationId != null;\n }\n\n protected parseXml(data: string): Document {\n const parser = new DOMParser();\n const doc = parser.parseFromString(data, 'application/xml');\n return doc != null && doc.querySelector('parsererror') == null ? doc : null;\n }\n\n protected parseCsv(data: string, header: boolean, options: any = {}): any[] {\n const parseOptions = Object.assign({ header: header }, this.parseCsvOptions, options);\n data = this.splitNewLine(data).join('\\n').trim();\n const result = papa.parse(data, parseOptions);\n if (result.errors != null && result.errors.length > 0) {\n result.errors.forEach(e => {\n if (e.row != null) {\n // tslint:disable-next-line\n this.logService.warning('Error parsing row ' + e.row + ': ' + e.message);\n }\n });\n }\n return result.data && result.data.length > 0 ? result.data : null;\n }\n\n protected parseSingleRowCsv(rowData: string) {\n if (this.isNullOrWhitespace(rowData)) {\n return null;\n }\n const parsedRow = this.parseCsv(rowData, false);\n if (parsedRow != null && parsedRow.length > 0 && parsedRow[0].length > 0) {\n return parsedRow[0];\n }\n return null;\n }\n\n protected makeUriArray(uri: string | string[]): LoginUriView[] {\n if (uri == null) {\n return null;\n }\n\n if (typeof uri === 'string') {\n const loginUri = new LoginUriView();\n loginUri.uri = this.fixUri(uri);\n if (this.isNullOrWhitespace(loginUri.uri)) {\n return null;\n }\n loginUri.match = null;\n return [loginUri];\n }\n\n if (uri.length > 0) {\n const returnArr: LoginUriView[] = [];\n uri.forEach(u => {\n const loginUri = new LoginUriView();\n loginUri.uri = this.fixUri(u);\n if (this.isNullOrWhitespace(loginUri.uri)) {\n return;\n }\n loginUri.match = null;\n returnArr.push(loginUri);\n });\n return returnArr.length === 0 ? null : returnArr;\n }\n\n return null;\n }\n\n protected fixUri(uri: string) {\n if (uri == null) {\n return null;\n }\n uri = uri.trim();\n if (uri.indexOf('://') === -1 && uri.indexOf('.') >= 0) {\n uri = 'http://' + uri;\n }\n if (uri.length > 1000) {\n return uri.substring(0, 1000);\n }\n return uri;\n }\n\n protected nameFromUrl(url: string) {\n const hostname = Utils.getHostname(url);\n if (this.isNullOrWhitespace(hostname)) {\n return null;\n }\n return hostname.startsWith('www.') ? hostname.replace('www.', '') : hostname;\n }\n\n protected isNullOrWhitespace(str: string): boolean {\n return Utils.isNullOrWhitespace(str);\n }\n\n protected getValueOrDefault(str: string, defaultValue: string = null): string {\n if (this.isNullOrWhitespace(str)) {\n return defaultValue;\n }\n return str;\n }\n\n protected splitNewLine(str: string): string[] {\n return str.split(this.newLineRegex);\n }\n\n // ref https://stackoverflow.com/a/5911300\n protected getCardBrand(cardNum: string) {\n if (this.isNullOrWhitespace(cardNum)) {\n return null;\n }\n\n // Visa\n let re = new RegExp('^4');\n if (cardNum.match(re) != null) {\n return 'Visa';\n }\n\n // Mastercard\n // Updated for Mastercard 2017 BINs expansion\n if (/^(5[1-5][0-9]{14}|2(22[1-9][0-9]{12}|2[3-9][0-9]{13}|[3-6][0-9]{14}|7[0-1][0-9]{13}|720[0-9]{12}))$/\n .test(cardNum)) {\n return 'Mastercard';\n }\n\n // AMEX\n re = new RegExp('^3[47]');\n if (cardNum.match(re) != null) {\n return 'Amex';\n }\n\n // Discover\n re = new RegExp('^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)');\n if (cardNum.match(re) != null) {\n return 'Discover';\n }\n\n // Diners\n re = new RegExp('^36');\n if (cardNum.match(re) != null) {\n return 'Diners Club';\n }\n\n // Diners - Carte Blanche\n re = new RegExp('^30[0-5]');\n if (cardNum.match(re) != null) {\n return 'Diners Club';\n }\n\n // JCB\n re = new RegExp('^35(2[89]|[3-8][0-9])');\n if (cardNum.match(re) != null) {\n return 'JCB';\n }\n\n // Visa Electron\n re = new RegExp('^(4026|417500|4508|4844|491(3|7))');\n if (cardNum.match(re) != null) {\n return 'Visa';\n }\n\n return null;\n }\n\n protected setCardExpiration(cipher: CipherView, expiration: string): boolean {\n if (!this.isNullOrWhitespace(expiration)) {\n const parts = expiration.split('/');\n if (parts.length === 2) {\n let month: string = null;\n let year: string = null;\n if (parts[0].length === 1 || parts[0].length === 2) {\n month = parts[0];\n if (month.length === 2 && month[0] === '0') {\n month = month.substr(1, 1);\n }\n }\n if (parts[1].length === 2 || parts[1].length === 4) {\n year = month.length === 2 ? '20' + parts[1] : parts[1];\n }\n if (month != null && year != null) {\n cipher.card.expMonth = month;\n cipher.card.expYear = year;\n return true;\n }\n }\n }\n return false;\n }\n\n protected moveFoldersToCollections(result: ImportResult) {\n result.folderRelationships.forEach(r => result.collectionRelationships.push(r));\n result.collections = result.folders.map(f => {\n const collection = new CollectionView();\n collection.name = f.name;\n return collection;\n });\n result.folderRelationships = [];\n result.folders = [];\n }\n\n protected querySelectorDirectChild(parentEl: Element, query: string) {\n const els = this.querySelectorAllDirectChild(parentEl, query);\n return els.length === 0 ? null : els[0];\n }\n\n protected querySelectorAllDirectChild(parentEl: Element, query: string) {\n return Array.from(parentEl.querySelectorAll(query)).filter(el => el.parentNode === parentEl);\n }\n\n protected initLoginCipher() {\n const cipher = new CipherView();\n cipher.favorite = false;\n cipher.notes = '';\n cipher.fields = [];\n cipher.login = new LoginView();\n cipher.type = CipherType.Login;\n return cipher;\n }\n\n protected cleanupCipher(cipher: CipherView) {\n if (cipher == null) {\n return;\n }\n if (cipher.type !== CipherType.Login) {\n cipher.login = null;\n }\n if (this.isNullOrWhitespace(cipher.name)) {\n cipher.name = '--';\n }\n if (this.isNullOrWhitespace(cipher.notes)) {\n cipher.notes = null;\n } else {\n cipher.notes = cipher.notes.trim();\n }\n if (cipher.fields != null && cipher.fields.length === 0) {\n cipher.fields = null;\n }\n }\n\n protected processKvp(cipher: CipherView, key: string, value: string, type: FieldType = FieldType.Text) {\n if (this.isNullOrWhitespace(value)) {\n return;\n }\n if (this.isNullOrWhitespace(key)) {\n key = '';\n }\n if (value.length > 200 || value.trim().search(this.newLineRegex) > -1) {\n if (cipher.notes == null) {\n cipher.notes = '';\n }\n cipher.notes += (key + ': ' + this.splitNewLine(value).join('\\n') + '\\n');\n } else {\n if (cipher.fields == null) {\n cipher.fields = [];\n }\n const field = new FieldView();\n field.type = type;\n field.name = key;\n field.value = value;\n cipher.fields.push(field);\n }\n }\n\n protected processFolder(result: ImportResult, folderName: string) {\n let folderIndex = result.folders.length;\n const hasFolder = !this.isNullOrWhitespace(folderName);\n let addFolder = hasFolder;\n\n if (hasFolder) {\n for (let i = 0; i < result.folders.length; i++) {\n if (result.folders[i].name === folderName) {\n addFolder = false;\n folderIndex = i;\n break;\n }\n }\n }\n\n if (addFolder) {\n const f = new FolderView();\n f.name = folderName;\n result.folders.push(f);\n }\n if (hasFolder) {\n result.folderRelationships.push([result.ciphers.length, folderIndex]);\n }\n }\n\n protected convertToNoteIfNeeded(cipher: CipherView) {\n if (cipher.type === CipherType.Login && this.isNullOrWhitespace(cipher.login.username) &&\n this.isNullOrWhitespace(cipher.login.password) &&\n (cipher.login.uris == null || cipher.login.uris.length === 0)) {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n }\n }\n}\n","import { CipherView } from '../view/cipherView';\nimport { CollectionView } from '../view/collectionView';\nimport { FolderView } from '../view/folderView';\n\nexport class ImportResult {\n success = false;\n errorMessage: string;\n ciphers: CipherView[] = [];\n folders: FolderView[] = [];\n folderRelationships: [number, number][] = [];\n collections: CollectionView[] = [];\n collectionRelationships: [number, number][] = [];\n}\n","import * as tldjs from 'tldjs';\n\nimport { I18nService } from '../abstractions/i18n.service';\n\n// tslint:disable-next-line\nconst nodeURL = typeof window === 'undefined' ? require('url') : null;\n\nexport class Utils {\n static inited = false;\n static isNativeScript = false;\n static isNode = false;\n static isBrowser = true;\n static isMobileBrowser = false;\n static isAppleMobileBrowser = false;\n static global: any = null;\n static tldEndingRegex = /.*\\.(com|net|org|edu|uk|gov|ca|de|jp|fr|au|ru|ch|io|es|us|co|xyz|info|ly|mil)$/;\n\n static init() {\n if (Utils.inited) {\n return;\n }\n\n Utils.inited = true;\n Utils.isNode = typeof process !== 'undefined' && (process as any).release != null &&\n (process as any).release.name === 'node';\n Utils.isBrowser = typeof window !== 'undefined';\n Utils.isNativeScript = !Utils.isNode && !Utils.isBrowser;\n Utils.isMobileBrowser = Utils.isBrowser && this.isMobile(window);\n Utils.isAppleMobileBrowser = Utils.isBrowser && this.isAppleMobile(window);\n Utils.global = Utils.isNativeScript ? global : (Utils.isNode && !Utils.isBrowser ? global : window);\n }\n\n static fromB64ToArray(str: string): Uint8Array {\n if (Utils.isNode || Utils.isNativeScript) {\n return new Uint8Array(Buffer.from(str, 'base64'));\n } else {\n const binaryString = window.atob(str);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n }\n }\n\n static fromUrlB64ToArray(str: string): Uint8Array {\n return Utils.fromB64ToArray(Utils.fromUrlB64ToB64(str));\n }\n\n static fromHexToArray(str: string): Uint8Array {\n if (Utils.isNode || Utils.isNativeScript) {\n return new Uint8Array(Buffer.from(str, 'hex'));\n } else {\n const bytes = new Uint8Array(str.length / 2);\n for (let i = 0; i < str.length; i += 2) {\n bytes[i / 2] = parseInt(str.substr(i, 2), 16);\n }\n return bytes;\n }\n }\n\n static fromUtf8ToArray(str: string): Uint8Array {\n if (Utils.isNode || Utils.isNativeScript) {\n return new Uint8Array(Buffer.from(str, 'utf8'));\n } else {\n const strUtf8 = unescape(encodeURIComponent(str));\n const arr = new Uint8Array(strUtf8.length);\n for (let i = 0; i < strUtf8.length; i++) {\n arr[i] = strUtf8.charCodeAt(i);\n }\n return arr;\n }\n }\n\n static fromByteStringToArray(str: string): Uint8Array {\n const arr = new Uint8Array(str.length);\n for (let i = 0; i < str.length; i++) {\n arr[i] = str.charCodeAt(i);\n }\n return arr;\n }\n\n static fromBufferToB64(buffer: ArrayBuffer): string {\n if (Utils.isNode || Utils.isNativeScript) {\n return Buffer.from(buffer).toString('base64');\n } else {\n let binary = '';\n const bytes = new Uint8Array(buffer);\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n }\n }\n\n static fromBufferToUrlB64(buffer: ArrayBuffer): string {\n return Utils.fromB64toUrlB64(Utils.fromBufferToB64(buffer));\n }\n\n static fromB64toUrlB64(b64Str: string) {\n return b64Str.replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=/g, '');\n }\n\n static fromBufferToUtf8(buffer: ArrayBuffer): string {\n if (Utils.isNode || Utils.isNativeScript) {\n return Buffer.from(buffer).toString('utf8');\n } else {\n const bytes = new Uint8Array(buffer);\n const encodedString = String.fromCharCode.apply(null, bytes);\n return decodeURIComponent(escape(encodedString));\n }\n }\n\n static fromBufferToByteString(buffer: ArrayBuffer): string {\n return String.fromCharCode.apply(null, new Uint8Array(buffer));\n }\n\n // ref: https://stackoverflow.com/a/40031979/1090359\n static fromBufferToHex(buffer: ArrayBuffer): string {\n if (Utils.isNode || Utils.isNativeScript) {\n return Buffer.from(buffer).toString('hex');\n } else {\n const bytes = new Uint8Array(buffer);\n return Array.prototype.map.call(bytes, (x: number) => ('00' + x.toString(16)).slice(-2)).join('');\n }\n }\n\n static fromUrlB64ToB64(urlB64Str: string): string {\n let output = urlB64Str.replace(/-/g, '+').replace(/_/g, '/');\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += '==';\n break;\n case 3:\n output += '=';\n break;\n default:\n throw new Error('Illegal base64url string!');\n }\n\n return output;\n }\n\n static fromUrlB64ToUtf8(urlB64Str: string): string {\n return Utils.fromB64ToUtf8(Utils.fromUrlB64ToB64(urlB64Str));\n }\n\n static fromUtf8ToB64(utfStr: string): string {\n if (Utils.isNode || Utils.isNativeScript) {\n return Buffer.from(utfStr, 'utf8').toString('base64');\n } else {\n return decodeURIComponent(escape(window.btoa(utfStr)));\n }\n }\n\n static fromB64ToUtf8(b64Str: string): string {\n if (Utils.isNode || Utils.isNativeScript) {\n return Buffer.from(b64Str, 'base64').toString('utf8');\n } else {\n return decodeURIComponent(escape(window.atob(b64Str)));\n }\n }\n\n // ref: http://stackoverflow.com/a/2117523/1090359\n static newGuid(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\n // tslint:disable-next-line\n const r = Math.random() * 16 | 0;\n // tslint:disable-next-line\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n\n static isGuid(id: string) {\n return RegExp(/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/, 'i').test(id);\n }\n\n static getHostname(uriString: string): string {\n const url = Utils.getUrl(uriString);\n try {\n return url != null && url.hostname !== '' ? url.hostname : null;\n } catch {\n return null;\n }\n }\n\n static getHost(uriString: string): string {\n const url = Utils.getUrl(uriString);\n try {\n return url != null && url.host !== '' ? url.host : null;\n } catch {\n return null;\n }\n }\n\n static getDomain(uriString: string): string {\n if (uriString == null) {\n return null;\n }\n\n uriString = uriString.trim();\n if (uriString === '') {\n return null;\n }\n\n if (uriString.startsWith('data:')) {\n return null;\n }\n\n let httpUrl = uriString.startsWith('http://') || uriString.startsWith('https://');\n if (!httpUrl && uriString.indexOf('://') < 0 && Utils.tldEndingRegex.test(uriString)) {\n uriString = 'http://' + uriString;\n httpUrl = true;\n }\n\n if (httpUrl) {\n try {\n const url = Utils.getUrlObject(uriString);\n if (url.hostname === 'localhost' || Utils.validIpAddress(url.hostname)) {\n return url.hostname;\n }\n\n const urlDomain = tldjs != null && tldjs.getDomain != null ? tldjs.getDomain(url.hostname) : null;\n return urlDomain != null ? urlDomain : url.hostname;\n } catch (e) { }\n }\n\n try {\n const domain = tldjs != null && tldjs.getDomain != null ? tldjs.getDomain(uriString) : null;\n\n if (domain != null) {\n return domain;\n }\n } catch {\n return null;\n }\n\n return null;\n }\n\n static getQueryParams(uriString: string): Map {\n const url = Utils.getUrl(uriString);\n if (url == null || url.search == null || url.search === '') {\n return null;\n }\n const map = new Map();\n const pairs = (url.search[0] === '?' ? url.search.substr(1) : url.search).split('&');\n pairs.forEach(pair => {\n const parts = pair.split('=');\n if (parts.length < 1) {\n return;\n }\n map.set(decodeURIComponent(parts[0]).toLowerCase(), parts[1] == null ? '' : decodeURIComponent(parts[1]));\n });\n return map;\n }\n\n static getSortFunction(i18nService: I18nService, prop: string) {\n return (a: any, b: any) => {\n if (a[prop] == null && b[prop] != null) {\n return -1;\n }\n if (a[prop] != null && b[prop] == null) {\n return 1;\n }\n if (a[prop] == null && b[prop] == null) {\n return 0;\n }\n\n return i18nService.collator ? i18nService.collator.compare(a[prop], b[prop]) :\n a[prop].localeCompare(b[prop]);\n };\n }\n\n static isNullOrWhitespace(str: string): boolean {\n return str == null || typeof str !== 'string' || str.trim() === '';\n }\n\n static nameOf(name: string & keyof T) {\n return name;\n }\n\n static assign(target: T, source: Partial): T {\n return Object.assign(target, source);\n }\n\n static getUrl(uriString: string): URL {\n if (uriString == null) {\n return null;\n }\n\n uriString = uriString.trim();\n if (uriString === '') {\n return null;\n }\n\n let url = Utils.getUrlObject(uriString);\n if (url == null) {\n const hasHttpProtocol = uriString.indexOf('http://') === 0 || uriString.indexOf('https://') === 0;\n if (!hasHttpProtocol && uriString.indexOf('.') > -1) {\n url = Utils.getUrlObject('http://' + uriString);\n }\n }\n return url;\n }\n\n private static validIpAddress(ipString: string): boolean {\n // tslint:disable-next-line\n const ipRegex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\n return ipRegex.test(ipString);\n }\n\n private static isMobile(win: Window) {\n let mobile = false;\n (a => {\n // tslint:disable-next-line\n if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4))) {\n mobile = true;\n }\n })(win.navigator.userAgent || win.navigator.vendor || (win as any).opera);\n return mobile || win.navigator.userAgent.match(/iPad/i) != null;\n }\n\n private static isAppleMobile(win: Window) {\n return win.navigator.userAgent.match(/iPhone/i) != null || win.navigator.userAgent.match(/iPad/i) != null;\n }\n\n private static getUrlObject(uriString: string): URL {\n try {\n if (nodeURL != null) {\n return nodeURL.URL ? new nodeURL.URL(uriString) : nodeURL.parse(uriString);\n } else if (typeof URL === 'function') {\n return new URL(uriString);\n } else if (window != null) {\n const hasProtocol = uriString.indexOf('://') > -1;\n if (!hasProtocol && uriString.indexOf('.') > -1) {\n uriString = 'http://' + uriString;\n } else if (!hasProtocol) {\n return null;\n }\n const anchor = window.document.createElement('a');\n anchor.href = uriString;\n return anchor as any;\n }\n } catch (e) { }\n\n return null;\n }\n}\n\nUtils.init();\n","import { GeneratedPasswordHistory } from '../models/domain/generatedPasswordHistory';\nimport { PasswordGeneratorPolicyOptions } from '../models/domain/passwordGeneratorPolicyOptions';\n\nexport abstract class PasswordGenerationService {\n generatePassword: (options: any) => Promise;\n generatePassphrase: (options: any) => Promise;\n getOptions: () => Promise<[any, PasswordGeneratorPolicyOptions]>;\n enforcePasswordGeneratorPoliciesOnOptions: (options: any) => Promise<[any, PasswordGeneratorPolicyOptions]>;\n getPasswordGeneratorPolicyOptions: () => Promise;\n saveOptions: (options: any) => Promise;\n getHistory: () => Promise;\n addHistory: (password: string) => Promise;\n clear: () => Promise;\n passwordStrength: (password: string, userInputs?: string[]) => zxcvbn.ZXCVBNResult;\n normalizeOptions: (options: any, enforcedPolicyOptions: PasswordGeneratorPolicyOptions) => void;\n}\n","import {\n Directive,\n HostListener,\n} from '@angular/core';\n\n@Directive({\n selector: '[appStopClick]',\n})\nexport class StopClickDirective {\n @HostListener('click', ['$event']) onClick($event: MouseEvent) {\n $event.preventDefault();\n }\n}\n","export abstract class StateService {\n get: (key: string) => Promise;\n save: (key: string, obj: any) => Promise;\n remove: (key: string) => Promise;\n purge: () => Promise;\n}\n","export enum CipherType {\n Login = 1,\n SecureNote = 2,\n Card = 3,\n Identity = 4,\n}\n","import { CollectionData } from '../models/data/collectionData';\n\nimport { Collection } from '../models/domain/collection';\nimport { TreeNode } from '../models/domain/treeNode';\n\nimport { CollectionView } from '../models/view/collectionView';\n\nexport abstract class CollectionService {\n decryptedCollectionCache: CollectionView[];\n\n clearCache: () => void;\n encrypt: (model: CollectionView) => Promise;\n decryptMany: (collections: Collection[]) => Promise;\n get: (id: string) => Promise;\n getAll: () => Promise;\n getAllDecrypted: () => Promise;\n getAllNested: (collections?: CollectionView[]) => Promise[]>;\n getNested: (id: string) => Promise>;\n upsert: (collection: CollectionData | CollectionData[]) => Promise;\n replace: (collections: { [id: string]: CollectionData; }) => Promise;\n clear: (userId: string) => Promise;\n delete: (id: string | string[]) => Promise;\n}\n","export abstract class StorageService {\n get: (key: string) => Promise;\n save: (key: string, obj: any) => Promise;\n remove: (key: string) => Promise;\n}\n","import { PolicyData } from '../models/data/policyData';\n\nimport { MasterPasswordPolicyOptions } from '../models/domain/masterPasswordPolicyOptions';\nimport { Policy } from '../models/domain/policy';\n\nimport { PolicyType } from '../enums/policyType';\n\nexport abstract class PolicyService {\n policyCache: Policy[];\n\n clearCache: () => void;\n getAll: (type?: PolicyType) => Promise;\n replace: (policies: { [id: string]: PolicyData; }) => Promise;\n clear: (userId: string) => Promise;\n getMasterPasswordPolicyOptions: (policies?: Policy[]) => Promise;\n evaluateMasterPassword: (passwordStrength: number, newPassword: string,\n enforcedPolicyOptions?: MasterPasswordPolicyOptions) => boolean;\n}\n","import {\n Directive,\n ElementRef,\n Input,\n Renderer2,\n} from '@angular/core';\n\n@Directive({\n selector: '[appInputVerbatim]',\n})\nexport class InputVerbatimDirective {\n @Input() set appInputVerbatim(condition: boolean | string) {\n this.disableComplete = condition === '' || condition === true;\n }\n\n private disableComplete: boolean;\n\n constructor(private el: ElementRef, private renderer: Renderer2) { }\n\n ngOnInit() {\n if (this.disableComplete && !this.el.nativeElement.hasAttribute('autocomplete')) {\n this.renderer.setAttribute(this.el.nativeElement, 'autocomplete', 'off');\n }\n if (!this.el.nativeElement.hasAttribute('autocapitalize')) {\n this.renderer.setAttribute(this.el.nativeElement, 'autocapitalize', 'none');\n }\n if (!this.el.nativeElement.hasAttribute('autocorrect')) {\n this.renderer.setAttribute(this.el.nativeElement, 'autocorrect', 'none');\n }\n if (!this.el.nativeElement.hasAttribute('spellcheck')) {\n this.renderer.setAttribute(this.el.nativeElement, 'spellcheck', 'false');\n }\n if (!this.el.nativeElement.hasAttribute('inputmode')) {\n this.renderer.setAttribute(this.el.nativeElement, 'inputmode', 'verbatim');\n }\n }\n}\n","import { FolderData } from '../models/data/folderData';\n\nimport { Folder } from '../models/domain/folder';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\nimport { TreeNode } from '../models/domain/treeNode';\n\nimport { FolderView } from '../models/view/folderView';\n\nexport abstract class FolderService {\n decryptedFolderCache: FolderView[];\n\n clearCache: () => void;\n encrypt: (model: FolderView, key?: SymmetricCryptoKey) => Promise;\n get: (id: string) => Promise;\n getAll: () => Promise;\n getAllDecrypted: () => Promise;\n getAllNested: () => Promise[]>;\n getNested: (id: string) => Promise>;\n saveWithServer: (folder: Folder) => Promise;\n upsert: (folder: FolderData | FolderData[]) => Promise;\n replace: (folders: { [id: string]: FolderData; }) => Promise;\n clear: (userId: string) => Promise;\n delete: (id: string | string[]) => Promise;\n deleteWithServer: (id: string) => Promise;\n}\n","import {\n Directive,\n HostListener,\n} from '@angular/core';\n\n@Directive({\n selector: '[appStopProp]',\n})\nexport class StopPropDirective {\n @HostListener('click', ['$event']) onClick($event: MouseEvent) {\n $event.stopPropagation();\n }\n}\n","import { TwoFactorProviderType } from '../enums/twoFactorProviderType';\n\nimport { AuthResult } from '../models/domain/authResult';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nexport abstract class AuthService {\n email: string;\n masterPasswordHash: string;\n code: string;\n codeVerifier: string;\n ssoRedirectUrl: string;\n clientId: string;\n clientSecret: string;\n twoFactorProvidersData: Map;\n selectedTwoFactorProviderType: TwoFactorProviderType;\n\n logIn: (email: string, masterPassword: string) => Promise;\n logInSso: (code: string, codeVerifier: string, redirectUrl: string) => Promise;\n logInApiKey: (clientId: string, clientSecret: string) => Promise;\n logInTwoFactor: (twoFactorProvider: TwoFactorProviderType, twoFactorToken: string,\n remember?: boolean) => Promise;\n logInComplete: (email: string, masterPassword: string, twoFactorProvider: TwoFactorProviderType,\n twoFactorToken: string, remember?: boolean) => Promise;\n logInSsoComplete: (code: string, codeVerifier: string, redirectUrl: string,\n twoFactorProvider: TwoFactorProviderType, twoFactorToken: string, remember?: boolean) => Promise;\n logInApiKeyComplete: (clientId: string, clientSecret: string, twoFactorProvider: TwoFactorProviderType,\n twoFactorToken: string, remember?: boolean) => Promise;\n logOut: (callback: Function) => void;\n getSupportedTwoFactorProviders: (win: Window) => any[];\n getDefaultTwoFactorProvider: (webAuthnSupported: boolean) => TwoFactorProviderType;\n makePreloginKey: (masterPassword: string, email: string) => Promise;\n authingWithApiKey: () => boolean;\n authingWithSso: () => boolean;\n authingWithPassword: () => boolean;\n}\n","import {\n SyncCipherNotification,\n SyncFolderNotification,\n SyncSendNotification,\n} from '../models/response/notificationResponse';\n\nexport abstract class SyncService {\n syncInProgress: boolean;\n\n getLastSync: () => Promise;\n setLastSync: (date: Date) => Promise;\n fullSync: (forceSync: boolean, allowThrowOnError?: boolean) => Promise;\n syncUpsertFolder: (notification: SyncFolderNotification, isEdit: boolean) => Promise;\n syncDeleteFolder: (notification: SyncFolderNotification) => Promise;\n syncUpsertCipher: (notification: SyncCipherNotification, isEdit: boolean) => Promise;\n syncDeleteCipher: (notification: SyncFolderNotification) => Promise;\n syncUpsertSend: (notification: SyncSendNotification, isEdit: boolean) => Promise;\n syncDeleteSend: (notification: SyncSendNotification) => Promise;\n}\n","export abstract class EnvironmentService {\n baseUrl: string;\n webVaultUrl: string;\n apiUrl: string;\n identityUrl: string;\n iconsUrl: string;\n notificationsUrl: string;\n eventsUrl: string;\n enterpriseUrl: string;\n\n getWebVaultUrl: () => string;\n setUrlsFromStorage: () => Promise;\n setUrls: (urls: any) => Promise;\n}\n","import {\n Directive,\n ElementRef,\n Input,\n} from '@angular/core';\n\nimport { Utils } from '../../misc/utils';\n\n@Directive({\n selector: '[appAutofocus]',\n})\nexport class AutofocusDirective {\n @Input() set appAutofocus(condition: boolean | string) {\n this.autofocus = condition === '' || condition === true;\n }\n\n private autofocus: boolean;\n\n constructor(private el: ElementRef) { }\n\n ngOnInit() {\n if (!Utils.isMobileBrowser && this.autofocus) {\n this.el.nativeElement.focus();\n }\n }\n}\n","export class ConstantsService {\n static readonly environmentUrlsKey: string = 'environmentUrls';\n static readonly disableGaKey: string = 'disableGa';\n static readonly disableAddLoginNotificationKey: string = 'disableAddLoginNotification';\n static readonly disableChangedPasswordNotificationKey: string = 'disableChangedPasswordNotification';\n static readonly disableContextMenuItemKey: string = 'disableContextMenuItem';\n static readonly disableFaviconKey: string = 'disableFavicon';\n static readonly disableBadgeCounterKey: string = 'disableBadgeCounter';\n static readonly disableAutoTotpCopyKey: string = 'disableAutoTotpCopy';\n static readonly enableAutoFillOnPageLoadKey: string = 'enableAutoFillOnPageLoad';\n static readonly vaultTimeoutKey: string = 'lockOption';\n static readonly vaultTimeoutActionKey: string = 'vaultTimeoutAction';\n static readonly lastActiveKey: string = 'lastActive';\n static readonly neverDomainsKey: string = 'neverDomains';\n static readonly installedVersionKey: string = 'installedVersion';\n static readonly localeKey: string = 'locale';\n static readonly themeKey: string = 'theme';\n static readonly collapsedGroupingsKey: string = 'collapsedGroupings';\n static readonly autoConfirmFingerprints: string = 'autoConfirmFingerprints';\n static readonly dontShowCardsCurrentTab: string = 'dontShowCardsCurrentTab';\n static readonly dontShowIdentitiesCurrentTab: string = 'dontShowIdentitiesCurrentTab';\n static readonly defaultUriMatch: string = 'defaultUriMatch';\n static readonly pinProtectedKey: string = 'pinProtectedKey';\n static readonly protectedPin: string = 'protectedPin';\n static readonly clearClipboardKey: string = 'clearClipboardKey';\n static readonly eventCollectionKey: string = 'eventCollection';\n static readonly ssoCodeVerifierKey: string = 'ssoCodeVerifier';\n static readonly ssoStateKey: string = 'ssoState';\n static readonly biometricUnlockKey: string = 'biometric';\n static readonly biometricText: string = 'biometricText';\n static readonly biometricAwaitingAcceptance: string = 'biometricAwaitingAcceptance';\n static readonly biometricFingerprintValidated: string = 'biometricFingerprintValidated';\n\n readonly environmentUrlsKey: string = ConstantsService.environmentUrlsKey;\n readonly disableGaKey: string = ConstantsService.disableGaKey;\n readonly disableAddLoginNotificationKey: string = ConstantsService.disableAddLoginNotificationKey;\n readonly disableContextMenuItemKey: string = ConstantsService.disableContextMenuItemKey;\n readonly disableFaviconKey: string = ConstantsService.disableFaviconKey;\n readonly disableBadgeCounterKey: string = ConstantsService.disableBadgeCounterKey;\n readonly disableAutoTotpCopyKey: string = ConstantsService.disableAutoTotpCopyKey;\n readonly enableAutoFillOnPageLoadKey: string = ConstantsService.enableAutoFillOnPageLoadKey;\n readonly vaultTimeoutKey: string = ConstantsService.vaultTimeoutKey;\n readonly vaultTimeoutActionKey: string = ConstantsService.vaultTimeoutActionKey;\n readonly lastActiveKey: string = ConstantsService.lastActiveKey;\n readonly neverDomainsKey: string = ConstantsService.neverDomainsKey;\n readonly installedVersionKey: string = ConstantsService.installedVersionKey;\n readonly localeKey: string = ConstantsService.localeKey;\n readonly themeKey: string = ConstantsService.themeKey;\n readonly collapsedGroupingsKey: string = ConstantsService.collapsedGroupingsKey;\n readonly autoConfirmFingerprints: string = ConstantsService.autoConfirmFingerprints;\n readonly dontShowCardsCurrentTab: string = ConstantsService.dontShowCardsCurrentTab;\n readonly dontShowIdentitiesCurrentTab: string = ConstantsService.dontShowIdentitiesCurrentTab;\n readonly defaultUriMatch: string = ConstantsService.defaultUriMatch;\n readonly pinProtectedKey: string = ConstantsService.pinProtectedKey;\n readonly protectedPin: string = ConstantsService.protectedPin;\n readonly clearClipboardKey: string = ConstantsService.clearClipboardKey;\n readonly eventCollectionKey: string = ConstantsService.eventCollectionKey;\n readonly ssoCodeVerifierKey: string = ConstantsService.ssoCodeVerifierKey;\n readonly ssoStateKey: string = ConstantsService.ssoStateKey;\n readonly biometricUnlockKey: string = ConstantsService.biometricUnlockKey;\n readonly biometricText: string = ConstantsService.biometricText;\n readonly biometricAwaitingAcceptance: string = ConstantsService.biometricAwaitingAcceptance;\n readonly biometricFingerprintValidated: string = ConstantsService.biometricFingerprintValidated;\n}\n","import { EventType } from '../enums/eventType';\n\nexport abstract class EventService {\n collect: (eventType: EventType, cipherId?: string, uploadImmediately?: boolean) => Promise;\n uploadEvents: () => Promise;\n clearEvents: () => Promise;\n}\n","export class PasswordVerificationRequest {\n masterPasswordHash: string;\n}\n","import { CipherView } from '../models/view/cipherView';\nimport { SendView } from '../models/view/sendView';\n\nexport abstract class SearchService {\n indexedEntityId?: string = null;\n clearIndex: () => void;\n isSearchable: (query: string) => boolean;\n indexCiphers: (indexedEntityGuid?: string, ciphersToIndex?: CipherView[]) => Promise;\n searchCiphers: (query: string,\n filter?: ((cipher: CipherView) => boolean) | (((cipher: CipherView) => boolean)[]),\n ciphers?: CipherView[]) => Promise;\n searchCiphersBasic: (ciphers: CipherView[], query: string, deleted?: boolean) => CipherView[];\n searchSends: (sends: SendView[], query: string) => SendView[];\n}\n","import { EncString } from './encString';\n\nimport { View } from '../view/view';\n\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport default class Domain {\n protected buildDomainModel(domain: D, dataObj: any, map: any,\n alreadyEncrypted: boolean, notEncList: any[] = []) {\n for (const prop in map) {\n if (!map.hasOwnProperty(prop)) {\n continue;\n }\n\n const objProp = dataObj[(map[prop] || prop)];\n if (alreadyEncrypted === true || notEncList.indexOf(prop) > -1) {\n (domain as any)[prop] = objProp ? objProp : null;\n } else {\n (domain as any)[prop] = objProp ? new EncString(objProp) : null;\n }\n }\n }\n protected buildDataModel(domain: D, dataObj: any, map: any, notEncStringList: any[] = []) {\n for (const prop in map) {\n if (!map.hasOwnProperty(prop)) {\n continue;\n }\n\n const objProp = (domain as any)[(map[prop] || prop)];\n if (notEncStringList.indexOf(prop) > -1) {\n (dataObj as any)[prop] = objProp != null ? objProp : null;\n } else {\n (dataObj as any)[prop] = objProp != null ? (objProp as EncString).encryptedString : null;\n }\n }\n }\n\n protected async decryptObj(viewModel: T, map: any, orgId: string,\n key: SymmetricCryptoKey = null): Promise {\n const promises = [];\n const self: any = this;\n\n for (const prop in map) {\n if (!map.hasOwnProperty(prop)) {\n continue;\n }\n\n // tslint:disable-next-line\n (function (theProp) {\n const p = Promise.resolve().then(() => {\n const mapProp = map[theProp] || theProp;\n if (self[mapProp]) {\n return self[mapProp].decrypt(orgId, key);\n }\n return null;\n }).then((val: any) => {\n (viewModel as any)[theProp] = val;\n });\n promises.push(p);\n })(prop);\n }\n\n await Promise.all(promises);\n return viewModel;\n }\n}\n","import * as jq from 'jquery';\n\nimport {\n Component,\n ComponentFactoryResolver,\n Type,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { ModalComponent as BaseModalComponent } from 'jslib/angular/components/modal.component';\nimport { Utils } from 'jslib/misc/utils';\n\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\n\n@Component({\n selector: 'app-modal',\n template: ``,\n})\nexport class ModalComponent extends BaseModalComponent {\n el: any = null;\n\n constructor(componentFactoryResolver: ComponentFactoryResolver, messagingService: MessagingService) {\n super(componentFactoryResolver, messagingService);\n }\n\n ngOnDestroy() { /* Nothing */ }\n\n show(type: Type, parentContainer: ViewContainerRef, fade: boolean = true,\n setComponentParameters: (component: T) => void = null): T {\n this.parentContainer = parentContainer;\n this.fade = fade;\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(type);\n const componentRef = this.container.createComponent(factory);\n if (setComponentParameters != null) {\n setComponentParameters(componentRef.instance);\n }\n\n const modals = Array.from(document.querySelectorAll('.modal'));\n if (modals.length > 0) {\n this.el = jq(modals[0]);\n this.el.modal('show');\n\n this.el.on('show.bs.modal', () => {\n this.onShow.emit();\n this.messagingService.send('modalShow');\n });\n this.el.on('shown.bs.modal', () => {\n this.onShown.emit();\n this.messagingService.send('modalShown');\n if (!Utils.isMobileBrowser) {\n this.el.find('*[appAutoFocus]').focus();\n }\n });\n this.el.on('hide.bs.modal', () => {\n this.onClose.emit();\n this.messagingService.send('modalClose');\n });\n this.el.on('hidden.bs.modal', () => {\n this.onClosed.emit();\n this.messagingService.send('modalClosed');\n if (this.parentContainer != null) {\n this.parentContainer.clear();\n }\n });\n }\n\n return componentRef.instance;\n }\n\n close() {\n if (this.el != null) {\n this.el.modal('hide');\n }\n }\n}\n","import { BreachAccountResponse } from '../models/response/breachAccountResponse';\n\nexport abstract class AuditService {\n passwordLeaked: (password: string) => Promise;\n breachedAccounts: (username: string) => Promise;\n}\n","import { View } from './view';\n\nimport { Card } from '../domain/card';\n\nexport class CardView implements View {\n cardholderName: string = null;\n expMonth: string = null;\n expYear: string = null;\n code: string = null;\n\n // tslint:disable\n private _brand: string = null;\n private _number: string = null;\n private _subTitle: string = null;\n // tslint:enable\n\n constructor(c?: Card) {\n // ctor\n }\n\n get maskedCode(): string {\n return this.code != null ? '•'.repeat(this.code.length) : null;\n }\n\n get brand(): string {\n return this._brand;\n }\n set brand(value: string) {\n this._brand = value;\n this._subTitle = null;\n }\n\n get number(): string {\n return this._number;\n }\n set number(value: string) {\n this._number = value;\n this._subTitle = null;\n }\n\n get subTitle(): string {\n if (this._subTitle == null) {\n this._subTitle = this.brand;\n if (this.number != null && this.number.length >= 4) {\n if (this._subTitle != null && this._subTitle !== '') {\n this._subTitle += ', ';\n } else {\n this._subTitle = '';\n }\n\n // Show last 5 on amex, last 4 for all others\n const count = this.number.length >= 5 && this.number.match(new RegExp('^3[47]')) != null ? 5 : 4;\n this._subTitle += ('*' + this.number.substr(this.number.length - count));\n }\n }\n return this._subTitle;\n }\n\n get expiration(): string {\n if (!this.expMonth && !this.expYear) {\n return null;\n }\n\n let exp = this.expMonth != null ? ('0' + this.expMonth).slice(-2) : '__';\n exp += (' / ' + (this.expYear != null ? this.formatYear(this.expYear) : '____'));\n return exp;\n }\n\n private formatYear(year: string): string {\n return year.length === 2 ? '20' + year : year;\n }\n}\n","import { EncString } from '../models/domain/encString';\n\nexport abstract class VaultTimeoutService {\n biometricLocked: boolean;\n pinProtectedKey: EncString;\n isLocked: () => Promise;\n checkVaultTimeout: () => Promise;\n lock: (allowSoftLock?: boolean) => Promise;\n logOut: () => Promise;\n setVaultTimeoutOptions: (vaultTimeout: number, vaultTimeoutAction: string) => Promise;\n isPinLockSet: () => Promise<[boolean, boolean]>;\n isBiometricLockSet: () => Promise;\n clear: () => Promise;\n}\n","import { SecureNoteType } from '../../enums/secureNoteType';\n\nimport { View } from './view';\n\nimport { SecureNote } from '../domain/secureNote';\n\nexport class SecureNoteView implements View {\n type: SecureNoteType = null;\n\n constructor(n?: SecureNote) {\n if (!n) {\n return;\n }\n\n this.type = n.type;\n }\n\n get subTitle(): string {\n return null;\n }\n}\n","export abstract class TokenService {\n token: string;\n decodedToken: any;\n refreshToken: string;\n setTokens: (accessToken: string, refreshToken: string) => Promise;\n setToken: (token: string) => Promise;\n getToken: () => Promise;\n setRefreshToken: (refreshToken: string) => Promise;\n getRefreshToken: () => Promise;\n toggleTokens: () => Promise;\n setTwoFactorToken: (token: string, email: string) => Promise;\n getTwoFactorToken: (email: string) => Promise;\n clearTwoFactorToken: (email: string) => Promise;\n clearToken: () => Promise;\n decodeToken: () => any;\n getTokenExpirationDate: () => Date;\n tokenSecondsRemaining: (offsetSeconds?: number) => number;\n tokenNeedsRefresh: (minutes?: number) => boolean;\n getUserId: () => string;\n getEmail: () => string;\n getEmailVerified: () => boolean;\n getName: () => string;\n getPremium: () => boolean;\n getIssuer: () => string;\n}\n","import { DecryptParameters } from '../models/domain/decryptParameters';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nexport abstract class CryptoFunctionService {\n pbkdf2: (password: string | ArrayBuffer, salt: string | ArrayBuffer, algorithm: 'sha256' | 'sha512',\n iterations: number) => Promise;\n hkdf: (ikm: ArrayBuffer, salt: string | ArrayBuffer, info: string | ArrayBuffer,\n outputByteSize: number, algorithm: 'sha256' | 'sha512') => Promise;\n hkdfExpand: (prk: ArrayBuffer, info: string | ArrayBuffer, outputByteSize: number,\n algorithm: 'sha256' | 'sha512') => Promise;\n hash: (value: string | ArrayBuffer, algorithm: 'sha1' | 'sha256' | 'sha512' | 'md5') => Promise;\n hmac: (value: ArrayBuffer, key: ArrayBuffer, algorithm: 'sha1' | 'sha256' | 'sha512') => Promise;\n compare: (a: ArrayBuffer, b: ArrayBuffer) => Promise;\n hmacFast: (value: ArrayBuffer | string, key: ArrayBuffer | string, algorithm: 'sha1' | 'sha256' | 'sha512') =>\n Promise;\n compareFast: (a: ArrayBuffer | string, b: ArrayBuffer | string) => Promise;\n aesEncrypt: (data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer) => Promise;\n aesDecryptFastParameters: (data: string, iv: string, mac: string, key: SymmetricCryptoKey) =>\n DecryptParameters;\n aesDecryptFast: (parameters: DecryptParameters) => Promise;\n aesDecrypt: (data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer) => Promise;\n rsaEncrypt: (data: ArrayBuffer, publicKey: ArrayBuffer, algorithm: 'sha1' | 'sha256') => Promise;\n rsaDecrypt: (data: ArrayBuffer, privateKey: ArrayBuffer, algorithm: 'sha1' | 'sha256') => Promise;\n rsaExtractPublicKey: (privateKey: ArrayBuffer) => Promise;\n rsaGenerateKeyPair: (length: 1024 | 2048 | 4096) => Promise<[ArrayBuffer, ArrayBuffer]>;\n randomBytes: (length: number) => Promise;\n}\n","import { EncryptionType } from '../../enums/encryptionType';\n\nimport { CryptoService } from '../../abstractions/crypto.service';\n\nimport { Utils } from '../../misc/utils';\n\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class EncString {\n encryptedString?: string;\n encryptionType?: EncryptionType;\n decryptedValue?: string;\n data?: string;\n iv?: string;\n mac?: string;\n\n constructor(encryptedStringOrType: string | EncryptionType, data?: string, iv?: string, mac?: string) {\n if (data != null) {\n // data and header\n const encType = encryptedStringOrType as EncryptionType;\n\n if (iv != null) {\n this.encryptedString = encType + '.' + iv + '|' + data;\n } else {\n this.encryptedString = encType + '.' + data;\n }\n\n // mac\n if (mac != null) {\n this.encryptedString += ('|' + mac);\n }\n\n this.encryptionType = encType;\n this.data = data;\n this.iv = iv;\n this.mac = mac;\n\n return;\n }\n\n this.encryptedString = encryptedStringOrType as string;\n if (!this.encryptedString) {\n return;\n }\n\n const headerPieces = this.encryptedString.split('.');\n let encPieces: string[] = null;\n\n if (headerPieces.length === 2) {\n try {\n this.encryptionType = parseInt(headerPieces[0], null);\n encPieces = headerPieces[1].split('|');\n } catch (e) {\n return;\n }\n } else {\n encPieces = this.encryptedString.split('|');\n this.encryptionType = encPieces.length === 3 ? EncryptionType.AesCbc128_HmacSha256_B64 :\n EncryptionType.AesCbc256_B64;\n }\n\n switch (this.encryptionType) {\n case EncryptionType.AesCbc128_HmacSha256_B64:\n case EncryptionType.AesCbc256_HmacSha256_B64:\n if (encPieces.length !== 3) {\n return;\n }\n\n this.iv = encPieces[0];\n this.data = encPieces[1];\n this.mac = encPieces[2];\n break;\n case EncryptionType.AesCbc256_B64:\n if (encPieces.length !== 2) {\n return;\n }\n\n this.iv = encPieces[0];\n this.data = encPieces[1];\n break;\n case EncryptionType.Rsa2048_OaepSha256_B64:\n case EncryptionType.Rsa2048_OaepSha1_B64:\n if (encPieces.length !== 1) {\n return;\n }\n\n this.data = encPieces[0];\n break;\n default:\n return;\n }\n }\n\n async decrypt(orgId: string, key: SymmetricCryptoKey = null): Promise {\n if (this.decryptedValue != null) {\n return this.decryptedValue;\n }\n\n let cryptoService: CryptoService;\n const containerService = (Utils.global as any).bitwardenContainerService;\n if (containerService) {\n cryptoService = containerService.getCryptoService();\n } else {\n throw new Error('global bitwardenContainerService not initialized.');\n }\n\n try {\n if (key == null) {\n key = await cryptoService.getOrgKey(orgId);\n }\n this.decryptedValue = await cryptoService.decryptToUtf8(this, key);\n } catch (e) {\n this.decryptedValue = '[error: cannot decrypt]';\n }\n return this.decryptedValue;\n }\n}\n","export enum SecureNoteType {\n Generic = 0,\n}\n","import {\n Component,\n Input,\n OnChanges,\n} from '@angular/core';\n\nimport { CipherType } from '../../enums/cipherType';\n\nimport { CipherView } from '../../models/view/cipherView';\n\nimport { EnvironmentService } from '../../abstractions/environment.service';\nimport { StateService } from '../../abstractions/state.service';\n\nimport { ConstantsService } from '../../services/constants.service';\n\nimport { Utils } from '../../misc/utils';\n\nconst IconMap: any = {\n 'fa-globe': String.fromCharCode(0xf0ac),\n 'fa-sticky-note-o': String.fromCharCode(0xf24a),\n 'fa-id-card-o': String.fromCharCode(0xf2c3),\n 'fa-credit-card': String.fromCharCode(0xf09d),\n 'fa-android': String.fromCharCode(0xf17b),\n 'fa-apple': String.fromCharCode(0xf179),\n};\n\n@Component({\n selector: 'app-vault-icon',\n templateUrl: 'icon.component.html',\n})\nexport class IconComponent implements OnChanges {\n @Input() cipher: CipherView;\n icon: string;\n image: string;\n fallbackImage: string;\n imageEnabled: boolean;\n\n private iconsUrl: string;\n\n constructor(environmentService: EnvironmentService, protected stateService: StateService) {\n this.iconsUrl = environmentService.iconsUrl;\n if (!this.iconsUrl) {\n if (environmentService.baseUrl) {\n this.iconsUrl = environmentService.baseUrl + '/icons';\n } else {\n this.iconsUrl = 'https://icons.bitwarden.net';\n }\n }\n }\n\n async ngOnChanges() {\n this.imageEnabled = !(await this.stateService.get(ConstantsService.disableFaviconKey));\n this.load();\n }\n\n get iconCode(): string {\n return IconMap[this.icon];\n }\n\n protected load() {\n switch (this.cipher.type) {\n case CipherType.Login:\n this.icon = 'fa-globe';\n this.setLoginIcon();\n break;\n case CipherType.SecureNote:\n this.icon = 'fa-sticky-note-o';\n break;\n case CipherType.Card:\n this.icon = 'fa-credit-card';\n break;\n case CipherType.Identity:\n this.icon = 'fa-id-card-o';\n break;\n default:\n break;\n }\n }\n\n private setLoginIcon() {\n if (this.cipher.login.uri) {\n let hostnameUri = this.cipher.login.uri;\n let isWebsite = false;\n\n if (hostnameUri.indexOf('androidapp://') === 0) {\n this.icon = 'fa-android';\n this.image = null;\n } else if (hostnameUri.indexOf('iosapp://') === 0) {\n this.icon = 'fa-apple';\n this.image = null;\n } else if (this.imageEnabled && hostnameUri.indexOf('://') === -1 && hostnameUri.indexOf('.') > -1) {\n hostnameUri = 'http://' + hostnameUri;\n isWebsite = true;\n } else if (this.imageEnabled) {\n isWebsite = hostnameUri.indexOf('http') === 0 && hostnameUri.indexOf('.') > -1;\n }\n\n if (this.imageEnabled && isWebsite) {\n try {\n this.image = this.iconsUrl + '/' + Utils.getHostname(hostnameUri) + '/icon.png';\n this.fallbackImage = 'images/fa-globe.png';\n } catch (e) { }\n }\n } else {\n this.image = null;\n }\n }\n}\n","
\n \"\"\n \n
\n","import { Injectable } from '@angular/core';\n\nimport { BroadcasterService as BaseBroadcasterService } from '../../services/broadcaster.service';\n\n@Injectable()\nexport class BroadcasterService extends BaseBroadcasterService {\n}\n","export enum TwoFactorProviderType {\n Authenticator = 0,\n Email = 1,\n Duo = 2,\n Yubikey = 3,\n U2f = 4,\n Remember = 5,\n OrganizationDuo = 6,\n WebAuthn = 7,\n}\n","export abstract class TotpService {\n getCode: (key: string) => Promise;\n getTimeInterval: (key: string) => number;\n isAutoCopyEnabled: () => Promise;\n}\n","import {\n Component,\n Input,\n OnInit,\n} from '@angular/core';\n\nimport { PaymentMethodType } from 'jslib/enums/paymentMethodType';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\nimport { WebConstants } from '../../services/webConstants';\n\nconst StripeElementStyle = {\n base: {\n color: '#333333',\n fontFamily: '\"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif, ' +\n '\"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n fontSize: '14px',\n fontSmoothing: 'antialiased',\n },\n invalid: {\n color: '#333333',\n },\n};\n\nconst StripeElementClasses = {\n focus: 'is-focused',\n empty: 'is-empty',\n invalid: 'is-invalid',\n};\n\n@Component({\n selector: 'app-payment',\n templateUrl: 'payment.component.html',\n})\nexport class PaymentComponent implements OnInit {\n @Input() showMethods = true;\n @Input() showOptions = true;\n @Input() method = PaymentMethodType.Card;\n @Input() hideBank = false;\n @Input() hidePaypal = false;\n @Input() hideCredit = false;\n\n bank: any = {\n routing_number: null,\n account_number: null,\n account_holder_name: null,\n account_holder_type: '',\n currency: 'USD',\n country: 'US',\n };\n\n paymentMethodType = PaymentMethodType;\n\n private btScript: HTMLScriptElement;\n private btInstance: any = null;\n private stripeScript: HTMLScriptElement;\n private stripe: any = null;\n private stripeElements: any = null;\n private stripeCardNumberElement: any = null;\n private stripeCardExpiryElement: any = null;\n private stripeCardCvcElement: any = null;\n\n constructor(private platformUtilsService: PlatformUtilsService, private apiService: ApiService) {\n this.stripeScript = window.document.createElement('script');\n this.stripeScript.src = 'https://js.stripe.com/v3/';\n this.stripeScript.async = true;\n this.stripeScript.onload = () => {\n this.stripe = (window as any).Stripe(this.platformUtilsService.isDev() ?\n WebConstants.stripeTestKey : WebConstants.stripeLiveKey);\n this.stripeElements = this.stripe.elements();\n this.setStripeElement();\n };\n this.btScript = window.document.createElement('script');\n this.btScript.src = 'scripts/dropin.js';\n this.btScript.async = true;\n }\n\n ngOnInit() {\n if (!this.showOptions) {\n this.hidePaypal = this.method !== PaymentMethodType.PayPal;\n this.hideBank = this.method !== PaymentMethodType.BankAccount;\n this.hideCredit = this.method !== PaymentMethodType.Credit;\n }\n window.document.head.appendChild(this.stripeScript);\n if (!this.hidePaypal) {\n window.document.head.appendChild(this.btScript);\n }\n }\n\n ngOnDestroy() {\n window.document.head.removeChild(this.stripeScript);\n window.setTimeout(() => {\n Array.from(window.document.querySelectorAll('iframe')).forEach(el => {\n if (el.src != null && el.src.indexOf('stripe') > -1) {\n try {\n window.document.body.removeChild(el);\n } catch { }\n }\n });\n }, 500);\n if (!this.hidePaypal) {\n window.document.head.removeChild(this.btScript);\n window.setTimeout(() => {\n Array.from(window.document.head.querySelectorAll('script')).forEach(el => {\n if (el.src != null && el.src.indexOf('paypal') > -1) {\n try {\n window.document.head.removeChild(el);\n } catch { }\n }\n });\n const btStylesheet = window.document.head.querySelector('#braintree-dropin-stylesheet');\n if (btStylesheet != null) {\n try {\n window.document.head.removeChild(btStylesheet);\n } catch { }\n }\n }, 500);\n }\n }\n\n changeMethod() {\n this.btInstance = null;\n\n if (this.method === PaymentMethodType.PayPal) {\n window.setTimeout(() => {\n (window as any).braintree.dropin.create({\n authorization: this.platformUtilsService.isDev() ?\n WebConstants.btSandboxKey : WebConstants.btProductionKey,\n container: '#bt-dropin-container',\n paymentOptionPriority: ['paypal'],\n paypal: {\n flow: 'vault',\n buttonStyle: {\n label: 'pay',\n size: 'medium',\n shape: 'pill',\n color: 'blue',\n },\n },\n }, (createErr: any, instance: any) => {\n if (createErr != null) {\n // tslint:disable-next-line\n console.error(createErr);\n return;\n }\n this.btInstance = instance;\n });\n }, 250);\n } else {\n this.setStripeElement();\n }\n }\n\n createPaymentToken(): Promise<[string, PaymentMethodType]> {\n return new Promise((resolve, reject) => {\n if (this.method === PaymentMethodType.Credit) {\n resolve([null, this.method]);\n } else if (this.method === PaymentMethodType.PayPal) {\n this.btInstance.requestPaymentMethod().then((payload: any) => {\n resolve([payload.nonce, this.method]);\n }).catch((err: any) => {\n reject(err.message);\n });\n } else if (this.method === PaymentMethodType.Card || this.method === PaymentMethodType.BankAccount) {\n if (this.method === PaymentMethodType.Card) {\n this.apiService.postSetupPayment().then(clientSecret =>\n this.stripe.handleCardSetup(clientSecret, this.stripeCardNumberElement))\n .then((result: any) => {\n if (result.error) {\n reject(result.error.message);\n } else if (result.setupIntent && result.setupIntent.status === 'succeeded') {\n resolve([result.setupIntent.payment_method, this.method]);\n } else {\n reject();\n }\n });\n } else {\n this.stripe.createToken('bank_account', this.bank).then((result: any) => {\n if (result.error) {\n reject(result.error.message);\n } else if (result.token && result.token.id != null) {\n resolve([result.token.id, this.method]);\n } else {\n reject();\n }\n });\n }\n }\n });\n }\n\n handleStripeCardPayment(clientSecret: string, successCallback: () => Promise): Promise {\n return new Promise((resolve, reject) => {\n if (this.showMethods && this.stripeCardNumberElement == null) {\n reject();\n return;\n }\n const handleCardPayment = () => this.showMethods ?\n this.stripe.handleCardSetup(clientSecret, this.stripeCardNumberElement) :\n this.stripe.handleCardSetup(clientSecret);\n return handleCardPayment().then(async (result: any) => {\n if (result.error) {\n reject(result.error.message);\n } else if (result.paymentIntent && result.paymentIntent.status === 'succeeded') {\n if (successCallback != null) {\n await successCallback();\n }\n resolve();\n } else {\n reject();\n }\n });\n });\n }\n\n private setStripeElement() {\n window.setTimeout(() => {\n if (this.showMethods && this.method === PaymentMethodType.Card) {\n if (this.stripeCardNumberElement == null) {\n this.stripeCardNumberElement = this.stripeElements.create('cardNumber', {\n style: StripeElementStyle,\n classes: StripeElementClasses,\n placeholder: '',\n });\n }\n if (this.stripeCardExpiryElement == null) {\n this.stripeCardExpiryElement = this.stripeElements.create('cardExpiry', {\n style: StripeElementStyle,\n classes: StripeElementClasses,\n });\n }\n if (this.stripeCardCvcElement == null) {\n this.stripeCardCvcElement = this.stripeElements.create('cardCvc', {\n style: StripeElementStyle,\n classes: StripeElementClasses,\n placeholder: '',\n });\n }\n this.stripeCardNumberElement.mount('#stripe-card-number-element');\n this.stripeCardExpiryElement.mount('#stripe-card-expiry-element');\n this.stripeCardCvcElement.mount('#stripe-card-cvc-element');\n }\n }, 50);\n }\n}\n","
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n\n
\n
\n \n
\n
\n
\n \"Visa,\n
\n
\n \n
\n
\n
\n
\n \n \n \n \n
\n
\n
\n
\n
\n\n \n {{'verifyBankAccountInitialDesc' | i18n}} {{'verifyBankAccountFailureWarning' | i18n}}\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n\n
\n
\n {{'paypalClickSubmit' | i18n}}\n
\n
\n\n \n {{'makeSureEnoughCredit' | i18n}}\n \n\n","export enum FieldType {\n Text = 0,\n Hidden = 1,\n Boolean = 2,\n}\n","import { View } from './view';\n\nimport { Folder } from '../domain/folder';\nimport { ITreeNodeObject } from '../domain/treeNode';\n\nexport class FolderView implements View, ITreeNodeObject {\n id: string = null;\n name: string = null;\n revisionDate: Date = null;\n\n constructor(f?: Folder) {\n if (!f) {\n return;\n }\n\n this.id = f.id;\n this.revisionDate = f.revisionDate;\n }\n}\n","import {\n Component,\n Input,\n OnChanges,\n OnInit,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nimport { CryptoFunctionService } from 'jslib/abstractions/cryptoFunction.service';\nimport { StateService } from 'jslib/abstractions/state.service';\n\nimport { Utils } from 'jslib/misc/utils';\n\n@Component({\n selector: 'app-avatar',\n template: '',\n})\nexport class AvatarComponent implements OnChanges, OnInit {\n @Input() data: string;\n @Input() email: string;\n @Input() size = 45;\n @Input() charCount = 2;\n @Input() textColor = '#ffffff';\n @Input() fontSize = 20;\n @Input() fontWeight = 300;\n @Input() dynamic = false;\n @Input() circle = false;\n\n src: string;\n\n constructor(public sanitizer: DomSanitizer, private cryptoFunctionService: CryptoFunctionService,\n private stateService: StateService) { }\n\n ngOnInit() {\n if (!this.dynamic) {\n this.generate();\n }\n }\n\n ngOnChanges() {\n if (this.dynamic) {\n this.generate();\n }\n }\n\n private async generate() {\n const enableGravatars = await this.stateService.get('enableGravatars');\n if (enableGravatars && this.email != null) {\n const hashBytes = await this.cryptoFunctionService.hash(this.email.toLowerCase().trim(), 'md5');\n const hash = Utils.fromBufferToHex(hashBytes).toLowerCase();\n this.src = 'https://www.gravatar.com/avatar/' + hash + '?s=' + this.size + '&r=pg&d=retro';\n } else {\n let chars: string = null;\n const upperData = this.data.toUpperCase();\n\n if (this.charCount > 1) {\n chars = this.getFirstLetters(upperData, this.charCount);\n }\n if (chars == null) {\n chars = upperData.substr(0, this.charCount);\n }\n\n const charObj = this.getCharText(chars);\n const color = this.stringToColor(upperData);\n const svg = this.getSvg(this.size, color);\n svg.appendChild(charObj);\n const html = window.document.createElement('div').appendChild(svg).outerHTML;\n const svgHtml = window.btoa(unescape(encodeURIComponent(html)));\n this.src = 'data:image/svg+xml;base64,' + svgHtml;\n }\n }\n\n private stringToColor(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n // tslint:disable-next-line\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\n }\n let color = '#';\n for (let i = 0; i < 3; i++) {\n // tslint:disable-next-line\n const value = (hash >> (i * 8)) & 0xFF;\n color += ('00' + value.toString(16)).substr(-2);\n }\n return color;\n }\n\n private getFirstLetters(data: string, count: number): string {\n const parts = data.split(' ');\n if (parts.length > 1) {\n let text = '';\n for (let i = 0; i < count; i++) {\n text += parts[i].substr(0, 1);\n }\n return text;\n }\n return null;\n }\n\n private getSvg(size: number, color: string): HTMLElement {\n const svgTag = window.document.createElement('svg');\n svgTag.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n svgTag.setAttribute('pointer-events', 'none');\n svgTag.setAttribute('width', size.toString());\n svgTag.setAttribute('height', size.toString());\n svgTag.style.backgroundColor = color;\n svgTag.style.width = size + 'px';\n svgTag.style.height = size + 'px';\n return svgTag;\n }\n\n private getCharText(character: string): HTMLElement {\n const textTag = window.document.createElement('text');\n textTag.setAttribute('text-anchor', 'middle');\n textTag.setAttribute('y', '50%');\n textTag.setAttribute('x', '50%');\n textTag.setAttribute('dy', '0.35em');\n textTag.setAttribute('pointer-events', 'auto');\n textTag.setAttribute('fill', this.textColor);\n textTag.setAttribute('font-family', '\"Open Sans\",\"Helvetica Neue\",Helvetica,Arial,' +\n 'sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\"');\n textTag.textContent = character;\n textTag.style.fontWeight = this.fontWeight.toString();\n textTag.style.fontSize = this.fontSize + 'px';\n return textTag;\n }\n}\n","import { CollectionData } from '../data/collectionData';\n\nimport { CollectionView } from '../view/collectionView';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\n\nexport class Collection extends Domain {\n id: string;\n organizationId: string;\n name: EncString;\n externalId: string;\n readOnly: boolean;\n hidePasswords: boolean;\n\n constructor(obj?: CollectionData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(this, obj, {\n id: null,\n organizationId: null,\n name: null,\n externalId: null,\n readOnly: null,\n hidePasswords: null,\n }, alreadyEncrypted, ['id', 'organizationId', 'externalId', 'readOnly', 'hidePasswords']);\n }\n\n decrypt(): Promise {\n return this.decryptObj(new CollectionView(this), {\n name: null,\n }, this.organizationId);\n }\n}\n","export enum PolicyType {\n TwoFactorAuthentication = 0, // Requires users to have 2fa enabled\n MasterPassword = 1, // Sets minimum requirements for master password complexity\n PasswordGenerator = 2, // Sets minimum requirements/default type for generated passwords/passphrases\n SingleOrg = 3, // Allows users to only be apart of one organization\n RequireSso = 4, // Requires users to authenticate with SSO\n PersonalOwnership = 5, // Disables personal vault ownership for adding/cloning items\n DisableSend = 6, // Disables the ability to create and edit Bitwarden Sends\n SendOptions = 7, // Sets restrictions or defaults for Bitwarden Sends\n}\n","import {\n Component,\n EventEmitter,\n Output,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { OrganizationTaxInfoUpdateRequest } from 'jslib/models/request/organizationTaxInfoUpdateRequest';\nimport { TaxInfoUpdateRequest } from 'jslib/models/request/taxInfoUpdateRequest';\nimport { TaxRateResponse } from 'jslib/models/response/taxRateResponse';\n\n@Component({\n selector: 'app-tax-info',\n templateUrl: 'tax-info.component.html',\n})\nexport class TaxInfoComponent {\n @Output() onCountryChanged = new EventEmitter();\n\n loading: boolean = true;\n organizationId: string;\n taxInfo: any = {\n taxId: null,\n line1: null,\n line2: null,\n city: null,\n state: null,\n postalCode: null,\n country: 'US',\n includeTaxId: false,\n };\n\n taxRates: TaxRateResponse[];\n\n private pristine: any = {\n taxId: null,\n line1: null,\n line2: null,\n city: null,\n state: null,\n postalCode: null,\n country: 'US',\n includeTaxId: false,\n };\n\n constructor(private apiService: ApiService, private route: ActivatedRoute) { }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organizationId = params.organizationId;\n if (this.organizationId) {\n try {\n const taxInfo = await this.apiService.getOrganizationTaxInfo(this.organizationId);\n if (taxInfo) {\n this.taxInfo.taxId = taxInfo.taxId;\n this.taxInfo.state = taxInfo.state;\n this.taxInfo.line1 = taxInfo.line1;\n this.taxInfo.line2 = taxInfo.line2;\n this.taxInfo.city = taxInfo.city;\n this.taxInfo.state = taxInfo.state;\n this.taxInfo.postalCode = taxInfo.postalCode;\n this.taxInfo.country = taxInfo.country || 'US';\n this.taxInfo.includeTaxId = this.taxInfo.country !== 'US' && (\n !!taxInfo.taxId\n || !!taxInfo.line1\n || !!taxInfo.line2\n || !!taxInfo.city\n || !!taxInfo.state);\n }\n } catch { }\n } else {\n const taxInfo = await this.apiService.getTaxInfo();\n if (taxInfo) {\n this.taxInfo.postalCode = taxInfo.postalCode;\n this.taxInfo.country = taxInfo.country || 'US';\n }\n }\n this.pristine = Object.assign({}, this.taxInfo);\n // If not the default (US) then trigger onCountryChanged\n if (this.taxInfo.country !== 'US') {\n this.onCountryChanged.emit();\n }\n });\n\n const taxRates = await this.apiService.getTaxRates();\n this.taxRates = taxRates.data;\n this.loading = false;\n }\n\n get taxRate() {\n if (this.taxRates != null) {\n const localTaxRate = this.taxRates.find(x =>\n x.country === this.taxInfo.country &&\n x.postalCode === this.taxInfo.postalCode\n );\n return localTaxRate?.rate ?? null;\n }\n }\n\n getTaxInfoRequest(): TaxInfoUpdateRequest {\n if (this.organizationId) {\n const request = new OrganizationTaxInfoUpdateRequest();\n request.taxId = this.taxInfo.taxId;\n request.state = this.taxInfo.state;\n request.line1 = this.taxInfo.line1;\n request.line2 = this.taxInfo.line2;\n request.city = this.taxInfo.city;\n request.state = this.taxInfo.state;\n request.postalCode = this.taxInfo.postalCode;\n request.country = this.taxInfo.country;\n return request;\n } else {\n const request = new TaxInfoUpdateRequest();\n request.postalCode = this.taxInfo.postalCode;\n request.country = this.taxInfo.country;\n return request;\n }\n }\n\n submitTaxInfo(): Promise {\n if (!this.hasChanged()) {\n return new Promise(resolve => { resolve(); });\n }\n const request = this.getTaxInfoRequest();\n return this.organizationId ? this.apiService.putOrganizationTaxInfo(this.organizationId,\n request as OrganizationTaxInfoUpdateRequest) : this.apiService.putTaxInfo(request);\n }\n\n changeCountry() {\n if (this.taxInfo.country === 'US') {\n this.taxInfo.includeTaxId = false;\n this.taxInfo.taxId = null;\n this.taxInfo.line1 = null;\n this.taxInfo.line2 = null;\n this.taxInfo.city = null;\n this.taxInfo.state = null;\n }\n this.onCountryChanged.emit();\n }\n\n private hasChanged(): boolean {\n for (const key in this.taxInfo) {\n if (this.pristine.hasOwnProperty(key) && this.pristine[key] !== this.taxInfo[key]) {\n return true;\n }\n }\n return false;\n }\n}\n","
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n","import { CipherType } from '../../enums/cipherType';\n\nimport { Cipher } from '../domain/cipher';\n\nimport { AttachmentView } from './attachmentView';\nimport { CardView } from './cardView';\nimport { FieldView } from './fieldView';\nimport { IdentityView } from './identityView';\nimport { LoginView } from './loginView';\nimport { PasswordHistoryView } from './passwordHistoryView';\nimport { SecureNoteView } from './secureNoteView';\nimport { View } from './view';\n\nexport class CipherView implements View {\n id: string = null;\n organizationId: string = null;\n folderId: string = null;\n name: string = null;\n notes: string = null;\n type: CipherType = null;\n favorite = false;\n organizationUseTotp = false;\n edit = false;\n viewPassword = true;\n localData: any;\n login = new LoginView();\n identity = new IdentityView();\n card = new CardView();\n secureNote = new SecureNoteView();\n attachments: AttachmentView[] = null;\n fields: FieldView[] = null;\n passwordHistory: PasswordHistoryView[] = null;\n collectionIds: string[] = null;\n revisionDate: Date = null;\n deletedDate: Date = null;\n\n constructor(c?: Cipher) {\n if (!c) {\n return;\n }\n\n this.id = c.id;\n this.organizationId = c.organizationId;\n this.folderId = c.folderId;\n this.favorite = c.favorite;\n this.organizationUseTotp = c.organizationUseTotp;\n this.edit = c.edit;\n this.viewPassword = c.viewPassword;\n this.type = c.type;\n this.localData = c.localData;\n this.collectionIds = c.collectionIds;\n this.revisionDate = c.revisionDate;\n this.deletedDate = c.deletedDate;\n }\n\n get subTitle(): string {\n switch (this.type) {\n case CipherType.Login:\n return this.login.subTitle;\n case CipherType.SecureNote:\n return this.secureNote.subTitle;\n case CipherType.Card:\n return this.card.subTitle;\n case CipherType.Identity:\n return this.identity.subTitle;\n default:\n break;\n }\n\n return null;\n }\n\n get hasPasswordHistory(): boolean {\n return this.passwordHistory && this.passwordHistory.length > 0;\n }\n\n get hasAttachments(): boolean {\n return this.attachments && this.attachments.length > 0;\n }\n\n get hasOldAttachments(): boolean {\n if (this.hasAttachments) {\n for (let i = 0; i < this.attachments.length; i++) {\n if (this.attachments[i].key == null) {\n return true;\n }\n }\n }\n return false;\n }\n\n get hasFields(): boolean {\n return this.fields && this.fields.length > 0;\n }\n\n get passwordRevisionDisplayDate(): Date {\n if (this.type !== CipherType.Login || this.login == null) {\n return null;\n } else if (this.login.password == null || this.login.password === '') {\n return null;\n }\n return this.login.passwordRevisionDate;\n }\n\n get isDeleted(): boolean {\n return this.deletedDate != null;\n }\n}\n","import { View } from './view';\n\nimport { Identity } from '../domain/identity';\n\nimport { Utils } from '../../misc/utils';\n\nexport class IdentityView implements View {\n title: string = null;\n middleName: string = null;\n address1: string = null;\n address2: string = null;\n address3: string = null;\n city: string = null;\n state: string = null;\n postalCode: string = null;\n country: string = null;\n company: string = null;\n email: string = null;\n phone: string = null;\n ssn: string = null;\n username: string = null;\n passportNumber: string = null;\n licenseNumber: string = null;\n\n // tslint:disable\n private _firstName: string = null;\n private _lastName: string = null;\n private _subTitle: string = null;\n // tslint:enable\n\n constructor(i?: Identity) {\n // ctor\n }\n\n get firstName(): string {\n return this._firstName;\n }\n set firstName(value: string) {\n this._firstName = value;\n this._subTitle = null;\n }\n\n get lastName(): string {\n return this._lastName;\n }\n set lastName(value: string) {\n this._lastName = value;\n this._subTitle = null;\n }\n\n get subTitle(): string {\n if (this._subTitle == null && (this.firstName != null || this.lastName != null)) {\n this._subTitle = '';\n if (this.firstName != null) {\n this._subTitle = this.firstName;\n }\n if (this.lastName != null) {\n if (this._subTitle !== '') {\n this._subTitle += ' ';\n }\n this._subTitle += this.lastName;\n }\n }\n\n return this._subTitle;\n }\n\n get fullName(): string {\n if (this.title != null || this.firstName != null || this.middleName != null || this.lastName != null) {\n let name = '';\n if (this.title != null) {\n name += (this.title + ' ');\n }\n if (this.firstName != null) {\n name += (this.firstName + ' ');\n }\n if (this.middleName != null) {\n name += (this.middleName + ' ');\n }\n if (this.lastName != null) {\n name += this.lastName;\n }\n return name.trim();\n }\n\n return null;\n }\n\n get fullAddress(): string {\n let address = this.address1;\n if (!Utils.isNullOrWhitespace(this.address2)) {\n if (!Utils.isNullOrWhitespace(address)) {\n address += ', ';\n }\n address += this.address2;\n }\n if (!Utils.isNullOrWhitespace(this.address3)) {\n if (!Utils.isNullOrWhitespace(address)) {\n address += ', ';\n }\n address += this.address3;\n }\n return address;\n }\n\n get fullAddressPart2(): string {\n if (this.city == null && this.state == null && this.postalCode == null) {\n return null;\n }\n const city = this.city || '-';\n const state = this.state;\n const postalCode = this.postalCode || '-';\n let addressPart2 = city;\n if (!Utils.isNullOrWhitespace(state)) {\n addressPart2 += ', ' + state;\n }\n addressPart2 += ', ' + postalCode;\n return addressPart2;\n }\n}\n","import { CollectionDetailsResponse } from '../response/collectionResponse';\n\nexport class CollectionData {\n id: string;\n organizationId: string;\n name: string;\n externalId: string;\n readOnly: boolean;\n\n constructor(response: CollectionDetailsResponse) {\n this.id = response.id;\n this.organizationId = response.organizationId;\n this.name = response.name;\n this.externalId = response.externalId;\n this.readOnly = response.readOnly;\n }\n}\n","import { View } from './view';\n\nimport { Collection } from '../domain/collection';\nimport { ITreeNodeObject } from '../domain/treeNode';\n\nimport { CollectionGroupDetailsResponse } from '../response/collectionResponse';\n\nexport class CollectionView implements View, ITreeNodeObject {\n id: string = null;\n organizationId: string = null;\n name: string = null;\n externalId: string = null;\n readOnly: boolean = null;\n hidePasswords: boolean = null;\n\n constructor(c?: Collection | CollectionGroupDetailsResponse) {\n if (!c) {\n return;\n }\n\n this.id = c.id;\n this.organizationId = c.organizationId;\n this.externalId = c.externalId;\n if (c instanceof Collection) {\n this.readOnly = c.readOnly;\n this.hidePasswords = c.hidePasswords;\n }\n }\n}\n","export enum OrganizationUserStatusType {\n Invited = 0,\n Accepted = 1,\n Confirmed = 2,\n}\n","import { CipherType } from '../../enums/cipherType';\n\nimport { AttachmentData } from './attachmentData';\nimport { CardData } from './cardData';\nimport { FieldData } from './fieldData';\nimport { IdentityData } from './identityData';\nimport { LoginData } from './loginData';\nimport { PasswordHistoryData } from './passwordHistoryData';\nimport { SecureNoteData } from './secureNoteData';\n\nimport { CipherResponse } from '../response/cipherResponse';\n\nexport class CipherData {\n id: string;\n organizationId: string;\n folderId: string;\n userId: string;\n edit: boolean;\n viewPassword: boolean;\n organizationUseTotp: boolean;\n favorite: boolean;\n revisionDate: string;\n type: CipherType;\n sizeName: string;\n name: string;\n notes: string;\n login?: LoginData;\n secureNote?: SecureNoteData;\n card?: CardData;\n identity?: IdentityData;\n fields?: FieldData[];\n attachments?: AttachmentData[];\n passwordHistory?: PasswordHistoryData[];\n collectionIds?: string[];\n deletedDate: string;\n\n constructor(response?: CipherResponse, userId?: string, collectionIds?: string[]) {\n if (response == null) {\n return;\n }\n\n this.id = response.id;\n this.organizationId = response.organizationId;\n this.folderId = response.folderId;\n this.userId = userId;\n this.edit = response.edit;\n this.viewPassword = response.viewPassword;\n this.organizationUseTotp = response.organizationUseTotp;\n this.favorite = response.favorite;\n this.revisionDate = response.revisionDate;\n this.type = response.type;\n this.name = response.name;\n this.notes = response.notes;\n this.collectionIds = collectionIds != null ? collectionIds : response.collectionIds;\n this.deletedDate = response.deletedDate;\n\n switch (this.type) {\n case CipherType.Login:\n this.login = new LoginData(response.login);\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNoteData(response.secureNote);\n break;\n case CipherType.Card:\n this.card = new CardData(response.card);\n break;\n case CipherType.Identity:\n this.identity = new IdentityData(response.identity);\n break;\n default:\n break;\n }\n\n if (response.fields != null) {\n this.fields = response.fields.map(f => new FieldData(f));\n }\n if (response.attachments != null) {\n this.attachments = response.attachments.map(a => new AttachmentData(a));\n }\n if (response.passwordHistory != null) {\n this.passwordHistory = response.passwordHistory.map(ph => new PasswordHistoryData(ph));\n }\n }\n}\n","import { LoginUriView } from './loginUriView';\nimport { View } from './view';\n\nimport { Utils } from '../../misc/utils';\nimport { Login } from '../domain/login';\n\nexport class LoginView implements View {\n username: string = null;\n password: string = null;\n passwordRevisionDate?: Date = null;\n totp: string = null;\n uris: LoginUriView[] = null;\n\n constructor(l?: Login) {\n if (!l) {\n return;\n }\n\n this.passwordRevisionDate = l.passwordRevisionDate;\n }\n\n get uri(): string {\n return this.hasUris ? this.uris[0].uri : null;\n }\n\n get maskedPassword(): string {\n return this.password != null ? '••••••••' : null;\n }\n\n get subTitle(): string {\n return this.username;\n }\n\n get canLaunch(): boolean {\n return this.hasUris && this.uris.some(u => u.canLaunch);\n }\n\n get hasTotp(): boolean {\n return !Utils.isNullOrWhitespace(this.totp);\n }\n\n get launchUri(): string {\n if (this.hasUris) {\n const uri = this.uris.find(u => u.canLaunch);\n if (uri != null) {\n return uri.launchUri;\n }\n }\n return null;\n }\n\n get hasUris(): boolean {\n return this.uris != null && this.uris.length > 0;\n }\n}\n","export enum SendType {\n Text = 0,\n File = 1,\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { TwoFactorProviderType } from 'jslib/enums/twoFactorProviderType';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\nimport { PasswordVerificationRequest } from 'jslib/models/request/passwordVerificationRequest';\n\n@Component({\n selector: 'app-two-factor-verify',\n templateUrl: 'two-factor-verify.component.html',\n})\nexport class TwoFactorVerifyComponent {\n @Input() type: TwoFactorProviderType;\n @Input() organizationId: string;\n @Output() onAuthed = new EventEmitter();\n\n masterPassword: string;\n formPromise: Promise;\n\n private masterPasswordHash: string;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private cryptoService: CryptoService) { }\n\n async submit() {\n if (this.masterPassword == null || this.masterPassword === '') {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassRequired'));\n return;\n }\n\n const request = new PasswordVerificationRequest();\n request.masterPasswordHash = this.masterPasswordHash =\n await this.cryptoService.hashPassword(this.masterPassword, null);\n\n try {\n switch (this.type) {\n case -1:\n this.formPromise = this.apiService.getTwoFactorRecover(request);\n break;\n case TwoFactorProviderType.Duo:\n case TwoFactorProviderType.OrganizationDuo:\n if (this.organizationId != null) {\n this.formPromise = this.apiService.getTwoFactorOrganizationDuo(this.organizationId, request);\n } else {\n this.formPromise = this.apiService.getTwoFactorDuo(request);\n }\n break;\n case TwoFactorProviderType.Email:\n this.formPromise = this.apiService.getTwoFactorEmail(request);\n break;\n case TwoFactorProviderType.WebAuthn:\n this.formPromise = this.apiService.getTwoFactorWebAuthn(request);\n break;\n case TwoFactorProviderType.Authenticator:\n this.formPromise = this.apiService.getTwoFactorAuthenticator(request);\n break;\n case TwoFactorProviderType.Yubikey:\n this.formPromise = this.apiService.getTwoFactorYubiKey(request);\n break;\n }\n\n const response = await this.formPromise;\n this.onAuthed.emit({\n response: response,\n masterPasswordHash: this.masterPasswordHash,\n });\n } catch { }\n }\n}\n","
\n
\n

{{'twoStepLoginAuthDesc' | i18n}}

\n \n \n
\n
\n \n \n
\n
\n","export abstract class ExportService {\n getExport: (format?: 'csv' | 'json' | 'encrypted_json') => Promise;\n getOrganizationExport: (organizationId: string, format?: 'csv' | 'json' | 'encrypted_json') => Promise;\n getFileName: (prefix?: string, extension?: string) => string;\n}\n","import { CipherType } from '../../enums/cipherType';\n\nimport { CipherData } from '../data/cipherData';\n\nimport { CipherView } from '../view/cipherView';\n\nimport { Attachment } from './attachment';\nimport { Card } from './card';\nimport Domain from './domainBase';\nimport { EncString } from './encString';\nimport { Field } from './field';\nimport { Identity } from './identity';\nimport { Login } from './login';\nimport { Password } from './password';\nimport { SecureNote } from './secureNote';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class Cipher extends Domain {\n id: string;\n organizationId: string;\n folderId: string;\n name: EncString;\n notes: EncString;\n type: CipherType;\n favorite: boolean;\n organizationUseTotp: boolean;\n edit: boolean;\n viewPassword: boolean;\n revisionDate: Date;\n localData: any;\n login: Login;\n identity: Identity;\n card: Card;\n secureNote: SecureNote;\n attachments: Attachment[];\n fields: Field[];\n passwordHistory: Password[];\n collectionIds: string[];\n deletedDate: Date;\n\n constructor(obj?: CipherData, alreadyEncrypted: boolean = false, localData: any = null) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(this, obj, {\n id: null,\n userId: null,\n organizationId: null,\n folderId: null,\n name: null,\n notes: null,\n }, alreadyEncrypted, ['id', 'userId', 'organizationId', 'folderId']);\n\n this.type = obj.type;\n this.favorite = obj.favorite;\n this.organizationUseTotp = obj.organizationUseTotp;\n this.edit = obj.edit;\n if (obj.viewPassword != null) {\n this.viewPassword = obj.viewPassword;\n } else {\n this.viewPassword = true; // Default for already synced Ciphers without viewPassword\n }\n this.revisionDate = obj.revisionDate != null ? new Date(obj.revisionDate) : null;\n this.collectionIds = obj.collectionIds;\n this.localData = localData;\n this.deletedDate = obj.deletedDate != null ? new Date(obj.deletedDate) : null;\n\n switch (this.type) {\n case CipherType.Login:\n this.login = new Login(obj.login, alreadyEncrypted);\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNote(obj.secureNote, alreadyEncrypted);\n break;\n case CipherType.Card:\n this.card = new Card(obj.card, alreadyEncrypted);\n break;\n case CipherType.Identity:\n this.identity = new Identity(obj.identity, alreadyEncrypted);\n break;\n default:\n break;\n }\n\n if (obj.attachments != null) {\n this.attachments = obj.attachments.map(a => new Attachment(a, alreadyEncrypted));\n } else {\n this.attachments = null;\n }\n\n if (obj.fields != null) {\n this.fields = obj.fields.map(f => new Field(f, alreadyEncrypted));\n } else {\n this.fields = null;\n }\n\n if (obj.passwordHistory != null) {\n this.passwordHistory = obj.passwordHistory.map(ph => new Password(ph, alreadyEncrypted));\n } else {\n this.passwordHistory = null;\n }\n }\n\n async decrypt(encKey?: SymmetricCryptoKey): Promise {\n const model = new CipherView(this);\n\n await this.decryptObj(model, {\n name: null,\n notes: null,\n }, this.organizationId, encKey);\n\n switch (this.type) {\n case CipherType.Login:\n model.login = await this.login.decrypt(this.organizationId, encKey);\n break;\n case CipherType.SecureNote:\n model.secureNote = await this.secureNote.decrypt(this.organizationId, encKey);\n break;\n case CipherType.Card:\n model.card = await this.card.decrypt(this.organizationId, encKey);\n break;\n case CipherType.Identity:\n model.identity = await this.identity.decrypt(this.organizationId, encKey);\n break;\n default:\n break;\n }\n\n const orgId = this.organizationId;\n\n if (this.attachments != null && this.attachments.length > 0) {\n const attachments: any[] = [];\n await this.attachments.reduce((promise, attachment) => {\n return promise.then(() => {\n return attachment.decrypt(orgId, encKey);\n }).then(decAttachment => {\n attachments.push(decAttachment);\n });\n }, Promise.resolve());\n model.attachments = attachments;\n }\n\n if (this.fields != null && this.fields.length > 0) {\n const fields: any[] = [];\n await this.fields.reduce((promise, field) => {\n return promise.then(() => {\n return field.decrypt(orgId, encKey);\n }).then(decField => {\n fields.push(decField);\n });\n }, Promise.resolve());\n model.fields = fields;\n }\n\n if (this.passwordHistory != null && this.passwordHistory.length > 0) {\n const passwordHistory: any[] = [];\n await this.passwordHistory.reduce((promise, ph) => {\n return promise.then(() => {\n return ph.decrypt(orgId, encKey);\n }).then(decPh => {\n passwordHistory.push(decPh);\n });\n }, Promise.resolve());\n model.passwordHistory = passwordHistory;\n }\n\n return model;\n }\n\n toCipherData(userId: string): CipherData {\n const c = new CipherData();\n c.id = this.id;\n c.organizationId = this.organizationId;\n c.folderId = this.folderId;\n c.userId = this.organizationId != null ? userId : null;\n c.edit = this.edit;\n c.viewPassword = this.viewPassword;\n c.organizationUseTotp = this.organizationUseTotp;\n c.favorite = this.favorite;\n c.revisionDate = this.revisionDate != null ? this.revisionDate.toISOString() : null;\n c.type = this.type;\n c.collectionIds = this.collectionIds;\n c.deletedDate = this.deletedDate != null ? this.deletedDate.toISOString() : null;\n\n this.buildDataModel(this, c, {\n name: null,\n notes: null,\n });\n\n switch (c.type) {\n case CipherType.Login:\n c.login = this.login.toLoginData();\n break;\n case CipherType.SecureNote:\n c.secureNote = this.secureNote.toSecureNoteData();\n break;\n case CipherType.Card:\n c.card = this.card.toCardData();\n break;\n case CipherType.Identity:\n c.identity = this.identity.toIdentityData();\n break;\n default:\n break;\n }\n\n if (this.fields != null) {\n c.fields = this.fields.map(f => f.toFieldData());\n }\n if (this.attachments != null) {\n c.attachments = this.attachments.map(a => a.toAttachmentData());\n }\n if (this.passwordHistory != null) {\n c.passwordHistory = this.passwordHistory.map(ph => ph.toPasswordHistoryData());\n }\n return c;\n }\n}\n","import { SendData } from '../models/data/sendData';\n\nimport { EncArrayBuffer } from '../models/domain/encArrayBuffer';\nimport { Send } from '../models/domain/send';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nimport { SendView } from '../models/view/sendView';\n\nexport abstract class SendService {\n decryptedSendCache: SendView[];\n\n clearCache: () => void;\n encrypt: (model: SendView, file: File | ArrayBuffer, password: string, key?: SymmetricCryptoKey) => Promise<[Send, EncArrayBuffer]>;\n get: (id: string) => Promise;\n getAll: () => Promise;\n getAllDecrypted: () => Promise;\n saveWithServer: (sendData: [Send, EncArrayBuffer]) => Promise;\n upsert: (send: SendData | SendData[]) => Promise;\n replace: (sends: { [id: string]: SendData; }) => Promise;\n clear: (userId: string) => Promise;\n delete: (id: string | string[]) => Promise;\n deleteWithServer: (id: string) => Promise;\n removePasswordWithServer: (id: string) => Promise;\n}\n","import { FieldType } from '../../enums/fieldType';\n\nimport { View } from './view';\n\nimport { Field } from '../domain/field';\n\nexport class FieldView implements View {\n name: string = null;\n value: string = null;\n type: FieldType = null;\n newField: boolean = false; // Marks if the field is new and hasn't been saved\n showValue: boolean = false;\n\n constructor(f?: Field) {\n if (!f) {\n return;\n }\n\n this.type = f.type;\n }\n\n get maskedValue(): string {\n return this.value != null ? '••••••••' : null;\n }\n}\n","import { CipherType } from '../../enums/cipherType';\n\nimport { Cipher } from '../domain/cipher';\n\nimport { CardApi } from '../api/cardApi';\nimport { FieldApi } from '../api/fieldApi';\nimport { IdentityApi } from '../api/identityApi';\nimport { LoginApi } from '../api/loginApi';\nimport { LoginUriApi } from '../api/loginUriApi';\nimport { SecureNoteApi } from '../api/secureNoteApi';\n\nimport { AttachmentRequest } from './attachmentRequest';\nimport { PasswordHistoryRequest } from './passwordHistoryRequest';\n\nexport class CipherRequest {\n type: CipherType;\n folderId: string;\n organizationId: string;\n name: string;\n notes: string;\n favorite: boolean;\n login: LoginApi;\n secureNote: SecureNoteApi;\n card: CardApi;\n identity: IdentityApi;\n fields: FieldApi[];\n passwordHistory: PasswordHistoryRequest[];\n // Deprecated, remove at some point and rename attachments2 to attachments\n attachments: { [id: string]: string; };\n attachments2: { [id: string]: AttachmentRequest; };\n lastKnownRevisionDate: Date;\n\n constructor(cipher: Cipher) {\n this.type = cipher.type;\n this.folderId = cipher.folderId;\n this.organizationId = cipher.organizationId;\n this.name = cipher.name ? cipher.name.encryptedString : null;\n this.notes = cipher.notes ? cipher.notes.encryptedString : null;\n this.favorite = cipher.favorite;\n this.lastKnownRevisionDate = cipher.revisionDate;\n\n switch (this.type) {\n case CipherType.Login:\n this.login = new LoginApi();\n this.login.uris = null;\n this.login.username = cipher.login.username ? cipher.login.username.encryptedString : null;\n this.login.password = cipher.login.password ? cipher.login.password.encryptedString : null;\n this.login.passwordRevisionDate = cipher.login.passwordRevisionDate != null ?\n cipher.login.passwordRevisionDate.toISOString() : null;\n this.login.totp = cipher.login.totp ? cipher.login.totp.encryptedString : null;\n\n if (cipher.login.uris != null) {\n this.login.uris = cipher.login.uris.map(u => {\n const uri = new LoginUriApi();\n uri.uri = u.uri != null ? u.uri.encryptedString : null;\n uri.match = u.match != null ? u.match : null;\n return uri;\n });\n }\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNoteApi();\n this.secureNote.type = cipher.secureNote.type;\n break;\n case CipherType.Card:\n this.card = new CardApi();\n this.card.cardholderName = cipher.card.cardholderName != null ?\n cipher.card.cardholderName.encryptedString : null;\n this.card.brand = cipher.card.brand != null ? cipher.card.brand.encryptedString : null;\n this.card.number = cipher.card.number != null ? cipher.card.number.encryptedString : null;\n this.card.expMonth = cipher.card.expMonth != null ? cipher.card.expMonth.encryptedString : null;\n this.card.expYear = cipher.card.expYear != null ? cipher.card.expYear.encryptedString : null;\n this.card.code = cipher.card.code != null ? cipher.card.code.encryptedString : null;\n break;\n case CipherType.Identity:\n this.identity = new IdentityApi();\n this.identity.title = cipher.identity.title != null ? cipher.identity.title.encryptedString : null;\n this.identity.firstName = cipher.identity.firstName != null ?\n cipher.identity.firstName.encryptedString : null;\n this.identity.middleName = cipher.identity.middleName != null ?\n cipher.identity.middleName.encryptedString : null;\n this.identity.lastName = cipher.identity.lastName != null ?\n cipher.identity.lastName.encryptedString : null;\n this.identity.address1 = cipher.identity.address1 != null ?\n cipher.identity.address1.encryptedString : null;\n this.identity.address2 = cipher.identity.address2 != null ?\n cipher.identity.address2.encryptedString : null;\n this.identity.address3 = cipher.identity.address3 != null ?\n cipher.identity.address3.encryptedString : null;\n this.identity.city = cipher.identity.city != null ? cipher.identity.city.encryptedString : null;\n this.identity.state = cipher.identity.state != null ? cipher.identity.state.encryptedString : null;\n this.identity.postalCode = cipher.identity.postalCode != null ?\n cipher.identity.postalCode.encryptedString : null;\n this.identity.country = cipher.identity.country != null ?\n cipher.identity.country.encryptedString : null;\n this.identity.company = cipher.identity.company != null ?\n cipher.identity.company.encryptedString : null;\n this.identity.email = cipher.identity.email != null ? cipher.identity.email.encryptedString : null;\n this.identity.phone = cipher.identity.phone != null ? cipher.identity.phone.encryptedString : null;\n this.identity.ssn = cipher.identity.ssn != null ? cipher.identity.ssn.encryptedString : null;\n this.identity.username = cipher.identity.username != null ?\n cipher.identity.username.encryptedString : null;\n this.identity.passportNumber = cipher.identity.passportNumber != null ?\n cipher.identity.passportNumber.encryptedString : null;\n this.identity.licenseNumber = cipher.identity.licenseNumber != null ?\n cipher.identity.licenseNumber.encryptedString : null;\n break;\n default:\n break;\n }\n\n if (cipher.fields != null) {\n this.fields = cipher.fields.map(f => {\n const field = new FieldApi();\n field.type = f.type;\n field.name = f.name ? f.name.encryptedString : null;\n field.value = f.value ? f.value.encryptedString : null;\n return field;\n });\n }\n\n if (cipher.passwordHistory != null) {\n this.passwordHistory = [];\n cipher.passwordHistory.forEach(ph => {\n this.passwordHistory.push({\n lastUsedDate: ph.lastUsedDate,\n password: ph.password ? ph.password.encryptedString : null,\n });\n });\n }\n\n if (cipher.attachments != null) {\n this.attachments = {};\n this.attachments2 = {};\n cipher.attachments.forEach(attachment => {\n const fileName = attachment.fileName ? attachment.fileName.encryptedString : null;\n this.attachments[attachment.id] = fileName;\n const attachmentRequest = new AttachmentRequest();\n attachmentRequest.fileName = fileName;\n if (attachment.key != null) {\n attachmentRequest.key = attachment.key.encryptedString;\n }\n this.attachments2[attachment.id] = attachmentRequest;\n });\n }\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class ErrorResponse extends BaseResponse {\n message: string;\n validationErrors: { [key: string]: string[]; };\n statusCode: number;\n\n constructor(response: any, status: number, identityResponse?: boolean) {\n super(response);\n let errorModel = null;\n if (response != null) {\n const responseErrorModel = this.getResponseProperty('ErrorModel');\n if (responseErrorModel && identityResponse) {\n errorModel = responseErrorModel;\n } else {\n errorModel = response;\n }\n }\n\n if (errorModel) {\n this.message = this.getResponseProperty('Message', errorModel);\n this.validationErrors = this.getResponseProperty('ValidationErrors', errorModel);\n } else {\n if (status === 429) {\n this.message = 'Rate limit exceeded. Try again later.';\n }\n }\n this.statusCode = status;\n }\n\n getSingleMessage(): string {\n if (this.validationErrors == null) {\n return this.message;\n }\n for (const key in this.validationErrors) {\n if (!this.validationErrors.hasOwnProperty(key)) {\n continue;\n }\n if (this.validationErrors[key].length) {\n return this.validationErrors[key][0];\n }\n }\n return this.message;\n }\n\n getAllMessages(): string[] {\n const messages: string[] = [];\n if (this.validationErrors == null) {\n return messages;\n }\n for (const key in this.validationErrors) {\n if (!this.validationErrors.hasOwnProperty(key)) {\n continue;\n }\n this.validationErrors[key].forEach((item: string) => {\n let prefix = '';\n if (key.indexOf('[') > -1 && key.indexOf(']') > -1) {\n const lastSep = key.lastIndexOf('.');\n prefix = key.substr(0, lastSep > -1 ? lastSep : key.length) + ': ';\n }\n messages.push(prefix + item);\n });\n }\n return messages;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { I18nService } from '../../abstractions/i18n.service';\nimport { PlatformUtilsService } from '../../abstractions/platformUtils.service';\n\nimport { ErrorResponse } from '../../models/response/errorResponse';\n\n@Injectable()\nexport class ValidationService {\n constructor(private i18nService: I18nService, private platformUtilsService: PlatformUtilsService) { }\n\n showError(data: any): string[] {\n const defaultErrorMessage = this.i18nService.t('unexpectedError');\n let errors: string[] = [];\n\n if (data != null && typeof data === 'string') {\n errors.push(data);\n } else if (data == null || typeof data !== 'object') {\n errors.push(defaultErrorMessage);\n } else if (data.validationErrors != null) {\n errors = errors.concat((data as ErrorResponse).getAllMessages());\n } else {\n errors.push(data.message ? data.message : defaultErrorMessage);\n }\n\n if (errors.length === 1) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), errors[0]);\n } else if (errors.length > 1) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), errors, {\n timeout: 5000 * errors.length,\n });\n }\n\n return errors;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport {\n ActivatedRoute,\n NavigationEnd,\n Router,\n} from '@angular/router';\n\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\n@Injectable()\nexport class RouterService {\n private previousUrl: string = undefined;\n private currentUrl: string = undefined;\n\n constructor(private router: Router, private activatedRoute: ActivatedRoute,\n private titleService: Title, i18nService: I18nService) {\n this.currentUrl = this.router.url;\n router.events.subscribe(event => {\n if (event instanceof NavigationEnd) {\n this.previousUrl = this.currentUrl;\n this.currentUrl = event.url;\n\n let title = i18nService.t('pageTitle', 'Bitwarden');\n let titleId: string = null;\n let rawTitle: string = null;\n let child = this.activatedRoute.firstChild;\n while (child != null) {\n if (child.firstChild != null) {\n child = child.firstChild;\n } else if (child.snapshot.data != null && child.snapshot.data.title != null) {\n rawTitle = child.snapshot.data.title;\n break;\n } else if (child.snapshot.data != null && child.snapshot.data.titleId != null) {\n titleId = child.snapshot.data.titleId;\n break;\n } else {\n titleId = null;\n rawTitle = null;\n break;\n }\n }\n\n if (titleId != null || rawTitle != null) {\n const newTitle = rawTitle != null ? rawTitle : i18nService.t(titleId);\n if (newTitle != null && newTitle !== '') {\n title = (newTitle + ' | ' + title);\n }\n }\n this.titleService.setTitle(title);\n }\n });\n }\n\n getPreviousUrl() {\n return this.previousUrl;\n }\n\n setPreviousUrl(url: string) {\n this.previousUrl = url;\n }\n}\n","export enum KdfType {\n PBKDF2_SHA256 = 0,\n}\n","import {\n Component,\n Input,\n OnChanges,\n} from '@angular/core';\n\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\n@Component({\n selector: 'app-password-strength',\n templateUrl: 'password-strength.component.html',\n})\nexport class PasswordStrengthComponent implements OnChanges {\n @Input() score?: number;\n @Input() showText = false;\n\n scoreWidth = 0;\n color = 'bg-danger';\n text: string;\n\n constructor(private i18nService: I18nService) { }\n\n ngOnChanges(): void {\n this.scoreWidth = this.score == null ? 0 : (this.score + 1) * 20;\n switch (this.score) {\n case 4:\n this.color = 'bg-success';\n this.text = this.i18nService.t('strong');\n break;\n case 3:\n this.color = 'bg-primary';\n this.text = this.i18nService.t('good');\n break;\n case 2:\n this.color = 'bg-warning';\n this.text = this.i18nService.t('weak');\n break;\n default:\n this.color = 'bg-danger';\n this.text = this.score != null ? this.i18nService.t('weak') : null;\n break;\n }\n }\n}\n","
\n
\n \n {{text}}\n \n
\n
\n","export enum OrganizationUserType {\n Owner = 0,\n Admin = 1,\n User = 2,\n Manager = 3,\n Custom = 4,\n}\n","import {\n Pipe,\n PipeTransform,\n} from '@angular/core';\n\n@Pipe({\n name: 'search',\n})\nexport class SearchPipe implements PipeTransform {\n transform(items: any[], searchText: string, prop1?: string, prop2?: string, prop3?: string): any[] {\n if (items == null || items.length === 0) {\n return [];\n }\n\n if (searchText == null || searchText.length < 2) {\n return items;\n }\n\n searchText = searchText.trim().toLowerCase();\n return items.filter(i => {\n if (prop1 != null && i[prop1] != null && i[prop1].toString().toLowerCase().indexOf(searchText) > -1) {\n return true;\n }\n if (prop2 != null && i[prop2] != null && i[prop2].toString().toLowerCase().indexOf(searchText) > -1) {\n return true;\n }\n if (prop3 != null && i[prop3] != null && i[prop3].toString().toLowerCase().indexOf(searchText) > -1) {\n return true;\n }\n return false;\n });\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\nimport { DeviceType } from 'jslib/enums/deviceType';\nimport { EventType } from 'jslib/enums/eventType';\n\nimport { EventResponse } from 'jslib/models/response/eventResponse';\n\n@Injectable()\nexport class EventService {\n constructor(private i18nService: I18nService) { }\n\n getDefaultDateFilters() {\n const d = new Date();\n const end = new Date(d.getFullYear(), d.getMonth(), d.getDate(), 23, 59);\n d.setDate(d.getDate() - 30);\n const start = new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0);\n return [this.toDateTimeLocalString(start), this.toDateTimeLocalString(end)];\n }\n\n formatDateFilters(filterStart: string, filterEnd: string) {\n const start: Date = new Date(filterStart);\n const end: Date = new Date(filterEnd + ':59.999');\n if (isNaN(start.getTime()) || isNaN(end.getTime()) || end < start) {\n throw new Error('Invalid date range.');\n }\n return [start.toISOString(), end.toISOString()];\n }\n\n getEventInfo(ev: EventResponse, options = new EventOptions()): EventInfo {\n const appInfo = this.getAppInfo(ev.deviceType);\n return {\n message: this.getEventMessage(ev, options),\n appIcon: appInfo[0],\n appName: appInfo[1],\n };\n }\n\n private getEventMessage(ev: EventResponse, options: EventOptions) {\n let msg = '';\n switch (ev.type) {\n // User\n case EventType.User_LoggedIn:\n msg = this.i18nService.t('loggedIn');\n break;\n case EventType.User_ChangedPassword:\n msg = this.i18nService.t('changedPassword');\n break;\n case EventType.User_Updated2fa:\n msg = this.i18nService.t('enabledUpdated2fa');\n break;\n case EventType.User_Disabled2fa:\n msg = this.i18nService.t('disabled2fa');\n break;\n case EventType.User_Recovered2fa:\n msg = this.i18nService.t('recovered2fa');\n break;\n case EventType.User_FailedLogIn:\n msg = this.i18nService.t('failedLogin');\n break;\n case EventType.User_FailedLogIn2fa:\n msg = this.i18nService.t('failedLogin2fa');\n break;\n case EventType.User_ClientExportedVault:\n msg = this.i18nService.t('exportedVault');\n break;\n // Cipher\n case EventType.Cipher_Created:\n msg = this.i18nService.t('createdItemId', this.formatCipherId(ev, options));\n break;\n case EventType.Cipher_Updated:\n msg = this.i18nService.t('editedItemId', this.formatCipherId(ev, options));\n break;\n case EventType.Cipher_Deleted:\n msg = this.i18nService.t('permanentlyDeletedItemId', this.formatCipherId(ev, options));\n break;\n case EventType.Cipher_SoftDeleted:\n msg = this.i18nService.t('deletedItemId', this.formatCipherId(ev, options));\n break;\n case EventType.Cipher_Restored:\n msg = this.i18nService.t('restoredItemId', this.formatCipherId(ev, options));\n break;\n case EventType.Cipher_AttachmentCreated:\n msg = this.i18nService.t('createdAttachmentForItem', this.formatCipherId(ev, options));\n break;\n case EventType.Cipher_AttachmentDeleted:\n msg = this.i18nService.t('deletedAttachmentForItem', this.formatCipherId(ev, options));\n break;\n case EventType.Cipher_Shared:\n msg = this.i18nService.t('sharedItemId', this.formatCipherId(ev, options));\n break;\n case EventType.Cipher_ClientViewed:\n msg = this.i18nService.t('viewedItemId', this.formatCipherId(ev, options));\n break;\n case EventType.Cipher_ClientToggledPasswordVisible:\n msg = this.i18nService.t('viewedPasswordItemId', this.formatCipherId(ev, options));\n break;\n case EventType.Cipher_ClientToggledHiddenFieldVisible:\n msg = this.i18nService.t('viewedHiddenFieldItemId', this.formatCipherId(ev, options));\n break;\n case EventType.Cipher_ClientToggledCardCodeVisible:\n msg = this.i18nService.t('viewedSecurityCodeItemId', this.formatCipherId(ev, options));\n break;\n case EventType.Cipher_ClientCopiedHiddenField:\n msg = this.i18nService.t('copiedHiddenFieldItemId', this.formatCipherId(ev, options));\n break;\n case EventType.Cipher_ClientCopiedPassword:\n msg = this.i18nService.t('copiedPasswordItemId', this.formatCipherId(ev, options));\n break;\n case EventType.Cipher_ClientCopiedCardCode:\n msg = this.i18nService.t('copiedSecurityCodeItemId', this.formatCipherId(ev, options));\n break;\n case EventType.Cipher_ClientAutofilled:\n msg = this.i18nService.t('autofilledItemId', this.formatCipherId(ev, options));\n break;\n case EventType.Cipher_UpdatedCollections:\n msg = this.i18nService.t('editedCollectionsForItem', this.formatCipherId(ev, options));\n break;\n // Collection\n case EventType.Collection_Created:\n msg = this.i18nService.t('createdCollectionId', this.formatCollectionId(ev));\n break;\n case EventType.Collection_Updated:\n msg = this.i18nService.t('editedCollectionId', this.formatCollectionId(ev));\n break;\n case EventType.Collection_Deleted:\n msg = this.i18nService.t('deletedCollectionId', this.formatCollectionId(ev));\n break;\n // Group\n case EventType.Group_Created:\n msg = this.i18nService.t('createdGroupId', this.formatGroupId(ev));\n break;\n case EventType.Group_Updated:\n msg = this.i18nService.t('editedGroupId', this.formatGroupId(ev));\n break;\n case EventType.Group_Deleted:\n msg = this.i18nService.t('deletedGroupId', this.formatGroupId(ev));\n break;\n // Org user\n case EventType.OrganizationUser_Invited:\n msg = this.i18nService.t('invitedUserId', this.formatOrgUserId(ev));\n break;\n case EventType.OrganizationUser_Confirmed:\n msg = this.i18nService.t('confirmedUserId', this.formatOrgUserId(ev));\n break;\n case EventType.OrganizationUser_Updated:\n msg = this.i18nService.t('editedUserId', this.formatOrgUserId(ev));\n break;\n case EventType.OrganizationUser_Removed:\n msg = this.i18nService.t('removedUserId', this.formatOrgUserId(ev));\n break;\n case EventType.OrganizationUser_UpdatedGroups:\n msg = this.i18nService.t('editedGroupsForUser', this.formatOrgUserId(ev));\n break;\n case EventType.OrganizationUser_UnlinkedSso:\n msg = this.i18nService.t('unlinkedSsoUser', this.formatOrgUserId(ev));\n break;\n case EventType.OrganizationUser_ResetPassword_Enroll:\n msg = this.i18nService.t('eventEnrollPasswordReset', this.formatOrgUserId(ev));\n break;\n case EventType.OrganizationUser_ResetPassword_Withdraw:\n msg = this.i18nService.t('eventWithdrawPasswordReset', this.formatOrgUserId(ev));\n break;\n // Org\n case EventType.Organization_Updated:\n msg = this.i18nService.t('editedOrgSettings');\n break;\n case EventType.Organization_PurgedVault:\n msg = this.i18nService.t('purgedOrganizationVault');\n break;\n /*\n case EventType.Organization_ClientExportedVault:\n msg = this.i18nService.t('exportedOrganizationVault');\n break;\n */\n // Policies\n case EventType.Policy_Updated:\n msg = this.i18nService.t('modifiedPolicy', this.formatPolicyId(ev));\n break;\n\n default:\n break;\n }\n return msg === '' ? null : msg;\n }\n\n private getAppInfo(deviceType: DeviceType): [string, string] {\n switch (deviceType) {\n case DeviceType.Android:\n return ['fa-android', this.i18nService.t('mobile') + ' - Android'];\n case DeviceType.iOS:\n return ['fa-apple', this.i18nService.t('mobile') + ' - iOS'];\n case DeviceType.UWP:\n return ['fa-windows', this.i18nService.t('mobile') + ' - Windows'];\n case DeviceType.ChromeExtension:\n return ['fa-chrome', this.i18nService.t('extension') + ' - Chrome'];\n case DeviceType.FirefoxExtension:\n return ['fa-firefox', this.i18nService.t('extension') + ' - Firefox'];\n case DeviceType.OperaExtension:\n return ['fa-opera', this.i18nService.t('extension') + ' - Opera'];\n case DeviceType.EdgeExtension:\n return ['fa-edge', this.i18nService.t('extension') + ' - Edge'];\n case DeviceType.VivaldiExtension:\n return ['fa-puzzle-piece', this.i18nService.t('extension') + ' - Vivaldi'];\n case DeviceType.SafariExtension:\n return ['fa-safari', this.i18nService.t('extension') + ' - Safari'];\n case DeviceType.WindowsDesktop:\n return ['fa-windows', this.i18nService.t('desktop') + ' - Windows'];\n case DeviceType.MacOsDesktop:\n return ['fa-apple', this.i18nService.t('desktop') + ' - macOS'];\n case DeviceType.LinuxDesktop:\n return ['fa-linux', this.i18nService.t('desktop') + ' - Linux'];\n case DeviceType.ChromeBrowser:\n return ['fa-globe', this.i18nService.t('webVault') + ' - Chrome'];\n case DeviceType.FirefoxBrowser:\n return ['fa-globe', this.i18nService.t('webVault') + ' - Firefox'];\n case DeviceType.OperaBrowser:\n return ['fa-globe', this.i18nService.t('webVault') + ' - Opera'];\n case DeviceType.SafariBrowser:\n return ['fa-globe', this.i18nService.t('webVault') + ' - Safari'];\n case DeviceType.VivaldiBrowser:\n return ['fa-globe', this.i18nService.t('webVault') + ' - Vivaldi'];\n case DeviceType.EdgeBrowser:\n return ['fa-globe', this.i18nService.t('webVault') + ' - Edge'];\n case DeviceType.IEBrowser:\n return ['fa-globe', this.i18nService.t('webVault') + ' - IE'];\n case DeviceType.UnknownBrowser:\n return ['fa-globe', this.i18nService.t('webVault') + ' - ' + this.i18nService.t('unknown')];\n default:\n return ['fa-globe', this.i18nService.t('unknown')];\n }\n }\n\n private formatCipherId(ev: EventResponse, options: EventOptions) {\n const shortId = this.getShortId(ev.cipherId);\n if (ev.organizationId == null || !options.cipherInfo) {\n return '' + shortId + '';\n }\n const a = this.makeAnchor(shortId);\n a.setAttribute('href', '#/organizations/' + ev.organizationId + '/vault?search=' + shortId +\n '&viewEvents=' + ev.cipherId);\n return a.outerHTML;\n }\n\n private formatGroupId(ev: EventResponse) {\n const shortId = this.getShortId(ev.groupId);\n const a = this.makeAnchor(shortId);\n a.setAttribute('href', '#/organizations/' + ev.organizationId + '/manage/groups?search=' + shortId);\n return a.outerHTML;\n }\n\n private formatCollectionId(ev: EventResponse) {\n const shortId = this.getShortId(ev.collectionId);\n const a = this.makeAnchor(shortId);\n a.setAttribute('href', '#/organizations/' + ev.organizationId + '/manage/collections?search=' + shortId);\n return a.outerHTML;\n }\n\n private formatOrgUserId(ev: EventResponse) {\n const shortId = this.getShortId(ev.organizationUserId);\n const a = this.makeAnchor(shortId);\n a.setAttribute('href', '#/organizations/' + ev.organizationId + '/manage/people?search=' + shortId +\n '&viewEvents=' + ev.organizationUserId);\n return a.outerHTML;\n }\n\n private formatPolicyId(ev: EventResponse) {\n const shortId = this.getShortId(ev.policyId);\n const a = this.makeAnchor(shortId);\n a.setAttribute('href', '#/organizations/' + ev.organizationId + '/manage/policies?policyId=' + ev.policyId);\n return a.outerHTML;\n }\n\n private makeAnchor(shortId: string) {\n const a = document.createElement('a');\n a.title = this.i18nService.t('view');\n a.innerHTML = '' + shortId + '';\n return a;\n }\n\n private getShortId(id: string) {\n return id.substring(0, 8);\n }\n\n private toDateTimeLocalString(date: Date) {\n return date.getFullYear() +\n '-' + this.pad(date.getMonth() + 1) +\n '-' + this.pad(date.getDate()) +\n 'T' + this.pad(date.getHours()) +\n ':' + this.pad(date.getMinutes());\n }\n\n private pad(num: number) {\n const norm = Math.floor(Math.abs(num));\n return (norm < 10 ? '0' : '') + norm;\n }\n}\n\nexport class EventInfo {\n message: string;\n appIcon: string;\n appName: string;\n}\n\nexport class EventOptions {\n cipherInfo = true;\n}\n","export enum EventType {\n User_LoggedIn = 1000,\n User_ChangedPassword = 1001,\n User_Updated2fa = 1002,\n User_Disabled2fa = 1003,\n User_Recovered2fa = 1004,\n User_FailedLogIn = 1005,\n User_FailedLogIn2fa = 1006,\n User_ClientExportedVault = 1007,\n\n Cipher_Created = 1100,\n Cipher_Updated = 1101,\n Cipher_Deleted = 1102,\n Cipher_AttachmentCreated = 1103,\n Cipher_AttachmentDeleted = 1104,\n Cipher_Shared = 1105,\n Cipher_UpdatedCollections = 1106,\n Cipher_ClientViewed = 1107,\n Cipher_ClientToggledPasswordVisible = 1108,\n Cipher_ClientToggledHiddenFieldVisible = 1109,\n Cipher_ClientToggledCardCodeVisible = 1110,\n Cipher_ClientCopiedPassword = 1111,\n Cipher_ClientCopiedHiddenField = 1112,\n Cipher_ClientCopiedCardCode = 1113,\n Cipher_ClientAutofilled = 1114,\n Cipher_SoftDeleted = 1115,\n Cipher_Restored = 1116,\n\n Collection_Created = 1300,\n Collection_Updated = 1301,\n Collection_Deleted = 1302,\n\n Group_Created = 1400,\n Group_Updated = 1401,\n Group_Deleted = 1402,\n\n OrganizationUser_Invited = 1500,\n OrganizationUser_Confirmed = 1501,\n OrganizationUser_Updated = 1502,\n OrganizationUser_Removed = 1503,\n OrganizationUser_UpdatedGroups = 1504,\n OrganizationUser_UnlinkedSso = 1505,\n OrganizationUser_ResetPassword_Enroll = 1506,\n OrganizationUser_ResetPassword_Withdraw = 1507,\n\n Organization_Updated = 1600,\n Organization_PurgedVault = 1601,\n // Organization_ClientExportedVault = 1602,\n\n Policy_Updated = 1700,\n}\n","export enum PaymentMethodType {\n Card = 0,\n BankAccount = 1,\n PayPal = 2,\n BitPay = 3,\n Credit = 4,\n WireTransfer = 5,\n AppleInApp = 6,\n GoogleInApp = 7,\n Check = 8,\n}\n","import {\n Directive,\n EventEmitter,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\nimport { TwoFactorProviderType } from 'jslib/enums/twoFactorProviderType';\nimport { TwoFactorProviderRequest } from 'jslib/models/request/twoFactorProviderRequest';\n\n@Directive()\nexport abstract class TwoFactorBaseComponent {\n @Output() onUpdated = new EventEmitter();\n\n type: TwoFactorProviderType;\n organizationId: string;\n twoFactorProviderType = TwoFactorProviderType;\n enabled = false;\n authed = false;\n\n protected masterPasswordHash: string;\n\n constructor(protected apiService: ApiService, protected i18nService: I18nService,\n protected toasterService: ToasterService, protected platformUtilsService: PlatformUtilsService) { }\n\n protected auth(authResponse: any) {\n this.masterPasswordHash = authResponse.masterPasswordHash;\n this.authed = true;\n }\n\n protected async enable(enableFunction: () => Promise) {\n try {\n await enableFunction();\n this.onUpdated.emit(true);\n } catch { }\n }\n\n protected async disable(promise: Promise) {\n const confirmed = await this.platformUtilsService.showDialog(this.i18nService.t('twoStepDisableDesc'),\n this.i18nService.t('disable'), this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return;\n }\n\n try {\n const request = new TwoFactorProviderRequest();\n request.masterPasswordHash = this.masterPasswordHash;\n request.type = this.type;\n if (this.organizationId != null) {\n promise = this.apiService.putTwoFactorOrganizationDisable(this.organizationId, request);\n } else {\n promise = this.apiService.putTwoFactorDisable(request);\n }\n await promise;\n this.enabled = false;\n this.toasterService.popAsync('success', null, this.i18nService.t('twoStepDisabled'));\n this.onUpdated.emit(false);\n } catch { }\n }\n}\n","import {\n ComponentFactoryResolver,\n Directive,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { CipherView } from 'jslib/models/view/cipherView';\n\nimport { Organization } from 'jslib/models/domain/organization';\n\nimport { ModalComponent } from '../modal.component';\nimport { AddEditComponent as OrgAddEditComponent } from '../organizations/vault/add-edit.component';\nimport { AddEditComponent } from '../vault/add-edit.component';\n\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\n@Directive()\nexport class CipherReportComponent {\n @ViewChild('cipherAddEdit', { read: ViewContainerRef, static: true }) cipherAddEditModalRef: ViewContainerRef;\n\n loading = false;\n hasLoaded = false;\n ciphers: CipherView[] = [];\n organization: Organization;\n\n private modal: ModalComponent = null;\n\n constructor(private componentFactoryResolver: ComponentFactoryResolver, protected userService: UserService,\n protected messagingService: MessagingService, public requiresPaid: boolean) { }\n\n async load() {\n this.loading = true;\n await this.setCiphers();\n this.loading = false;\n this.hasLoaded = true;\n }\n\n selectCipher(cipher: CipherView) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.cipherAddEditModalRef.createComponent(factory).instance;\n let childComponent: OrgAddEditComponent | AddEditComponent;\n if (this.organization != null) {\n childComponent = this.modal.show(OrgAddEditComponent, this.cipherAddEditModalRef);\n (childComponent as OrgAddEditComponent).organization = this.organization;\n } else {\n childComponent = this.modal.show(AddEditComponent, this.cipherAddEditModalRef);\n }\n\n childComponent.cipherId = cipher == null ? null : cipher.id;\n if (this.organization != null) {\n childComponent.organizationId = this.organization.id;\n }\n childComponent.onSavedCipher.subscribe(async (c: CipherView) => {\n this.modal.close();\n await this.load();\n });\n childComponent.onDeletedCipher.subscribe(async (c: CipherView) => {\n this.modal.close();\n await this.load();\n });\n childComponent.onRestoredCipher.subscribe(async (c: CipherView) => {\n this.modal.close();\n await this.load();\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n\n return childComponent;\n }\n\n protected async checkAccess(): Promise {\n if (this.organization != null) {\n // TODO: Maybe we want to just make sure they are not on a free plan? Just compare useTotp for now\n // since all paid plans include useTotp\n if (this.requiresPaid && !this.organization.useTotp) {\n this.messagingService.send('upgradeOrganization', { organizationId: this.organization.id });\n return false;\n }\n } else {\n const accessPremium = await this.userService.canAccessPremium();\n if (this.requiresPaid && !accessPremium) {\n this.messagingService.send('premiumRequired');\n this.loading = false;\n return false;\n }\n }\n return true;\n }\n\n protected async setCiphers() {\n this.ciphers = [];\n }\n}\n","import { UriMatchType } from '../../enums/uriMatchType';\n\nimport { View } from './view';\n\nimport { LoginUri } from '../domain/loginUri';\n\nimport { Utils } from '../../misc/utils';\n\nconst CanLaunchWhitelist = [\n 'https://',\n 'http://',\n 'ssh://',\n 'ftp://',\n 'sftp://',\n 'irc://',\n 'vnc://',\n // https://docs.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/remote-desktop-uri\n 'rdp://', // Legacy RDP URI scheme\n 'ms-rd:', // Preferred RDP URI scheme\n 'chrome://',\n 'iosapp://',\n 'androidapp://',\n];\n\nexport class LoginUriView implements View {\n match: UriMatchType = null;\n\n // tslint:disable\n private _uri: string = null;\n private _domain: string = null;\n private _hostname: string = null;\n private _host: string = null;\n private _canLaunch: boolean = null;\n // tslint:enable\n\n constructor(u?: LoginUri) {\n if (!u) {\n return;\n }\n\n this.match = u.match;\n }\n\n get uri(): string {\n return this._uri;\n }\n set uri(value: string) {\n this._uri = value;\n this._domain = null;\n this._canLaunch = null;\n }\n\n get domain(): string {\n if (this._domain == null && this.uri != null) {\n this._domain = Utils.getDomain(this.uri);\n if (this._domain === '') {\n this._domain = null;\n }\n }\n\n return this._domain;\n }\n\n get hostname(): string {\n if (this.match === UriMatchType.RegularExpression) {\n return null;\n }\n if (this._hostname == null && this.uri != null) {\n this._hostname = Utils.getHostname(this.uri);\n if (this._hostname === '') {\n this._hostname = null;\n }\n }\n\n return this._hostname;\n }\n\n get host(): string {\n if (this.match === UriMatchType.RegularExpression) {\n return null;\n }\n if (this._host == null && this.uri != null) {\n this._host = Utils.getHost(this.uri);\n if (this._host === '') {\n this._host = null;\n }\n }\n\n return this._host;\n }\n\n get hostnameOrUri(): string {\n return this.hostname != null ? this.hostname : this.uri;\n }\n\n get hostOrUri(): string {\n return this.host != null ? this.host : this.uri;\n }\n\n get isWebsite(): boolean {\n return this.uri != null && (this.uri.indexOf('http://') === 0 || this.uri.indexOf('https://') === 0 ||\n (this.uri.indexOf('://') < 0 && Utils.tldEndingRegex.test(this.uri)));\n }\n\n get canLaunch(): boolean {\n if (this._canLaunch != null) {\n return this._canLaunch;\n }\n if (this.uri != null && this.match !== UriMatchType.RegularExpression) {\n const uri = this.launchUri;\n for (let i = 0; i < CanLaunchWhitelist.length; i++) {\n if (uri.indexOf(CanLaunchWhitelist[i]) === 0) {\n this._canLaunch = true;\n return this._canLaunch;\n }\n }\n }\n this._canLaunch = false;\n return this._canLaunch;\n }\n\n get launchUri(): string {\n return this.uri.indexOf('://') < 0 && Utils.tldEndingRegex.test(this.uri) ? ('http://' + this.uri) : this.uri;\n }\n}\n","export enum UriMatchType {\n Domain = 0,\n Host = 1,\n StartsWith = 2,\n Exact = 3,\n RegularExpression = 4,\n Never = 5,\n}\n","import { Component } from '@angular/core';\n\nimport { CipherType } from 'jslib/enums/cipherType';\nimport { EventType } from 'jslib/enums/eventType';\n\nimport { AuditService } from 'jslib/abstractions/audit.service';\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { CollectionService } from 'jslib/abstractions/collection.service';\nimport { EventService } from 'jslib/abstractions/event.service';\nimport { FolderService } from 'jslib/abstractions/folder.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib/abstractions/policy.service';\nimport { StateService } from 'jslib/abstractions/state.service';\nimport { TotpService } from 'jslib/abstractions/totp.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { AddEditComponent as BaseAddEditComponent } from 'jslib/angular/components/add-edit.component';\nimport { LoginUriView } from 'jslib/models/view/loginUriView';\n\n@Component({\n selector: 'app-vault-add-edit',\n templateUrl: 'add-edit.component.html',\n})\nexport class AddEditComponent extends BaseAddEditComponent {\n canAccessPremium: boolean;\n totpCode: string;\n totpCodeFormatted: string;\n totpDash: number;\n totpSec: number;\n totpLow: boolean;\n showRevisionDate = false;\n hasPasswordHistory = false;\n viewingPasswordHistory = false;\n viewOnly = false;\n\n protected totpInterval: number;\n\n constructor(cipherService: CipherService, folderService: FolderService,\n i18nService: I18nService, platformUtilsService: PlatformUtilsService,\n auditService: AuditService, stateService: StateService,\n userService: UserService, collectionService: CollectionService,\n protected totpService: TotpService, protected passwordGenerationService: PasswordGenerationService,\n protected messagingService: MessagingService, eventService: EventService,\n protected policyService: PolicyService) {\n super(cipherService, folderService, i18nService, platformUtilsService, auditService, stateService,\n userService, collectionService, messagingService, eventService, policyService);\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n await this.load();\n this.showRevisionDate = this.cipher.passwordRevisionDisplayDate != null;\n this.hasPasswordHistory = this.cipher.hasPasswordHistory;\n this.cleanUp();\n\n this.canAccessPremium = await this.userService.canAccessPremium();\n if (this.cipher.type === CipherType.Login && this.cipher.login.totp &&\n (this.cipher.organizationUseTotp || this.canAccessPremium)) {\n await this.totpUpdateCode();\n const interval = this.totpService.getTimeInterval(this.cipher.login.totp);\n await this.totpTick(interval);\n\n this.totpInterval = window.setInterval(async () => {\n await this.totpTick(interval);\n }, 1000);\n }\n }\n\n toggleFavorite() {\n this.cipher.favorite = !this.cipher.favorite;\n }\n\n launch(uri: LoginUriView) {\n if (!uri.canLaunch) {\n return;\n }\n\n this.platformUtilsService.launchUri(uri.launchUri);\n }\n\n copy(value: string, typeI18nKey: string, aType: string) {\n if (value == null) {\n return;\n }\n\n this.platformUtilsService.copyToClipboard(value, { window: window });\n this.platformUtilsService.showToast('info', null,\n this.i18nService.t('valueCopied', this.i18nService.t(typeI18nKey)));\n\n if (this.editMode) {\n if (typeI18nKey === 'password') {\n this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, this.cipherId);\n } else if (typeI18nKey === 'securityCode') {\n this.eventService.collect(EventType.Cipher_ClientCopiedCardCode, this.cipherId);\n } else if (aType === 'H_Field') {\n this.eventService.collect(EventType.Cipher_ClientCopiedHiddenField, this.cipherId);\n }\n }\n }\n\n async generatePassword(): Promise {\n const confirmed = await super.generatePassword();\n if (confirmed) {\n const options = (await this.passwordGenerationService.getOptions())[0];\n this.cipher.login.password = await this.passwordGenerationService.generatePassword(options);\n }\n return confirmed;\n }\n\n premiumRequired() {\n if (!this.canAccessPremium) {\n this.messagingService.send('premiumRequired');\n return;\n }\n }\n\n upgradeOrganization() {\n this.messagingService.send('upgradeOrganization', { organizationId: this.cipher.organizationId });\n }\n\n viewHistory() {\n this.viewingPasswordHistory = !this.viewingPasswordHistory;\n }\n\n protected cleanUp() {\n if (this.totpInterval) {\n window.clearInterval(this.totpInterval);\n }\n }\n\n protected async totpUpdateCode() {\n if (this.cipher == null || this.cipher.type !== CipherType.Login || this.cipher.login.totp == null) {\n if (this.totpInterval) {\n window.clearInterval(this.totpInterval);\n }\n return;\n }\n\n this.totpCode = await this.totpService.getCode(this.cipher.login.totp);\n if (this.totpCode != null) {\n if (this.totpCode.length > 4) {\n const half = Math.floor(this.totpCode.length / 2);\n this.totpCodeFormatted = this.totpCode.substring(0, half) + ' ' + this.totpCode.substring(half);\n } else {\n this.totpCodeFormatted = this.totpCode;\n }\n } else {\n this.totpCodeFormatted = null;\n if (this.totpInterval) {\n window.clearInterval(this.totpInterval);\n }\n }\n }\n\n protected allowOwnershipAssignment() {\n return (!this.editMode || this.cloneMode) && this.ownershipOptions != null\n && (this.ownershipOptions.length > 1 || !this.allowPersonal);\n }\n\n private async totpTick(intervalSeconds: number) {\n const epoch = Math.round(new Date().getTime() / 1000.0);\n const mod = epoch % intervalSeconds;\n\n this.totpSec = intervalSeconds - mod;\n this.totpDash = +(Math.round((((78.6 / intervalSeconds) * mod) + 'e+2') as any) + 'e-2');\n this.totpLow = this.totpSec <= 7;\n if (mod === 0) {\n await this.totpUpdateCode();\n }\n }\n}\n","
\n
\n
\n
\n

{{title}}

\n \n
\n
\n \n {{'personalOwnershipPolicyInEffect' | i18n}}\n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n \n
\n \n
\n
\n
\n
\n
\n \n \n
\n
\n \n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n
\n
\n \n
\n \n {{totpSec}}\n \n \n \n \n \n \n \n {{totpCodeFormatted}}\n \n
\n
\n
\n \n
\n
\n \n
\n \n
\n \n \n
\n
\n
\n
\n
\n \n \n \n \n
\n
\n \n \n
\n
\n
\n
\n \n {{'newUri' | i18n}}\n \n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n
\n \n
\n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n
\n \n
\n \n \n
\n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n

{{'customFields' | i18n}}

\n
\n
\n
\n
\n \n \n \n \n
\n \n
\n
\n \n
\n
\n \n
\n \n
\n
\n
\n \n
\n \n \n
\n
\n
\n \n
\n \n \n
\n
\n
\n
\n \n {{'newCustomField' | i18n}}\n \n
\n
\n \n \n
\n
\n \n

{{'ownership' | i18n}}

\n
\n
\n \n \n
\n
\n
\n \n

{{'collections' | i18n}}

\n
\n {{'noCollectionsInList' | i18n}}\n
\n \n
\n \n \n
\n
\n
\n \n
\n
\n {{'dateUpdated' | i18n}}:\n {{cipher.revisionDate | date:'medium'}}\n
\n
\n {{'datePasswordUpdated' | i18n}}:\n {{cipher.passwordRevisionDisplayDate | date:'medium'}}\n
\n
\n {{'passwordHistory' | i18n}}:\n \n {{cipher.passwordHistory.length}}\n \n
\n
\n
\n {{ph.lastUsedDate | date:'short'}} -\n {{ph.password}}\n
\n
\n
\n
\n
\n
\n \n \n
\n \n \n
\n
\n
\n
\n
\n","import { Importer } from '../importers/importer';\n\nexport interface ImportOption {\n id: string;\n name: string;\n}\nexport abstract class ImportService {\n featuredImportOptions: ImportOption[];\n regularImportOptions: ImportOption[];\n getImportOptions: () => ImportOption[];\n import: (importer: Importer, fileContents: string, organizationId?: string) => Promise;\n getImporter: (format: string, organizationId: string) => Importer;\n}\n","import { AttachmentResponse } from './attachmentResponse';\nimport { BaseResponse } from './baseResponse';\nimport { PasswordHistoryResponse } from './passwordHistoryResponse';\n\nimport { CardApi } from '../api/cardApi';\nimport { FieldApi } from '../api/fieldApi';\nimport { IdentityApi } from '../api/identityApi';\nimport { LoginApi } from '../api/loginApi';\nimport { SecureNoteApi } from '../api/secureNoteApi';\n\nexport class CipherResponse extends BaseResponse {\n id: string;\n organizationId: string;\n folderId: string;\n type: number;\n name: string;\n notes: string;\n fields: FieldApi[];\n login: LoginApi;\n card: CardApi;\n identity: IdentityApi;\n secureNote: SecureNoteApi;\n favorite: boolean;\n edit: boolean;\n viewPassword: boolean;\n organizationUseTotp: boolean;\n revisionDate: string;\n attachments: AttachmentResponse[];\n passwordHistory: PasswordHistoryResponse[];\n collectionIds: string[];\n deletedDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.organizationId = this.getResponseProperty('OrganizationId');\n this.folderId = this.getResponseProperty('FolderId') || null;\n this.type = this.getResponseProperty('Type');\n this.name = this.getResponseProperty('Name');\n this.notes = this.getResponseProperty('Notes');\n this.favorite = this.getResponseProperty('Favorite') || false;\n this.edit = !!this.getResponseProperty('Edit');\n if (this.getResponseProperty('ViewPassword') == null) {\n this.viewPassword = true;\n } else {\n this.viewPassword = this.getResponseProperty('ViewPassword');\n }\n this.organizationUseTotp = this.getResponseProperty('OrganizationUseTotp');\n this.revisionDate = this.getResponseProperty('RevisionDate');\n this.collectionIds = this.getResponseProperty('CollectionIds');\n this.deletedDate = this.getResponseProperty('DeletedDate');\n\n const login = this.getResponseProperty('Login');\n if (login != null) {\n this.login = new LoginApi(login);\n }\n\n const card = this.getResponseProperty('Card');\n if (card != null) {\n this.card = new CardApi(card);\n }\n\n const identity = this.getResponseProperty('Identity');\n if (identity != null) {\n this.identity = new IdentityApi(identity);\n }\n\n const secureNote = this.getResponseProperty('SecureNote');\n if (secureNote != null) {\n this.secureNote = new SecureNoteApi(secureNote);\n }\n\n const fields = this.getResponseProperty('Fields');\n if (fields != null) {\n this.fields = fields.map((f: any) => new FieldApi(f));\n }\n\n const attachments = this.getResponseProperty('Attachments');\n if (attachments != null) {\n this.attachments = attachments.map((a: any) => new AttachmentResponse(a));\n }\n\n const passwordHistory = this.getResponseProperty('PasswordHistory');\n if (passwordHistory != null) {\n this.passwordHistory = passwordHistory.map((h: any) => new PasswordHistoryResponse(h));\n }\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { EventService } from 'jslib/abstractions/event.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { SearchService } from 'jslib/abstractions/search.service';\nimport { TotpService } from 'jslib/abstractions/totp.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { CiphersComponent as BaseCiphersComponent } from 'jslib/angular/components/ciphers.component';\n\nimport { CipherType } from 'jslib/enums/cipherType';\nimport { EventType } from 'jslib/enums/eventType';\n\nimport { CipherView } from 'jslib/models/view/cipherView';\n\nconst MaxCheckedCount = 500;\n\n@Component({\n selector: 'app-vault-ciphers',\n templateUrl: 'ciphers.component.html',\n})\nexport class CiphersComponent extends BaseCiphersComponent implements OnDestroy {\n @Input() showAddNew = true;\n @Output() onAttachmentsClicked = new EventEmitter();\n @Output() onShareClicked = new EventEmitter();\n @Output() onCollectionsClicked = new EventEmitter();\n @Output() onCloneClicked = new EventEmitter();\n\n cipherType = CipherType;\n actionPromise: Promise;\n userHasPremiumAccess = false;\n\n constructor(searchService: SearchService, protected toasterService: ToasterService,\n protected i18nService: I18nService, protected platformUtilsService: PlatformUtilsService,\n protected cipherService: CipherService, protected eventService: EventService,\n protected totpService: TotpService, protected userService: UserService) {\n super(searchService);\n this.pageSize = 200;\n }\n\n async ngOnInit() {\n this.userHasPremiumAccess = await this.userService.canAccessPremium();\n }\n\n ngOnDestroy() {\n this.selectAll(false);\n }\n\n launch(uri: string) {\n this.platformUtilsService.launchUri(uri);\n }\n\n attachments(c: CipherView) {\n this.onAttachmentsClicked.emit(c);\n }\n\n share(c: CipherView) {\n this.onShareClicked.emit(c);\n }\n\n collections(c: CipherView) {\n this.onCollectionsClicked.emit(c);\n }\n\n clone(c: CipherView) {\n this.onCloneClicked.emit(c);\n }\n\n async delete(c: CipherView): Promise {\n if (this.actionPromise != null) {\n return;\n }\n const permanent = c.isDeleted;\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(permanent ? 'permanentlyDeleteItemConfirmation' : 'deleteItemConfirmation'),\n this.i18nService.t(permanent ? 'permanentlyDeleteItem' : 'deleteItem'),\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.deleteCipher(c.id, permanent);\n await this.actionPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t(permanent ? 'permanentlyDeletedItem'\n : 'deletedItem'));\n this.refresh();\n } catch { }\n this.actionPromise = null;\n }\n\n async restore(c: CipherView): Promise {\n if (this.actionPromise != null || !c.isDeleted) {\n return;\n }\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('restoreItemConfirmation'),\n this.i18nService.t('restoreItem'),\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.cipherService.restoreWithServer(c.id);\n await this.actionPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('restoredItem'));\n this.refresh();\n } catch { }\n this.actionPromise = null;\n }\n\n async copy(cipher: CipherView, value: string, typeI18nKey: string, aType: string) {\n if (value == null || aType === 'TOTP' && !this.displayTotpCopyButton(cipher)) {\n return;\n } else if (value === cipher.login.totp) {\n value = await this.totpService.getCode(value);\n }\n\n this.platformUtilsService.copyToClipboard(value, { window: window });\n this.toasterService.popAsync('info', null,\n this.i18nService.t('valueCopied', this.i18nService.t(typeI18nKey)));\n\n if (typeI18nKey === 'password' || typeI18nKey === 'verificationCodeTotp') {\n this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, cipher.id);\n } else if (typeI18nKey === 'securityCode') {\n this.eventService.collect(EventType.Cipher_ClientCopiedCardCode, cipher.id);\n }\n }\n\n selectAll(select: boolean) {\n if (select) {\n this.selectAll(false);\n }\n const selectCount = select && this.ciphers.length > MaxCheckedCount\n ? MaxCheckedCount\n : this.ciphers.length;\n for (let i = 0; i < selectCount; i++) {\n this.checkCipher(this.ciphers[i], select);\n }\n }\n\n checkCipher(c: CipherView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n }\n\n getSelected(): CipherView[] {\n if (this.ciphers == null) {\n return [];\n }\n return this.ciphers.filter(c => !!(c as any).checked);\n }\n\n getSelectedIds(): string[] {\n return this.getSelected().map(c => c.id);\n }\n\n displayTotpCopyButton(cipher: CipherView) {\n return (cipher?.login?.hasTotp ?? false) &&\n (cipher.organizationUseTotp || this.userHasPremiumAccess);\n }\n\n protected deleteCipher(id: string, permanent: boolean) {\n return permanent ? this.cipherService.deleteWithServer(id) : this.cipherService.softDeleteWithServer(id);\n }\n\n protected showFixOldAttachments(c: CipherView) {\n return c.hasOldAttachments && c.organizationId == null;\n }\n}\n","\n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n {{c.name}}\n \n \n {{'shared' | i18n}}\n \n \n \n {{'attachments' | i18n}}\n \n \n {{'attachmentsNeedFix' | i18n}}\n \n \n
\n {{c.subTitle}}\n
\n \n
\n
\n \n \n {{'loading' | i18n}}\n \n \n

{{'noItemsInList' | i18n}}

\n \n
\n
\n
\n","export enum EncryptionType {\n AesCbc256_B64 = 0,\n AesCbc128_HmacSha256_B64 = 1,\n AesCbc256_HmacSha256_B64 = 2,\n Rsa2048_OaepSha256_B64 = 3,\n Rsa2048_OaepSha1_B64 = 4,\n Rsa2048_OaepSha256_HmacSha256_B64 = 5,\n Rsa2048_OaepSha1_HmacSha256_B64 = 6,\n}\n","import { KdfType } from '../enums/kdfType';\nimport { TwoFactorProviderType } from '../enums/twoFactorProviderType';\n\nimport { AuthResult } from '../models/domain/authResult';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nimport { DeviceRequest } from '../models/request/deviceRequest';\nimport { KeysRequest } from '../models/request/keysRequest';\nimport { PreloginRequest } from '../models/request/preloginRequest';\nimport { TokenRequest } from '../models/request/tokenRequest';\n\nimport { IdentityTokenResponse } from '../models/response/identityTokenResponse';\nimport { IdentityTwoFactorResponse } from '../models/response/identityTwoFactorResponse';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { AppIdService } from '../abstractions/appId.service';\nimport { AuthService as AuthServiceAbstraction } from '../abstractions/auth.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport { LogService } from '../abstractions/log.service';\nimport { MessagingService } from '../abstractions/messaging.service';\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\nimport { TokenService } from '../abstractions/token.service';\nimport { UserService } from '../abstractions/user.service';\nimport { VaultTimeoutService } from '../abstractions/vaultTimeout.service';\n\nexport const TwoFactorProviders = {\n [TwoFactorProviderType.Authenticator]: {\n type: TwoFactorProviderType.Authenticator,\n name: null as string,\n description: null as string,\n priority: 1,\n sort: 1,\n premium: false,\n },\n [TwoFactorProviderType.Yubikey]: {\n type: TwoFactorProviderType.Yubikey,\n name: null as string,\n description: null as string,\n priority: 3,\n sort: 2,\n premium: true,\n },\n [TwoFactorProviderType.Duo]: {\n type: TwoFactorProviderType.Duo,\n name: 'Duo',\n description: null as string,\n priority: 2,\n sort: 3,\n premium: true,\n },\n [TwoFactorProviderType.OrganizationDuo]: {\n type: TwoFactorProviderType.OrganizationDuo,\n name: 'Duo (Organization)',\n description: null as string,\n priority: 10,\n sort: 4,\n premium: false,\n },\n [TwoFactorProviderType.Email]: {\n type: TwoFactorProviderType.Email,\n name: null as string,\n description: null as string,\n priority: 0,\n sort: 6,\n premium: false,\n },\n [TwoFactorProviderType.WebAuthn]: {\n type: TwoFactorProviderType.WebAuthn,\n name: null as string,\n description: null as string,\n priority: 4,\n sort: 5,\n premium: true,\n },\n};\n\nexport class AuthService implements AuthServiceAbstraction {\n email: string;\n masterPasswordHash: string;\n code: string;\n codeVerifier: string;\n ssoRedirectUrl: string;\n clientId: string;\n clientSecret: string;\n twoFactorProvidersData: Map;\n selectedTwoFactorProviderType: TwoFactorProviderType = null;\n\n private key: SymmetricCryptoKey;\n\n constructor(private cryptoService: CryptoService, private apiService: ApiService,\n private userService: UserService, private tokenService: TokenService,\n private appIdService: AppIdService, private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService, private messagingService: MessagingService,\n private vaultTimeoutService: VaultTimeoutService, private logService: LogService,\n private setCryptoKeys = true) {\n }\n\n init() {\n TwoFactorProviders[TwoFactorProviderType.Email].name = this.i18nService.t('emailTitle');\n TwoFactorProviders[TwoFactorProviderType.Email].description = this.i18nService.t('emailDesc');\n\n TwoFactorProviders[TwoFactorProviderType.Authenticator].name = this.i18nService.t('authenticatorAppTitle');\n TwoFactorProviders[TwoFactorProviderType.Authenticator].description =\n this.i18nService.t('authenticatorAppDesc');\n\n TwoFactorProviders[TwoFactorProviderType.Duo].description = this.i18nService.t('duoDesc');\n\n TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].name =\n 'Duo (' + this.i18nService.t('organization') + ')';\n TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].description =\n this.i18nService.t('duoOrganizationDesc');\n\n TwoFactorProviders[TwoFactorProviderType.WebAuthn].name = this.i18nService.t('webAuthnTitle');\n TwoFactorProviders[TwoFactorProviderType.WebAuthn].description = this.i18nService.t('webAuthnDesc');\n\n TwoFactorProviders[TwoFactorProviderType.Yubikey].name = this.i18nService.t('yubiKeyTitle');\n TwoFactorProviders[TwoFactorProviderType.Yubikey].description = this.i18nService.t('yubiKeyDesc');\n }\n\n async logIn(email: string, masterPassword: string): Promise {\n this.selectedTwoFactorProviderType = null;\n const key = await this.makePreloginKey(masterPassword, email);\n const hashedPassword = await this.cryptoService.hashPassword(masterPassword, key);\n return await this.logInHelper(email, hashedPassword, null, null, null, null, null,\n key, null, null, null);\n }\n\n async logInSso(code: string, codeVerifier: string, redirectUrl: string): Promise {\n this.selectedTwoFactorProviderType = null;\n return await this.logInHelper(null, null, code, codeVerifier, redirectUrl, null, null,\n null, null, null, null);\n }\n\n async logInApiKey(clientId: string, clientSecret: string): Promise {\n this.selectedTwoFactorProviderType = null;\n return await this.logInHelper(null, null, null, null, null, clientId, clientSecret,\n null, null, null, null);\n }\n\n async logInTwoFactor(twoFactorProvider: TwoFactorProviderType, twoFactorToken: string,\n remember?: boolean): Promise {\n return await this.logInHelper(this.email, this.masterPasswordHash, this.code, this.codeVerifier,\n this.ssoRedirectUrl, this.clientId, this.clientSecret, this.key, twoFactorProvider,\n twoFactorToken, remember);\n }\n\n async logInComplete(email: string, masterPassword: string, twoFactorProvider: TwoFactorProviderType,\n twoFactorToken: string, remember?: boolean): Promise {\n this.selectedTwoFactorProviderType = null;\n const key = await this.makePreloginKey(masterPassword, email);\n const hashedPassword = await this.cryptoService.hashPassword(masterPassword, key);\n return await this.logInHelper(email, hashedPassword, null, null, null, null, null, key,\n twoFactorProvider, twoFactorToken, remember);\n }\n\n async logInSsoComplete(code: string, codeVerifier: string, redirectUrl: string,\n twoFactorProvider: TwoFactorProviderType, twoFactorToken: string, remember?: boolean): Promise {\n this.selectedTwoFactorProviderType = null;\n return await this.logInHelper(null, null, code, codeVerifier, redirectUrl, null,\n null, null, twoFactorProvider, twoFactorToken, remember);\n }\n\n async logInApiKeyComplete(clientId: string, clientSecret: string, twoFactorProvider: TwoFactorProviderType,\n twoFactorToken: string, remember?: boolean): Promise {\n this.selectedTwoFactorProviderType = null;\n return await this.logInHelper(null, null, null, null, null, clientId, clientSecret, null,\n twoFactorProvider, twoFactorToken, remember);\n }\n\n logOut(callback: Function) {\n callback();\n this.messagingService.send('loggedOut');\n }\n\n getSupportedTwoFactorProviders(win: Window): any[] {\n const providers: any[] = [];\n if (this.twoFactorProvidersData == null) {\n return providers;\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.OrganizationDuo) &&\n this.platformUtilsService.supportsDuo()) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.OrganizationDuo]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Authenticator)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Authenticator]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Yubikey)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Yubikey]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Duo) && this.platformUtilsService.supportsDuo()) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Duo]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.WebAuthn) && this.platformUtilsService.supportsWebAuthn(win)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.WebAuthn]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Email)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Email]);\n }\n\n return providers;\n }\n\n getDefaultTwoFactorProvider(webAuthnSupported: boolean): TwoFactorProviderType {\n if (this.twoFactorProvidersData == null) {\n return null;\n }\n\n if (this.selectedTwoFactorProviderType != null &&\n this.twoFactorProvidersData.has(this.selectedTwoFactorProviderType)) {\n return this.selectedTwoFactorProviderType;\n }\n\n let providerType: TwoFactorProviderType = null;\n let providerPriority = -1;\n this.twoFactorProvidersData.forEach((value, type) => {\n const provider = (TwoFactorProviders as any)[type];\n if (provider != null && provider.priority > providerPriority) {\n if (type === TwoFactorProviderType.WebAuthn && !webAuthnSupported) {\n return;\n }\n\n providerType = type;\n providerPriority = provider.priority;\n }\n });\n\n return providerType;\n }\n\n async makePreloginKey(masterPassword: string, email: string): Promise {\n email = email.trim().toLowerCase();\n let kdf: KdfType = null;\n let kdfIterations: number = null;\n try {\n const preloginResponse = await this.apiService.postPrelogin(new PreloginRequest(email));\n if (preloginResponse != null) {\n kdf = preloginResponse.kdf;\n kdfIterations = preloginResponse.kdfIterations;\n }\n } catch (e) {\n if (e == null || e.statusCode !== 404) {\n throw e;\n }\n }\n return this.cryptoService.makeKey(masterPassword, email, kdf, kdfIterations);\n }\n\n authingWithApiKey(): boolean {\n return this.clientId != null && this.clientSecret != null;\n }\n\n authingWithSso(): boolean {\n return this.code != null && this.codeVerifier != null && this.ssoRedirectUrl != null;\n }\n\n authingWithPassword(): boolean {\n return this.email != null && this.masterPasswordHash != null;\n }\n\n private async logInHelper(email: string, hashedPassword: string, code: string, codeVerifier: string,\n redirectUrl: string, clientId: string, clientSecret: string, key: SymmetricCryptoKey,\n twoFactorProvider?: TwoFactorProviderType, twoFactorToken?: string, remember?: boolean): Promise {\n const storedTwoFactorToken = await this.tokenService.getTwoFactorToken(email);\n const appId = await this.appIdService.getAppId();\n const deviceRequest = new DeviceRequest(appId, this.platformUtilsService);\n\n let emailPassword: string[] = [];\n let codeCodeVerifier: string[] = [];\n let clientIdClientSecret: string[] = [];\n\n if (email != null && hashedPassword != null) {\n emailPassword = [email, hashedPassword];\n } else {\n emailPassword = null;\n }\n if (code != null && codeVerifier != null && redirectUrl != null) {\n codeCodeVerifier = [code, codeVerifier, redirectUrl];\n } else {\n codeCodeVerifier = null;\n }\n if (clientId != null && clientSecret != null) {\n clientIdClientSecret = [clientId, clientSecret];\n } else {\n clientIdClientSecret = null;\n }\n\n let request: TokenRequest;\n if (twoFactorToken != null && twoFactorProvider != null) {\n request = new TokenRequest(emailPassword, codeCodeVerifier, clientIdClientSecret, twoFactorProvider,\n twoFactorToken, remember, deviceRequest);\n } else if (storedTwoFactorToken != null) {\n request = new TokenRequest(emailPassword, codeCodeVerifier, clientIdClientSecret, TwoFactorProviderType.Remember,\n storedTwoFactorToken, false, deviceRequest);\n } else {\n request = new TokenRequest(emailPassword, codeCodeVerifier, clientIdClientSecret, null,\n null, false, deviceRequest);\n }\n\n const response = await this.apiService.postIdentityToken(request);\n\n this.clearState();\n const result = new AuthResult();\n result.twoFactor = !(response as any).accessToken;\n\n if (result.twoFactor) {\n // two factor required\n const twoFactorResponse = response as IdentityTwoFactorResponse;\n this.email = email;\n this.masterPasswordHash = hashedPassword;\n this.code = code;\n this.codeVerifier = codeVerifier;\n this.ssoRedirectUrl = redirectUrl;\n this.clientId = clientId;\n this.clientSecret = clientSecret;\n this.key = this.setCryptoKeys ? key : null;\n this.twoFactorProvidersData = twoFactorResponse.twoFactorProviders2;\n result.twoFactorProviders = twoFactorResponse.twoFactorProviders2;\n return result;\n }\n\n const tokenResponse = response as IdentityTokenResponse;\n result.resetMasterPassword = tokenResponse.resetMasterPassword;\n if (tokenResponse.twoFactorToken != null) {\n await this.tokenService.setTwoFactorToken(tokenResponse.twoFactorToken, email);\n }\n\n await this.tokenService.setTokens(tokenResponse.accessToken, tokenResponse.refreshToken);\n await this.userService.setInformation(this.tokenService.getUserId(), this.tokenService.getEmail(),\n tokenResponse.kdf, tokenResponse.kdfIterations);\n if (this.setCryptoKeys) {\n if (key != null) {\n await this.cryptoService.setKey(key);\n }\n if (hashedPassword != null) {\n await this.cryptoService.setKeyHash(hashedPassword);\n }\n\n // Skip this step during SSO new user flow. No key is returned from server.\n if (code == null || tokenResponse.key != null) {\n await this.cryptoService.setEncKey(tokenResponse.key);\n\n // User doesn't have a key pair yet (old account), let's generate one for them\n if (tokenResponse.privateKey == null) {\n try {\n const keyPair = await this.cryptoService.makeKeyPair();\n await this.apiService.postAccountKeys(new KeysRequest(keyPair[0], keyPair[1].encryptedString));\n tokenResponse.privateKey = keyPair[1].encryptedString;\n } catch (e) {\n // tslint:disable-next-line\n this.logService.error(e);\n }\n }\n\n await this.cryptoService.setEncPrivateKey(tokenResponse.privateKey);\n }\n }\n\n if (this.vaultTimeoutService != null) {\n this.vaultTimeoutService.biometricLocked = false;\n }\n this.messagingService.send('loggedIn');\n return result;\n }\n\n private clearState(): void {\n this.key = null;\n this.email = null;\n this.masterPasswordHash = null;\n this.code = null;\n this.codeVerifier = null;\n this.ssoRedirectUrl = null;\n this.clientId = null;\n this.clientSecret = null;\n this.twoFactorProvidersData = null;\n this.selectedTwoFactorProviderType = null;\n }\n}\n","export class SelectionReadOnlyRequest {\n id: string;\n readOnly: boolean;\n hidePasswords: boolean;\n\n constructor(id: string, readOnly: boolean, hidePasswords: boolean) {\n this.id = id;\n this.readOnly = readOnly;\n this.hidePasswords = hidePasswords;\n }\n}\n","export enum DeviceType {\n Android = 0,\n iOS = 1,\n ChromeExtension = 2,\n FirefoxExtension = 3,\n OperaExtension = 4,\n EdgeExtension = 5,\n WindowsDesktop = 6,\n MacOsDesktop = 7,\n LinuxDesktop = 8,\n ChromeBrowser = 9,\n FirefoxBrowser = 10,\n OperaBrowser = 11,\n EdgeBrowser = 12,\n IEBrowser = 13,\n UnknownBrowser = 14,\n AndroidAmazon = 15,\n UWP = 16,\n SafariBrowser = 17,\n VivaldiBrowser = 18,\n VivaldiExtension = 19,\n SafariExtension = 20,\n}\n","export abstract class SettingsService {\n clearCache: () => void;\n getEquivalentDomains: () => Promise;\n setEquivalentDomains: (equivalentDomains: string[][]) => Promise;\n clear: (userId: string) => Promise;\n}\n","export enum PlanType {\n Free = 0,\n FamiliesAnnually2019 = 1,\n TeamsMonthly2019 = 2,\n TeamsAnnually2019 = 3,\n EnterpriseMonthly2019 = 4,\n EnterpriseAnnually2019 = 5,\n Custom = 6,\n FamiliesAnnually = 7,\n TeamsMonthly = 8,\n TeamsAnnually = 9,\n EnterpriseMonthly = 10,\n EnterpriseAnnually = 11,\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { PaymentMethodType } from 'jslib/enums/paymentMethodType';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib/abstractions/policy.service';\nimport { SyncService } from 'jslib/abstractions/sync.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { PaymentComponent } from './payment.component';\nimport { TaxInfoComponent } from './tax-info.component';\n\nimport { OrganizationUserStatusType } from 'jslib/enums/organizationUserStatusType';\nimport { OrganizationUserType } from 'jslib/enums/organizationUserType';\nimport { PlanType } from 'jslib/enums/planType';\nimport { PolicyType } from 'jslib/enums/policyType';\nimport { ProductType } from 'jslib/enums/productType';\n\nimport { OrganizationCreateRequest } from 'jslib/models/request/organizationCreateRequest';\nimport { OrganizationUpgradeRequest } from 'jslib/models/request/organizationUpgradeRequest';\nimport { PlanResponse } from 'jslib/models/response/planResponse';\n\n@Component({\n selector: 'app-organization-plans',\n templateUrl: 'organization-plans.component.html',\n})\nexport class OrganizationPlansComponent implements OnInit {\n @ViewChild(PaymentComponent) paymentComponent: PaymentComponent;\n @ViewChild(TaxInfoComponent) taxComponent: TaxInfoComponent;\n\n @Input() organizationId: string;\n @Input() showFree = true;\n @Input() showCancel = false;\n @Input() product: ProductType = ProductType.Free;\n @Input() plan: PlanType = PlanType.Free;\n @Output() onSuccess = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n loading: boolean = true;\n selfHosted: boolean = false;\n ownedBusiness: boolean = false;\n premiumAccessAddon: boolean = false;\n additionalStorage: number = 0;\n additionalSeats: number = 0;\n name: string;\n billingEmail: string;\n businessName: string;\n productTypes = ProductType;\n formPromise: Promise;\n singleOrgPolicyBlock: boolean = false;\n freeTrial: boolean = false;\n\n plans: PlanResponse[];\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService, private router: Router, private syncService: SyncService,\n private policyService: PolicyService, private userService: UserService) {\n this.selfHosted = platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n if (!this.selfHosted) {\n const plans = await this.apiService.getPlans();\n this.plans = plans.data;\n if (this.product === ProductType.Enterprise || this.product === ProductType.Teams) {\n this.ownedBusiness = true;\n }\n }\n this.loading = false;\n }\n\n get createOrganization() {\n return this.organizationId == null;\n }\n\n get selectedPlan() {\n return this.plans.find(plan => plan.type === this.plan);\n }\n\n get selectedPlanInterval() {\n return this.selectedPlan.isAnnual\n ? 'year'\n : 'month';\n }\n\n get selectableProducts() {\n let validPlans = this.plans.filter(plan => plan.type !== PlanType.Custom);\n\n if (this.ownedBusiness) {\n validPlans = validPlans.filter(plan => plan.canBeUsedByBusiness);\n }\n\n if (!this.showFree) {\n validPlans = validPlans.filter(plan => plan.product !== ProductType.Free);\n }\n\n validPlans = validPlans\n .filter(plan => !plan.legacyYear\n && !plan.disabled\n && (plan.isAnnual || plan.product === this.productTypes.Free));\n\n return validPlans;\n }\n\n get selectablePlans() {\n return this.plans.filter(plan => !plan.legacyYear && !plan.disabled && plan.product === this.product);\n }\n\n additionalStoragePriceMonthly(selectedPlan: PlanResponse) {\n if (!selectedPlan.isAnnual) {\n return selectedPlan.additionalStoragePricePerGb;\n }\n return selectedPlan.additionalStoragePricePerGb / 12;\n }\n\n seatPriceMonthly(selectedPlan: PlanResponse) {\n if (!selectedPlan.isAnnual) {\n return selectedPlan.seatPrice;\n }\n return selectedPlan.seatPrice / 12;\n }\n\n additionalStorageTotal(plan: PlanResponse): number {\n if (!plan.hasAdditionalStorageOption) {\n return 0;\n }\n\n return plan.additionalStoragePricePerGb * Math.abs(this.additionalStorage || 0);\n }\n\n seatTotal(plan: PlanResponse): number {\n if (!plan.hasAdditionalSeatsOption) {\n return 0;\n }\n\n return plan.seatPrice * Math.abs(this.additionalSeats || 0);\n }\n\n get subtotal() {\n let subTotal = this.selectedPlan.basePrice;\n if (this.selectedPlan.hasAdditionalSeatsOption && this.additionalSeats) {\n subTotal += this.seatTotal(this.selectedPlan);\n }\n if (this.selectedPlan.hasAdditionalStorageOption && this.additionalStorage) {\n subTotal += this.additionalStorageTotal(this.selectedPlan);\n }\n if (this.selectedPlan.hasPremiumAccessOption && this.premiumAccessAddon) {\n subTotal += this.selectedPlan.premiumAccessOptionPrice;\n }\n return subTotal;\n }\n\n get taxCharges() {\n return this.taxComponent != null && this.taxComponent.taxRate != null ?\n (this.taxComponent.taxRate / 100) * this.subtotal :\n 0;\n }\n\n get total() {\n return (this.subtotal + this.taxCharges) || 0;\n }\n\n changedProduct() {\n this.plan = this.selectablePlans[0].type;\n if (!this.selectedPlan.hasPremiumAccessOption) {\n this.premiumAccessAddon = false;\n }\n if (!this.selectedPlan.hasAdditionalStorageOption) {\n this.additionalStorage = 0;\n }\n if (!this.selectedPlan.hasAdditionalSeatsOption) {\n this.additionalSeats = 0;\n } else if (!this.additionalSeats && !this.selectedPlan.baseSeats &&\n this.selectedPlan.hasAdditionalSeatsOption) {\n this.additionalSeats = 1;\n }\n this.freeTrial = this.selectedPlan.trialPeriodDays != null;\n }\n\n changedOwnedBusiness() {\n if (!this.ownedBusiness || this.selectedPlan.canBeUsedByBusiness) {\n return;\n }\n this.product = ProductType.Teams;\n this.plan = PlanType.TeamsAnnually;\n }\n\n changedCountry() {\n this.paymentComponent.hideBank = this.taxComponent.taxInfo.country !== 'US';\n // Bank Account payments are only available for US customers\n if (this.paymentComponent.hideBank &&\n this.paymentComponent.method === PaymentMethodType.BankAccount) {\n this.paymentComponent.method = PaymentMethodType.Card;\n this.paymentComponent.changeMethod();\n }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n\n async submit() {\n if (this.singleOrgPolicyBlock) {\n return;\n } else {\n const policies = await this.policyService.getAll(PolicyType.SingleOrg);\n const orgs = await this.userService.getAllOrganizations();\n\n const orgsWithSingleOrgPolicy = policies\n .filter(p => p.enabled && p.type === PolicyType.SingleOrg)\n .map(p => p.organizationId);\n\n this.singleOrgPolicyBlock = orgs.some(org =>\n org.type !== OrganizationUserType.Owner &&\n org.type !== OrganizationUserType.Admin &&\n org.status !== OrganizationUserStatusType.Invited &&\n orgsWithSingleOrgPolicy.includes(org.id));\n\n if (this.singleOrgPolicyBlock) {\n return;\n }\n }\n\n let files: FileList = null;\n if (this.createOrganization && this.selfHosted) {\n const fileEl = document.getElementById('file') as HTMLInputElement;\n files = fileEl.files;\n if (files == null || files.length === 0) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('selectFile'));\n return;\n }\n }\n\n try {\n const doSubmit = async () => {\n let orgId: string = null;\n if (this.createOrganization) {\n let tokenResult: [string, PaymentMethodType] = null;\n if (!this.selfHosted && this.plan !== PlanType.Free) {\n tokenResult = await this.paymentComponent.createPaymentToken();\n }\n const shareKey = await this.cryptoService.makeShareKey();\n const key = shareKey[0].encryptedString;\n const collection = await this.cryptoService.encrypt(\n this.i18nService.t('defaultCollection'), shareKey[1]);\n const collectionCt = collection.encryptedString;\n\n if (this.selfHosted) {\n const fd = new FormData();\n fd.append('license', files[0]);\n fd.append('key', key);\n fd.append('collectionName', collectionCt);\n const response = await this.apiService.postOrganizationLicense(fd);\n orgId = response.id;\n } else {\n const request = new OrganizationCreateRequest();\n request.key = key;\n request.collectionName = collectionCt;\n request.name = this.name;\n request.billingEmail = this.billingEmail;\n\n if (this.selectedPlan.type === PlanType.Free) {\n request.planType = PlanType.Free;\n } else {\n request.paymentToken = tokenResult[0];\n request.paymentMethodType = tokenResult[1];\n request.businessName = this.ownedBusiness ? this.businessName : null;\n request.additionalSeats = this.additionalSeats;\n request.additionalStorageGb = this.additionalStorage;\n request.premiumAccessAddon = this.selectedPlan.hasPremiumAccessOption &&\n this.premiumAccessAddon;\n request.planType = this.selectedPlan.type;\n request.billingAddressPostalCode = this.taxComponent.taxInfo.postalCode;\n request.billingAddressCountry = this.taxComponent.taxInfo.country;\n if (this.taxComponent.taxInfo.includeTaxId) {\n request.taxIdNumber = this.taxComponent.taxInfo.taxId;\n request.billingAddressLine1 = this.taxComponent.taxInfo.line1;\n request.billingAddressLine2 = this.taxComponent.taxInfo.line2;\n request.billingAddressCity = this.taxComponent.taxInfo.city;\n request.billingAddressState = this.taxComponent.taxInfo.state;\n }\n }\n const response = await this.apiService.postOrganization(request);\n orgId = response.id;\n }\n } else {\n const request = new OrganizationUpgradeRequest();\n request.businessName = this.ownedBusiness ? this.businessName : null;\n request.additionalSeats = this.additionalSeats;\n request.additionalStorageGb = this.additionalStorage;\n request.premiumAccessAddon = this.selectedPlan.hasPremiumAccessOption &&\n this.premiumAccessAddon;\n request.planType = this.selectedPlan.type;\n request.billingAddressCountry = this.taxComponent.taxInfo.country;\n request.billingAddressPostalCode = this.taxComponent.taxInfo.postalCode;\n\n const result = await this.apiService.postOrganizationUpgrade(this.organizationId, request);\n if (!result.success && result.paymentIntentClientSecret != null) {\n await this.paymentComponent.handleStripeCardPayment(result.paymentIntentClientSecret, null);\n }\n orgId = this.organizationId;\n }\n\n if (orgId != null) {\n await this.apiService.refreshIdentityToken();\n await this.syncService.fullSync(true);\n if (this.createOrganization) {\n this.toasterService.popAsync('success',\n this.i18nService.t('organizationCreated'), this.i18nService.t('organizationReadyToGo'));\n } else {\n this.toasterService.popAsync('success', null, this.i18nService.t('organizationUpgraded'));\n }\n this.router.navigate(['/organizations/' + orgId]);\n }\n };\n\n this.formPromise = doSubmit();\n await this.formPromise;\n this.onSuccess.emit();\n } catch { }\n }\n\n}\n","\n \n {{'loading' | i18n}}\n\n\n

{{'uploadLicenseFileOrg' | i18n}}

\n
\n
\n \n \n {{'licenseFileDesc' | i18n : 'bitwarden_organization_license.json'}}\n
\n \n
\n
\n
\n

{{'generalInformation' | i18n}}

\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n

{{'chooseYourPlan' | i18n}}

\n
\n \n \n
\n
\n \n

{{'users' | i18n}}

\n
\n
\n \n \n {{'userSeatsHowManyDesc' | i18n}}\n
\n
\n
\n

{{'addons' | i18n}}

\n
\n
\n \n \n {{'userSeatsAdditionalDesc' | i18n : selectedPlan.baseSeats : (seatPriceMonthly(selectedPlan) | currency:'$')}}\n
\n
\n
\n
\n \n \n {{'additionalStorageIntervalDesc' | i18n : '1 GB' : (additionalStoragePriceMonthly(selectedPlan) | currency:'$') : ('month' | i18n)}}\n
\n
\n
\n
\n
\n \n \n
\n {{'premiumAccessDesc' | i18n : (3.33 | currency:'$') : ('month' | i18n)}}\n
\n
\n

{{'summary' | i18n}}

\n
\n \n \n
\n
\n

{{ (createOrganization ? 'paymentInformation' : 'billingInformation') | i18n}}

\n \n \n
\n
\n {{ 'planPrice' | i18n }}: {{ subtotal | currency: 'USD $' }}\n
\n \n {{ 'estimatedTax' | i18n }}: {{ taxCharges | currency: 'USD $' }}\n \n
\n
\n

{{'total' | i18n}}:\n {{total | currency:'USD $'}}/{{selectedPlanInterval | i18n}}

\n
\n \n {{'paymentChargedWithTrial' | i18n : (selectedPlanInterval | i18n) }}\n \n \n \n {{'paymentCharged' | i18n : (selectedPlanInterval | i18n) }}\n \n \n \n \n \n
\n
\n {{'singleOrgBlockCreateMessage' | i18n}}\n
\n
\n \n \n
\n
\n","import { EncryptionType } from '../../enums/encryptionType';\n\nimport { Utils } from '../../misc/utils';\n\nexport class SymmetricCryptoKey {\n key: ArrayBuffer;\n encKey?: ArrayBuffer;\n macKey?: ArrayBuffer;\n encType: EncryptionType;\n\n keyB64: string;\n encKeyB64: string;\n macKeyB64: string;\n\n meta: any;\n\n constructor(key: ArrayBuffer, encType?: EncryptionType) {\n if (key == null) {\n throw new Error('Must provide key');\n }\n\n if (encType == null) {\n if (key.byteLength === 32) {\n encType = EncryptionType.AesCbc256_B64;\n } else if (key.byteLength === 64) {\n encType = EncryptionType.AesCbc256_HmacSha256_B64;\n } else {\n throw new Error('Unable to determine encType.');\n }\n }\n\n this.key = key;\n this.encType = encType;\n\n if (encType === EncryptionType.AesCbc256_B64 && key.byteLength === 32) {\n this.encKey = key;\n this.macKey = null;\n } else if (encType === EncryptionType.AesCbc128_HmacSha256_B64 && key.byteLength === 32) {\n this.encKey = key.slice(0, 16);\n this.macKey = key.slice(16, 32);\n } else if (encType === EncryptionType.AesCbc256_HmacSha256_B64 && key.byteLength === 64) {\n this.encKey = key.slice(0, 32);\n this.macKey = key.slice(32, 64);\n } else {\n throw new Error('Unsupported encType/key length.');\n }\n\n if (this.key != null) {\n this.keyB64 = Utils.fromBufferToB64(this.key);\n }\n if (this.encKey != null) {\n this.encKeyB64 = Utils.fromBufferToB64(this.encKey);\n }\n if (this.macKey != null) {\n this.macKeyB64 = Utils.fromBufferToB64(this.macKey);\n }\n }\n}\n","import { CardData } from '../data/cardData';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\n\nimport { CardView } from '../view/cardView';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class Card extends Domain {\n cardholderName: EncString;\n brand: EncString;\n number: EncString;\n expMonth: EncString;\n expYear: EncString;\n code: EncString;\n\n constructor(obj?: CardData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(this, obj, {\n cardholderName: null,\n brand: null,\n number: null,\n expMonth: null,\n expYear: null,\n code: null,\n }, alreadyEncrypted, []);\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return this.decryptObj(new CardView(this), {\n cardholderName: null,\n brand: null,\n number: null,\n expMonth: null,\n expYear: null,\n code: null,\n }, orgId, encKey);\n }\n\n toCardData(): CardData {\n const c = new CardData();\n this.buildDataModel(this, c, {\n cardholderName: null,\n brand: null,\n number: null,\n expMonth: null,\n expYear: null,\n code: null,\n });\n return c;\n }\n}\n","import { FieldType } from '../../enums/fieldType';\n\nimport { FieldData } from '../data/fieldData';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\n\nimport { FieldView } from '../view/fieldView';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class Field extends Domain {\n name: EncString;\n value: EncString;\n type: FieldType;\n\n constructor(obj?: FieldData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.type = obj.type;\n this.buildDomainModel(this, obj, {\n name: null,\n value: null,\n }, alreadyEncrypted, []);\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return this.decryptObj(new FieldView(this), {\n name: null,\n value: null,\n }, orgId, encKey);\n }\n\n toFieldData(): FieldData {\n const f = new FieldData();\n this.buildDataModel(this, f, {\n name: null,\n value: null,\n type: null,\n }, ['type']);\n return f;\n }\n}\n","import { IdentityData } from '../data/identityData';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nimport { IdentityView } from '../view/identityView';\n\nexport class Identity extends Domain {\n title: EncString;\n firstName: EncString;\n middleName: EncString;\n lastName: EncString;\n address1: EncString;\n address2: EncString;\n address3: EncString;\n city: EncString;\n state: EncString;\n postalCode: EncString;\n country: EncString;\n company: EncString;\n email: EncString;\n phone: EncString;\n ssn: EncString;\n username: EncString;\n passportNumber: EncString;\n licenseNumber: EncString;\n\n constructor(obj?: IdentityData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(this, obj, {\n title: null,\n firstName: null,\n middleName: null,\n lastName: null,\n address1: null,\n address2: null,\n address3: null,\n city: null,\n state: null,\n postalCode: null,\n country: null,\n company: null,\n email: null,\n phone: null,\n ssn: null,\n username: null,\n passportNumber: null,\n licenseNumber: null,\n }, alreadyEncrypted, []);\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return this.decryptObj(new IdentityView(this), {\n title: null,\n firstName: null,\n middleName: null,\n lastName: null,\n address1: null,\n address2: null,\n address3: null,\n city: null,\n state: null,\n postalCode: null,\n country: null,\n company: null,\n email: null,\n phone: null,\n ssn: null,\n username: null,\n passportNumber: null,\n licenseNumber: null,\n }, orgId, encKey);\n }\n\n toIdentityData(): IdentityData {\n const i = new IdentityData();\n this.buildDataModel(this, i, {\n title: null,\n firstName: null,\n middleName: null,\n lastName: null,\n address1: null,\n address2: null,\n address3: null,\n city: null,\n state: null,\n postalCode: null,\n country: null,\n company: null,\n email: null,\n phone: null,\n ssn: null,\n username: null,\n passportNumber: null,\n licenseNumber: null,\n });\n return i;\n }\n}\n","import { LoginUri } from './loginUri';\n\nimport { LoginData } from '../data/loginData';\n\nimport { LoginView } from '../view/loginView';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class Login extends Domain {\n uris: LoginUri[];\n username: EncString;\n password: EncString;\n passwordRevisionDate?: Date;\n totp: EncString;\n\n constructor(obj?: LoginData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.passwordRevisionDate = obj.passwordRevisionDate != null ? new Date(obj.passwordRevisionDate) : null;\n this.buildDomainModel(this, obj, {\n username: null,\n password: null,\n totp: null,\n }, alreadyEncrypted, []);\n\n if (obj.uris) {\n this.uris = [];\n obj.uris.forEach(u => {\n this.uris.push(new LoginUri(u, alreadyEncrypted));\n });\n }\n }\n\n async decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n const view = await this.decryptObj(new LoginView(this), {\n username: null,\n password: null,\n totp: null,\n }, orgId, encKey);\n\n if (this.uris != null) {\n view.uris = [];\n for (let i = 0; i < this.uris.length; i++) {\n const uri = await this.uris[i].decrypt(orgId, encKey);\n view.uris.push(uri);\n }\n }\n\n return view;\n }\n\n toLoginData(): LoginData {\n const l = new LoginData();\n l.passwordRevisionDate = this.passwordRevisionDate != null ? this.passwordRevisionDate.toISOString() : null;\n this.buildDataModel(this, l, {\n username: null,\n password: null,\n totp: null,\n });\n\n if (this.uris != null && this.uris.length > 0) {\n l.uris = [];\n this.uris.forEach(u => {\n l.uris.push(u.toLoginUriData());\n });\n }\n\n return l;\n }\n}\n","import { UriMatchType } from '../../enums/uriMatchType';\n\nimport { LoginUriData } from '../data/loginUriData';\n\nimport { LoginUriView } from '../view/loginUriView';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class LoginUri extends Domain {\n uri: EncString;\n match: UriMatchType;\n\n constructor(obj?: LoginUriData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.match = obj.match;\n this.buildDomainModel(this, obj, {\n uri: null,\n }, alreadyEncrypted, []);\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return this.decryptObj(new LoginUriView(this), {\n uri: null,\n }, orgId, encKey);\n }\n\n toLoginUriData(): LoginUriData {\n const u = new LoginUriData();\n this.buildDataModel(this, u, {\n uri: null,\n }, ['match']);\n return u;\n }\n}\n","import { SecureNoteType } from '../../enums/secureNoteType';\n\nimport { SecureNoteData } from '../data/secureNoteData';\n\nimport Domain from './domainBase';\n\nimport { SecureNoteView } from '../view/secureNoteView';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class SecureNote extends Domain {\n type: SecureNoteType;\n\n constructor(obj?: SecureNoteData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.type = obj.type;\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return Promise.resolve(new SecureNoteView(this));\n }\n\n toSecureNoteData(): SecureNoteData {\n const n = new SecureNoteData();\n n.type = this.type;\n return n;\n }\n}\n","import {\n Directive,\n ElementRef,\n forwardRef,\n HostListener,\n Input,\n Renderer2,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NgControl,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\n\n// ref: https://juristr.com/blog/2018/02/ng-true-value-directive/\n@Directive({\n selector: 'input[type=checkbox][appTrueFalseValue]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TrueFalseValueDirective),\n multi: true,\n },\n ],\n})\nexport class TrueFalseValueDirective implements ControlValueAccessor {\n @Input() trueValue = true;\n @Input() falseValue = false;\n\n constructor(private elementRef: ElementRef, private renderer: Renderer2) { }\n\n @HostListener('change', ['$event'])\n onHostChange(ev: any) {\n this.propagateChange(ev.target.checked ? this.trueValue : this.falseValue);\n }\n\n writeValue(obj: any): void {\n if (obj === this.trueValue) {\n this.renderer.setProperty(this.elementRef.nativeElement, 'checked', true);\n } else {\n this.renderer.setProperty(this.elementRef.nativeElement, 'checked', false);\n }\n }\n\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n registerOnTouched(fn: any): void { /* nothing */ }\n\n setDisabledState?(isDisabled: boolean): void { /* nothing */ }\n\n private propagateChange = (_: any) => { /* nothing */ };\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class SelectionReadOnlyResponse extends BaseResponse {\n id: string;\n readOnly: boolean;\n hidePasswords: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.readOnly = this.getResponseProperty('ReadOnly');\n this.hidePasswords = this.getResponseProperty('HidePasswords');\n }\n}\n","import { BaseResponse } from './baseResponse';\nimport { ProfileOrganizationResponse } from './profileOrganizationResponse';\n\nexport class ProfileResponse extends BaseResponse {\n id: string;\n name: string;\n email: string;\n emailVerified: boolean;\n masterPasswordHint: string;\n premium: boolean;\n culture: string;\n twoFactorEnabled: boolean;\n key: string;\n privateKey: string;\n securityStamp: string;\n organizations: ProfileOrganizationResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.name = this.getResponseProperty('Name');\n this.email = this.getResponseProperty('Email');\n this.emailVerified = this.getResponseProperty('EmailVerified');\n this.masterPasswordHint = this.getResponseProperty('MasterPasswordHint');\n this.premium = this.getResponseProperty('Premium');\n this.culture = this.getResponseProperty('Culture');\n this.twoFactorEnabled = this.getResponseProperty('TwoFactorEnabled');\n this.key = this.getResponseProperty('Key');\n this.privateKey = this.getResponseProperty('PrivateKey');\n this.securityStamp = this.getResponseProperty('SecurityStamp');\n\n const organizations = this.getResponseProperty('Organizations');\n if (organizations != null) {\n this.organizations = organizations.map((o: any) => new ProfileOrganizationResponse(o));\n }\n }\n}\n","import {\n Component,\n EventEmitter,\n Output,\n} from '@angular/core';\n\nimport { CollectionService } from 'jslib/abstractions/collection.service';\nimport { FolderService } from 'jslib/abstractions/folder.service';\nimport { StorageService } from 'jslib/abstractions/storage.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { GroupingsComponent as BaseGroupingsComponent } from 'jslib/angular/components/groupings.component';\n\n@Component({\n selector: 'app-vault-groupings',\n templateUrl: 'groupings.component.html',\n})\nexport class GroupingsComponent extends BaseGroupingsComponent {\n @Output() onSearchTextChanged = new EventEmitter();\n\n searchText: string = '';\n searchPlaceholder: string = null;\n\n constructor(collectionService: CollectionService, folderService: FolderService,\n storageService: StorageService, userService: UserService) {\n super(collectionService, folderService, storageService, userService);\n }\n\n searchTextChanged() {\n this.onSearchTextChanged.emit(this.searchText);\n }\n}\n","
\n
\n {{'filters' | i18n}}\n \n \n \n
\n
\n \n \n

{{'types' | i18n}}

\n \n

\n \n {{'loading' | i18n}}\n

\n \n \n

\n {{'folders' | i18n}}\n \n \n \n

\n \n
\n \n

{{'collections' | i18n}}

\n \n
\n
\n
\n
\n","import { OrganizationData } from '../data/organizationData';\n\nimport { OrganizationUserStatusType } from '../../enums/organizationUserStatusType';\nimport { OrganizationUserType } from '../../enums/organizationUserType';\nimport { PermissionsApi } from '../api/permissionsApi';\n\n\nexport class Organization {\n id: string;\n name: string;\n status: OrganizationUserStatusType;\n type: OrganizationUserType;\n enabled: boolean;\n usePolicies: boolean;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useBusinessPortal: boolean;\n useSso: boolean;\n selfHost: boolean;\n usersGetPremium: boolean;\n seats: number;\n maxCollections: number;\n maxStorageGb?: number;\n ssoBound: boolean;\n identifier: string;\n permissions: PermissionsApi;\n resetPasswordKey: string;\n userId: string;\n\n constructor(obj?: OrganizationData) {\n if (obj == null) {\n return;\n }\n\n this.id = obj.id;\n this.name = obj.name;\n this.status = obj.status;\n this.type = obj.type;\n this.enabled = obj.enabled;\n this.usePolicies = obj.usePolicies;\n this.useGroups = obj.useGroups;\n this.useDirectory = obj.useDirectory;\n this.useEvents = obj.useEvents;\n this.useTotp = obj.useTotp;\n this.use2fa = obj.use2fa;\n this.useApi = obj.useApi;\n this.useBusinessPortal = obj.useBusinessPortal;\n this.useSso = obj.useSso;\n this.selfHost = obj.selfHost;\n this.usersGetPremium = obj.usersGetPremium;\n this.seats = obj.seats;\n this.maxCollections = obj.maxCollections;\n this.maxStorageGb = obj.maxStorageGb;\n this.ssoBound = obj.ssoBound;\n this.identifier = obj.identifier;\n this.permissions = obj.permissions;\n this.resetPasswordKey = obj.resetPasswordKey;\n this.userId = obj.userId;\n }\n\n get canAccess() {\n if (this.type === OrganizationUserType.Owner) {\n return true;\n }\n return this.enabled && this.status === OrganizationUserStatusType.Confirmed;\n }\n\n get isManager() {\n return this.type === OrganizationUserType.Manager || this.type === OrganizationUserType.Owner ||\n this.type === OrganizationUserType.Admin;\n }\n\n get isAdmin() {\n return this.type === OrganizationUserType.Owner || this.type === OrganizationUserType.Admin;\n }\n\n get isOwner() {\n return this.type === OrganizationUserType.Owner;\n }\n\n get canAccessBusinessPortal() {\n return this.isAdmin || this.permissions.accessBusinessPortal;\n }\n\n get canAccessEventLogs() {\n return this.isAdmin || this.permissions.accessEventLogs;\n }\n\n get canAccessImportExport() {\n return this.isAdmin || this.permissions.accessImportExport;\n }\n\n get canAccessReports() {\n return this.isAdmin || this.permissions.accessReports;\n }\n\n get canManageAllCollections() {\n return this.isAdmin || this.permissions.manageAllCollections;\n }\n\n get canManageAssignedCollections() {\n return this.isManager || this.permissions.manageAssignedCollections;\n }\n\n get canManageGroups() {\n return this.isAdmin || this.permissions.manageGroups;\n }\n\n get canManageSso() {\n return this.isAdmin || this.permissions.manageSso;\n }\n\n get canManagePolicies() {\n return this.isAdmin || this.permissions.managePolicies;\n }\n\n get canManageUsers() {\n return this.isAdmin || this.permissions.manageUsers;\n }\n\n get isResetPasswordEnrolled() {\n return this.resetPasswordKey != null;\n }\n}\n","import { View } from './view';\n\nimport { SendFile } from '../domain/sendFile';\n\nexport class SendFileView implements View {\n id: string = null;\n size: string = null;\n sizeName: string = null;\n fileName: string = null;\n\n constructor(f?: SendFile) {\n if (!f) {\n return;\n }\n\n this.id = f.id;\n this.size = f.size;\n this.sizeName = f.sizeName;\n }\n\n get fileSize(): number {\n try {\n if (this.size != null) {\n return parseInt(this.size, null);\n }\n } catch { }\n return 0;\n }\n}\n","import { View } from './view';\n\nimport { SendText } from '../domain/sendText';\n\nexport class SendTextView implements View {\n text: string = null;\n hidden: boolean;\n\n constructor(t?: SendText) {\n if (!t) {\n return;\n }\n\n this.hidden = t.hidden;\n }\n\n get maskedText(): string {\n return this.text != null ? '••••••••' : null;\n }\n}\n","import {\n Component,\n Input,\n OnInit,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { SyncService } from 'jslib/abstractions/sync.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { Organization } from 'jslib/models/domain/organization';\n\nimport { Utils } from 'jslib/misc/utils';\n\nimport { OrganizationUserResetPasswordEnrollmentRequest } from 'jslib/models/request/organizationUserResetPasswordEnrollmentRequest';\n\n@Component({\n selector: 'app-organizations',\n templateUrl: 'organizations.component.html',\n})\nexport class OrganizationsComponent implements OnInit {\n @Input() vault = false;\n\n organizations: Organization[];\n loaded: boolean = false;\n actionPromise: Promise;\n // TODO Remove feature flag once ready for general release\n resetPasswordFeatureFlag = false;\n\n constructor(private userService: UserService, private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService, private apiService: ApiService,\n private toasterService: ToasterService, private syncService: SyncService,\n private cryptoService: CryptoService) { }\n\n async ngOnInit() {\n if (!this.vault) {\n await this.syncService.fullSync(true);\n await this.load();\n }\n }\n\n async load() {\n const orgs = await this.userService.getAllOrganizations();\n orgs.sort(Utils.getSortFunction(this.i18nService, 'name'));\n this.organizations = orgs;\n this.loaded = true;\n }\n\n async unlinkSso(org: Organization) {\n const confirmed = await this.platformUtilsService.showDialog(\n 'Are you sure you want to unlink SSO for this organization?', org.name,\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.apiService.deleteSsoUser(org.id).then(() => {\n return this.syncService.fullSync(true);\n });\n await this.actionPromise;\n this.toasterService.popAsync('success', null, 'Unlinked SSO');\n await this.load();\n } catch { }\n }\n\n async leave(org: Organization) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('leaveOrganizationConfirmation'), org.name,\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.apiService.postLeaveOrganization(org.id).then(() => {\n return this.syncService.fullSync(true);\n });\n await this.actionPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('leftOrganization'));\n await this.load();\n } catch { }\n }\n\n async toggleResetPasswordEnrollment(org: Organization) {\n // Feature Flag\n if (!this.resetPasswordFeatureFlag) {\n return;\n }\n\n // Set variables\n let keyString: string = null;\n let toastStringRef = 'withdrawPasswordResetSuccess';\n\n // Enroll - encrpyt user's encKey.key with organization key\n if (!org.isResetPasswordEnrolled) {\n const encKey = await this.cryptoService.getEncKey();\n const orgSymKey = await this.cryptoService.getOrgKey(org.id);\n const encryptedKey = await this.cryptoService.encrypt(encKey.key, orgSymKey);\n keyString = encryptedKey.encryptedString;\n toastStringRef = 'enrollPasswordResetSuccess';\n }\n\n // Create/Execute request\n try {\n const request = new OrganizationUserResetPasswordEnrollmentRequest();\n request.resetPasswordKey = keyString;\n this.actionPromise = this.apiService.putOrganizationUserResetPasswordEnrollment(org.id, org.userId, request)\n .then(() => {\n return this.syncService.fullSync(true);\n });\n await this.actionPromise;\n this.platformUtilsService.showToast('success', null, this.i18nService.t(toastStringRef));\n await this.load();\n } catch { }\n }\n}\n","\n

\n \n {{'loading' | i18n}}\n

\n \n \n

{{'noOrganizationsList' | i18n}}

\n
\n \n \n {{'newOrganization' | i18n}}\n \n
\n\n
\n

\n {{'organizations' | i18n}}\n \n \n \n {{'loading' | i18n}}\n \n \n

\n \n \n {{'newOrganization' | i18n}}\n \n
\n \n \n {{'loading' | i18n}}\n \n \n \n

{{'noOrganizationsList' | i18n}}

\n \n \n {{'newOrganization' | i18n}}\n \n
\n \n \n \n \n \n \n \n \n
\n \n \n {{o.name}}\n \n \n {{'organizationIsDisabled' | i18n}}\n \n \n \n {{'enrolledPasswordReset' | i18n}}\n \n \n \n
\n
\n
\n","import {\n Component,\n OnInit,\n} from '@angular/core';\n\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { TokenService } from 'jslib/abstractions/token.service';\n\n@Component({\n selector: 'app-navbar',\n templateUrl: 'navbar.component.html',\n})\nexport class NavbarComponent implements OnInit {\n selfHosted = false;\n name: string;\n email: string;\n\n constructor(private messagingService: MessagingService, private platformUtilsService: PlatformUtilsService,\n private tokenService: TokenService) {\n this.selfHosted = this.platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n this.name = await this.tokenService.getName();\n this.email = await this.tokenService.getEmail();\n if (this.name == null || this.name.trim() === '') {\n this.name = this.email;\n }\n }\n\n lock() {\n this.messagingService.send('lockVault');\n }\n\n logOut() {\n this.messagingService.send('logout');\n }\n}\n","\n","import {\n Component,\n OnInit,\n} from '@angular/core';\n\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\n@Component({\n selector: 'app-footer',\n templateUrl: 'footer.component.html',\n})\nexport class FooterComponent implements OnInit {\n version: string;\n year: string = '2015';\n\n constructor(private platformUtilsService: PlatformUtilsService) { }\n\n async ngOnInit() {\n this.year = new Date().getFullYear().toString();\n this.version = await this.platformUtilsService.getApplicationVersion();\n }\n}\n","
\n
\n
\n © {{year}}, Bitwarden Inc.\n
\n
\n
\n {{'versionNumber' | i18n : version}}\n
\n
\n
\n","export class KeysRequest {\n publicKey: string;\n encryptedPrivateKey: string;\n\n constructor(publicKey: string, encryptedPrivateKey: string) {\n this.publicKey = publicKey;\n this.encryptedPrivateKey = encryptedPrivateKey;\n }\n}\n","import { PolicyData } from '../data/policyData';\n\nimport Domain from './domainBase';\n\nimport { PolicyType } from '../../enums/policyType';\n\nexport class Policy extends Domain {\n id: string;\n organizationId: string;\n type: PolicyType;\n data: any;\n enabled: boolean;\n\n constructor(obj?: PolicyData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.id = obj.id;\n this.organizationId = obj.organizationId;\n this.type = obj.type;\n this.data = obj.data;\n this.enabled = obj.enabled;\n }\n}\n","import { PolicyResponse } from '../response/policyResponse';\n\nimport { PolicyType } from '../../enums/policyType';\n\nexport class PolicyData {\n id: string;\n organizationId: string;\n type: PolicyType;\n data: any;\n enabled: boolean;\n\n constructor(response: PolicyResponse) {\n this.id = response.id;\n this.organizationId = response.organizationId;\n this.type = response.type;\n this.data = response.data;\n this.enabled = response.enabled;\n }\n}\n","import { OnInit } from '@angular/core';\n\nimport { CryptoService } from '../../abstractions/crypto.service';\nimport { I18nService } from '../../abstractions/i18n.service';\nimport { MessagingService } from '../../abstractions/messaging.service';\nimport { PasswordGenerationService } from '../../abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from '../../abstractions/platformUtils.service';\nimport { PolicyService } from '../../abstractions/policy.service';\nimport { UserService } from '../../abstractions/user.service';\n\nimport { EncString } from '../../models/domain/encString';\nimport { MasterPasswordPolicyOptions } from '../../models/domain/masterPasswordPolicyOptions';\nimport { SymmetricCryptoKey } from '../../models/domain/symmetricCryptoKey';\n\nimport { KdfType } from '../../enums/kdfType';\n\nexport class ChangePasswordComponent implements OnInit {\n masterPassword: string;\n masterPasswordRetype: string;\n formPromise: Promise;\n masterPasswordScore: number;\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n\n protected email: string;\n protected kdf: KdfType;\n protected kdfIterations: number;\n\n private masterPasswordStrengthTimeout: any;\n\n constructor(protected i18nService: I18nService, protected cryptoService: CryptoService,\n protected messagingService: MessagingService, protected userService: UserService,\n protected passwordGenerationService: PasswordGenerationService,\n protected platformUtilsService: PlatformUtilsService, protected policyService: PolicyService) { }\n\n async ngOnInit() {\n this.email = await this.userService.getEmail();\n this.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions();\n }\n\n getPasswordScoreAlertDisplay() {\n if (this.enforcedPolicyOptions == null) {\n return '';\n }\n\n let str: string;\n switch (this.enforcedPolicyOptions.minComplexity) {\n case 4:\n str = this.i18nService.t('strong');\n break;\n case 3:\n str = this.i18nService.t('good');\n break;\n default:\n str = this.i18nService.t('weak');\n break;\n }\n return str + ' (' + this.enforcedPolicyOptions.minComplexity + ')';\n }\n\n async submit() {\n if (!await this.strongPassword()) {\n return;\n }\n\n if (!await this.setupSubmitActions()) {\n return;\n }\n\n const email = await this.userService.getEmail();\n if (this.kdf == null) {\n this.kdf = await this.userService.getKdf();\n }\n if (this.kdfIterations == null) {\n this.kdfIterations = await this.userService.getKdfIterations();\n }\n const key = await this.cryptoService.makeKey(this.masterPassword, email.trim().toLowerCase(),\n this.kdf, this.kdfIterations);\n const masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, key);\n\n let encKey: [SymmetricCryptoKey, EncString] = null;\n const existingEncKey = await this.cryptoService.getEncKey();\n if (existingEncKey == null) {\n encKey = await this.cryptoService.makeEncKey(key);\n } else {\n encKey = await this.cryptoService.remakeEncKey(key);\n }\n\n await this.performSubmitActions(masterPasswordHash, key, encKey);\n }\n\n async setupSubmitActions(): Promise {\n // Override in sub-class\n // Can be used for additional validation and/or other processes the should occur before changing passwords\n return true;\n }\n\n async performSubmitActions(masterPasswordHash: string, key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString]) {\n // Override in sub-class\n }\n\n async strongPassword(): Promise {\n if (this.masterPassword == null || this.masterPassword === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassRequired'));\n return false;\n }\n if (this.masterPassword.length < 8) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassLength'));\n return false;\n }\n if (this.masterPassword !== this.masterPasswordRetype) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassDoesntMatch'));\n return false;\n }\n\n const strengthResult = this.passwordGenerationService.passwordStrength(this.masterPassword,\n this.getPasswordStrengthUserInput());\n\n if (this.enforcedPolicyOptions != null &&\n !this.policyService.evaluateMasterPassword(\n strengthResult.score,\n this.masterPassword,\n this.enforcedPolicyOptions)) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPasswordPolicyRequirementsNotMet'));\n return false;\n }\n\n if (strengthResult != null && strengthResult.score < 3) {\n const result = await this.platformUtilsService.showDialog(this.i18nService.t('weakMasterPasswordDesc'),\n this.i18nService.t('weakMasterPassword'), this.i18nService.t('yes'), this.i18nService.t('no'),\n 'warning');\n if (!result) {\n return false;\n }\n }\n\n return true;\n }\n\n updatePasswordStrength() {\n if (this.masterPasswordStrengthTimeout != null) {\n clearTimeout(this.masterPasswordStrengthTimeout);\n }\n this.masterPasswordStrengthTimeout = setTimeout(() => {\n const strengthResult = this.passwordGenerationService.passwordStrength(this.masterPassword,\n this.getPasswordStrengthUserInput());\n this.masterPasswordScore = strengthResult == null ? null : strengthResult.score;\n }, 300);\n }\n\n async logOut() {\n const confirmed = await this.platformUtilsService.showDialog(this.i18nService.t('logOutConfirmation'),\n this.i18nService.t('logOut'), this.i18nService.t('logOut'), this.i18nService.t('cancel'));\n if (confirmed) {\n this.messagingService.send('logout');\n }\n }\n\n private getPasswordStrengthUserInput() {\n let userInput: string[] = [];\n const atPosition = this.email.indexOf('@');\n if (atPosition > -1) {\n userInput = userInput.concat(this.email.substr(0, atPosition).trim().toLowerCase().split(/[^A-Za-z0-9]/));\n }\n return userInput;\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\nimport { OrganizationUserStatusType } from 'jslib/enums/organizationUserStatusType';\nimport { OrganizationUserType } from 'jslib/enums/organizationUserType';\nimport { SelectionReadOnlyRequest } from 'jslib/models/request/selectionReadOnlyRequest';\nimport { OrganizationUserUserDetailsResponse } from 'jslib/models/response/organizationUserResponse';\n\nimport { Utils } from 'jslib/misc/utils';\n\n@Component({\n selector: 'app-entity-users',\n templateUrl: 'entity-users.component.html',\n})\nexport class EntityUsersComponent implements OnInit {\n @Input() entity: 'group' | 'collection';\n @Input() entityId: string;\n @Input() entityName: string;\n @Input() organizationId: string;\n @Output() onEditedUsers = new EventEmitter();\n\n organizationUserType = OrganizationUserType;\n organizationUserStatusType = OrganizationUserStatusType;\n\n showSelected = false;\n loading = true;\n formPromise: Promise;\n selectedCount = 0;\n searchText: string;\n\n private allUsers: OrganizationUserUserDetailsResponse[] = [];\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService) { }\n\n async ngOnInit() {\n await this.loadUsers();\n this.loading = false;\n }\n\n get users() {\n if (this.showSelected) {\n return this.allUsers.filter(u => (u as any).checked);\n } else {\n return this.allUsers;\n }\n }\n\n async loadUsers() {\n const users = await this.apiService.getOrganizationUsers(this.organizationId);\n this.allUsers = users.data.map(r => r).sort(Utils.getSortFunction(this.i18nService, 'email'));\n if (this.entity === 'group') {\n const response = await this.apiService.getGroupUsers(this.organizationId, this.entityId);\n if (response != null && users.data.length > 0) {\n response.forEach(s => {\n const user = users.data.filter(u => u.id === s);\n if (user != null && user.length > 0) {\n (user[0] as any).checked = true;\n }\n });\n }\n } else if (this.entity === 'collection') {\n const response = await this.apiService.getCollectionUsers(this.organizationId, this.entityId);\n if (response != null && users.data.length > 0) {\n response.forEach(s => {\n const user = users.data.filter(u => !u.accessAll && u.id === s.id);\n if (user != null && user.length > 0) {\n (user[0] as any).checked = true;\n (user[0] as any).readOnly = s.readOnly;\n (user[0] as any).hidePasswords = s.hidePasswords;\n }\n });\n }\n }\n\n this.allUsers.forEach(u => {\n if (this.entity === 'collection' && u.accessAll) {\n (u as any).checked = true;\n }\n if ((u as any).checked) {\n this.selectedCount++;\n }\n });\n }\n\n check(u: OrganizationUserUserDetailsResponse) {\n if (this.entity === 'collection' && u.accessAll) {\n return;\n }\n (u as any).checked = !(u as any).checked;\n this.selectedChanged(u);\n }\n\n selectedChanged(u: OrganizationUserUserDetailsResponse) {\n if ((u as any).checked) {\n this.selectedCount++;\n } else {\n if (this.entity === 'collection') {\n (u as any).readOnly = false;\n (u as any).hidePasswords = false;\n }\n this.selectedCount--;\n }\n }\n\n filterSelected(showSelected: boolean) {\n this.showSelected = showSelected;\n }\n\n async submit() {\n try {\n if (this.entity === 'group') {\n const selections = this.users.filter(u => (u as any).checked).map(u => u.id);\n this.formPromise = this.apiService.putGroupUsers(this.organizationId, this.entityId, selections);\n } else {\n const selections = this.users.filter(u => (u as any).checked && !u.accessAll)\n .map(u => new SelectionReadOnlyRequest(u.id, !!(u as any).readOnly, !!(u as any).hidePasswords));\n this.formPromise = this.apiService.putCollectionUsers(this.organizationId, this.entityId, selections);\n }\n await this.formPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('updatedUsers'));\n this.onEditedUsers.emit();\n } catch { }\n }\n}\n","
\n
\n
\n
\n

\n {{'userAccess' | i18n}}\n {{entityName}}\n

\n \n
\n
\n \n {{'loading' | i18n}}\n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n {{'noUsersInList' | i18n}}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
  {{'name' | i18n}} {{'userType' | i18n}}{{'hidePasswords' |\n i18n}}{{'readOnly' |\n i18n}}
\n \n \n \n \n {{u.email}}\n {{'invited'\n | i18n}}\n {{'accepted'\n | i18n}}\n {{u.name}}\n \n \n \n {{'userAccessAllItems' | i18n}}\n \n \n {{'owner' | i18n}}\n {{'admin' | i18n}}\n {{'manager' | i18n}}\n {{'user' | i18n}}\n {{'custom' | i18n}}\n \n \n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n","import {\n Component,\n Input,\n OnInit,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\nimport { EventService } from '../../services/event.service';\n\nimport { EventResponse } from 'jslib/models/response/eventResponse';\nimport { ListResponse } from 'jslib/models/response/listResponse';\n\n@Component({\n selector: 'app-entity-events',\n templateUrl: 'entity-events.component.html',\n})\nexport class EntityEventsComponent implements OnInit {\n @Input() name: string;\n @Input() entity: 'user' | 'cipher';\n @Input() entityId: string;\n @Input() organizationId: string;\n @Input() showUser = false;\n\n loading = true;\n loaded = false;\n events: any[];\n start: string;\n end: string;\n continuationToken: string;\n refreshPromise: Promise;\n morePromise: Promise;\n\n private orgUsersUserIdMap = new Map();\n private orgUsersIdMap = new Map();\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private eventService: EventService, private toasterService: ToasterService) { }\n\n async ngOnInit() {\n const defaultDates = this.eventService.getDefaultDateFilters();\n this.start = defaultDates[0];\n this.end = defaultDates[1];\n await this.load();\n }\n\n async load() {\n if (this.showUser) {\n const response = await this.apiService.getOrganizationUsers(this.organizationId);\n response.data.forEach(u => {\n const name = u.name == null || u.name.trim() === '' ? u.email : u.name;\n this.orgUsersIdMap.set(u.id, { name: name, email: u.email });\n this.orgUsersUserIdMap.set(u.userId, { name: name, email: u.email });\n });\n }\n await this.loadEvents(true);\n this.loaded = true;\n }\n\n async loadEvents(clearExisting: boolean) {\n if (this.refreshPromise != null || this.morePromise != null) {\n return;\n }\n\n let dates: string[] = null;\n try {\n dates = this.eventService.formatDateFilters(this.start, this.end);\n } catch (e) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('invalidDateRange'));\n return;\n }\n\n this.loading = true;\n let response: ListResponse;\n try {\n let promise: Promise;\n if (this.entity === 'user') {\n promise = this.apiService.getEventsOrganizationUser(this.organizationId, this.entityId,\n dates[0], dates[1], clearExisting ? null : this.continuationToken);\n } else {\n promise = this.apiService.getEventsCipher(this.entityId,\n dates[0], dates[1], clearExisting ? null : this.continuationToken);\n }\n if (clearExisting) {\n this.refreshPromise = promise;\n } else {\n this.morePromise = promise;\n }\n response = await promise;\n } catch { }\n\n this.continuationToken = response.continuationToken;\n const events = response.data.map(r => {\n const userId = r.actingUserId == null ? r.userId : r.actingUserId;\n const eventInfo = this.eventService.getEventInfo(r);\n const user = this.showUser && userId != null && this.orgUsersUserIdMap.has(userId) ?\n this.orgUsersUserIdMap.get(userId) : null;\n return {\n message: eventInfo.message,\n appIcon: eventInfo.appIcon,\n appName: eventInfo.appName,\n userId: userId,\n userName: user != null ? user.name : this.showUser ? this.i18nService.t('unknown') : null,\n userEmail: user != null ? user.email : this.showUser ? '' : null,\n date: r.date,\n ip: r.ipAddress,\n type: r.type,\n };\n });\n\n if (!clearExisting && this.events != null && this.events.length > 0) {\n this.events = this.events.concat(events);\n } else {\n this.events = events;\n }\n\n this.loading = false;\n this.morePromise = null;\n this.refreshPromise = null;\n }\n}\n","
\n
\n
\n
\n

\n {{'eventLogs' | i18n}}\n {{name}}\n

\n \n
\n
\n \n {{'loading' | i18n}}\n
\n
\n
\n
\n \n \n -\n \n \n
\n \n
\n
\n
\n {{'noEventsInList' | i18n}}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{'timestamp' | i18n}}\n {{'device' | i18n}}\n {{'user' | i18n}}{{'event' | i18n}}
{{e.date | date:'medium'}}\n \n {{e.appName}}, {{e.ip}}\n \n {{e.userName}}\n
\n \n
\n
\n \n
\n
\n
\n
\n","import { BaseResponse } from '../response/baseResponse';\n\nexport class PermissionsApi extends BaseResponse {\n accessBusinessPortal: boolean;\n accessEventLogs: boolean;\n accessImportExport: boolean;\n accessReports: boolean;\n manageAllCollections: boolean;\n manageAssignedCollections: boolean;\n manageCiphers: boolean;\n manageGroups: boolean;\n manageSso: boolean;\n managePolicies: boolean;\n manageUsers: boolean;\n manageResetPassword: boolean;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return this;\n }\n this.accessBusinessPortal = this.getResponseProperty('AccessBusinessPortal');\n this.accessEventLogs = this.getResponseProperty('AccessEventLogs');\n this.accessImportExport = this.getResponseProperty('AccessImportExport');\n this.accessReports = this.getResponseProperty('AccessReports');\n this.manageAllCollections = this.getResponseProperty('ManageAllCollections');\n this.manageAssignedCollections = this.getResponseProperty('ManageAssignedCollections');\n this.manageCiphers = this.getResponseProperty('ManageCiphers');\n this.manageGroups = this.getResponseProperty('ManageGroups');\n this.manageSso = this.getResponseProperty('ManageSso');\n this.managePolicies = this.getResponseProperty('ManagePolicies');\n this.manageUsers = this.getResponseProperty('ManageUsers');\n this.manageResetPassword = this.getResponseProperty('ManageResetPassword');\n }\n}\n","import { Component } from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\nimport { PasswordVerificationRequest } from 'jslib/models/request/passwordVerificationRequest';\n\nimport { ApiKeyResponse } from 'jslib/models/response/apiKeyResponse';\n\n@Component({\n selector: 'app-api-key',\n templateUrl: 'api-key.component.html',\n})\nexport class ApiKeyComponent {\n keyType: string;\n isRotation: boolean;\n postKey: (entityId: string, request: PasswordVerificationRequest) => Promise;\n entityId: string;\n scope: string;\n grantType: string;\n apiKeyTitle: string;\n apiKeyWarning: string;\n apiKeyDescription: string;\n\n masterPassword: string;\n formPromise: Promise;\n clientId: string;\n clientSecret: string;\n\n constructor(private i18nService: I18nService, private toasterService: ToasterService,\n private cryptoService: CryptoService) { }\n\n async submit() {\n if (this.masterPassword == null || this.masterPassword === '') {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassRequired'));\n return;\n }\n\n const request = new PasswordVerificationRequest();\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n try {\n this.formPromise = this.postKey(this.entityId, request);\n const response = await this.formPromise;\n this.clientSecret = response.apiKey;\n this.clientId = `${this.keyType}.${this.entityId}`;\n } catch { }\n }\n}\n","
\n
\n
\n
\n

{{apiKeyTitle | i18n}}

\n \n
\n
\n

{{apiKeyDescription | i18n}}

\n \n \n \n \n {{apiKeyWarning | i18n}}\n \n

\n client_id:
\n {{clientId}}\n

\n

\n client_secret:
\n {{clientSecret}}\n

\n

\n scope:
\n {{scope}}\n

\n

\n grant_type:
\n {{grantType}}\n

\n
\n
\n
\n \n \n
\n
\n
\n
\n","import {\n Component,\n Input,\n} from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\nimport { PasswordVerificationRequest } from 'jslib/models/request/passwordVerificationRequest';\n\n@Component({\n selector: 'app-purge-vault',\n templateUrl: 'purge-vault.component.html',\n})\nexport class PurgeVaultComponent {\n @Input() organizationId?: string = null;\n\n masterPassword: string;\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private cryptoService: CryptoService,\n private router: Router) { }\n\n async submit() {\n if (this.masterPassword == null || this.masterPassword === '') {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassRequired'));\n return;\n }\n\n const request = new PasswordVerificationRequest();\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n try {\n this.formPromise = this.apiService.postPurgeCiphers(request, this.organizationId);\n await this.formPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('vaultPurged'));\n if (this.organizationId != null) {\n this.router.navigate(['organizations', this.organizationId, 'vault']);\n } else {\n this.router.navigate(['vault']);\n }\n } catch { }\n }\n}\n","
\n
\n
\n
\n

{{'purgeVault' | i18n}}

\n \n
\n
\n

{{(organizationId ? 'purgeOrgVaultDesc' : 'purgeVaultDesc') | i18n}}

\n {{'purgeVaultWarning' | i18n}}\n \n \n
\n
\n \n \n
\n
\n
\n
\n","import {\n Component,\n OnInit,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { BillingResponse } from 'jslib/models/response/billingResponse';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\nimport { PaymentMethodType } from 'jslib/enums/paymentMethodType';\nimport { TransactionType } from 'jslib/enums/transactionType';\nimport { VerifyBankRequest } from 'jslib/models/request/verifyBankRequest';\n\n@Component({\n selector: 'app-user-billing',\n templateUrl: 'user-billing.component.html',\n})\nexport class UserBillingComponent implements OnInit {\n loading = false;\n firstLoaded = false;\n showAdjustPayment = false;\n showAddCredit = false;\n billing: BillingResponse;\n paymentMethodType = PaymentMethodType;\n transactionType = TransactionType;\n organizationId: string;\n verifyAmount1: number;\n verifyAmount2: number;\n\n verifyBankPromise: Promise;\n\n constructor(protected apiService: ApiService, protected i18nService: I18nService,\n protected toasterService: ToasterService, protected platformUtilsService: PlatformUtilsService) { }\n\n async ngOnInit() {\n await this.load();\n this.firstLoaded = true;\n }\n\n async load() {\n if (this.loading) {\n return;\n }\n this.loading = true;\n if (this.organizationId != null) {\n this.billing = await this.apiService.getOrganizationBilling(this.organizationId);\n } else {\n this.billing = await this.apiService.getUserBilling();\n }\n this.loading = false;\n }\n\n async verifyBank() {\n if (this.loading) {\n return;\n }\n\n try {\n const request = new VerifyBankRequest();\n request.amount1 = this.verifyAmount1;\n request.amount2 = this.verifyAmount2;\n this.verifyBankPromise = this.apiService.postOrganizationVerifyBank(this.organizationId, request);\n await this.verifyBankPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('verifiedBankAccount'));\n this.load();\n } catch { }\n }\n\n addCredit() {\n if (this.paymentSourceInApp) {\n this.platformUtilsService.showDialog(this.i18nService.t('cannotPerformInAppPurchase'),\n this.i18nService.t('addCredit'), null, null, 'warning');\n return;\n }\n this.showAddCredit = true;\n }\n\n closeAddCredit(load: boolean) {\n this.showAddCredit = false;\n if (load) {\n this.load();\n }\n }\n\n changePayment() {\n if (this.paymentSourceInApp) {\n this.platformUtilsService.showDialog(this.i18nService.t('cannotPerformInAppPurchase'),\n this.i18nService.t('changePaymentMethod'), null, null, 'warning');\n return;\n }\n this.showAdjustPayment = true;\n }\n\n closePayment(load: boolean) {\n this.showAdjustPayment = false;\n if (load) {\n this.load();\n }\n }\n\n get isCreditBalance() {\n return this.billing == null || this.billing.balance <= 0;\n }\n\n get creditOrBalance() {\n return Math.abs(this.billing != null ? this.billing.balance : 0);\n }\n\n get paymentSource() {\n return this.billing != null ? this.billing.paymentSource : null;\n }\n\n get paymentSourceInApp() {\n return this.paymentSource != null &&\n (this.paymentSource.type === PaymentMethodType.AppleInApp ||\n this.paymentSource.type === PaymentMethodType.GoogleInApp);\n }\n\n get invoices() {\n return this.billing != null ? this.billing.invoices : null;\n }\n\n get transactions() {\n return this.billing != null ? this.billing.transactions : null;\n }\n}\n","
\n

\n {{'billing' | i18n}}\n

\n \n
\n\n \n {{'loading' | i18n}}\n\n\n

{{(isCreditBalance ? 'accountCredit' : 'accountBalance') | i18n}}

\n

{{creditOrBalance | currency:'$'}}

\n

{{'creditAppliedDesc' | i18n}}

\n \n \n \n

{{'paymentMethod' | i18n}}

\n

{{'noPaymentMethod' | i18n}}

\n \n \n

{{'verifyBankAccountDesc' | i18n}} {{'verifyBankAccountFailureWarning' | i18n}}

\n
\n \n
\n
\n
$0.
\n
\n \n
\n \n
\n
\n
$0.
\n
\n \n
\n \n
\n
\n

\n \n {{'inAppPurchase' | i18n}}\n {{paymentSource.description}}\n

\n
\n \n \n \n

{{'invoices' | i18n}}

\n

{{'noInvoices' | i18n}}

\n \n \n \n \n \n \n \n \n \n
{{i.date | date:'mediumDate'}}\n \n \n \n {{'invoiceNumber' | i18n : i.number}}\n {{i.amount | currency:'$'}}\n \n \n {{'paid' | i18n}}\n \n \n \n {{'unpaid' | i18n}}\n \n
\n

{{'transactions' | i18n}}

\n

{{'noTransactions' | i18n}}

\n \n \n \n \n \n \n \n \n \n
{{t.createdDate | date:'mediumDate'}}\n \n {{'chargeNoun' | i18n}}\n \n {{'refundNoun' | i18n}}\n \n \n {{t.details}}\n \n {{t.amount | currency:'$'}}
\n * {{'chargesStatement' | i18n : 'BITWARDEN'}}\n
\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { PaymentMethodType } from 'jslib/enums/paymentMethodType';\n\nimport { BitPayInvoiceRequest } from 'jslib/models/request/bitPayInvoiceRequest';\n\nimport { WebConstants } from '../../services/webConstants';\n\n@Component({\n selector: 'app-add-credit',\n templateUrl: 'add-credit.component.html',\n})\nexport class AddCreditComponent implements OnInit {\n @Input() creditAmount: string;\n @Input() showOptions = true;\n @Input() method = PaymentMethodType.PayPal;\n @Input() organizationId: string;\n @Output() onAdded = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n @ViewChild('ppButtonForm', { read: ElementRef, static: true }) ppButtonFormRef: ElementRef;\n\n paymentMethodType = PaymentMethodType;\n ppButtonFormAction = WebConstants.paypal.buttonActionProduction;\n ppButtonBusinessId = WebConstants.paypal.businessIdProduction;\n ppButtonCustomField: string;\n ppLoading = false;\n subject: string;\n returnUrl: string;\n formPromise: Promise;\n\n private userId: string;\n private name: string;\n private email: string;\n\n constructor(private userService: UserService, private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService) {\n if (platformUtilsService.isDev()) {\n this.ppButtonFormAction = WebConstants.paypal.buttonActionSandbox;\n this.ppButtonBusinessId = WebConstants.paypal.businessIdSandbox;\n }\n }\n\n async ngOnInit() {\n if (this.organizationId != null) {\n if (this.creditAmount == null) {\n this.creditAmount = '20.00';\n }\n this.ppButtonCustomField = 'organization_id:' + this.organizationId;\n const org = await this.userService.getOrganization(this.organizationId);\n if (org != null) {\n this.subject = org.name;\n this.name = org.name;\n }\n } else {\n if (this.creditAmount == null) {\n this.creditAmount = '10.00';\n }\n this.userId = await this.userService.getUserId();\n this.subject = await this.userService.getEmail();\n this.email = this.subject;\n this.ppButtonCustomField = 'user_id:' + this.userId;\n }\n this.ppButtonCustomField += ',account_credit:1';\n this.returnUrl = window.location.href;\n }\n\n async submit() {\n if (this.creditAmount == null || this.creditAmount === '') {\n return;\n }\n\n if (this.method === PaymentMethodType.PayPal) {\n this.ppButtonFormRef.nativeElement.submit();\n this.ppLoading = true;\n return;\n }\n if (this.method === PaymentMethodType.BitPay) {\n try {\n const req = new BitPayInvoiceRequest();\n req.email = this.email;\n req.name = this.name;\n req.credit = true;\n req.amount = this.creditAmountNumber;\n req.organizationId = this.organizationId;\n req.userId = this.userId;\n req.returnUrl = this.returnUrl;\n this.formPromise = this.apiService.postBitPayInvoice(req);\n const bitPayUrl: string = await this.formPromise;\n this.platformUtilsService.launchUri(bitPayUrl);\n } catch { }\n return;\n }\n try {\n this.onAdded.emit();\n } catch { }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n\n formatAmount() {\n try {\n if (this.creditAmount != null && this.creditAmount !== '') {\n const floatAmount = Math.abs(parseFloat(this.creditAmount));\n if (floatAmount > 0) {\n this.creditAmount = parseFloat((Math.round(floatAmount * 100) / 100).toString())\n .toFixed(2).toString();\n return;\n }\n }\n } catch { }\n this.creditAmount = '';\n }\n\n get creditAmountNumber(): number {\n if (this.creditAmount != null && this.creditAmount !== '') {\n try {\n return parseFloat(this.creditAmount);\n } catch { }\n }\n return null;\n }\n}\n","
\n
\n \n

{{'addCredit' | i18n}}

\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n
\n \n
\n
$USD
\n \n
\n
\n
\n {{'creditDelayed' | i18n}}\n
\n \n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\nimport { PaymentRequest } from 'jslib/models/request/paymentRequest';\n\nimport { PaymentMethodType } from 'jslib/enums/paymentMethodType';\n\nimport { PaymentComponent } from './payment.component';\nimport { TaxInfoComponent } from './tax-info.component';\n\n@Component({\n selector: 'app-adjust-payment',\n templateUrl: 'adjust-payment.component.html',\n})\nexport class AdjustPaymentComponent {\n @ViewChild(PaymentComponent, { static: true }) paymentComponent: PaymentComponent;\n @ViewChild(TaxInfoComponent, { static: true }) taxInfoComponent: TaxInfoComponent;\n\n @Input() currentType?: PaymentMethodType;\n @Input() organizationId: string;\n @Output() onAdjusted = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n paymentMethodType = PaymentMethodType;\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService) { }\n\n async submit() {\n try {\n const request = new PaymentRequest();\n this.formPromise = this.paymentComponent.createPaymentToken().then(result => {\n request.paymentToken = result[0];\n request.paymentMethodType = result[1];\n request.postalCode = this.taxInfoComponent.taxInfo.postalCode;\n request.country = this.taxInfoComponent.taxInfo.country;\n if (this.organizationId == null) {\n return this.apiService.postAccountPayment(request);\n } else {\n request.taxId = this.taxInfoComponent.taxInfo.taxId;\n request.state = this.taxInfoComponent.taxInfo.state;\n request.line1 = this.taxInfoComponent.taxInfo.line1;\n request.line2 = this.taxInfoComponent.taxInfo.line2;\n request.city = this.taxInfoComponent.taxInfo.city;\n request.state = this.taxInfoComponent.taxInfo.state;\n return this.apiService.postOrganizationPayment(this.organizationId, request);\n }\n });\n await this.formPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('updatedPaymentMethod'));\n this.onAdjusted.emit();\n } catch { }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n\n changeCountry() {\n if (this.taxInfoComponent.taxInfo.country === 'US') {\n this.paymentComponent.hideBank = !this.organizationId;\n } else {\n this.paymentComponent.hideBank = true;\n if (this.paymentComponent.method === PaymentMethodType.BankAccount) {\n this.paymentComponent.method = PaymentMethodType.Card;\n this.paymentComponent.changeMethod();\n }\n }\n }\n}\n","
\n
\n \n

{{(currentType != null ? 'changePaymentMethod' : 'addPaymentMethod') | i18n}}

\n \n \n \n \n
\n
\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\n@Component({\n selector: 'app-update-license',\n templateUrl: 'update-license.component.html',\n})\nexport class UpdateLicenseComponent {\n @Input() organizationId: string;\n @Output() onUpdated = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService) { }\n\n async submit() {\n const fileEl = document.getElementById('file') as HTMLInputElement;\n const files = fileEl.files;\n if (files == null || files.length === 0) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('selectFile'));\n return;\n }\n\n try {\n const fd = new FormData();\n fd.append('license', files[0]);\n\n let updatePromise: Promise = null;\n if (this.organizationId == null) {\n updatePromise = this.apiService.postAccountLicense(fd);\n } else {\n updatePromise = this.apiService.postOrganizationLicenseUpdate(this.organizationId, fd);\n }\n\n this.formPromise = updatePromise.then(() => {\n return this.apiService.refreshIdentityToken();\n });\n\n await this.formPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('updatedLicense'));\n this.onUpdated.emit();\n } catch { }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n}\n","
\n
\n \n \n {{'licenseFileDesc' | i18n : (!organizationId ? 'bitwarden_premium_license.json' : 'bitwarden_organization_license.json')}}\n
\n \n \n
\n","export enum ProductType {\n Free = 0,\n Families = 1,\n Teams = 2,\n Enterprise = 3,\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\n\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\nimport { StorageRequest } from 'jslib/models/request/storageRequest';\n\nimport { PaymentResponse } from 'jslib/models/response/paymentResponse';\n\nimport { PaymentComponent } from './payment.component';\n\n@Component({\n selector: 'app-adjust-storage',\n templateUrl: 'adjust-storage.component.html',\n})\nexport class AdjustStorageComponent {\n @Input() storageGbPrice = 0;\n @Input() add = true;\n @Input() organizationId: string;\n @Input() interval = 'year';\n @Output() onAdjusted = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n @ViewChild(PaymentComponent, { static: true }) paymentComponent: PaymentComponent;\n\n storageAdjustment = 0;\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private router: Router,\n private activatedRoute: ActivatedRoute) { }\n\n async submit() {\n try {\n const request = new StorageRequest();\n request.storageGbAdjustment = this.storageAdjustment;\n if (!this.add) {\n request.storageGbAdjustment *= -1;\n }\n\n let paymentFailed = false;\n const action = async () => {\n let response: Promise;\n if (this.organizationId == null) {\n response = this.formPromise = this.apiService.postAccountStorage(request);\n } else {\n response = this.formPromise = this.apiService.postOrganizationStorage(this.organizationId, request);\n }\n const result = await response;\n if (result != null && result.paymentIntentClientSecret != null) {\n try {\n await this.paymentComponent.handleStripeCardPayment(result.paymentIntentClientSecret, null);\n } catch {\n paymentFailed = true;\n }\n }\n };\n this.formPromise = action();\n await this.formPromise;\n this.onAdjusted.emit(this.storageAdjustment);\n if (paymentFailed) {\n this.toasterService.popAsync({\n body: this.i18nService.t('couldNotChargeCardPayInvoice'),\n type: 'warning',\n timeout: 10000,\n });\n this.router.navigate(['../billing'], { relativeTo: this.activatedRoute });\n } else {\n this.toasterService.popAsync('success', null,\n this.i18nService.t('adjustedStorage', request.storageGbAdjustment.toString()));\n }\n } catch { }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n\n get adjustedStorageTotal(): number {\n return this.storageGbPrice * this.storageAdjustment;\n }\n}\n","
\n
\n \n

{{(add ? 'addStorage' : 'removeStorage') | i18n}}

\n
\n
\n \n \n
\n
\n
\n {{'total' | i18n}}: {{storageAdjustment || 0}} GB × {{storageGbPrice | currency:'$'}}\n = {{adjustedStorageTotal\n | currency:'$'}} /{{interval | i18n}}\n
\n \n \n \n {{(add ? 'storageAddNote' : 'storageRemoveNote') | i18n}}\n \n
\n
\n\n","import { Component } from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\nimport { TwoFactorProviderType } from 'jslib/enums/twoFactorProviderType';\nimport { UpdateTwoFactorDuoRequest } from 'jslib/models/request/updateTwoFactorDuoRequest';\nimport { TwoFactorDuoResponse } from 'jslib/models/response/twoFactorDuoResponse';\n\nimport { TwoFactorBaseComponent } from './two-factor-base.component';\n\n@Component({\n selector: 'app-two-factor-duo',\n templateUrl: 'two-factor-duo.component.html',\n})\nexport class TwoFactorDuoComponent extends TwoFactorBaseComponent {\n type = TwoFactorProviderType.Duo;\n ikey: string;\n skey: string;\n host: string;\n formPromise: Promise;\n\n constructor(apiService: ApiService, i18nService: I18nService,\n toasterService: ToasterService, platformUtilsService: PlatformUtilsService) {\n super(apiService, i18nService, toasterService, platformUtilsService);\n }\n\n auth(authResponse: any) {\n super.auth(authResponse);\n this.processResponse(authResponse.response);\n }\n\n submit() {\n if (this.enabled) {\n return super.disable(this.formPromise);\n } else {\n return this.enable();\n }\n }\n\n protected enable() {\n const request = new UpdateTwoFactorDuoRequest();\n request.masterPasswordHash = this.masterPasswordHash;\n request.integrationKey = this.ikey;\n request.secretKey = this.skey;\n request.host = this.host;\n\n return super.enable(async () => {\n if (this.organizationId != null) {\n this.formPromise = this.apiService.putTwoFactorOrganizationDuo(this.organizationId, request);\n } else {\n this.formPromise = this.apiService.putTwoFactorDuo(request);\n }\n const response = await this.formPromise;\n await this.processResponse(response);\n });\n }\n\n private processResponse(response: TwoFactorDuoResponse) {\n this.ikey = response.integrationKey;\n this.skey = response.secretKey;\n this.host = response.host;\n this.enabled = response.enabled;\n }\n}\n","
\n
\n
\n
\n

\n {{'twoStepLogin' | i18n}}\n Duo\n

\n \n
\n \n \n
\n
\n \n \n {{'twoStepLoginProviderEnabled' | i18n}}\n \n \"\"\n {{'twoFactorDuoIntegrationKey' | i18n}}: {{ikey}}\n
\n {{'twoFactorDuoSecretKey' | i18n}}: {{skey}}\n
\n {{'twoFactorDuoApiHostname' | i18n}}: {{host}}\n
\n \n \"\"\n

{{'twoFactorDuoDesc' | i18n}}

\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n","import {\n Component,\n ComponentFactoryResolver,\n OnInit,\n Type,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { PolicyService } from 'jslib/abstractions/policy.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { TwoFactorProviders } from 'jslib/services/auth.service';\n\nimport { PolicyType } from 'jslib/enums/policyType';\nimport { TwoFactorProviderType } from 'jslib/enums/twoFactorProviderType';\n\nimport { ModalComponent } from '../modal.component';\n\nimport { TwoFactorAuthenticatorComponent } from './two-factor-authenticator.component';\nimport { TwoFactorDuoComponent } from './two-factor-duo.component';\nimport { TwoFactorEmailComponent } from './two-factor-email.component';\nimport { TwoFactorRecoveryComponent } from './two-factor-recovery.component';\nimport { TwoFactorWebAuthnComponent } from './two-factor-webauthn.component';\nimport { TwoFactorYubiKeyComponent } from './two-factor-yubikey.component';\n\n@Component({\n selector: 'app-two-factor-setup',\n templateUrl: 'two-factor-setup.component.html',\n})\nexport class TwoFactorSetupComponent implements OnInit {\n @ViewChild('recoveryTemplate', { read: ViewContainerRef, static: true }) recoveryModalRef: ViewContainerRef;\n @ViewChild('authenticatorTemplate', { read: ViewContainerRef, static: true }) authenticatorModalRef: ViewContainerRef;\n @ViewChild('yubikeyTemplate', { read: ViewContainerRef, static: true }) yubikeyModalRef: ViewContainerRef;\n @ViewChild('duoTemplate', { read: ViewContainerRef, static: true }) duoModalRef: ViewContainerRef;\n @ViewChild('emailTemplate', { read: ViewContainerRef, static: true }) emailModalRef: ViewContainerRef;\n @ViewChild('webAuthnTemplate', { read: ViewContainerRef, static: true }) webAuthnModalRef: ViewContainerRef;\n\n organizationId: string;\n providers: any[] = [];\n canAccessPremium: boolean;\n showPolicyWarning = false;\n loading = true;\n\n private modal: ModalComponent = null;\n\n constructor(protected apiService: ApiService, protected userService: UserService,\n protected componentFactoryResolver: ComponentFactoryResolver, protected messagingService: MessagingService,\n protected policyService: PolicyService) { }\n\n async ngOnInit() {\n this.canAccessPremium = await this.userService.canAccessPremium();\n\n for (const key in TwoFactorProviders) {\n if (!TwoFactorProviders.hasOwnProperty(key)) {\n continue;\n }\n\n const p = (TwoFactorProviders as any)[key];\n if (this.filterProvider(p.type)) {\n continue;\n }\n\n this.providers.push({\n type: p.type,\n name: p.name,\n description: p.description,\n enabled: false,\n premium: p.premium,\n sort: p.sort,\n });\n }\n\n this.providers.sort((a: any, b: any) => a.sort - b.sort);\n await this.load();\n }\n\n async load() {\n this.loading = true;\n const providerList = await this.getTwoFactorProviders();\n providerList.data.forEach(p => {\n this.providers.forEach(p2 => {\n if (p.type === p2.type) {\n p2.enabled = p.enabled;\n }\n });\n });\n this.evaluatePolicies();\n this.loading = false;\n }\n\n manage(type: TwoFactorProviderType) {\n switch (type) {\n case TwoFactorProviderType.Authenticator:\n const authComp = this.openModal(this.authenticatorModalRef, TwoFactorAuthenticatorComponent);\n authComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.Authenticator);\n });\n break;\n case TwoFactorProviderType.Yubikey:\n const yubiComp = this.openModal(this.yubikeyModalRef, TwoFactorYubiKeyComponent);\n yubiComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.Yubikey);\n });\n break;\n case TwoFactorProviderType.Duo:\n const duoComp = this.openModal(this.duoModalRef, TwoFactorDuoComponent);\n duoComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.Duo);\n });\n break;\n case TwoFactorProviderType.Email:\n const emailComp = this.openModal(this.emailModalRef, TwoFactorEmailComponent);\n emailComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.Email);\n });\n break;\n case TwoFactorProviderType.WebAuthn:\n const webAuthnComp = this.openModal(this.webAuthnModalRef, TwoFactorWebAuthnComponent);\n webAuthnComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.WebAuthn);\n });\n break;\n default:\n break;\n }\n }\n\n recoveryCode() {\n this.openModal(this.recoveryModalRef, TwoFactorRecoveryComponent);\n }\n\n async premiumRequired() {\n if (!this.canAccessPremium) {\n this.messagingService.send('premiumRequired');\n return;\n }\n }\n\n protected getTwoFactorProviders() {\n return this.apiService.getTwoFactorProviders();\n }\n\n protected filterProvider(type: TwoFactorProviderType) {\n return type === TwoFactorProviderType.OrganizationDuo;\n }\n\n protected openModal(ref: ViewContainerRef, type: Type): T {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = ref.createComponent(factory).instance;\n const childComponent = this.modal.show(type, ref);\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n return childComponent;\n }\n\n protected updateStatus(enabled: boolean, type: TwoFactorProviderType) {\n if (!enabled && this.modal != null) {\n this.modal.close();\n }\n this.providers.forEach(p => {\n if (p.type === type) {\n p.enabled = enabled;\n }\n });\n this.evaluatePolicies();\n }\n\n private async evaluatePolicies() {\n if (this.organizationId == null && this.providers.filter(p => p.enabled).length === 1) {\n const policies = await this.policyService.getAll(PolicyType.TwoFactorAuthentication);\n this.showPolicyWarning = policies != null && policies.some(p => p.enabled);\n } else {\n this.showPolicyWarning = false;\n }\n }\n}\n","
\n

{{'twoStepLogin' | i18n}}

\n
\n

{{'twoStepLoginDesc' | i18n}}

\n

{{'twoStepLoginOrganizationDesc' | i18n}}

\n\n

{{'twoStepLoginRecoveryWarning' | i18n}}

\n \n
\n

\n {{'providers' | i18n}}\n \n \n {{'loading' | i18n}}\n \n

\n\n {{'twoStepLoginPolicyUserWarning' | i18n}}\n\n
    \n
  • \n
    \n \"\"\n
    \n
    \n

    \n {{p.name}}\n \n \n {{'enabled' | i18n}}\n \n \n {{'premium' | i18n}}\n \n

    \n {{p.description}}\n
    \n
    \n \n
    \n
  • \n
\n\n\n\n\n\n\n\n","import { Component } from '@angular/core';\n\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { EventService } from 'jslib/abstractions/event.service';\nimport { ExportService } from 'jslib/abstractions/export.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\nimport { ExportComponent as BaseExportComponent } from 'jslib/angular/components/export.component';\n\n@Component({\n selector: 'app-export',\n templateUrl: 'export.component.html',\n})\nexport class ExportComponent extends BaseExportComponent {\n organizationId: string;\n\n constructor(cryptoService: CryptoService, i18nService: I18nService,\n platformUtilsService: PlatformUtilsService, exportService: ExportService,\n eventService: EventService) {\n super(cryptoService, i18nService, platformUtilsService, exportService, eventService, window);\n }\n\n protected saved() {\n super.saved();\n this.masterPassword = null;\n this.platformUtilsService.showToast('success', null, this.i18nService.t('exportSuccess'));\n }\n}\n","
\n
\n

{{'exportVault' | i18n}}

\n
\n

{{'exportMasterPassword' | i18n}}

\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n
\n","import {\n Component,\n ComponentFactoryResolver,\n OnInit,\n} from '@angular/core';\n\nimport { AuditService } from 'jslib/abstractions/audit.service';\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { CipherView } from 'jslib/models/view/cipherView';\n\nimport { CipherType } from 'jslib/enums/cipherType';\n\nimport { CipherReportComponent } from './cipher-report.component';\n\n@Component({\n selector: 'app-exposed-passwords-report',\n templateUrl: 'exposed-passwords-report.component.html',\n})\nexport class ExposedPasswordsReportComponent extends CipherReportComponent implements OnInit {\n exposedPasswordMap = new Map();\n\n constructor(protected cipherService: CipherService, protected auditService: AuditService,\n componentFactoryResolver: ComponentFactoryResolver, messagingService: MessagingService,\n userService: UserService) {\n super(componentFactoryResolver, userService, messagingService, true);\n }\n\n ngOnInit() {\n this.checkAccess();\n }\n\n async load() {\n if (await this.checkAccess()) {\n super.load();\n }\n }\n\n async setCiphers() {\n const allCiphers = await this.getAllCiphers();\n const exposedPasswordCiphers: CipherView[] = [];\n const promises: Promise[] = [];\n allCiphers.forEach(c => {\n if (c.type !== CipherType.Login || c.login.password == null || c.login.password === '' || c.isDeleted) {\n return;\n }\n const promise = this.auditService.passwordLeaked(c.login.password).then(exposedCount => {\n if (exposedCount > 0) {\n exposedPasswordCiphers.push(c);\n this.exposedPasswordMap.set(c.id, exposedCount);\n }\n });\n promises.push(promise);\n });\n await Promise.all(promises);\n this.ciphers = exposedPasswordCiphers;\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n protected canManageCipher(c: CipherView): boolean {\n // this will only ever be false from the org view;\n return true;\n }\n}\n","
\n

{{'exposedPasswordsReport' | i18n}}

\n
\n

{{'exposedPasswordsReportDesc' | i18n}}

\n\n
\n \n {{'noExposedPasswords' | i18n}}\n \n \n \n {{'exposedPasswordsFoundDesc' | i18n : (ciphers.length | number)}}\n \n \n \n \n \n \n \n \n \n
\n \n \n \n {{c.name}}\n \n \n {{c.name}}\n \n \n \n {{'shared' | i18n}}\n \n \n \n {{'attachments' | i18n}}\n \n
\n {{c.subTitle}}\n
\n \n {{'exposedXTimes' | i18n : (exposedPasswordMap.get(c.id) | number)}}\n \n
\n
\n
\n\n","import { Component } from '@angular/core';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { AuditService } from 'jslib/abstractions/audit.service';\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { CollectionService } from 'jslib/abstractions/collection.service';\nimport { EventService } from 'jslib/abstractions/event.service';\nimport { FolderService } from 'jslib/abstractions/folder.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib/abstractions/policy.service';\nimport { StateService } from 'jslib/abstractions/state.service';\nimport { TotpService } from 'jslib/abstractions/totp.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { CipherData } from 'jslib/models/data/cipherData';\nimport { Cipher } from 'jslib/models/domain/cipher';\nimport { Organization } from 'jslib/models/domain/organization';\nimport { CipherCreateRequest } from 'jslib/models/request/cipherCreateRequest';\nimport { CipherRequest } from 'jslib/models/request/cipherRequest';\n\nimport { AddEditComponent as BaseAddEditComponent } from '../../vault/add-edit.component';\n\n@Component({\n selector: 'app-org-vault-add-edit',\n templateUrl: '../../vault/add-edit.component.html',\n})\nexport class AddEditComponent extends BaseAddEditComponent {\n organization: Organization;\n originalCipher: Cipher = null;\n\n constructor(cipherService: CipherService, folderService: FolderService,\n i18nService: I18nService, platformUtilsService: PlatformUtilsService,\n auditService: AuditService, stateService: StateService,\n userService: UserService, collectionService: CollectionService,\n totpService: TotpService, passwordGenerationService: PasswordGenerationService,\n private apiService: ApiService, messagingService: MessagingService,\n eventService: EventService, policyService: PolicyService) {\n super(cipherService, folderService, i18nService, platformUtilsService, auditService, stateService,\n userService, collectionService, totpService, passwordGenerationService, messagingService,\n eventService, policyService);\n }\n\n protected allowOwnershipAssignment() {\n if (this.ownershipOptions != null && (this.ownershipOptions.length > 1 || !this.allowPersonal)) {\n if (this.organization != null) {\n return this.cloneMode && this.organization.canManageAllCollections;\n } else {\n return !this.editMode || this.cloneMode;\n }\n }\n return false;\n }\n\n protected loadCollections() {\n if (!this.organization.canManageAllCollections) {\n return super.loadCollections();\n }\n return Promise.resolve(this.collections);\n }\n\n protected async loadCipher() {\n if (!this.organization.canManageAllCollections) {\n return await super.loadCipher();\n }\n const response = await this.apiService.getCipherAdmin(this.cipherId);\n const data = new CipherData(response);\n this.originalCipher = new Cipher(data);\n return new Cipher(data);\n }\n\n protected encryptCipher() {\n if (!this.organization.canManageAllCollections) {\n return super.encryptCipher();\n }\n return this.cipherService.encrypt(this.cipher, null, this.originalCipher);\n }\n\n protected async saveCipher(cipher: Cipher) {\n if (!this.organization.canManageAllCollections || cipher.organizationId == null) {\n return super.saveCipher(cipher);\n }\n if (this.editMode && !this.cloneMode) {\n const request = new CipherRequest(cipher);\n return this.apiService.putCipherAdmin(this.cipherId, request);\n } else {\n const request = new CipherCreateRequest(cipher);\n return this.apiService.postCipherAdmin(request);\n }\n }\n\n protected async deleteCipher() {\n if (!this.organization.canManageAllCollections) {\n return super.deleteCipher();\n }\n return this.cipher.isDeleted ? this.apiService.deleteCipherAdmin(this.cipherId)\n : this.apiService.putDeleteCipherAdmin(this.cipherId);\n }\n}\n","import { AttachmentResponse } from '../response/attachmentResponse';\n\nexport class AttachmentData {\n id: string;\n url: string;\n fileName: string;\n key: string;\n size: string;\n sizeName: string;\n\n constructor(response?: AttachmentResponse) {\n if (response == null) {\n return;\n }\n this.id = response.id;\n this.url = response.url;\n this.fileName = response.fileName;\n this.key = response.key;\n this.size = response.size;\n this.sizeName = response.sizeName;\n }\n}\n","import { CardApi } from '../api/cardApi';\n\nexport class CardData {\n cardholderName: string;\n brand: string;\n number: string;\n expMonth: string;\n expYear: string;\n code: string;\n\n constructor(data?: CardApi) {\n if (data == null) {\n return;\n }\n\n this.cardholderName = data.cardholderName;\n this.brand = data.brand;\n this.number = data.number;\n this.expMonth = data.expMonth;\n this.expYear = data.expYear;\n this.code = data.code;\n }\n}\n","import { FieldType } from '../../enums/fieldType';\n\nimport { FieldApi } from '../api/fieldApi';\n\nexport class FieldData {\n type: FieldType;\n name: string;\n value: string;\n\n constructor(response?: FieldApi) {\n if (response == null) {\n return;\n }\n this.type = response.type;\n this.name = response.name;\n this.value = response.value;\n }\n}\n","import { IdentityApi } from '../api/identityApi';\n\nexport class IdentityData {\n title: string;\n firstName: string;\n middleName: string;\n lastName: string;\n address1: string;\n address2: string;\n address3: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n company: string;\n email: string;\n phone: string;\n ssn: string;\n username: string;\n passportNumber: string;\n licenseNumber: string;\n\n constructor(data?: IdentityApi) {\n if (data == null) {\n return;\n }\n\n this.title = data.title;\n this.firstName = data.firstName;\n this.middleName = data.middleName;\n this.lastName = data.lastName;\n this.address1 = data.address1;\n this.address2 = data.address2;\n this.address3 = data.address3;\n this.city = data.city;\n this.state = data.state;\n this.postalCode = data.postalCode;\n this.country = data.country;\n this.company = data.company;\n this.email = data.email;\n this.phone = data.phone;\n this.ssn = data.ssn;\n this.username = data.username;\n this.passportNumber = data.passportNumber;\n this.licenseNumber = data.licenseNumber;\n }\n}\n","import { LoginApi } from '../api/loginApi';\n\nimport { LoginUriData } from './loginUriData';\n\nexport class LoginData {\n uris: LoginUriData[];\n username: string;\n password: string;\n passwordRevisionDate: string;\n totp: string;\n\n constructor(data?: LoginApi) {\n if (data == null) {\n return;\n }\n\n this.username = data.username;\n this.password = data.password;\n this.passwordRevisionDate = data.passwordRevisionDate;\n this.totp = data.totp;\n\n if (data.uris) {\n this.uris = data.uris.map(u => new LoginUriData(u));\n }\n }\n}\n","import { UriMatchType } from '../../enums/uriMatchType';\n\nimport { LoginUriApi } from '../api/loginUriApi';\n\nexport class LoginUriData {\n uri: string;\n match: UriMatchType = null;\n\n constructor(data?: LoginUriApi) {\n if (data == null) {\n return;\n }\n this.uri = data.uri;\n this.match = data.match;\n }\n}\n","import { SecureNoteType } from '../../enums/secureNoteType';\n\nimport { SecureNoteApi } from '../api/secureNoteApi';\n\nexport class SecureNoteData {\n type: SecureNoteType;\n\n constructor(data?: SecureNoteApi) {\n if (data == null) {\n return;\n }\n\n this.type = data.type;\n }\n}\n","import { AttachmentData } from '../data/attachmentData';\n\nimport { AttachmentView } from '../view/attachmentView';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nimport { CryptoService } from '../../abstractions/crypto.service';\n\nimport { Utils } from '../../misc/utils';\n\nexport class Attachment extends Domain {\n id: string;\n url: string;\n size: string;\n sizeName: string;\n key: EncString;\n fileName: EncString;\n\n constructor(obj?: AttachmentData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.size = obj.size;\n this.buildDomainModel(this, obj, {\n id: null,\n url: null,\n sizeName: null,\n fileName: null,\n key: null,\n }, alreadyEncrypted, ['id', 'url', 'sizeName']);\n }\n\n async decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n const view = await this.decryptObj(new AttachmentView(this), {\n fileName: null,\n }, orgId, encKey);\n\n if (this.key != null) {\n let cryptoService: CryptoService;\n const containerService = (Utils.global as any).bitwardenContainerService;\n if (containerService) {\n cryptoService = containerService.getCryptoService();\n } else {\n throw new Error('global bitwardenContainerService not initialized.');\n }\n\n try {\n const orgKey = await cryptoService.getOrgKey(orgId);\n const decValue = await cryptoService.decryptToBytes(this.key, orgKey ?? encKey);\n view.key = new SymmetricCryptoKey(decValue);\n } catch (e) {\n // TODO: error?\n }\n }\n\n return view;\n }\n\n toAttachmentData(): AttachmentData {\n const a = new AttachmentData();\n a.size = this.size;\n this.buildDataModel(this, a, {\n id: null,\n url: null,\n sizeName: null,\n fileName: null,\n key: null,\n }, ['id', 'url', 'sizeName']);\n return a;\n }\n}\n","import { View } from './view';\n\nimport { Password } from '../domain/password';\n\nexport class PasswordHistoryView implements View {\n password: string = null;\n lastUsedDate: Date = null;\n\n constructor(ph?: Password) {\n if (!ph) {\n return;\n }\n\n this.lastUsedDate = ph.lastUsedDate;\n }\n}\n","import {\n Component,\n OnInit,\n} from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { ImportOption, ImportService } from 'jslib/abstractions/import.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\nimport Swal, { SweetAlertIcon } from 'sweetalert2/dist/sweetalert2.js';\n\n@Component({\n selector: 'app-import',\n templateUrl: 'import.component.html',\n})\nexport class ImportComponent implements OnInit {\n featuredImportOptions: ImportOption[];\n importOptions: ImportOption[];\n format: string = null;\n fileContents: string;\n formPromise: Promise;\n loading: boolean = false;\n\n protected organizationId: string = null;\n protected successNavigate: any[] = ['vault'];\n\n constructor(protected i18nService: I18nService, protected toasterService: ToasterService,\n protected importService: ImportService, protected router: Router,\n protected platformUtilsService: PlatformUtilsService) { }\n\n ngOnInit() {\n this.setImportOptions();\n this.importOptions.sort((a, b) => {\n if (a.name == null && b.name != null) {\n return -1;\n }\n if (a.name != null && b.name == null) {\n return 1;\n }\n if (a.name == null && b.name == null) {\n return 0;\n }\n\n return this.i18nService.collator ? this.i18nService.collator.compare(a.name, b.name) :\n a.name.localeCompare(b.name);\n });\n }\n\n async submit() {\n this.loading = true;\n\n const importer = this.importService.getImporter(this.format, this.organizationId);\n if (importer === null) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('selectFormat'));\n this.loading = false;\n return;\n }\n\n const fileEl = document.getElementById('file') as HTMLInputElement;\n const files = fileEl.files;\n if ((files == null || files.length === 0) && (this.fileContents == null || this.fileContents === '')) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('selectFile'));\n this.loading = false;\n return;\n }\n\n let fileContents = this.fileContents;\n if (files != null && files.length > 0) {\n try {\n const content = await this.getFileContents(files[0]);\n if (content != null) {\n fileContents = content;\n }\n } catch { }\n }\n\n if (fileContents == null || fileContents === '') {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('selectFile'));\n this.loading = false;\n return;\n }\n\n try {\n this.formPromise = this.importService.import(importer, fileContents, this.organizationId);\n const error = await this.formPromise;\n if (error != null) {\n this.error(error);\n this.loading = false;\n return;\n }\n this.toasterService.popAsync('success', null, this.i18nService.t('importSuccess'));\n this.router.navigate(this.successNavigate);\n } catch { }\n\n this.loading = false;\n }\n\n getFormatInstructionTitle() {\n if (this.format == null) {\n return null;\n }\n\n const results = this.featuredImportOptions.concat(this.importOptions).filter(o => o.id === this.format);\n if (results.length > 0) {\n return this.i18nService.t('instructionsFor', results[0].name);\n }\n return null;\n }\n\n protected setImportOptions() {\n this.featuredImportOptions = [{\n id: null,\n name: '-- ' + this.i18nService.t('select') + ' --',\n }, ...this.importService.featuredImportOptions];\n this.importOptions = this.importService.regularImportOptions;\n }\n\n private async error(error: Error) {\n await Swal.fire({\n heightAuto: false,\n buttonsStyling: false,\n icon: 'error' as SweetAlertIcon,\n iconHtml: ``,\n input: 'textarea',\n inputValue: error.message,\n inputAttributes: {\n 'readonly': 'true',\n },\n title: this.i18nService.t('importError'),\n text: this.i18nService.t('importErrorDesc'),\n showConfirmButton: true,\n confirmButtonText: this.i18nService.t('ok'),\n onOpen: popupEl => {\n popupEl.querySelector('.swal2-textarea').scrollTo(0, 0);\n },\n });\n }\n\n private getFileContents(file: File): Promise {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsText(file, 'utf-8');\n reader.onload = evt => {\n if (this.format === 'lastpasscsv' && file.type === 'text/html') {\n const parser = new DOMParser();\n const doc = parser.parseFromString((evt.target as any).result, 'text/html');\n const pre = doc.querySelector('pre');\n if (pre != null) {\n resolve(pre.textContent);\n return;\n }\n reject();\n return;\n }\n\n resolve((evt.target as any).result);\n };\n reader.onerror = () => {\n reject();\n };\n });\n }\n}\n","
\n

{{'importData' | i18n}}

\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n \n \n See detailed instructions on our help site at\n \n https://help.bitwarden.com/article/export-your-data/\n \n \n See detailed instructions on our help site at\n \n https://help.bitwarden.com/article/import-from-lastpass/\n \n \n Using the KeePassX desktop application, navigate to \"Database\" → \"Export to CSV file\" and save the CSV\n file.\n \n \n In the Avira web vault, go to \"Settings\" → \"My Data\" → \"Export data\" and save the CSV file.\n \n \n In the Blur web vault, click your username at the top and go to \"Settings\" → \"Export Data\", then click\n \"Export CSV\"\n for your \"Accounts\".\n \n \n Using the SaveInCloud desktop application, navigate to \"File\" → \"Export\" → \"As XML\" and save the\n XML file.\n \n \n Using the Padlock desktop application, click the hamburger icon in the top left corner and navigate to\n \"Settings\" →\n \"Export\" button and save the file \"As CSV\".\n \n \n Using the KeePass 2 desktop application, navigate to \"File\" → \"Export\" and select the \"KeePass XML\n (2.x)\" option.\n \n \n Using the Universal Password Manager desktop application, navigate to \"Database\" → \"Export\" and save\n the CSV file.\n \n \n Using the SaferPass browser extension, click the hamburger icon in the top left corner and navigate to\n \"Settings\". Click the \"Export accounts\" button to save the CSV file.\n \n \n Using the Meldium web vault, navigate to \"Settings\". Locate the \"Export data\" function and click \"Show me my\n data\" to save the CSV file.\n \n \n Log into the Keeper web vault (keepersecurity.com/vault). Navigate to \"Backup\" (top right) and find the\n \"Export to .csv File\" option. Click \"Export Now\" to save the CSV file.\n \n \n \n The process is exactly the same as importing from Google Chrome.\n \n See detailed instructions on our help site at\n \n https://help.bitwarden.com/article/import-from-chrome/\n \n \n See detailed instructions on our help site at\n \n https://bitwarden.com/help/article/import-from-firefox/.\n \n \n See detailed instructions on our help site at\n \n https://help.bitwarden.com/article/import-from-1password/.\n \n \n Using the Password Dragon desktop application, navigate to \"File\" → \"Export\" → \"To XML\". In the\n dialog that pops up select \"All Rows\" and check all fields. Click the \"Export\" button and save the XML file.\n \n \n Using the Enpass desktop application, navigate to \"File\" → \"Export\" → \"As CSV\". Select \"OK\" to the\n warning alert and save the CSV file. Note that the importer only supports files exported while Enpass is set\n to the English language, so adjust your settings accordingly.\n \n \n Using the Enpass 6 desktop application, click the menu button and navigate to \"File\" → \"Export\".\n Select the \".json\" file format option and save the JSON file.\n \n \n Using the Password Safe desktop application, navigate to \"File\" → \"Export To\" → \"XML format...\"\n and save the XML file.\n \n \n Using the Dashlane desktop application, navigate to \"File\" → \"Export\" → \"Unsecured archive\n (readable) in JSON format\" and save the JSON file.\n \n \n Using the mSecure desktop application, navigate to \"File\" → \"Export\" → \"CSV File...\" and save the\n CSV file.\n \n \n Using the Sticky Password desktop application, navigate to \"Menu\" (top right) → \"Export\" → \"Export\n all\". Select the unencrypted format XML option and save the XML file.\n \n \n Using the True Key desktop application, click the gear icon (top right) and then navigate to \"App Settings\".\n Click the \"Export\" button, enter your password and save the CSV file.\n \n \n Log into the Clipperz web application (clipperz.is/app). Click the hamburger menu icon in the top right to\n expand the navigation bar. Navigate to \"Data\" → \"Export\". Click the \"download HTML+JSON\" button to save\n the HTML file.\n \n \n Using the RoboForm Editor desktop application, navigate to \"RoboForm\" (top left) → \"Options\" →\n \"Account & Data\" and click the \"Export\" button. Select all of your data, change the \"Format\" to \"CSV\n file\" and then click the \"Export\" button to save the CSV file. Note: RoboForm only allows you to export\n Logins. Other items will not be exported.\n \n \n Log into the Passbolt web vault and navigate to the \"Passwords\" listing. Select all of the passwords you\n would like to export and click the \"Export\" button at the top of the listing. Choose the \"csv (lastpass)\"\n export format and click the \"Export\" button.\n \n \n Using the Ascendo DataVault desktop application, navigate to \"Tools\" → \"Export\". In the dialog that\n pops up, select the \"All Items (DVX, CSV)\" option. Click the \"Ok\" button to save the CSV file.\n \n \n Using the Password Boss desktop application, navigate to \"File\" → \"Export data\" → \"Password Boss\n JSON - not encrypted\" and save the JSON file.\n \n \n Log into the Zoho web vault (vault.zoho.com). Navigate to \"Tools\" → \"Export Secrets\". Select \"All\n Secrets\" and click the \"Zoho Vault Format CSV\" button. Highlight and copy the data from the textarea. Open a\n text editor like Notepad and paste the data. Save the data from the text editor as\n zoho_export.csv.\n \n \n Using the SplashID Safe desktop application, click on the SplashID blue lock logo in the top right corner.\n Navigate to \"Export\" → \"Export as CSV\" and save the CSV file.\n \n \n Using the PassKeep mobile app, navigate to \"Backup/Restore\". Locate the \"CSV Backup/Restore\" section and\n click \"Backup to CSV\" to save the CSV file.\n \n \n Make sure you have python-keyring and python-gnomekeyring installed. Save the\n GNOME Keyring Import/Export python\n script to your desktop as pw_helper.py. Open terminal and run\n chmod +rx Desktop/pw_helper.py and then\n python Desktop/pw_helper.py export Desktop/my_passwords.json. Then upload the resulting\n my_passwords.json file here to Bitwarden.\n \n \n Using the Password Agent desktop application navigate to \"File\" → \"Export\", select the \"Fields to\n export\" button and check all of the fields, change the \"Output format\" to \"CSV\", and then click the \"Start\"\n button to save the CSV file.\n \n \n Log into the Passpack website vault and navigate to \"Settings\" → \"Export\", then click the \"Download\"\n button to save the CSV file.\n \n \n Open your Passman vault and click on \"Settings\" in the bottom left corner. In the \"Settings\" window switch\n to the \"Export credentials\" tab and choose \"JSON\" as the export type. Enter your vault's passphrase and\n click the \"Export\" button to save the JSON file.\n \n \n Open the Avast Passwords desktop application and navigate to \"Settings\" → \"Import/export data\". Select\n the \"Export\" button for the \"Export to CSV file\" option to save the CSV file.\n \n \n Open the Avast Passwords desktop application and navigate to \"Settings\" → \"Import/export data\". Select\n the \"Export\" button for the \"Export to JSON file\" option to save the JSON file.\n \n \n Open the F-Secure KEY desktop application and navigate to \"Settings\" → \"Export Passwords\". Select the\n \"Export\" button, enter your master password, and save the FSK file.\n \n \n Open the Kaspersky Password Manager desktop application and navigate to \"Settings\" → \"Import/Export\".\n Locate the \"Export to text file\" section and select the \"Export\" button to save the TXT file.\n \n \n Open the RememBear desktop application and navigate to \"Settings\" → \"Account\" → \"Export\".\n Enter your master password and select the \"Export Anyway\" button to save the CSV file.\n \n \n Open the PasswordWallet desktop application and navigate to \"File\" → \"Export\" →\n \"Visible entries to text file\". Enter your password and select the \"Ok\" button to save the TXT file.\n \n \n Open the Myki desktop browser extension and navigate to \"Advanced\" → \"Export Accounts\" and then scan\n the QR code with your mobile device. Various CSV files will then be saved to your computer's\n downloads folder.\n \n \n Export your SecureSafe password safe to a CSV file with a comma delimiter.\n \n \n Open the LogMeOnce browser extension, then navigate to \"Open Menu\" → \"Export To\" and\n select \"CSV File\" to save the CSV file.\n \n \n Open the BlackBerry Password Keeper application, then navigate to \"Settings\" → \"Import/Export\".\n Select \"Export Passwords\" and follow the instructions on screen to save the unencrypted CSV file.\n \n \n Open the Buttercup desktop application and unlock your vault. Right click on your vault's icon and\n select \"Export\" to save the CSV file.\n \n \n Open the Codebook desktop application and log in. Navigate to \"File\" → \"Export all\", then click\n \"Yes\" on the dialog and save the CSV file.\n \n \n Open the newest version of the Encryptr desktop application and allow all of your data to sync.\n Once syncing of your data is complete, the download icon in the top right corner will turn pink. Click\n the download icon and save the CSV file.\n \n \n From the Yoti browser extension, click on \"Settings\", then \"Export Saved Logins\" and save the CSV file.\n \n \n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n \n
\n","import {\n Component,\n ComponentFactoryResolver,\n OnInit,\n} from '@angular/core';\n\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { CipherView } from 'jslib/models/view/cipherView';\n\nimport { CipherType } from 'jslib/enums/cipherType';\n\nimport { Utils } from 'jslib/misc/utils';\n\nimport { CipherReportComponent } from './cipher-report.component';\n\n@Component({\n selector: 'app-inactive-two-factor-report',\n templateUrl: 'inactive-two-factor-report.component.html',\n})\nexport class InactiveTwoFactorReportComponent extends CipherReportComponent implements OnInit {\n services = new Map();\n cipherDocs = new Map();\n\n constructor(protected cipherService: CipherService, componentFactoryResolver: ComponentFactoryResolver,\n messagingService: MessagingService, userService: UserService) {\n super(componentFactoryResolver, userService, messagingService, true);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n try {\n await this.load2fa();\n } catch { }\n if (this.services.size > 0) {\n const allCiphers = await this.getAllCiphers();\n const inactive2faCiphers: CipherView[] = [];\n const promises: Promise[] = [];\n const docs = new Map();\n allCiphers.forEach(c => {\n if (c.type !== CipherType.Login || (c.login.totp != null && c.login.totp !== '') || !c.login.hasUris ||\n c.isDeleted) {\n return;\n }\n for (let i = 0; i < c.login.uris.length; i++) {\n const u = c.login.uris[i];\n if (u.uri != null && u.uri !== '') {\n const hostname = Utils.getHostname(u.uri);\n if (hostname != null && this.services.has(hostname)) {\n if (this.services.get(hostname) != null) {\n docs.set(c.id, this.services.get(hostname));\n }\n inactive2faCiphers.push(c);\n break;\n }\n }\n }\n });\n await Promise.all(promises);\n this.ciphers = inactive2faCiphers;\n this.cipherDocs = docs;\n }\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n private async load2fa() {\n if (this.services.size > 0) {\n return;\n }\n const response = await fetch(new Request('https://2fa.directory/api/v2/totp.json'));\n if (response.status !== 200) {\n throw new Error();\n }\n const responseJson = await response.json();\n for (const categoryName in responseJson) {\n if (responseJson.hasOwnProperty(categoryName)) {\n const category = responseJson[categoryName];\n for (const serviceName in category) {\n if (category.hasOwnProperty(serviceName)) {\n const service = category[serviceName];\n if (service.url != null) {\n const hostname = Utils.getHostname(service.url);\n if (hostname != null) {\n this.services.set(hostname, service.doc);\n }\n }\n }\n }\n }\n }\n }\n}\n","
\n

\n {{'inactive2faReport' | i18n}}\n \n \n {{'loading' | i18n}}\n \n

\n
\n

{{'inactive2faReportDesc' | i18n}}

\n
\n \n {{'loading' | i18n}}\n
\n
\n \n {{'noInactive2fa' | i18n}}\n \n \n \n {{'inactive2faFoundDesc' | i18n : (ciphers.length | number)}}\n \n \n \n \n \n \n \n \n \n
\n \n \n {{c.name}}\n \n \n {{'shared' | i18n}}\n \n \n \n {{'attachments' | i18n}}\n \n
\n {{c.subTitle}}\n
\n \n {{'instructions' | i18n}}\n
\n
\n
\n\n","import {\n Component,\n ComponentFactoryResolver,\n OnInit,\n} from '@angular/core';\n\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { CipherView } from 'jslib/models/view/cipherView';\n\nimport { CipherType } from 'jslib/enums/cipherType';\n\nimport { CipherReportComponent } from './cipher-report.component';\n\n@Component({\n selector: 'app-reused-passwords-report',\n templateUrl: 'reused-passwords-report.component.html',\n})\nexport class ReusedPasswordsReportComponent extends CipherReportComponent implements OnInit {\n passwordUseMap: Map;\n\n constructor(protected cipherService: CipherService, componentFactoryResolver: ComponentFactoryResolver,\n messagingService: MessagingService, userService: UserService) {\n super(componentFactoryResolver, userService, messagingService, true);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n const allCiphers = await this.getAllCiphers();\n const ciphersWithPasswords: CipherView[] = [];\n this.passwordUseMap = new Map();\n allCiphers.forEach(c => {\n if (c.type !== CipherType.Login || c.login.password == null || c.login.password === '' || c.isDeleted) {\n return;\n }\n ciphersWithPasswords.push(c);\n if (this.passwordUseMap.has(c.login.password)) {\n this.passwordUseMap.set(c.login.password, this.passwordUseMap.get(c.login.password) + 1);\n } else {\n this.passwordUseMap.set(c.login.password, 1);\n }\n });\n const reusedPasswordCiphers = ciphersWithPasswords.filter(c =>\n this.passwordUseMap.has(c.login.password) && this.passwordUseMap.get(c.login.password) > 1);\n this.ciphers = reusedPasswordCiphers;\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n protected canManageCipher(c: CipherView): boolean {\n // this will only ever be false from an organization view\n return true;\n }\n}\n","
\n

\n {{'reusedPasswordsReport' | i18n}}\n \n \n {{'loading' | i18n}}\n \n

\n
\n

{{'reusedPasswordsReportDesc' | i18n}}

\n
\n \n {{'loading' | i18n}}\n
\n
\n \n {{'noReusedPasswords' | i18n}}\n \n \n \n {{'reusedPasswordsFoundDesc' | i18n : (ciphers.length | number)}}\n \n \n \n \n \n \n \n \n \n
\n \n \n \n {{c.name}}\n \n \n {{c.name}}\n \n \n \n {{'shared' | i18n}}\n \n \n \n {{'attachments' | i18n}}\n \n
\n {{c.subTitle}}\n
\n \n {{'reusedXTimes' | i18n : passwordUseMap.get(c.login.password)}}\n \n
\n
\n
\n\n","import {\n Component,\n ComponentFactoryResolver,\n OnInit,\n} from '@angular/core';\n\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { CipherType } from 'jslib/enums/cipherType';\n\nimport { CipherView } from 'jslib/models/view/cipherView';\n\nimport { CipherReportComponent } from './cipher-report.component';\n\n@Component({\n selector: 'app-unsecured-websites-report',\n templateUrl: 'unsecured-websites-report.component.html',\n})\nexport class UnsecuredWebsitesReportComponent extends CipherReportComponent implements OnInit {\n constructor(protected cipherService: CipherService, componentFactoryResolver: ComponentFactoryResolver,\n messagingService: MessagingService, userService: UserService) {\n super(componentFactoryResolver, userService, messagingService, true);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n const allCiphers = await this.getAllCiphers();\n const unsecuredCiphers = allCiphers.filter(c => {\n if (c.type !== CipherType.Login || !c.login.hasUris || c.isDeleted) {\n return false;\n }\n return c.login.uris.some(u => u.uri != null && u.uri.indexOf('http://') === 0);\n });\n this.ciphers = unsecuredCiphers;\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n}\n","
\n

\n {{'unsecuredWebsitesReport' | i18n}}\n \n \n {{'loading' | i18n}}\n \n

\n
\n

{{'unsecuredWebsitesReportDesc' | i18n}}

\n
\n \n {{'loading' | i18n}}\n
\n
\n \n {{'noUnsecuredWebsites' | i18n}}\n \n \n \n {{'unsecuredWebsitesFoundDesc' | i18n : (ciphers.length | number)}}\n \n \n \n \n \n \n \n \n
\n \n \n {{c.name}}\n \n \n {{'shared' | i18n}}\n \n \n \n {{'attachments' | i18n}}\n \n
\n {{c.subTitle}}\n
\n
\n
\n\n","import {\n Component,\n ComponentFactoryResolver,\n OnInit,\n} from '@angular/core';\n\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib/abstractions/passwordGeneration.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { CipherView } from 'jslib/models/view/cipherView';\n\nimport { CipherType } from 'jslib/enums/cipherType';\n\nimport { CipherReportComponent } from './cipher-report.component';\n\n@Component({\n selector: 'app-weak-passwords-report',\n templateUrl: 'weak-passwords-report.component.html',\n})\nexport class WeakPasswordsReportComponent extends CipherReportComponent implements OnInit {\n\n passwordStrengthMap = new Map();\n\n private passwordStrengthCache = new Map();\n\n constructor(protected cipherService: CipherService, protected passwordGenerationService: PasswordGenerationService,\n componentFactoryResolver: ComponentFactoryResolver, messagingService: MessagingService,\n userService: UserService) {\n super(componentFactoryResolver, userService, messagingService, true);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n const allCiphers = await this.getAllCiphers();\n const weakPasswordCiphers: CipherView[] = [];\n const isUserNameNotEmpty = (c: CipherView): boolean => {\n return c.login.username != null && c.login.username.trim() !== '';\n };\n const getCacheKey = (c: CipherView): string => {\n return c.login.password + '_____' + (isUserNameNotEmpty(c) ? c.login.username : '');\n };\n\n allCiphers.forEach(c => {\n if (c.type !== CipherType.Login || c.login.password == null || c.login.password === '' || c.isDeleted) {\n return;\n }\n const hasUserName = isUserNameNotEmpty(c);\n const cacheKey = getCacheKey(c);\n if (!this.passwordStrengthCache.has(cacheKey)) {\n let userInput: string[] = [];\n if (hasUserName) {\n const atPosition = c.login.username.indexOf('@');\n if (atPosition > -1) {\n userInput = userInput.concat(\n c.login.username.substr(0, atPosition).trim().toLowerCase().split(/[^A-Za-z0-9]/))\n .filter(i => i.length >= 3);\n } else {\n userInput = c.login.username.trim().toLowerCase().split(/[^A-Za-z0-9]/)\n .filter(i => i.length >= 3);\n }\n }\n const result = this.passwordGenerationService.passwordStrength(c.login.password,\n userInput.length > 0 ? userInput : null);\n this.passwordStrengthCache.set(cacheKey, result.score);\n }\n const score = this.passwordStrengthCache.get(cacheKey);\n if (score != null && score <= 2) {\n this.passwordStrengthMap.set(c.id, this.scoreKey(score));\n weakPasswordCiphers.push(c);\n }\n });\n weakPasswordCiphers.sort((a, b) => {\n return this.passwordStrengthCache.get(getCacheKey(a)) -\n this.passwordStrengthCache.get(getCacheKey(b));\n });\n this.ciphers = weakPasswordCiphers;\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n protected canManageCipher(c: CipherView): boolean {\n // this will only ever be false from the org view;\n return true;\n }\n\n private scoreKey(score: number): [string, string] {\n switch (score) {\n case 4:\n return ['strong', 'success'];\n case 3:\n return ['good', 'primary'];\n case 2:\n return ['weak', 'warning'];\n default:\n return ['veryWeak', 'danger'];\n }\n }\n}\n","
\n

\n {{'weakPasswordsReport' | i18n}}\n \n \n {{'loading' | i18n}}\n \n

\n
\n

{{'weakPasswordsReportDesc' | i18n}}

\n
\n \n {{'loading' | i18n}}\n
\n
\n \n {{'noWeakPasswords' | i18n}}\n \n \n \n {{'weakPasswordsFoundDesc' | i18n : (ciphers.length | number)}}\n \n \n \n \n \n \n \n \n \n
\n \n \n \n {{c.name}}\n \n \n {{c.name}}\n \n \n \n {{'shared' | i18n}}\n \n \n \n {{'attachments' | i18n}}\n \n
\n {{c.subTitle}}\n
\n \n {{passwordStrengthMap.get(c.id)[0] | i18n}}\n \n
\n
\n
\n\n","import { Component } from '@angular/core';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { AttachmentView } from 'jslib/models/view/attachmentView';\n\nimport { AttachmentsComponent as BaseAttachmentsComponent } from 'jslib/angular/components/attachments.component';\n\n@Component({\n selector: 'app-vault-attachments',\n templateUrl: 'attachments.component.html',\n})\nexport class AttachmentsComponent extends BaseAttachmentsComponent {\n viewOnly = false;\n\n constructor(cipherService: CipherService, i18nService: I18nService,\n cryptoService: CryptoService, userService: UserService,\n platformUtilsService: PlatformUtilsService, apiService: ApiService) {\n super(cipherService, i18nService, cryptoService, userService, platformUtilsService, apiService, window);\n }\n\n protected async reupload(attachment: AttachmentView) {\n if (this.showFixOldAttachments(attachment)) {\n await this.reuploadCipherAttachment(attachment, false);\n }\n }\n\n protected showFixOldAttachments(attachment: AttachmentView) {\n return attachment.key == null && this.cipher.organizationId == null;\n }\n}\n","
\n
\n
\n
\n

\n {{'attachments' | i18n}}\n {{cipher.name}}\n

\n \n
\n
\n \n \n \n \n \n \n \n \n
\n \n \n \n
\n {{a.fileName}}\n
\n \n \n {{'attachmentFixDesc' | i18n}}\n \n
\n
\n {{a.sizeName}}\n
\n \n
\n
\n

{{'newAttachment' | i18n}}

\n \n \n {{'maxFileSize' | i18n}}\n
\n
\n
\n \n \n
\n
\n
\n
\n","import { BaseResponse } from './baseResponse';\n\nexport class AttachmentResponse extends BaseResponse {\n id: string;\n url: string;\n fileName: string;\n key: string;\n size: string;\n sizeName: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.url = this.getResponseProperty('Url');\n this.fileName = this.getResponseProperty('FileName');\n this.key = this.getResponseProperty('Key');\n this.size = this.getResponseProperty('Size');\n this.sizeName = this.getResponseProperty('SizeName');\n }\n}\n","import { BaseResponse } from './baseResponse';\nimport { SelectionReadOnlyResponse } from './selectionReadOnlyResponse';\n\nexport class CollectionResponse extends BaseResponse {\n id: string;\n organizationId: string;\n name: string;\n externalId: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.organizationId = this.getResponseProperty('OrganizationId');\n this.name = this.getResponseProperty('Name');\n this.externalId = this.getResponseProperty('ExternalId');\n }\n}\n\nexport class CollectionDetailsResponse extends CollectionResponse {\n readOnly: boolean;\n\n constructor(response: any) {\n super(response);\n this.readOnly = this.getResponseProperty('ReadOnly') || false;\n }\n}\n\nexport class CollectionGroupDetailsResponse extends CollectionResponse {\n groups: SelectionReadOnlyResponse[] = [];\n\n constructor(response: any) {\n super(response);\n const groups = this.getResponseProperty('Groups');\n if (groups != null) {\n this.groups = groups.map((g: any) => new SelectionReadOnlyResponse(g));\n }\n }\n}\n","import { BaseResponse } from './baseResponse';\nimport { GlobalDomainResponse } from './globalDomainResponse';\n\nexport class DomainsResponse extends BaseResponse {\n equivalentDomains: string[][];\n globalEquivalentDomains: GlobalDomainResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.equivalentDomains = this.getResponseProperty('EquivalentDomains');\n const globalEquivalentDomains = this.getResponseProperty('GlobalEquivalentDomains');\n if (globalEquivalentDomains != null) {\n this.globalEquivalentDomains = globalEquivalentDomains.map((d: any) => new GlobalDomainResponse(d));\n } else {\n this.globalEquivalentDomains = [];\n }\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class FolderResponse extends BaseResponse {\n id: string;\n name: string;\n revisionDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.name = this.getResponseProperty('Name');\n this.revisionDate = this.getResponseProperty('RevisionDate');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { SendType } from '../../enums/sendType';\n\nimport { SendFileApi } from '../api/sendFileApi';\nimport { SendTextApi } from '../api/sendTextApi';\n\nexport class SendResponse extends BaseResponse {\n id: string;\n accessId: string;\n type: SendType;\n name: string;\n notes: string;\n file: SendFileApi;\n text: SendTextApi;\n key: string;\n maxAccessCount?: number;\n accessCount: number;\n revisionDate: string;\n expirationDate: string;\n deletionDate: string;\n password: string;\n disable: boolean;\n hideEmail: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.accessId = this.getResponseProperty('AccessId');\n this.type = this.getResponseProperty('Type');\n this.name = this.getResponseProperty('Name');\n this.notes = this.getResponseProperty('Notes');\n this.key = this.getResponseProperty('Key');\n this.maxAccessCount = this.getResponseProperty('MaxAccessCount');\n this.accessCount = this.getResponseProperty('AccessCount');\n this.revisionDate = this.getResponseProperty('RevisionDate');\n this.expirationDate = this.getResponseProperty('ExpirationDate');\n this.deletionDate = this.getResponseProperty('DeletionDate');\n this.password = this.getResponseProperty('Password');\n this.disable = this.getResponseProperty('Disabled') || false;\n this.hideEmail = this.getResponseProperty('HideEmail') || false;\n\n const text = this.getResponseProperty('Text');\n if (text != null) {\n this.text = new SendTextApi(text);\n }\n\n const file = this.getResponseProperty('File');\n if (file != null) {\n this.file = new SendFileApi(file);\n }\n }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nexport class SendFileApi extends BaseResponse {\n id: string;\n fileName: string;\n key: string;\n size: string;\n sizeName: string;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.id = this.getResponseProperty('Id');\n this.fileName = this.getResponseProperty('FileName');\n this.key = this.getResponseProperty('Key');\n this.size = this.getResponseProperty('Size');\n this.sizeName = this.getResponseProperty('SizeName');\n }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nexport class SendTextApi extends BaseResponse {\n text: string;\n hidden: boolean;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.text = this.getResponseProperty('Text');\n this.hidden = this.getResponseProperty('Hidden') || false;\n }\n}\n","import {\n Component,\n EventEmitter,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { EventService } from 'jslib/abstractions/event.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { SearchService } from 'jslib/abstractions/search.service';\nimport { TotpService } from 'jslib/abstractions/totp.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { Organization } from 'jslib/models/domain/organization';\nimport { CipherView } from 'jslib/models/view/cipherView';\n\nimport { CiphersComponent as BaseCiphersComponent } from '../../vault/ciphers.component';\n\n@Component({\n selector: 'app-org-vault-ciphers',\n templateUrl: '../../vault/ciphers.component.html',\n})\nexport class CiphersComponent extends BaseCiphersComponent {\n @Output() onEventsClicked = new EventEmitter();\n\n organization: Organization;\n accessEvents = false;\n\n protected allCiphers: CipherView[] = [];\n\n constructor(searchService: SearchService, toasterService: ToasterService, i18nService: I18nService,\n platformUtilsService: PlatformUtilsService, cipherService: CipherService,\n private apiService: ApiService, eventService: EventService, totpService: TotpService, userService: UserService) {\n super(searchService, toasterService, i18nService, platformUtilsService, cipherService,\n eventService, totpService, userService);\n }\n\n async load(filter: (cipher: CipherView) => boolean = null) {\n if (this.organization.canManageAllCollections) {\n this.accessEvents = this.organization.useEvents;\n this.allCiphers = await this.cipherService.getAllFromApiForOrganization(this.organization.id);\n } else {\n this.allCiphers = (await this.cipherService.getAllDecrypted()).filter(c => c.organizationId === this.organization.id);\n }\n await this.searchService.indexCiphers(this.organization.id, this.allCiphers);\n await this.applyFilter(filter);\n this.loaded = true;\n }\n\n async applyFilter(filter: (cipher: CipherView) => boolean = null) {\n if (this.organization.canManageAllCollections) {\n await super.applyFilter(filter);\n } else {\n const f = (c: CipherView) => c.organizationId === this.organization.id && (filter == null || filter(c));\n await super.applyFilter(f);\n }\n }\n\n async search(timeout: number = null) {\n await super.search(timeout, this.allCiphers);\n }\n events(c: CipherView) {\n this.onEventsClicked.emit(c);\n }\n\n protected deleteCipher(id: string) {\n if (!this.organization.canManageAllCollections) {\n return super.deleteCipher(id, this.deleted);\n }\n return this.deleted ? this.apiService.deleteCipherAdmin(id) : this.apiService.putDeleteCipherAdmin(id);\n }\n\n protected showFixOldAttachments(c: CipherView) {\n return this.organization.canManageAllCollections && c.hasOldAttachments;\n }\n}\n","import {\n Component,\n OnDestroy,\n} from '@angular/core';\n\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { CollectionService } from 'jslib/abstractions/collection.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\nimport { CollectionView } from 'jslib/models/view/collectionView';\n\nimport { CollectionsComponent as BaseCollectionsComponent } from 'jslib/angular/components/collections.component';\n\n@Component({\n selector: 'app-vault-collections',\n templateUrl: 'collections.component.html',\n})\nexport class CollectionsComponent extends BaseCollectionsComponent implements OnDestroy {\n constructor(collectionService: CollectionService, platformUtilsService: PlatformUtilsService,\n i18nService: I18nService, cipherService: CipherService) {\n super(collectionService, platformUtilsService, i18nService, cipherService);\n }\n\n ngOnDestroy() {\n this.selectAll(false);\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n }\n\n selectAll(select: boolean) {\n this.collections.forEach(c => this.check(c, select));\n }\n}\n","
\n
\n
\n
\n

\n {{'collections' | i18n}}\n {{cipher.name}}\n

\n \n
\n
\n

{{'collectionsDesc' | i18n}}

\n
\n

{{'collections' | i18n}}

\n
\n \n \n
\n
\n
\n {{'noCollectionsInList' | i18n}}\n
\n \n \n \n \n \n \n \n
\n \n \n {{c.name}}\n
\n
\n
\n \n \n
\n
\n
\n
\n","import { Component } from '@angular/core';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CollectionService } from 'jslib/abstractions/collection.service';\nimport { FolderService } from 'jslib/abstractions/folder.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { StorageService } from 'jslib/abstractions/storage.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { CollectionData } from 'jslib/models/data/collectionData';\nimport { Collection } from 'jslib/models/domain/collection';\nimport { Organization } from 'jslib/models/domain/organization';\nimport { CollectionDetailsResponse } from 'jslib/models/response/collectionResponse';\nimport { CollectionView } from 'jslib/models/view/collectionView';\n\nimport { GroupingsComponent as BaseGroupingsComponent } from '../../vault/groupings.component';\n\n@Component({\n selector: 'app-org-vault-groupings',\n templateUrl: '../../vault/groupings.component.html',\n})\nexport class GroupingsComponent extends BaseGroupingsComponent {\n organization: Organization;\n\n constructor(collectionService: CollectionService, folderService: FolderService,\n storageService: StorageService, userService: UserService,\n private apiService: ApiService, private i18nService: I18nService) {\n super(collectionService, folderService, storageService, userService);\n }\n\n async loadCollections() {\n if (!this.organization.canManageAllCollections) {\n await super.loadCollections(this.organization.id);\n return;\n }\n\n const collections = await this.apiService.getCollections(this.organization.id);\n if (collections != null && collections.data != null && collections.data.length) {\n const collectionDomains = collections.data.map(r =>\n new Collection(new CollectionData(r as CollectionDetailsResponse)));\n this.collections = await this.collectionService.decryptMany(collectionDomains);\n } else {\n this.collections = [];\n }\n\n const unassignedCollection = new CollectionView();\n unassignedCollection.name = this.i18nService.t('unassigned');\n unassignedCollection.id = 'unassigned';\n unassignedCollection.organizationId = this.organization.id;\n unassignedCollection.readOnly = true;\n this.collections.push(unassignedCollection);\n this.nestedCollections = await this.collectionService.getAllNested(this.collections);\n }\n\n collapse(grouping: CollectionView) {\n super.collapse(grouping, 'org_');\n }\n\n isCollapsed(grouping: CollectionView) {\n return super.isCollapsed(grouping, 'org_');\n }\n}\n","import {\n Component,\n ComponentFactoryResolver,\n Input,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { ToasterService } from 'angular2-toaster';\n\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\nimport { Organization } from 'jslib/models/domain/organization';\n\nimport { ModalComponent } from '../modal.component';\n\nimport { BulkDeleteComponent } from './bulk-delete.component';\nimport { BulkMoveComponent } from './bulk-move.component';\nimport { BulkRestoreComponent } from './bulk-restore.component';\nimport { BulkShareComponent } from './bulk-share.component';\nimport { CiphersComponent } from './ciphers.component';\n\n@Component({\n selector: 'app-vault-bulk-actions',\n templateUrl: 'bulk-actions.component.html',\n})\nexport class BulkActionsComponent {\n @Input() ciphersComponent: CiphersComponent;\n @Input() modal: ModalComponent;\n @Input() deleted: boolean;\n @Input() organization: Organization;\n\n @ViewChild('bulkDeleteTemplate', { read: ViewContainerRef, static: true }) bulkDeleteModalRef: ViewContainerRef;\n @ViewChild('bulkRestoreTemplate', { read: ViewContainerRef, static: true }) bulkRestoreModalRef: ViewContainerRef;\n @ViewChild('bulkMoveTemplate', { read: ViewContainerRef, static: true }) bulkMoveModalRef: ViewContainerRef;\n @ViewChild('bulkShareTemplate', { read: ViewContainerRef, static: true }) bulkShareModalRef: ViewContainerRef;\n\n constructor(private toasterService: ToasterService,\n private i18nService: I18nService,\n private componentFactoryResolver: ComponentFactoryResolver) { }\n\n bulkDelete() {\n const selectedIds = this.ciphersComponent.getSelectedIds();\n if (selectedIds.length === 0) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('nothingSelected'));\n return;\n }\n\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.bulkDeleteModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(BulkDeleteComponent, this.bulkDeleteModalRef);\n\n childComponent.permanent = this.deleted;\n childComponent.cipherIds = selectedIds;\n childComponent.organization = this.organization;\n childComponent.onDeleted.subscribe(async () => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n bulkRestore() {\n const selectedIds = this.ciphersComponent.getSelectedIds();\n if (selectedIds.length === 0) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('nothingSelected'));\n return;\n }\n\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.bulkRestoreModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(BulkRestoreComponent, this.bulkRestoreModalRef);\n\n childComponent.cipherIds = selectedIds;\n childComponent.onRestored.subscribe(async () => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n bulkShare() {\n const selectedCiphers = this.ciphersComponent.getSelected();\n if (selectedCiphers.length === 0) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('nothingSelected'));\n return;\n }\n\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.bulkShareModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(BulkShareComponent, this.bulkShareModalRef);\n\n childComponent.ciphers = selectedCiphers;\n childComponent.onShared.subscribe(async () => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n bulkMove() {\n const selectedIds = this.ciphersComponent.getSelectedIds();\n if (selectedIds.length === 0) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('nothingSelected'));\n return;\n }\n\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.bulkMoveModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(BulkMoveComponent, this.bulkMoveModalRef);\n\n childComponent.cipherIds = selectedIds;\n childComponent.onMoved.subscribe(async () => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n selectAll(select: boolean) {\n this.ciphersComponent.selectAll(select);\n }\n}\n","
\n \n
\n \n \n \n \n
\n \n \n
\n
\n\n\n\n\n\n","import Domain from './domainBase';\nimport { EncString } from './encString';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nimport { SendFileData } from '../data/sendFileData';\n\nimport { SendFileView } from '../view/sendFileView';\n\nexport class SendFile extends Domain {\n id: string;\n size: string;\n sizeName: string;\n fileName: EncString;\n\n constructor(obj?: SendFileData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.size = obj.size;\n this.buildDomainModel(this, obj, {\n id: null,\n sizeName: null,\n fileName: null,\n }, alreadyEncrypted, ['id', 'sizeName']);\n }\n\n async decrypt(key: SymmetricCryptoKey): Promise {\n const view = await this.decryptObj(new SendFileView(this), {\n fileName: null,\n }, null, key);\n return view;\n }\n}\n","import Domain from './domainBase';\nimport { EncString } from './encString';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nimport { SendTextData } from '../data/sendTextData';\n\nimport { SendTextView } from '../view/sendTextView';\n\nexport class SendText extends Domain {\n text: EncString;\n hidden: boolean;\n\n constructor(obj?: SendTextData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.hidden = obj.hidden;\n this.buildDomainModel(this, obj, {\n text: null,\n }, alreadyEncrypted, []);\n }\n\n decrypt(key: SymmetricCryptoKey): Promise {\n return this.decryptObj(new SendTextView(this), {\n text: null,\n }, null, key);\n }\n}\n","import { CipherRequest } from './cipherRequest';\n\nimport { Cipher } from '../domain/cipher';\n\nexport class CipherWithIdRequest extends CipherRequest {\n id: string;\n\n constructor(cipher: Cipher) {\n super(cipher);\n this.id = cipher.id;\n }\n}\n","import { Folder } from '../domain/folder';\n\nexport class FolderRequest {\n name: string;\n\n constructor(folder: Folder) {\n this.name = folder.name ? folder.name.encryptedString : null;\n }\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n} from '@angular/core';\n\nimport { PlatformUtilsService } from '../../abstractions/platformUtils.service';\n\n@Directive({\n selector: '[appSelectCopy]',\n})\nexport class SelectCopyDirective {\n constructor(private el: ElementRef, private platformUtilsService: PlatformUtilsService) { }\n\n @HostListener('copy') onCopy() {\n if (window == null) {\n return;\n }\n let copyText = '';\n const selection = window.getSelection();\n for (let i = 0; i < selection.rangeCount; i++) {\n const range = selection.getRangeAt(i);\n const text = range.toString();\n\n // The selection should only contain one line of text. In some cases however, the\n // selection contains newlines and space characters from the indentation of following\n // sibling nodes. To avoid copying passwords containing trailing newlines and spaces\n // that aren't part of the password, the selection has to be trimmed.\n let stringEndPos = text.length;\n const newLinePos = text.search(/(?:\\r\\n|\\r|\\n)/);\n if (newLinePos > -1) {\n const otherPart = text.substr(newLinePos).trim();\n if (otherPart === '') {\n stringEndPos = newLinePos;\n }\n }\n copyText += text.substring(0, stringEndPos);\n }\n this.platformUtilsService.copyToClipboard(copyText, { window: window });\n }\n}\n","import {\n Pipe,\n PipeTransform,\n} from '@angular/core';\n\n/**\n * A pipe that sanitizes HTML and highlights numbers and special characters (in different colors each).\n */\n@Pipe({ name: 'colorPassword' })\nexport class ColorPasswordPipe implements PipeTransform {\n transform(password: string) {\n let colorizedPassword = '';\n for (let i = 0; i < password.length; i++) {\n let character = password[i];\n let isSpecial = false;\n // Sanitize HTML first.\n switch (character) {\n case '&':\n character = '&';\n isSpecial = true;\n break;\n case '<':\n character = '<';\n isSpecial = true;\n break;\n case '>':\n character = '>';\n isSpecial = true;\n break;\n case ' ':\n character = ' ';\n isSpecial = true;\n break;\n default:\n break;\n }\n let type = 'letter';\n if (isSpecial || character.match(/[^\\w ]/)) {\n type = 'special';\n } else if (character.match(/\\d/)) {\n type = 'number';\n }\n colorizedPassword += '' + character + '';\n }\n return colorizedPassword;\n }\n}\n","import { FolderResponse } from '../response/folderResponse';\n\nexport class FolderData {\n id: string;\n userId: string;\n name: string;\n revisionDate: string;\n\n constructor(response: FolderResponse, userId: string) {\n this.userId = userId;\n this.name = response.name;\n this.id = response.id;\n this.revisionDate = response.revisionDate;\n }\n}\n","import { FolderData } from '../data/folderData';\n\nimport { FolderView } from '../view/folderView';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\n\nexport class Folder extends Domain {\n id: string;\n name: EncString;\n revisionDate: Date;\n\n constructor(obj?: FolderData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(this, obj, {\n id: null,\n name: null,\n }, alreadyEncrypted, ['id']);\n\n this.revisionDate = obj.revisionDate != null ? new Date(obj.revisionDate) : null;\n }\n\n decrypt(): Promise {\n return this.decryptObj(new FolderView(this), {\n name: null,\n }, null);\n }\n}\n","import { EnvironmentService } from './environment.service';\n\nexport abstract class NotificationsService {\n init: (environmentService: EnvironmentService) => Promise;\n updateConnection: (sync?: boolean) => Promise;\n reconnectFromActivity: () => Promise;\n disconnectFromInactivity: () => Promise;\n}\n","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 529;","import {\n Component,\n OnDestroy,\n OnInit,\n} from '@angular/core';\n\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\n@Component({\n selector: 'app-frontend-layout',\n templateUrl: 'frontend-layout.component.html',\n})\nexport class FrontendLayoutComponent implements OnInit, OnDestroy {\n version: string;\n year: string = '2015';\n\n constructor(private platformUtilsService: PlatformUtilsService) { }\n\n async ngOnInit() {\n this.year = new Date().getFullYear().toString();\n this.version = await this.platformUtilsService.getApplicationVersion();\n document.body.classList.add('layout_frontend');\n }\n\n ngOnDestroy() {\n document.body.classList.remove('layout_frontend');\n }\n}\n","\n
\n © {{year}}, Bitwarden Inc.\n
{{'versionNumber' | i18n : version}}\n
\n","import {\n Component,\n NgZone,\n OnDestroy,\n OnInit,\n} from '@angular/core';\n\nimport { ActivatedRoute } from '@angular/router';\n\nimport { BroadcasterService } from 'jslib/angular/services/broadcaster.service';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { EnvironmentService } from 'jslib/abstractions/environment.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { Organization } from 'jslib/models/domain/organization';\n\nconst BroadcasterSubscriptionId = 'OrganizationLayoutComponent';\n\n@Component({\n selector: 'app-organization-layout',\n templateUrl: 'organization-layout.component.html',\n})\nexport class OrganizationLayoutComponent implements OnInit, OnDestroy {\n organization: Organization;\n businessTokenPromise: Promise;\n private organizationId: string;\n private businessUrl: string;\n\n constructor(private route: ActivatedRoute, private userService: UserService,\n private broadcasterService: BroadcasterService, private ngZone: NgZone,\n private apiService: ApiService, private platformUtilsService: PlatformUtilsService,\n private environmentService: EnvironmentService) { }\n\n ngOnInit() {\n this.businessUrl = 'https://portal.bitwarden.com';\n if (this.environmentService.enterpriseUrl != null) {\n this.businessUrl = this.environmentService.enterpriseUrl;\n } else if (this.environmentService.baseUrl != null) {\n this.businessUrl = this.environmentService.baseUrl + '/portal';\n }\n\n document.body.classList.remove('layout_frontend');\n this.route.params.subscribe(async params => {\n this.organizationId = params.organizationId;\n await this.load();\n });\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case 'updatedOrgLicense':\n await this.load();\n break;\n }\n });\n });\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n async load() {\n this.organization = await this.userService.getOrganization(this.organizationId);\n }\n\n async goToBusinessPortal() {\n if (this.businessTokenPromise != null) {\n return;\n }\n try {\n this.businessTokenPromise = this.apiService.getEnterprisePortalSignInToken();\n const token = await this.businessTokenPromise;\n if (token != null) {\n const userId = await this.userService.getUserId();\n this.platformUtilsService.launchUri(this.businessUrl + '/login?userId=' + userId +\n '&token=' + (window as any).encodeURIComponent(token) + '&organizationId=' + this.organization.id);\n }\n } catch { }\n this.businessTokenPromise = null;\n }\n\n get showMenuBar() {\n return this.showManageTab || this.showToolsTab || this.organization.isOwner;\n }\n\n get showManageTab(): boolean {\n return this.organization.canManageUsers ||\n this.organization.canManageAssignedCollections ||\n this.organization.canManageAllCollections ||\n this.organization.canManageGroups ||\n this.organization.canManagePolicies ||\n this.organization.canAccessEventLogs;\n }\n\n get showToolsTab(): boolean {\n return this.organization.canAccessImportExport || this.organization.canAccessReports;\n }\n\n get showBusinessPortalButton(): boolean {\n return this.organization.useBusinessPortal && this.organization.canAccessBusinessPortal;\n }\n\n get toolsRoute(): string {\n return this.organization.canAccessImportExport ?\n 'tools/import' :\n 'tools/exposed-passwords-report';\n }\n\n get manageRoute(): string {\n let route: string;\n switch (true) {\n case this.organization.canManageUsers:\n route = 'manage/people';\n break;\n case this.organization.canManageAssignedCollections || this.organization.canManageAllCollections:\n route = 'manage/collections';\n break;\n case this.organization.canManageGroups:\n route = 'manage/groups';\n break;\n case this.organization.canManagePolicies:\n route = 'manage/policies';\n break;\n case this.organization.canAccessEventLogs:\n route = 'manage/events';\n break;\n }\n return route;\n }\n}\n","\n
\n
\n
\n
\n \n
\n {{organization.name}}\n {{'organization' | i18n}}\n
\n
\n
\n \n {{'organizationIsDisabled' | i18n}}\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n\n\n","import {\n Component,\n OnInit,\n} from '@angular/core';\n\n@Component({\n selector: 'app-user-layout',\n templateUrl: 'user-layout.component.html',\n})\nexport class UserLayoutComponent implements OnInit {\n ngOnInit() {\n document.body.classList.remove('layout_frontend');\n }\n}\n","\n\n\n","import {\n Component,\n OnInit,\n} from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport {\n Toast,\n ToasterService,\n} from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { StateService } from 'jslib/abstractions/state.service';\nimport { UserService } from 'jslib/abstractions/user.service';\nimport { EmergencyAccessAcceptRequest } from 'jslib/models/request/emergencyAccessAcceptRequest';\n\n@Component({\n selector: 'app-accept-emergency',\n templateUrl: 'accept-emergency.component.html',\n})\nexport class AcceptEmergencyComponent implements OnInit {\n loading = true;\n authed = false;\n name: string;\n email: string;\n actionPromise: Promise;\n\n constructor(private router: Router, private toasterService: ToasterService,\n private i18nService: I18nService, private route: ActivatedRoute,\n private apiService: ApiService, private userService: UserService,\n private stateService: StateService) { }\n\n ngOnInit() {\n let fired = false;\n this.route.queryParams.subscribe(async qParams => {\n if (fired) {\n return;\n }\n fired = true;\n await this.stateService.remove('emergencyInvitation');\n let error = qParams.id == null || qParams.name == null || qParams.email == null || qParams.token == null;\n let errorMessage: string = null;\n if (!error) {\n this.authed = await this.userService.isAuthenticated();\n if (this.authed) {\n const request = new EmergencyAccessAcceptRequest();\n request.token = qParams.token;\n try {\n this.actionPromise = this.apiService.postEmergencyAccessAccept(qParams.id, request);\n await this.actionPromise;\n const toast: Toast = {\n type: 'success',\n title: this.i18nService.t('inviteAccepted'),\n body: this.i18nService.t('emergencyInviteAcceptedDesc'),\n timeout: 10000,\n };\n this.toasterService.popAsync(toast);\n this.router.navigate(['/vault']);\n } catch (e) {\n error = true;\n errorMessage = e.message;\n }\n } else {\n await this.stateService.save('emergencyInvitation', qParams);\n this.email = qParams.email;\n this.name = qParams.name;\n if (this.name != null) {\n // Fix URL encoding of space issue with Angular\n this.name = this.name.replace(/\\+/g, ' ');\n }\n }\n }\n\n if (error) {\n const toast: Toast = {\n type: 'error',\n title: null,\n body: errorMessage != null ? this.i18nService.t('emergencyInviteAcceptFailedShort', errorMessage) :\n this.i18nService.t('emergencyInviteAcceptFailed'),\n timeout: 10000,\n };\n this.toasterService.popAsync(toast);\n this.router.navigate(['/']);\n }\n\n this.loading = false;\n });\n }\n}\n","
\n
\n \"Bitwarden\"\n

\n \n {{'loading' | i18n}}\n

\n
\n
\n
\n
\n
\n

{{'emergencyAccess' | i18n}}

\n
\n
\n

\n {{name}}\n

\n

{{'acceptEmergencyAccess' | i18n}}

\n
\n \n
\n
\n
\n
\n
\n","import {\n Component,\n OnInit,\n} from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport {\n Toast,\n ToasterService,\n} from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { StateService } from 'jslib/abstractions/state.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { OrganizationUserAcceptRequest } from 'jslib/models/request/organizationUserAcceptRequest';\n\n@Component({\n selector: 'app-accept-organization',\n templateUrl: 'accept-organization.component.html',\n})\nexport class AcceptOrganizationComponent implements OnInit {\n loading = true;\n authed = false;\n orgName: string;\n email: string;\n actionPromise: Promise;\n\n constructor(private router: Router, private toasterService: ToasterService,\n private i18nService: I18nService, private route: ActivatedRoute,\n private apiService: ApiService, private userService: UserService,\n private stateService: StateService) { }\n\n ngOnInit() {\n let fired = false;\n this.route.queryParams.subscribe(async qParams => {\n if (fired) {\n return;\n }\n fired = true;\n await this.stateService.remove('orgInvitation');\n let error = qParams.organizationId == null || qParams.organizationUserId == null || qParams.token == null;\n let errorMessage: string = null;\n if (!error) {\n this.authed = await this.userService.isAuthenticated();\n if (this.authed) {\n const request = new OrganizationUserAcceptRequest();\n request.token = qParams.token;\n try {\n this.actionPromise = this.apiService.postOrganizationUserAccept(qParams.organizationId,\n qParams.organizationUserId, request);\n await this.actionPromise;\n const toast: Toast = {\n type: 'success',\n title: this.i18nService.t('inviteAccepted'),\n body: this.i18nService.t('inviteAcceptedDesc'),\n timeout: 10000,\n };\n this.toasterService.popAsync(toast);\n this.router.navigate(['/vault']);\n } catch (e) {\n error = true;\n errorMessage = e.message;\n }\n } else {\n await this.stateService.save('orgInvitation', qParams);\n this.email = qParams.email;\n this.orgName = qParams.organizationName;\n if (this.orgName != null) {\n // Fix URL encoding of space issue with Angular\n this.orgName = this.orgName.replace(/\\+/g, ' ');\n }\n }\n }\n\n if (error) {\n const toast: Toast = {\n type: 'error',\n title: null,\n body: errorMessage != null ? this.i18nService.t('inviteAcceptFailedShort', errorMessage) :\n this.i18nService.t('inviteAcceptFailed'),\n timeout: 10000,\n };\n this.toasterService.popAsync(toast);\n this.router.navigate(['/']);\n }\n\n this.loading = false;\n });\n }\n}\n","
\n
\n \"Bitwarden\"\n

\n \n {{'loading' | i18n}}\n

\n
\n
\n
\n
\n
\n

{{'joinOrganization' | i18n}}

\n
\n
\n

\n {{orgName}}\n {{email}}\n

\n

{{'joinOrganizationDesc' | i18n}}

\n
\n \n
\n
\n
\n
\n
\n","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\nimport { HintComponent as BaseHintComponent } from 'jslib/angular/components/hint.component';\n\n@Component({\n selector: 'app-hint',\n templateUrl: 'hint.component.html',\n})\nexport class HintComponent extends BaseHintComponent {\n constructor(router: Router, i18nService: I18nService,\n apiService: ApiService, platformUtilsService: PlatformUtilsService) {\n super(router, i18nService, apiService, platformUtilsService);\n }\n}\n","
\n
\n
\n

{{'passwordHint' | i18n}}

\n
\n
\n
\n \n \n {{'enterEmailToGetHint' | i18n}}\n
\n
\n
\n \n \n {{'cancel' | i18n}}\n \n
\n
\n
\n
\n
\n
\n","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { EnvironmentService } from 'jslib/abstractions/environment.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { StateService } from 'jslib/abstractions/state.service';\nimport { StorageService } from 'jslib/abstractions/storage.service';\nimport { UserService } from 'jslib/abstractions/user.service';\nimport { VaultTimeoutService } from 'jslib/abstractions/vaultTimeout.service';\n\nimport { RouterService } from '../services/router.service';\n\nimport { LockComponent as BaseLockComponent } from 'jslib/angular/components/lock.component';\n\n@Component({\n selector: 'app-lock',\n templateUrl: 'lock.component.html',\n})\nexport class LockComponent extends BaseLockComponent {\n constructor(router: Router, i18nService: I18nService,\n platformUtilsService: PlatformUtilsService, messagingService: MessagingService,\n userService: UserService, cryptoService: CryptoService,\n storageService: StorageService, vaultTimeoutService: VaultTimeoutService,\n environmentService: EnvironmentService, private routerService: RouterService,\n stateService: StateService, apiService: ApiService) {\n super(router, i18nService, platformUtilsService, messagingService, userService, cryptoService,\n storageService, vaultTimeoutService, environmentService, stateService, apiService);\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n this.onSuccessfulSubmit = () => {\n const previousUrl = this.routerService.getPreviousUrl();\n if (previousUrl !== '/' && previousUrl.indexOf('lock') === -1) {\n this.successRoute = previousUrl;\n }\n this.router.navigate([this.successRoute]);\n };\n }\n}\n","
\n
\n
\n

\n \n

\n

{{'yourVaultIsLocked' | i18n}}

\n
\n
\n
\n \n
\n \n \n
\n \n {{'loggedInAsEmailOn' | i18n : email : webVaultHostname}}\n \n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n","import { Component } from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { AuthService } from 'jslib/abstractions/auth.service';\nimport { CryptoFunctionService } from 'jslib/abstractions/cryptoFunction.service';\nimport { EnvironmentService } from 'jslib/abstractions/environment.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PasswordGenerationService } from 'jslib/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { StateService } from 'jslib/abstractions/state.service';\nimport { StorageService } from 'jslib/abstractions/storage.service';\n\nimport { LoginComponent as BaseLoginComponent } from 'jslib/angular/components/login.component';\n\n@Component({\n selector: 'app-login',\n templateUrl: 'login.component.html',\n})\nexport class LoginComponent extends BaseLoginComponent {\n constructor(authService: AuthService, router: Router,\n i18nService: I18nService, private route: ActivatedRoute,\n storageService: StorageService, stateService: StateService,\n platformUtilsService: PlatformUtilsService, environmentService: EnvironmentService,\n passwordGenerationService: PasswordGenerationService, cryptoFunctionService: CryptoFunctionService) {\n super(authService, router,\n platformUtilsService, i18nService,\n stateService, environmentService,\n passwordGenerationService, cryptoFunctionService,\n storageService);\n this.onSuccessfulLoginNavigate = this.goAfterLogIn;\n }\n\n async ngOnInit() {\n const queryParamsSub = this.route.queryParams.subscribe(async qParams => {\n if (qParams.email != null && qParams.email.indexOf('@') > -1) {\n this.email = qParams.email;\n }\n if (qParams.premium != null) {\n this.stateService.save('loginRedirect', { route: '/settings/premium' });\n } else if (qParams.org != null) {\n this.stateService.save('loginRedirect',\n { route: '/settings/create-organization', qParams: { plan: qParams.org } });\n }\n await super.ngOnInit();\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n }\n\n async goAfterLogIn() {\n const orgInvite = await this.stateService.get('orgInvitation');\n const emergencyInvite = await this.stateService.get('emergencyInvitation');\n if (orgInvite != null) {\n this.router.navigate(['accept-organization'], { queryParams: orgInvite });\n } else if (emergencyInvite != null) {\n this.router.navigate(['accept-emergency'], { queryParams: emergencyInvite });\n } else {\n const loginRedirect = await this.stateService.get('loginRedirect');\n if (loginRedirect != null) {\n this.router.navigate([loginRedirect.route], { queryParams: loginRedirect.qParams });\n await this.stateService.remove('loginRedirect');\n } else {\n this.router.navigate([this.successRoute]);\n }\n }\n }\n}\n","
\n
\n
\n \n

{{'loginOrCreateNewAccount' | i18n}}

\n
\n
\n
\n \n \n
\n
\n \n
\n \n \n
\n \n {{'getMasterPasswordHint' | i18n}}\n \n
\n
\n \n \n
\n
\n
\n \n \n {{'createAccount' | i18n}}\n \n
\n \n
\n
\n
\n
\n
\n","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\nimport { DeleteRecoverRequest } from 'jslib/models/request/deleteRecoverRequest';\n\n@Component({\n selector: 'app-recover-delete',\n templateUrl: 'recover-delete.component.html',\n})\nexport class RecoverDeleteComponent {\n email: string;\n formPromise: Promise;\n\n constructor(private router: Router, private apiService: ApiService,\n private toasterService: ToasterService, private i18nService: I18nService) {\n }\n\n async submit() {\n try {\n const request = new DeleteRecoverRequest();\n request.email = this.email.trim().toLowerCase();\n this.formPromise = this.apiService.postAccountRecoverDelete(request);\n await this.formPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('deleteRecoverEmailSent'));\n this.router.navigate(['/']);\n } catch { }\n }\n}\n","
\n
\n
\n

{{'deleteAccount' | i18n}}

\n
\n
\n

{{'deleteRecoverDesc' | i18n}}

\n
\n \n \n
\n
\n
\n \n \n {{'cancel' | i18n}}\n \n
\n
\n
\n
\n
\n
\n","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { AuthService } from 'jslib/abstractions/auth.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\nimport { TwoFactorRecoveryRequest } from 'jslib/models/request/twoFactorRecoveryRequest';\n\n@Component({\n selector: 'app-recover-two-factor',\n templateUrl: 'recover-two-factor.component.html',\n})\nexport class RecoverTwoFactorComponent {\n email: string;\n masterPassword: string;\n recoveryCode: string;\n formPromise: Promise;\n\n constructor(private router: Router, private apiService: ApiService,\n private toasterService: ToasterService, private i18nService: I18nService,\n private cryptoService: CryptoService, private authService: AuthService) { }\n\n async submit() {\n try {\n const request = new TwoFactorRecoveryRequest();\n request.recoveryCode = this.recoveryCode.replace(/\\s/g, '').toLowerCase();\n request.email = this.email.trim().toLowerCase();\n const key = await this.authService.makePreloginKey(this.masterPassword, request.email);\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, key);\n this.formPromise = this.apiService.postTwoFactorRecover(request);\n await this.formPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('twoStepRecoverDisabled'));\n this.router.navigate(['/']);\n } catch { }\n }\n}\n","
\n
\n
\n

{{'recoverAccountTwoStep' | i18n}}

\n
\n
\n

{{'recoverAccountTwoStepDesc' | i18n}}\n {{'learnMore' | i18n}}\n

\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n {{'cancel' | i18n}}\n \n
\n
\n
\n
\n
\n
\n","import { Component } from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { AuthService } from 'jslib/abstractions/auth.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PasswordGenerationService } from 'jslib/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib/abstractions/policy.service';\nimport { StateService } from 'jslib/abstractions/state.service';\n\nimport { RegisterComponent as BaseRegisterComponent } from 'jslib/angular/components/register.component';\n\nimport { MasterPasswordPolicyOptions } from 'jslib/models/domain/masterPasswordPolicyOptions';\nimport { Policy } from 'jslib/models/domain/policy';\n\nimport { PolicyData } from 'jslib/models/data/policyData';\nimport { ReferenceEventRequest } from 'jslib/models/request/referenceEventRequest';\n\n@Component({\n selector: 'app-register',\n templateUrl: 'register.component.html',\n})\nexport class RegisterComponent extends BaseRegisterComponent {\n showCreateOrgMessage = false;\n layout = '';\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n\n private policies: Policy[];\n\n constructor(authService: AuthService, router: Router,\n i18nService: I18nService, cryptoService: CryptoService,\n apiService: ApiService, private route: ActivatedRoute,\n stateService: StateService, platformUtilsService: PlatformUtilsService,\n passwordGenerationService: PasswordGenerationService, private policyService: PolicyService) {\n super(authService, router, i18nService, cryptoService, apiService, stateService, platformUtilsService,\n passwordGenerationService);\n }\n\n getPasswordScoreAlertDisplay() {\n if (this.enforcedPolicyOptions == null) {\n return '';\n }\n\n let str: string;\n switch (this.enforcedPolicyOptions.minComplexity) {\n case 4:\n str = this.i18nService.t('strong');\n break;\n case 3:\n str = this.i18nService.t('good');\n break;\n default:\n str = this.i18nService.t('weak');\n break;\n }\n return str + ' (' + this.enforcedPolicyOptions.minComplexity + ')';\n }\n\n async ngOnInit() {\n const queryParamsSub = this.route.queryParams.subscribe(qParams => {\n this.referenceData = new ReferenceEventRequest();\n if (qParams.email != null && qParams.email.indexOf('@') > -1) {\n this.email = qParams.email;\n }\n if (qParams.premium != null) {\n this.stateService.save('loginRedirect', { route: '/settings/premium' });\n } else if (qParams.org != null) {\n this.showCreateOrgMessage = true;\n this.referenceData.flow = qParams.org;\n this.stateService.save('loginRedirect',\n { route: '/settings/create-organization', qParams: { plan: qParams.org } });\n }\n if (qParams.layout != null) {\n this.layout = this.referenceData.layout = qParams.layout;\n }\n if (qParams.reference != null) {\n this.referenceData.id = qParams.reference;\n } else {\n this.referenceData.id = ('; ' + document.cookie).split('; reference=').pop().split(';').shift();\n }\n if (this.referenceData.id === '') {\n this.referenceData.id = null;\n }\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n const invite = await this.stateService.get('orgInvitation');\n if (invite != null) {\n try {\n const policies = await this.apiService.getPoliciesByToken(invite.organizationId, invite.token,\n invite.email, invite.organizationUserId);\n if (policies.data != null) {\n const policiesData = policies.data.map(p => new PolicyData(p));\n this.policies = policiesData.map(p => new Policy(p));\n }\n } catch { }\n }\n\n if (this.policies != null) {\n this.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions(this.policies);\n }\n }\n\n async submit() {\n if (this.enforcedPolicyOptions != null &&\n !this.policyService.evaluateMasterPassword(this.masterPasswordScore, this.masterPassword,\n this.enforcedPolicyOptions)) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPasswordPolicyRequirementsNotMet'));\n return;\n }\n\n await super.submit();\n }\n}\n","
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n

Companies globally trust Bitwarden for password management.

\n

Start your 7-day free trial!

\n

Quickly deploy your organization

\n

Use Bitwarden across all platforms

\n

Collaborate and share securely

\n
\n
\n \n \"Wired\"\n \n
\n
\n \"Bitwarden has become a popular choice among open-source software advocates. After using\n it for a few months, I can see why.\" - February 2020\n
\n
\n
\n
\n

Enterprise 3 layout

\n
\n
\n

Enterprise 4 layout

\n
\n
\n
\n
\n
\n
\n

{{'createAccount' | i18n}}

\n
\n
\n \n {{'createOrganizationCreatePersonalAccount' | i18n}}\n \n
\n \n \n {{'emailAddressDesc' | i18n}}\n
\n
\n \n \n {{'yourNameDesc' | i18n}}\n
\n
\n \n {{'masterPasswordPolicyInEffect' | i18n}}\n
    \n
  • 0\">\n {{'policyInEffectMinComplexity' | i18n : getPasswordScoreAlertDisplay()}}\n
  • \n
  • 0\">\n {{'policyInEffectMinLength' | i18n : enforcedPolicyOptions?.minLength.toString()}}\n
  • \n
  • \n {{'policyInEffectUppercase' | i18n}}
  • \n
  • \n {{'policyInEffectLowercase' | i18n}}
  • \n
  • \n {{'policyInEffectNumbers' | i18n}}
  • \n
  • \n {{'policyInEffectSpecial' | i18n : '!@#$%^&*'}}
  • \n
\n
\n \n
\n
\n \n \n \n
\n
\n \n
\n
\n
\n {{'masterPassDesc' | i18n}}\n
\n
\n \n
\n \n \n
\n
\n
\n \n \n {{'masterPassHintDesc' | i18n}}\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n {{'cancel' | i18n}}\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n","import { Component } from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib/abstractions/policy.service';\nimport { SyncService } from 'jslib/abstractions/sync.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport {\n SetPasswordComponent as BaseSetPasswordComponent,\n} from 'jslib/angular/components/set-password.component';\n\n@Component({\n selector: 'app-set-password',\n templateUrl: 'set-password.component.html',\n})\nexport class SetPasswordComponent extends BaseSetPasswordComponent {\n constructor(apiService: ApiService, i18nService: I18nService,\n cryptoService: CryptoService, messagingService: MessagingService,\n userService: UserService, passwordGenerationService: PasswordGenerationService,\n platformUtilsService: PlatformUtilsService, policyService: PolicyService, router: Router,\n syncService: SyncService, route: ActivatedRoute) {\n super(i18nService, cryptoService, messagingService, userService, passwordGenerationService,\n platformUtilsService, policyService, router, apiService, syncService, route);\n }\n}\n","
\n
\n
\n

{{'setMasterPassword' | i18n}}

\n
\n
\n \n {{'loading' | i18n}}\n
\n
\n {{'ssoCompleteRegistration' | i18n}}\n
\n \n {{'masterPasswordPolicyInEffect' | i18n}}\n
    \n
  • 0\">\n {{'policyInEffectMinComplexity' | i18n : getPasswordScoreAlertDisplay()}}\n
  • \n
  • 0\">\n {{'policyInEffectMinLength' | i18n : enforcedPolicyOptions?.minLength.toString()}}\n
  • \n
  • \n {{'policyInEffectUppercase' | i18n}}
  • \n
  • \n {{'policyInEffectLowercase' | i18n}}
  • \n
  • \n {{'policyInEffectNumbers' | i18n}}
  • \n
  • \n {{'policyInEffectSpecial' | i18n : '!@#$%^&*'}}
  • \n
\n
\n \n
\n
\n \n \n \n
\n
\n \n
\n
\n
\n {{'masterPassDesc' | i18n}}\n
\n
\n \n
\n \n \n
\n
\n
\n \n \n {{'masterPassHintDesc' | i18n}}\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n","import { Component } from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { AuthService } from 'jslib/abstractions/auth.service';\nimport { CryptoFunctionService } from 'jslib/abstractions/cryptoFunction.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PasswordGenerationService } from 'jslib/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { StateService } from 'jslib/abstractions/state.service';\nimport { StorageService } from 'jslib/abstractions/storage.service';\n\nimport { SsoComponent as BaseSsoComponent } from 'jslib/angular/components/sso.component';\n\nconst IdentifierStorageKey = 'ssoOrgIdentifier';\n\n@Component({\n selector: 'app-sso',\n templateUrl: 'sso.component.html',\n})\nexport class SsoComponent extends BaseSsoComponent {\n constructor(authService: AuthService, router: Router,\n i18nService: I18nService, route: ActivatedRoute,\n storageService: StorageService, stateService: StateService,\n platformUtilsService: PlatformUtilsService, apiService: ApiService,\n cryptoFunctionService: CryptoFunctionService,\n passwordGenerationService: PasswordGenerationService) {\n super(authService, router, i18nService, route, storageService, stateService, platformUtilsService,\n apiService, cryptoFunctionService, passwordGenerationService);\n this.redirectUri = window.location.origin + '/sso-connector.html';\n this.clientId = 'web';\n }\n\n async ngOnInit() {\n super.ngOnInit();\n const queryParamsSub = this.route.queryParams.subscribe(async qParams => {\n if (qParams.identifier != null) {\n this.identifier = qParams.identifier;\n } else {\n const storedIdentifier = await this.storageService.get(IdentifierStorageKey);\n if (storedIdentifier != null) {\n this.identifier = storedIdentifier;\n }\n }\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n }\n\n async submit() {\n await this.storageService.save(IdentifierStorageKey, this.identifier);\n if (this.clientId === 'browser') {\n document.cookie = `ssoHandOffMessage=${this.i18nService.t('ssoHandOff')};SameSite=strict`;\n }\n super.submit();\n }\n}\n","
\n
\n
\n \n
\n
\n \n {{'loading' | i18n}}\n
\n
\n

{{'ssoLogInWithOrgIdentifier' | i18n}}

\n
\n \n \n
\n
\n
\n \n \n {{'cancel' | i18n}}\n \n
\n
\n
\n
\n
\n
\n","import {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { ApiService } from '../../abstractions/api.service';\nimport { AuthService } from '../../abstractions/auth.service';\nimport { CryptoFunctionService } from '../../abstractions/cryptoFunction.service';\nimport { I18nService } from '../../abstractions/i18n.service';\nimport { PasswordGenerationService } from '../../abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from '../../abstractions/platformUtils.service';\nimport { StateService } from '../../abstractions/state.service';\nimport { StorageService } from '../../abstractions/storage.service';\n\nimport { ConstantsService } from '../../services/constants.service';\n\nimport { Utils } from '../../misc/utils';\n\nimport { AuthResult } from '../../models/domain/authResult';\n\nexport class SsoComponent {\n identifier: string;\n loggingIn = false;\n\n formPromise: Promise;\n initiateSsoFormPromise: Promise;\n onSuccessfulLogin: () => Promise;\n onSuccessfulLoginNavigate: () => Promise;\n onSuccessfulLoginTwoFactorNavigate: () => Promise;\n onSuccessfulLoginChangePasswordNavigate: () => Promise;\n\n protected twoFactorRoute = '2fa';\n protected successRoute = 'lock';\n protected changePasswordRoute = 'set-password';\n protected clientId: string;\n protected redirectUri: string;\n protected state: string;\n protected codeChallenge: string;\n\n constructor(protected authService: AuthService, protected router: Router,\n protected i18nService: I18nService, protected route: ActivatedRoute,\n protected storageService: StorageService, protected stateService: StateService,\n protected platformUtilsService: PlatformUtilsService, protected apiService: ApiService,\n protected cryptoFunctionService: CryptoFunctionService,\n protected passwordGenerationService: PasswordGenerationService) { }\n\n async ngOnInit() {\n const queryParamsSub = this.route.queryParams.subscribe(async qParams => {\n if (qParams.code != null && qParams.state != null) {\n const codeVerifier = await this.storageService.get(ConstantsService.ssoCodeVerifierKey);\n const state = await this.storageService.get(ConstantsService.ssoStateKey);\n await this.storageService.remove(ConstantsService.ssoCodeVerifierKey);\n await this.storageService.remove(ConstantsService.ssoStateKey);\n if (qParams.code != null && codeVerifier != null && state != null && this.checkState(state, qParams.state)) {\n await this.logIn(qParams.code, codeVerifier, this.getOrgIdentiferFromState(qParams.state));\n }\n } else if (qParams.clientId != null && qParams.redirectUri != null && qParams.state != null &&\n qParams.codeChallenge != null) {\n this.redirectUri = qParams.redirectUri;\n this.state = qParams.state;\n this.codeChallenge = qParams.codeChallenge;\n this.clientId = qParams.clientId;\n }\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n }\n\n async submit(returnUri?: string, includeUserIdentifier?: boolean) {\n this.initiateSsoFormPromise = this.preValidate();\n if (await this.initiateSsoFormPromise) {\n const authorizeUrl = await this.buildAuthorizeUrl(returnUri, includeUserIdentifier);\n this.platformUtilsService.launchUri(authorizeUrl, { sameWindow: true });\n }\n }\n\n async preValidate(): Promise {\n if (this.identifier == null || this.identifier === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('ssoValidationFailed'),\n this.i18nService.t('ssoIdentifierRequired'));\n return false;\n }\n return await this.apiService.preValidateSso(this.identifier);\n }\n\n protected async buildAuthorizeUrl(returnUri?: string, includeUserIdentifier?: boolean): Promise {\n let codeChallenge = this.codeChallenge;\n let state = this.state;\n\n const passwordOptions: any = {\n type: 'password',\n length: 64,\n uppercase: true,\n lowercase: true,\n numbers: true,\n special: false,\n };\n\n if (codeChallenge == null) {\n const codeVerifier = await this.passwordGenerationService.generatePassword(passwordOptions);\n const codeVerifierHash = await this.cryptoFunctionService.hash(codeVerifier, 'sha256');\n codeChallenge = Utils.fromBufferToUrlB64(codeVerifierHash);\n await this.storageService.save(ConstantsService.ssoCodeVerifierKey, codeVerifier);\n }\n\n if (state == null) {\n state = await this.passwordGenerationService.generatePassword(passwordOptions);\n if (returnUri) {\n state += `_returnUri='${returnUri}'`;\n }\n }\n\n // Add Organization Identifier to state\n state += `_identifier=${this.identifier}`;\n\n // Save state (regardless of new or existing)\n await this.storageService.save(ConstantsService.ssoStateKey, state);\n\n let authorizeUrl = this.apiService.identityBaseUrl + '/connect/authorize?' +\n 'client_id=' + this.clientId + '&redirect_uri=' + encodeURIComponent(this.redirectUri) + '&' +\n 'response_type=code&scope=api offline_access&' +\n 'state=' + state + '&code_challenge=' + codeChallenge + '&' +\n 'code_challenge_method=S256&response_mode=query&' +\n 'domain_hint=' + encodeURIComponent(this.identifier);\n\n if (includeUserIdentifier) {\n const userIdentifier = await this.apiService.getSsoUserIdentifier();\n authorizeUrl += `&user_identifier=${encodeURIComponent(userIdentifier)}`;\n }\n\n return authorizeUrl;\n }\n\n private async logIn(code: string, codeVerifier: string, orgIdFromState: string) {\n this.loggingIn = true;\n try {\n this.formPromise = this.authService.logInSso(code, codeVerifier, this.redirectUri);\n const response = await this.formPromise;\n if (response.twoFactor) {\n if (this.onSuccessfulLoginTwoFactorNavigate != null) {\n this.onSuccessfulLoginTwoFactorNavigate();\n } else {\n this.router.navigate([this.twoFactorRoute], {\n queryParams: {\n identifier: orgIdFromState,\n sso: 'true',\n },\n });\n }\n } else if (response.resetMasterPassword) {\n if (this.onSuccessfulLoginChangePasswordNavigate != null) {\n this.onSuccessfulLoginChangePasswordNavigate();\n } else {\n this.router.navigate([this.changePasswordRoute], {\n queryParams: {\n identifier: orgIdFromState,\n },\n });\n }\n } else {\n const disableFavicon = await this.storageService.get(ConstantsService.disableFaviconKey);\n await this.stateService.save(ConstantsService.disableFaviconKey, !!disableFavicon);\n if (this.onSuccessfulLogin != null) {\n this.onSuccessfulLogin();\n }\n if (this.onSuccessfulLoginNavigate != null) {\n this.onSuccessfulLoginNavigate();\n } else {\n this.router.navigate([this.successRoute]);\n }\n }\n } catch { }\n this.loggingIn = false;\n }\n\n private getOrgIdentiferFromState(state: string): string {\n if (state === null || state === undefined) {\n return null;\n }\n\n const stateSplit = state.split('_identifier=');\n return stateSplit.length > 1 ? stateSplit[1] : null;\n }\n\n private checkState(state: string, checkState: string): boolean {\n if (state === null || state === undefined) {\n return false;\n }\n if (checkState === null || checkState === undefined) {\n return false;\n }\n\n const stateSplit = state.split('_identifier=');\n const checkStateSplit = checkState.split('_identifier=');\n return stateSplit[0] === checkStateSplit[0];\n }\n}\n","import {\n Component,\n ComponentFactoryResolver,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\n\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { TwoFactorOptionsComponent } from './two-factor-options.component';\n\nimport { ModalComponent } from '../modal.component';\n\nimport { TwoFactorProviderType } from 'jslib/enums/twoFactorProviderType';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { AuthService } from 'jslib/abstractions/auth.service';\nimport { EnvironmentService } from 'jslib/abstractions/environment.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { StateService } from 'jslib/abstractions/state.service';\nimport { StorageService } from 'jslib/abstractions/storage.service';\n\nimport { TwoFactorComponent as BaseTwoFactorComponent } from 'jslib/angular/components/two-factor.component';\n\n@Component({\n selector: 'app-two-factor',\n templateUrl: 'two-factor.component.html',\n})\nexport class TwoFactorComponent extends BaseTwoFactorComponent {\n @ViewChild('twoFactorOptions', { read: ViewContainerRef, static: true }) twoFactorOptionsModal: ViewContainerRef;\n\n constructor(authService: AuthService, router: Router,\n i18nService: I18nService, apiService: ApiService,\n platformUtilsService: PlatformUtilsService, stateService: StateService,\n environmentService: EnvironmentService, private componentFactoryResolver: ComponentFactoryResolver,\n storageService: StorageService, route: ActivatedRoute) {\n super(authService, router, i18nService, apiService, platformUtilsService, window, environmentService,\n stateService, storageService, route);\n this.onSuccessfulLoginNavigate = this.goAfterLogIn;\n }\n\n anotherMethod() {\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n const modal = this.twoFactorOptionsModal.createComponent(factory).instance;\n const childComponent = modal.show(TwoFactorOptionsComponent,\n this.twoFactorOptionsModal);\n\n childComponent.onProviderSelected.subscribe(async (provider: TwoFactorProviderType) => {\n modal.close();\n this.selectedProviderType = provider;\n await this.init();\n });\n childComponent.onRecoverSelected.subscribe(() => {\n modal.close();\n });\n }\n\n async goAfterLogIn() {\n const orgInvite = await this.stateService.get('orgInvitation');\n const emergencyInvite = await this.stateService.get('emergencyInvitation');\n if (orgInvite != null) {\n this.router.navigate(['accept-organization'], { queryParams: orgInvite });\n } else if (emergencyInvite != null) {\n this.router.navigate(['accept-emergency'], { queryParams: emergencyInvite });\n } else {\n const loginRedirect = await this.stateService.get('loginRedirect');\n if (loginRedirect != null) {\n this.router.navigate([loginRedirect.route], { queryParams: loginRedirect.qParams });\n await this.stateService.remove('loginRedirect');\n } else {\n this.router.navigate([this.successRoute], {\n queryParams: {\n identifier: this.identifier,\n },\n });\n }\n }\n }\n}\n","
\n
\n
\n

{{title}}

\n
\n
\n \n

\n {{'enterVerificationCodeApp' | i18n}}

\n

\n {{'enterVerificationCodeEmail' | i18n : twoFactorEmail}}\n

\n
\n \n \n \n \n {{'sendVerificationCodeEmailAgain' | i18n}}\n \n \n
\n \n \n

{{'insertYubiKey' | i18n}}

\n \"\"\n
\n \n \n
\n
\n \n
\n \n
\n
\n \n
\n \n
\n
\n \n
\n \n \n
\n \n

{{'noTwoStepProviders' | i18n}}

\n

{{'noTwoStepProviders2' | i18n}}

\n
\n
\n
\n \n \n {{'cancel' | i18n}}\n \n
\n \n
\n
\n
\n
\n
\n\n","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { AuthService } from 'jslib/abstractions/auth.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\nimport {\n TwoFactorOptionsComponent as BaseTwoFactorOptionsComponent,\n} from 'jslib/angular/components/two-factor-options.component';\n\n@Component({\n selector: 'app-two-factor-options',\n templateUrl: 'two-factor-options.component.html',\n})\nexport class TwoFactorOptionsComponent extends BaseTwoFactorOptionsComponent {\n constructor(authService: AuthService, router: Router,\n i18nService: I18nService, platformUtilsService: PlatformUtilsService) {\n super(authService, router, i18nService, platformUtilsService, window);\n }\n}\n","
\n
\n
\n
\n

{{'twoStepOptions' | i18n}}

\n \n
\n \n
\n \n
\n
\n
\n
\n","import { PasswordVerificationRequest } from './passwordVerificationRequest';\n\nexport class TwoFactorEmailRequest extends PasswordVerificationRequest {\n email: string;\n\n constructor(email: string, masterPasswordHash: string) {\n super();\n this.masterPasswordHash = masterPasswordHash;\n this.email = email;\n }\n}\n","import { TwoFactorProviderType } from '../../enums/twoFactorProviderType';\n\nexport class AuthResult {\n twoFactor: boolean = false;\n resetMasterPassword: boolean = false;\n twoFactorProviders: Map = null;\n}\n","import {\n Component,\n OnInit,\n} from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { VerifyEmailRequest } from 'jslib/models/request/verifyEmailRequest';\n\n@Component({\n selector: 'app-verify-email-token',\n templateUrl: 'verify-email-token.component.html',\n})\nexport class VerifyEmailTokenComponent implements OnInit {\n constructor(private router: Router, private toasterService: ToasterService,\n private i18nService: I18nService, private route: ActivatedRoute,\n private apiService: ApiService, private userService: UserService) { }\n\n ngOnInit() {\n let fired = false;\n this.route.queryParams.subscribe(async qParams => {\n if (fired) {\n return;\n }\n fired = true;\n if (qParams.userId != null && qParams.token != null) {\n try {\n await this.apiService.postAccountVerifyEmailToken(\n new VerifyEmailRequest(qParams.userId, qParams.token));\n const authed = await this.userService.isAuthenticated();\n if (authed) {\n await this.apiService.refreshIdentityToken();\n }\n this.toasterService.popAsync('success', null, this.i18nService.t('emailVerified'));\n this.router.navigate(['/']);\n return;\n } catch { }\n }\n this.toasterService.popAsync('error', null, this.i18nService.t('emailVerifiedFailed'));\n this.router.navigate(['/']);\n });\n }\n}\n","
\n
\n \"Bitwarden\"\n

\n \n {{'loading' | i18n}}\n

\n
\n
\n","import {\n Component,\n OnInit,\n} from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\nimport { VerifyDeleteRecoverRequest } from 'jslib/models/request/verifyDeleteRecoverRequest';\n\n@Component({\n selector: 'app-verify-recover-delete',\n templateUrl: 'verify-recover-delete.component.html',\n})\nexport class VerifyRecoverDeleteComponent implements OnInit {\n email: string;\n formPromise: Promise;\n\n private userId: string;\n private token: string;\n\n constructor(private router: Router, private apiService: ApiService,\n private toasterService: ToasterService, private i18nService: I18nService,\n private route: ActivatedRoute) {\n }\n\n ngOnInit() {\n let fired = false;\n this.route.queryParams.subscribe(async qParams => {\n if (fired) {\n return;\n }\n fired = true;\n if (qParams.userId != null && qParams.token != null && qParams.email != null) {\n this.userId = qParams.userId;\n this.token = qParams.token;\n this.email = qParams.email;\n } else {\n this.router.navigate(['/']);\n }\n });\n }\n\n async submit() {\n try {\n const request = new VerifyDeleteRecoverRequest(this.userId, this.token);\n this.formPromise = this.apiService.postAccountRecoverDeleteToken(request);\n await this.formPromise;\n this.toasterService.popAsync('success', this.i18nService.t('accountDeleted'),\n this.i18nService.t('accountDeletedDesc'));\n this.router.navigate(['/']);\n } catch { }\n }\n}\n","
\n
\n
\n

{{'deleteAccount' | i18n}}

\n
\n
\n {{'deleteAccountWarning' | i18n}}\n

\n {{email}}\n

\n

{{'deleteRecoverConfirmDesc' | i18n}}

\n
\n
\n \n \n {{'cancel' | i18n}}\n \n
\n
\n
\n
\n
\n
\n","import {\n Component,\n ComponentFactoryResolver,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CollectionService } from 'jslib/abstractions/collection.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { SearchService } from 'jslib/abstractions/search.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { CollectionData } from 'jslib/models/data/collectionData';\nimport { Collection } from 'jslib/models/domain/collection';\nimport {\n CollectionDetailsResponse,\n CollectionResponse,\n} from 'jslib/models/response/collectionResponse';\nimport { ListResponse } from 'jslib/models/response/listResponse';\nimport { CollectionView } from 'jslib/models/view/collectionView';\n\nimport { ModalComponent } from '../../modal.component';\nimport { CollectionAddEditComponent } from './collection-add-edit.component';\nimport { EntityUsersComponent } from './entity-users.component';\n\n@Component({\n selector: 'app-org-manage-collections',\n templateUrl: 'collections.component.html',\n})\nexport class CollectionsComponent implements OnInit {\n @ViewChild('addEdit', { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef;\n @ViewChild('usersTemplate', { read: ViewContainerRef, static: true }) usersModalRef: ViewContainerRef;\n\n loading = true;\n organizationId: string;\n collections: CollectionView[];\n pagedCollections: CollectionView[];\n searchText: string;\n\n protected didScroll = false;\n protected pageSize = 100;\n\n private pagedCollectionsCount = 0;\n private modal: ModalComponent = null;\n\n constructor(private apiService: ApiService, private route: ActivatedRoute,\n private collectionService: CollectionService, private componentFactoryResolver: ComponentFactoryResolver,\n private toasterService: ToasterService, private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService, private userService: UserService,\n private searchService: SearchService) { }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organizationId = params.organizationId;\n await this.load();\n const queryParamsSub = this.route.queryParams.subscribe(async qParams => {\n this.searchText = qParams.search;\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n });\n }\n\n async load() {\n const organization = await this.userService.getOrganization(this.organizationId);\n let response: ListResponse;\n if (organization.canManageAllCollections) {\n response = await this.apiService.getCollections(this.organizationId);\n } else {\n response = await this.apiService.getUserCollections();\n }\n const collections = response.data.filter(c => c.organizationId === this.organizationId).map(r =>\n new Collection(new CollectionData(r as CollectionDetailsResponse)));\n this.collections = await this.collectionService.decryptMany(collections);\n this.resetPaging();\n this.loading = false;\n }\n\n loadMore() {\n if (!this.collections || this.collections.length <= this.pageSize) {\n return;\n }\n const pagedLength = this.pagedCollections.length;\n let pagedSize = this.pageSize;\n if (pagedLength === 0 && this.pagedCollectionsCount > this.pageSize) {\n pagedSize = this.pagedCollectionsCount;\n }\n if (this.collections.length > pagedLength) {\n this.pagedCollections =\n this.pagedCollections.concat(this.collections.slice(pagedLength, pagedLength + pagedSize));\n }\n this.pagedCollectionsCount = this.pagedCollections.length;\n this.didScroll = this.pagedCollections.length > this.pageSize;\n }\n\n edit(collection: CollectionView) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.addEditModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n CollectionAddEditComponent, this.addEditModalRef);\n\n childComponent.organizationId = this.organizationId;\n childComponent.collectionId = collection != null ? collection.id : null;\n childComponent.onSavedCollection.subscribe(() => {\n this.modal.close();\n this.load();\n });\n childComponent.onDeletedCollection.subscribe(() => {\n this.modal.close();\n this.removeCollection(collection);\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n add() {\n this.edit(null);\n }\n\n async delete(collection: CollectionView) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('deleteCollectionConfirmation'), collection.name,\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n await this.apiService.deleteCollection(this.organizationId, collection.id);\n this.toasterService.popAsync('success', null, this.i18nService.t('deletedCollectionId', collection.name));\n this.removeCollection(collection);\n } catch { }\n }\n\n users(collection: CollectionView) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.usersModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n EntityUsersComponent, this.usersModalRef);\n\n childComponent.organizationId = this.organizationId;\n childComponent.entity = 'collection';\n childComponent.entityId = collection.id;\n childComponent.entityName = collection.name;\n\n childComponent.onEditedUsers.subscribe(() => {\n this.load();\n this.modal.close();\n });\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n async resetPaging() {\n this.pagedCollections = [];\n this.loadMore();\n }\n\n isSearching() {\n return this.searchService.isSearchable(this.searchText);\n }\n\n isPaging() {\n const searching = this.isSearching();\n if (searching && this.didScroll) {\n this.resetPaging();\n }\n return !searching && this.collections && this.collections.length > this.pageSize;\n }\n\n private removeCollection(collection: CollectionView) {\n const index = this.collections.indexOf(collection);\n if (index > -1) {\n this.collections.splice(index, 1);\n this.resetPaging();\n }\n }\n}\n","
\n

{{'collections' | i18n}}

\n
\n
\n \n \n
\n \n
\n
\n\n \n {{'loading' | i18n}}\n\n\n

{{'noCollectionsInList' | i18n}}

\n \n \n \n \n \n \n \n
\n {{c.name}}\n \n \n
\n\n\n\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { EncString } from 'jslib/models/domain/encString';\nimport { SymmetricCryptoKey } from 'jslib/models/domain/symmetricCryptoKey';\nimport { CollectionRequest } from 'jslib/models/request/collectionRequest';\nimport { SelectionReadOnlyRequest } from 'jslib/models/request/selectionReadOnlyRequest';\nimport { GroupResponse } from 'jslib/models/response/groupResponse';\n\nimport { Utils } from 'jslib/misc/utils';\n\n@Component({\n selector: 'app-collection-add-edit',\n templateUrl: 'collection-add-edit.component.html',\n})\nexport class CollectionAddEditComponent implements OnInit {\n @Input() collectionId: string;\n @Input() organizationId: string;\n @Output() onSavedCollection = new EventEmitter();\n @Output() onDeletedCollection = new EventEmitter();\n\n loading = true;\n editMode: boolean = false;\n accessGroups: boolean = false;\n title: string;\n name: string;\n externalId: string;\n groups: GroupResponse[] = [];\n formPromise: Promise;\n deletePromise: Promise;\n\n private orgKey: SymmetricCryptoKey;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService, private userService: UserService) { }\n\n async ngOnInit() {\n const organization = await this.userService.getOrganization(this.organizationId);\n this.accessGroups = organization.useGroups;\n this.editMode = this.loading = this.collectionId != null;\n if (this.accessGroups) {\n const groupsResponse = await this.apiService.getGroups(this.organizationId);\n this.groups = groupsResponse.data.map(r => r).sort(Utils.getSortFunction(this.i18nService, 'name'));\n }\n this.orgKey = await this.cryptoService.getOrgKey(this.organizationId);\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t('editCollection');\n try {\n const collection = await this.apiService.getCollectionDetails(this.organizationId, this.collectionId);\n this.name = await this.cryptoService.decryptToUtf8(new EncString(collection.name), this.orgKey);\n this.externalId = collection.externalId;\n if (collection.groups != null && this.groups.length > 0) {\n collection.groups.forEach(s => {\n const group = this.groups.filter(g => !g.accessAll && g.id === s.id);\n if (group != null && group.length > 0) {\n (group[0] as any).checked = true;\n (group[0] as any).readOnly = s.readOnly;\n (group[0] as any).hidePasswords = s.hidePasswords;\n }\n });\n }\n } catch { }\n } else {\n this.title = this.i18nService.t('addCollection');\n }\n\n this.groups.forEach(g => {\n if (g.accessAll) {\n (g as any).checked = true;\n }\n });\n\n this.loading = false;\n }\n\n check(g: GroupResponse, select?: boolean) {\n if (g.accessAll) {\n return;\n }\n (g as any).checked = select == null ? !(g as any).checked : select;\n if (!(g as any).checked) {\n (g as any).readOnly = false;\n (g as any).hidePasswords = false;\n }\n }\n\n selectAll(select: boolean) {\n this.groups.forEach(g => this.check(g, select));\n }\n\n async submit() {\n if (this.orgKey == null) {\n throw new Error('No encryption key for this organization.');\n }\n\n const request = new CollectionRequest();\n request.name = (await this.cryptoService.encrypt(this.name, this.orgKey)).encryptedString;\n request.externalId = this.externalId;\n request.groups = this.groups.filter(g => (g as any).checked && !g.accessAll)\n .map(g => new SelectionReadOnlyRequest(g.id, !!(g as any).readOnly, !!(g as any).hidePasswords));\n\n try {\n if (this.editMode) {\n this.formPromise = this.apiService.putCollection(this.organizationId, this.collectionId, request);\n } else {\n this.formPromise = this.apiService.postCollection(this.organizationId, request);\n }\n await this.formPromise;\n this.toasterService.popAsync('success', null,\n this.i18nService.t(this.editMode ? 'editedCollectionId' : 'createdCollectionId', this.name));\n this.onSavedCollection.emit();\n } catch { }\n }\n\n async delete() {\n if (!this.editMode) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('deleteCollectionConfirmation'), this.name,\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.apiService.deleteCollection(this.organizationId, this.collectionId);\n await this.deletePromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('deletedCollectionId', this.name));\n this.onDeletedCollection.emit();\n } catch { }\n }\n}\n","
\n
\n
\n
\n

{{title}}

\n \n
\n
\n \n {{'loading' | i18n}}\n
\n
\n
\n \n \n
\n
\n \n \n {{'externalIdDesc' | i18n}}\n
\n \n

\n {{'groupAccess' | i18n}}\n
\n \n \n
\n

\n
\n {{'noGroupsInList' | i18n}}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
 {{'name' | i18n}}{{'hidePasswords' | i18n}}{{'readOnly' | i18n}}
\n \n \n {{g.name}}\n \n \n {{'groupAccessAllItems' | i18n}}\n \n \n \n \n \n
\n
\n
\n
\n \n \n
\n \n
\n
\n
\n
\n
\n","import { Collection } from '../domain/collection';\n\nimport { SelectionReadOnlyRequest } from './selectionReadOnlyRequest';\n\nexport class CollectionRequest {\n name: string;\n externalId: string;\n groups: SelectionReadOnlyRequest[] = [];\n\n constructor(collection?: Collection) {\n if (collection == null) {\n return;\n }\n this.name = collection.name ? collection.name.encryptedString : null;\n this.externalId = collection.externalId;\n }\n}\n","import {\n Component,\n OnInit,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { EventService } from '../../services/event.service';\n\nimport { EventResponse } from 'jslib/models/response/eventResponse';\nimport { ListResponse } from 'jslib/models/response/listResponse';\n\n@Component({\n selector: 'app-org-events',\n templateUrl: 'events.component.html',\n})\nexport class EventsComponent implements OnInit {\n loading = true;\n loaded = false;\n organizationId: string;\n events: any[];\n start: string;\n end: string;\n continuationToken: string;\n refreshPromise: Promise;\n morePromise: Promise;\n\n private orgUsersUserIdMap = new Map();\n private orgUsersIdMap = new Map();\n\n constructor(private apiService: ApiService, private route: ActivatedRoute,\n private eventService: EventService, private i18nService: I18nService,\n private toasterService: ToasterService, private userService: UserService,\n private router: Router) { }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organizationId = params.organizationId;\n const organization = await this.userService.getOrganization(this.organizationId);\n if (organization == null || !organization.useEvents) {\n this.router.navigate(['/organizations', this.organizationId]);\n return;\n }\n const defaultDates = this.eventService.getDefaultDateFilters();\n this.start = defaultDates[0];\n this.end = defaultDates[1];\n await this.load();\n });\n }\n\n async load() {\n const response = await this.apiService.getOrganizationUsers(this.organizationId);\n response.data.forEach(u => {\n const name = u.name == null || u.name.trim() === '' ? u.email : u.name;\n this.orgUsersIdMap.set(u.id, { name: name, email: u.email });\n this.orgUsersUserIdMap.set(u.userId, { name: name, email: u.email });\n });\n await this.loadEvents(true);\n this.loaded = true;\n }\n\n async loadEvents(clearExisting: boolean) {\n if (this.refreshPromise != null || this.morePromise != null) {\n return;\n }\n\n let dates: string[] = null;\n try {\n dates = this.eventService.formatDateFilters(this.start, this.end);\n } catch (e) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('invalidDateRange'));\n return;\n }\n\n this.loading = true;\n let response: ListResponse;\n try {\n const promise = this.apiService.getEventsOrganization(this.organizationId, dates[0], dates[1],\n clearExisting ? null : this.continuationToken);\n if (clearExisting) {\n this.refreshPromise = promise;\n } else {\n this.morePromise = promise;\n }\n response = await promise;\n } catch { }\n\n this.continuationToken = response.continuationToken;\n const events = response.data.map(r => {\n const userId = r.actingUserId == null ? r.userId : r.actingUserId;\n const eventInfo = this.eventService.getEventInfo(r);\n const user = userId != null && this.orgUsersUserIdMap.has(userId) ?\n this.orgUsersUserIdMap.get(userId) : null;\n return {\n message: eventInfo.message,\n appIcon: eventInfo.appIcon,\n appName: eventInfo.appName,\n userId: userId,\n userName: user != null ? user.name : this.i18nService.t('unknown'),\n userEmail: user != null ? user.email : '',\n date: r.date,\n ip: r.ipAddress,\n type: r.type,\n };\n });\n\n if (!clearExisting && this.events != null && this.events.length > 0) {\n this.events = this.events.concat(events);\n } else {\n this.events = events;\n }\n\n this.loading = false;\n this.morePromise = null;\n this.refreshPromise = null;\n }\n}\n","
\n

{{'eventLogs' | i18n}}

\n
\n
\n \n \n -\n \n \n
\n \n
\n
\n\n \n {{'loading' | i18n}}\n\n\n

{{'noEventsInList' | i18n}}

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{'timestamp' | i18n}}\n {{'device' | i18n}}\n {{'user' | i18n}}{{'event' | i18n}}
{{e.date | date:'medium'}}\n \n {{e.appName}}, {{e.ip}}\n \n {{e.userName}}\n
\n \n
\n","import {\n Component,\n ComponentFactoryResolver,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { SearchService } from 'jslib/abstractions/search.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { GroupResponse } from 'jslib/models/response/groupResponse';\n\nimport { Utils } from 'jslib/misc/utils';\n\nimport { ModalComponent } from '../../modal.component';\nimport { EntityUsersComponent } from './entity-users.component';\nimport { GroupAddEditComponent } from './group-add-edit.component';\n\n@Component({\n selector: 'app-org-groups',\n templateUrl: 'groups.component.html',\n})\nexport class GroupsComponent implements OnInit {\n @ViewChild('addEdit', { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef;\n @ViewChild('usersTemplate', { read: ViewContainerRef, static: true }) usersModalRef: ViewContainerRef;\n\n loading = true;\n organizationId: string;\n groups: GroupResponse[];\n pagedGroups: GroupResponse[];\n searchText: string;\n\n protected didScroll = false;\n protected pageSize = 100;\n\n private pagedGroupsCount = 0;\n private modal: ModalComponent = null;\n\n constructor(private apiService: ApiService, private route: ActivatedRoute,\n private i18nService: I18nService, private componentFactoryResolver: ComponentFactoryResolver,\n private toasterService: ToasterService, private platformUtilsService: PlatformUtilsService,\n private userService: UserService, private router: Router,\n private searchService: SearchService) { }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organizationId = params.organizationId;\n const organization = await this.userService.getOrganization(this.organizationId);\n if (organization == null || !organization.useGroups) {\n this.router.navigate(['/organizations', this.organizationId]);\n return;\n }\n await this.load();\n const queryParamsSub = this.route.queryParams.subscribe(async qParams => {\n this.searchText = qParams.search;\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n });\n }\n\n async load() {\n const response = await this.apiService.getGroups(this.organizationId);\n const groups = response.data != null && response.data.length > 0 ? response.data : [];\n groups.sort(Utils.getSortFunction(this.i18nService, 'name'));\n this.groups = groups;\n this.resetPaging();\n this.loading = false;\n }\n\n loadMore() {\n if (!this.groups || this.groups.length <= this.pageSize) {\n return;\n }\n const pagedLength = this.pagedGroups.length;\n let pagedSize = this.pageSize;\n if (pagedLength === 0 && this.pagedGroupsCount > this.pageSize) {\n pagedSize = this.pagedGroupsCount;\n }\n if (this.groups.length > pagedLength) {\n this.pagedGroups = this.pagedGroups.concat(this.groups.slice(pagedLength, pagedLength + pagedSize));\n }\n this.pagedGroupsCount = this.pagedGroups.length;\n this.didScroll = this.pagedGroups.length > this.pageSize;\n }\n\n edit(group: GroupResponse) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.addEditModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n GroupAddEditComponent, this.addEditModalRef);\n\n childComponent.organizationId = this.organizationId;\n childComponent.groupId = group != null ? group.id : null;\n childComponent.onSavedGroup.subscribe(() => {\n this.modal.close();\n this.load();\n });\n childComponent.onDeletedGroup.subscribe(() => {\n this.modal.close();\n this.removeGroup(group);\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n add() {\n this.edit(null);\n }\n\n async delete(group: GroupResponse) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('deleteGroupConfirmation'), group.name,\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n await this.apiService.deleteGroup(this.organizationId, group.id);\n this.toasterService.popAsync('success', null, this.i18nService.t('deletedGroupId', group.name));\n this.removeGroup(group);\n } catch { }\n }\n\n users(group: GroupResponse) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.usersModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n EntityUsersComponent, this.usersModalRef);\n\n childComponent.organizationId = this.organizationId;\n childComponent.entity = 'group';\n childComponent.entityId = group.id;\n childComponent.entityName = group.name;\n\n childComponent.onEditedUsers.subscribe(() => {\n this.modal.close();\n });\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n async resetPaging() {\n this.pagedGroups = [];\n this.loadMore();\n }\n\n isSearching() {\n return this.searchService.isSearchable(this.searchText);\n }\n\n isPaging() {\n const searching = this.isSearching();\n if (searching && this.didScroll) {\n this.resetPaging();\n }\n return !searching && this.groups && this.groups.length > this.pageSize;\n }\n\n private removeGroup(group: GroupResponse) {\n const index = this.groups.indexOf(group);\n if (index > -1) {\n this.groups.splice(index, 1);\n this.resetPaging();\n }\n }\n}\n","
\n

{{'groups' | i18n}}

\n
\n
\n \n \n
\n \n
\n
\n\n \n {{'loading' | i18n}}\n\n\n

{{'noGroupsInList' | i18n}}

\n \n \n \n \n \n \n \n
\n {{g.name}}\n \n \n
\n
\n\n\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CollectionService } from 'jslib/abstractions/collection.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\nimport { CollectionData } from 'jslib/models/data/collectionData';\nimport { Collection } from 'jslib/models/domain/collection';\nimport { GroupRequest } from 'jslib/models/request/groupRequest';\nimport { SelectionReadOnlyRequest } from 'jslib/models/request/selectionReadOnlyRequest';\nimport { CollectionDetailsResponse } from 'jslib/models/response/collectionResponse';\nimport { CollectionView } from 'jslib/models/view/collectionView';\n\n@Component({\n selector: 'app-group-add-edit',\n templateUrl: 'group-add-edit.component.html',\n})\nexport class GroupAddEditComponent implements OnInit {\n @Input() groupId: string;\n @Input() organizationId: string;\n @Output() onSavedGroup = new EventEmitter();\n @Output() onDeletedGroup = new EventEmitter();\n\n loading = true;\n editMode: boolean = false;\n title: string;\n name: string;\n externalId: string;\n access: 'all' | 'selected' = 'selected';\n collections: CollectionView[] = [];\n formPromise: Promise;\n deletePromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private collectionService: CollectionService,\n private platformUtilsService: PlatformUtilsService) { }\n\n async ngOnInit() {\n this.editMode = this.loading = this.groupId != null;\n await this.loadCollections();\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t('editGroup');\n try {\n const group = await this.apiService.getGroupDetails(this.organizationId, this.groupId);\n this.access = group.accessAll ? 'all' : 'selected';\n this.name = group.name;\n this.externalId = group.externalId;\n if (group.collections != null && this.collections != null) {\n group.collections.forEach(s => {\n const collection = this.collections.filter(c => c.id === s.id);\n if (collection != null && collection.length > 0) {\n (collection[0] as any).checked = true;\n collection[0].readOnly = s.readOnly;\n collection[0].hidePasswords = s.hidePasswords;\n }\n });\n }\n } catch { }\n } else {\n this.title = this.i18nService.t('addGroup');\n }\n\n this.loading = false;\n }\n\n async loadCollections() {\n const response = await this.apiService.getCollections(this.organizationId);\n const collections = response.data.map(r =>\n new Collection(new CollectionData(r as CollectionDetailsResponse)));\n this.collections = await this.collectionService.decryptMany(collections);\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n if (!(c as any).checked) {\n c.readOnly = false;\n }\n }\n\n selectAll(select: boolean) {\n this.collections.forEach(c => this.check(c, select));\n }\n\n async submit() {\n const request = new GroupRequest();\n request.name = this.name;\n request.externalId = this.externalId;\n request.accessAll = this.access === 'all';\n if (!request.accessAll) {\n request.collections = this.collections.filter(c => (c as any).checked)\n .map(c => new SelectionReadOnlyRequest(c.id, !!c.readOnly, !!c.hidePasswords));\n }\n\n try {\n if (this.editMode) {\n this.formPromise = this.apiService.putGroup(this.organizationId, this.groupId, request);\n } else {\n this.formPromise = this.apiService.postGroup(this.organizationId, request);\n }\n await this.formPromise;\n this.toasterService.popAsync('success', null,\n this.i18nService.t(this.editMode ? 'editedGroupId' : 'createdGroupId', this.name));\n this.onSavedGroup.emit();\n } catch { }\n }\n\n async delete() {\n if (!this.editMode) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('deleteGroupConfirmation'), this.name,\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.apiService.deleteGroup(this.organizationId, this.groupId);\n await this.deletePromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('deletedGroupId', this.name));\n this.onDeletedGroup.emit();\n } catch { }\n }\n}\n","
\n
\n
\n
\n

{{title}}

\n \n
\n
\n \n {{'loading' | i18n}}\n
\n
\n
\n \n \n
\n
\n \n \n {{'externalIdDesc' | i18n}}\n
\n

\n
\n {{'accessControl' | i18n}}\n \n \n \n
\n
\n \n \n
\n

\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n {{'noCollectionsInList' | i18n}}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
 {{'name' | i18n}}{{'hidePasswords' | i18n}}{{'readOnly' | i18n}}
\n \n \n {{c.name}}\n \n \n \n \n
\n
\n
\n
\n \n \n
\n \n
\n
\n
\n
\n
\n","import {\n Component,\n OnInit,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { Organization } from 'jslib/models/domain/organization';\n\n@Component({\n selector: 'app-org-manage',\n templateUrl: 'manage.component.html',\n})\nexport class ManageComponent implements OnInit {\n organization: Organization;\n accessPolicies = false;\n accessGroups = false;\n accessEvents = false;\n\n constructor(private route: ActivatedRoute, private userService: UserService) { }\n\n ngOnInit() {\n this.route.parent.params.subscribe(async params => {\n this.organization = await this.userService.getOrganization(params.organizationId);\n this.accessPolicies = this.organization.usePolicies;\n this.accessEvents = this.organization.useEvents;\n this.accessGroups = this.organization.useGroups;\n });\n }\n}\n","\n","import {\n Component,\n ComponentFactoryResolver,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ValidationService } from 'jslib/angular/services/validation.service';\nimport { ConstantsService } from 'jslib/services/constants.service';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { SearchService } from 'jslib/abstractions/search.service';\nimport { StorageService } from 'jslib/abstractions/storage.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { OrganizationUserConfirmRequest } from 'jslib/models/request/organizationUserConfirmRequest';\n\nimport { OrganizationUserUserDetailsResponse } from 'jslib/models/response/organizationUserResponse';\n\nimport { OrganizationUserStatusType } from 'jslib/enums/organizationUserStatusType';\nimport { OrganizationUserType } from 'jslib/enums/organizationUserType';\n\nimport { Utils } from 'jslib/misc/utils';\n\nimport { ModalComponent } from '../../modal.component';\nimport { EntityEventsComponent } from './entity-events.component';\nimport { UserAddEditComponent } from './user-add-edit.component';\nimport { UserConfirmComponent } from './user-confirm.component';\nimport { UserGroupsComponent } from './user-groups.component';\n\n@Component({\n selector: 'app-org-people',\n templateUrl: 'people.component.html',\n})\nexport class PeopleComponent implements OnInit {\n @ViewChild('addEdit', { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef;\n @ViewChild('groupsTemplate', { read: ViewContainerRef, static: true }) groupsModalRef: ViewContainerRef;\n @ViewChild('eventsTemplate', { read: ViewContainerRef, static: true }) eventsModalRef: ViewContainerRef;\n @ViewChild('confirmTemplate', { read: ViewContainerRef, static: true }) confirmModalRef: ViewContainerRef;\n\n loading = true;\n organizationId: string;\n users: OrganizationUserUserDetailsResponse[];\n pagedUsers: OrganizationUserUserDetailsResponse[];\n searchText: string;\n status: OrganizationUserStatusType = null;\n statusMap = new Map();\n organizationUserType = OrganizationUserType;\n organizationUserStatusType = OrganizationUserStatusType;\n actionPromise: Promise;\n accessEvents = false;\n accessGroups = false;\n\n protected didScroll = false;\n protected pageSize = 100;\n\n private pagedUsersCount = 0;\n private modal: ModalComponent = null;\n private allUsers: OrganizationUserUserDetailsResponse[];\n\n constructor(private apiService: ApiService, private route: ActivatedRoute,\n private i18nService: I18nService, private componentFactoryResolver: ComponentFactoryResolver,\n private platformUtilsService: PlatformUtilsService, private toasterService: ToasterService,\n private cryptoService: CryptoService, private userService: UserService, private router: Router,\n private storageService: StorageService, private searchService: SearchService,\n private validationService: ValidationService) { }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organizationId = params.organizationId;\n const organization = await this.userService.getOrganization(this.organizationId);\n if (!organization.canManageUsers) {\n this.router.navigate(['../collections'], { relativeTo: this.route });\n return;\n }\n this.accessEvents = organization.useEvents;\n this.accessGroups = organization.useGroups;\n await this.load();\n\n const queryParamsSub = this.route.queryParams.subscribe(async qParams => {\n this.searchText = qParams.search;\n if (qParams.viewEvents != null) {\n const user = this.users.filter(u => u.id === qParams.viewEvents);\n if (user.length > 0 && user[0].status === OrganizationUserStatusType.Confirmed) {\n this.events(user[0]);\n }\n }\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n });\n }\n\n async load() {\n const response = await this.apiService.getOrganizationUsers(this.organizationId);\n this.statusMap.clear();\n this.allUsers = response.data != null && response.data.length > 0 ? response.data : [];\n this.allUsers.sort(Utils.getSortFunction(this.i18nService, 'email'));\n this.allUsers.forEach(u => {\n if (!this.statusMap.has(u.status)) {\n this.statusMap.set(u.status, [u]);\n } else {\n this.statusMap.get(u.status).push(u);\n }\n });\n this.filter(this.status);\n this.loading = false;\n }\n\n filter(status: OrganizationUserStatusType) {\n this.status = status;\n if (this.status != null) {\n this.users = this.statusMap.get(this.status);\n } else {\n this.users = this.allUsers;\n }\n this.resetPaging();\n }\n\n loadMore() {\n if (!this.users || this.users.length <= this.pageSize) {\n return;\n }\n const pagedLength = this.pagedUsers.length;\n let pagedSize = this.pageSize;\n if (pagedLength === 0 && this.pagedUsersCount > this.pageSize) {\n pagedSize = this.pagedUsersCount;\n }\n if (this.users.length > pagedLength) {\n this.pagedUsers = this.pagedUsers.concat(this.users.slice(pagedLength, pagedLength + pagedSize));\n }\n this.pagedUsersCount = this.pagedUsers.length;\n this.didScroll = this.pagedUsers.length > this.pageSize;\n }\n\n get allCount() {\n return this.allUsers != null ? this.allUsers.length : 0;\n }\n\n get invitedCount() {\n return this.statusMap.has(OrganizationUserStatusType.Invited) ?\n this.statusMap.get(OrganizationUserStatusType.Invited).length : 0;\n }\n\n get acceptedCount() {\n return this.statusMap.has(OrganizationUserStatusType.Accepted) ?\n this.statusMap.get(OrganizationUserStatusType.Accepted).length : 0;\n }\n\n get confirmedCount() {\n return this.statusMap.has(OrganizationUserStatusType.Confirmed) ?\n this.statusMap.get(OrganizationUserStatusType.Confirmed).length : 0;\n }\n\n get showConfirmUsers(): boolean {\n return this.allUsers != null && this.statusMap != null && this.allUsers.length > 1 &&\n this.confirmedCount > 0 && this.confirmedCount < 3 && this.acceptedCount > 0;\n }\n\n edit(user: OrganizationUserUserDetailsResponse) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.addEditModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n UserAddEditComponent, this.addEditModalRef);\n\n childComponent.name = user != null ? user.name || user.email : null;\n childComponent.organizationId = this.organizationId;\n childComponent.organizationUserId = user != null ? user.id : null;\n childComponent.onSavedUser.subscribe(() => {\n this.modal.close();\n this.load();\n });\n childComponent.onDeletedUser.subscribe(() => {\n this.modal.close();\n this.removeUser(user);\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n invite() {\n this.edit(null);\n }\n\n groups(user: OrganizationUserUserDetailsResponse) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.groupsModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n UserGroupsComponent, this.groupsModalRef);\n\n childComponent.name = user != null ? user.name || user.email : null;\n childComponent.organizationId = this.organizationId;\n childComponent.organizationUserId = user != null ? user.id : null;\n childComponent.onSavedUser.subscribe(() => {\n this.modal.close();\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n async remove(user: OrganizationUserUserDetailsResponse) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('removeUserConfirmation'), user.name || user.email,\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n await this.apiService.deleteOrganizationUser(this.organizationId, user.id);\n this.toasterService.popAsync('success', null, this.i18nService.t('removedUserId', user.name || user.email));\n this.removeUser(user);\n } catch { }\n }\n\n async reinvite(user: OrganizationUserUserDetailsResponse) {\n if (this.actionPromise != null) {\n return;\n }\n this.actionPromise = this.apiService.postOrganizationUserReinvite(this.organizationId, user.id);\n await this.actionPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('hasBeenReinvited', user.name || user.email));\n this.actionPromise = null;\n }\n\n async confirm(user: OrganizationUserUserDetailsResponse) {\n function updateUser(self: PeopleComponent) {\n user.status = OrganizationUserStatusType.Confirmed;\n const mapIndex = self.statusMap.get(OrganizationUserStatusType.Accepted).indexOf(user);\n if (mapIndex > -1) {\n self.statusMap.get(OrganizationUserStatusType.Accepted).splice(mapIndex, 1);\n self.statusMap.get(OrganizationUserStatusType.Confirmed).push(user);\n }\n }\n\n const confirmUser = async (publicKey: Uint8Array) => {\n try {\n this.actionPromise = this.doConfirmation(user, publicKey);\n await this.actionPromise;\n updateUser(this);\n this.toasterService.popAsync('success', null, this.i18nService.t('hasBeenConfirmed', user.name || user.email));\n } catch (e) {\n this.validationService.showError(e);\n throw e;\n } finally {\n this.actionPromise = null;\n }\n };\n\n if (this.actionPromise != null) {\n return;\n }\n\n const autoConfirm = await this.storageService.get(ConstantsService.autoConfirmFingerprints);\n if (autoConfirm == null || !autoConfirm) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.confirmModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n UserConfirmComponent, this.confirmModalRef);\n\n childComponent.name = user != null ? user.name || user.email : null;\n childComponent.organizationId = this.organizationId;\n childComponent.organizationUserId = user != null ? user.id : null;\n childComponent.userId = user != null ? user.userId : null;\n childComponent.onConfirmedUser.subscribe(async (publicKey: Uint8Array) => {\n try {\n await confirmUser(publicKey);\n this.modal.close();\n } catch (e) {\n // tslint:disable-next-line\n console.error('Handled exception:', e);\n }\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n return;\n }\n\n try {\n const publicKeyResponse = await this.apiService.getUserPublicKey(user.userId);\n const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n try {\n // tslint:disable-next-line\n console.log('User\\'s fingerprint: ' +\n (await this.cryptoService.getFingerprint(user.userId, publicKey.buffer)).join('-'));\n } catch { }\n await confirmUser(publicKey);\n } catch (e) {\n // tslint:disable-next-line\n console.error('Handled exception:', e);\n }\n }\n\n async events(user: OrganizationUserUserDetailsResponse) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.eventsModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n EntityEventsComponent, this.eventsModalRef);\n\n childComponent.name = user.name || user.email;\n childComponent.organizationId = this.organizationId;\n childComponent.entityId = user.id;\n childComponent.showUser = false;\n childComponent.entity = 'user';\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n async resetPaging() {\n this.pagedUsers = [];\n this.loadMore();\n }\n\n isSearching() {\n return this.searchService.isSearchable(this.searchText);\n }\n\n isPaging() {\n const searching = this.isSearching();\n if (searching && this.didScroll) {\n this.resetPaging();\n }\n return !searching && this.users && this.users.length > this.pageSize;\n }\n\n private async doConfirmation(user: OrganizationUserUserDetailsResponse, publicKey: Uint8Array) {\n const orgKey = await this.cryptoService.getOrgKey(this.organizationId);\n const key = await this.cryptoService.rsaEncrypt(orgKey.key, publicKey.buffer);\n const request = new OrganizationUserConfirmRequest();\n request.key = key.encryptedString;\n await this.apiService.postOrganizationUserConfirm(this.organizationId, user.id, request);\n }\n\n private removeUser(user: OrganizationUserUserDetailsResponse) {\n let index = this.users.indexOf(user);\n if (index > -1) {\n this.users.splice(index, 1);\n this.resetPaging();\n }\n if (this.statusMap.has(OrganizationUserStatusType.Accepted)) {\n index = this.statusMap.get(OrganizationUserStatusType.Accepted).indexOf(user);\n if (index > -1) {\n this.statusMap.get(OrganizationUserStatusType.Accepted).splice(index, 1);\n }\n }\n if (this.statusMap.has(OrganizationUserStatusType.Invited)) {\n index = this.statusMap.get(OrganizationUserStatusType.Invited).indexOf(user);\n if (index > -1) {\n this.statusMap.get(OrganizationUserStatusType.Invited).splice(index, 1);\n }\n }\n if (this.statusMap.has(OrganizationUserStatusType.Confirmed)) {\n index = this.statusMap.get(OrganizationUserStatusType.Confirmed).indexOf(user);\n if (index > -1) {\n this.statusMap.get(OrganizationUserStatusType.Confirmed).splice(index, 1);\n }\n }\n }\n}\n","
\n

{{'people' | i18n}}

\n
\n
\n \n \n \n
\n
\n \n \n
\n \n
\n
\n\n \n {{'loading' | i18n}}\n\n\n

{{'noUsersInList' | i18n}}

\n \n \n {{'usersNeedConfirmed' | i18n}}\n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n {{u.email}}\n {{'invited' | i18n}}\n {{'accepted' | i18n}}\n {{u.name}}\n \n \n \n {{'userUsingTwoStep' | i18n}}\n \n \n {{'owner' | i18n}}\n {{'admin' | i18n}}\n {{'manager' | i18n}}\n {{'user' | i18n}}\n {{'custom' | i18n}}\n \n \n
\n
\n\n\n\n\n\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CollectionService } from 'jslib/abstractions/collection.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\nimport { CollectionData } from 'jslib/models/data/collectionData';\nimport { Collection } from 'jslib/models/domain/collection';\nimport { OrganizationUserInviteRequest } from 'jslib/models/request/organizationUserInviteRequest';\nimport { OrganizationUserUpdateRequest } from 'jslib/models/request/organizationUserUpdateRequest';\nimport { SelectionReadOnlyRequest } from 'jslib/models/request/selectionReadOnlyRequest';\nimport { CollectionDetailsResponse } from 'jslib/models/response/collectionResponse';\nimport { CollectionView } from 'jslib/models/view/collectionView';\n\nimport { OrganizationUserType } from 'jslib/enums/organizationUserType';\nimport { PermissionsApi } from 'jslib/models/api/permissionsApi';\n\n@Component({\n selector: 'app-user-add-edit',\n templateUrl: 'user-add-edit.component.html',\n})\nexport class UserAddEditComponent implements OnInit {\n @Input() name: string;\n @Input() organizationUserId: string;\n @Input() organizationId: string;\n @Output() onSavedUser = new EventEmitter();\n @Output() onDeletedUser = new EventEmitter();\n\n loading = true;\n editMode: boolean = false;\n title: string;\n emails: string;\n type: OrganizationUserType = OrganizationUserType.User;\n permissions = new PermissionsApi();\n showCustom = false;\n access: 'all' | 'selected' = 'selected';\n collections: CollectionView[] = [];\n formPromise: Promise;\n deletePromise: Promise;\n organizationUserType = OrganizationUserType;\n\n get customUserTypeSelected(): boolean {\n return this.type === OrganizationUserType.Custom;\n }\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private collectionService: CollectionService,\n private platformUtilsService: PlatformUtilsService) { }\n\n async ngOnInit() {\n this.editMode = this.loading = this.organizationUserId != null;\n await this.loadCollections();\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t('editUser');\n try {\n const user = await this.apiService.getOrganizationUser(this.organizationId, this.organizationUserId);\n this.access = user.accessAll ? 'all' : 'selected';\n this.type = user.type;\n if (user.type === OrganizationUserType.Custom) {\n this.permissions = user.permissions;\n }\n if (user.collections != null && this.collections != null) {\n user.collections.forEach(s => {\n const collection = this.collections.filter(c => c.id === s.id);\n if (collection != null && collection.length > 0) {\n (collection[0] as any).checked = true;\n collection[0].readOnly = s.readOnly;\n collection[0].hidePasswords = s.hidePasswords;\n }\n });\n }\n } catch { }\n } else {\n this.title = this.i18nService.t('inviteUser');\n }\n\n this.loading = false;\n }\n\n async loadCollections() {\n const response = await this.apiService.getCollections(this.organizationId);\n const collections = response.data.map(r =>\n new Collection(new CollectionData(r as CollectionDetailsResponse)));\n this.collections = await this.collectionService.decryptMany(collections);\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n if (!(c as any).checked) {\n c.readOnly = false;\n }\n }\n\n selectAll(select: boolean) {\n this.collections.forEach(c => this.check(c, select));\n }\n\n setRequestPermissions(p: PermissionsApi, clearPermissions: boolean) {\n p.accessBusinessPortal = clearPermissions ?\n false :\n this.permissions.accessBusinessPortal;\n p.accessEventLogs = this.permissions.accessEventLogs = clearPermissions ?\n false :\n this.permissions.accessEventLogs;\n p.accessImportExport = clearPermissions ?\n false :\n this.permissions.accessImportExport;\n p.accessReports = clearPermissions ?\n false :\n this.permissions.accessReports;\n p.manageAllCollections = clearPermissions ?\n false :\n this.permissions.manageAllCollections;\n p.manageAssignedCollections = clearPermissions ?\n false :\n this.permissions.manageAssignedCollections;\n p.manageGroups = clearPermissions ?\n false :\n this.permissions.manageGroups;\n p.manageSso = clearPermissions ?\n false :\n this.permissions.manageSso;\n p.managePolicies = clearPermissions ?\n false :\n this.permissions.managePolicies;\n p.manageUsers = clearPermissions ?\n false :\n this.permissions.manageUsers;\n p.manageResetPassword = clearPermissions ?\n false :\n this.permissions.manageResetPassword;\n return p;\n }\n\n async submit() {\n let collections: SelectionReadOnlyRequest[] = null;\n if (this.access !== 'all') {\n collections = this.collections.filter(c => (c as any).checked)\n .map(c => new SelectionReadOnlyRequest(c.id, !!c.readOnly, !!c.hidePasswords));\n }\n\n try {\n if (this.editMode) {\n const request = new OrganizationUserUpdateRequest();\n request.accessAll = this.access === 'all';\n request.type = this.type;\n request.collections = collections;\n request.permissions = this.setRequestPermissions(request.permissions ?? new PermissionsApi(), request.type !== OrganizationUserType.Custom);\n this.formPromise = this.apiService.putOrganizationUser(this.organizationId, this.organizationUserId,\n request);\n } else {\n const request = new OrganizationUserInviteRequest();\n request.emails = this.emails.trim().split(/\\s*,\\s*/);\n request.accessAll = this.access === 'all';\n request.type = this.type;\n request.permissions = this.setRequestPermissions(request.permissions ?? new PermissionsApi(), request.type !== OrganizationUserType.Custom);\n request.collections = collections;\n this.formPromise = this.apiService.postOrganizationUserInvite(this.organizationId, request);\n }\n await this.formPromise;\n this.toasterService.popAsync('success', null,\n this.i18nService.t(this.editMode ? 'editedUserId' : 'invitedUsers', this.name));\n this.onSavedUser.emit();\n } catch { }\n }\n\n async delete() {\n if (!this.editMode) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('removeUserConfirmation'), this.name,\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.apiService.deleteOrganizationUser(this.organizationId, this.organizationUserId);\n await this.deletePromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('removedUserId', this.name));\n this.onDeletedUser.emit();\n } catch { }\n }\n\n}\n","
\n
\n
\n
\n

\n {{title}}\n {{name}}\n

\n \n
\n
\n \n {{'loading' | i18n}}\n
\n
\n \n

{{'inviteUserDesc' | i18n}}

\n
\n \n \n {{'inviteMultipleEmailDesc' | i18n : '20'}}\n
\n
\n

\n {{'userType' | i18n}}\n \n \n \n

\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n \n

\n {{'permissions' | i18n}}\n

\n
\n
\n
\n \n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n

\n
\n {{'accessControl' | i18n}}\n \n \n \n
\n
\n \n \n
\n

\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n {{'noCollectionsInList' | i18n}}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
 {{'name' | i18n}}{{'hidePasswords' | i18n}}{{'readOnly' | i18n}}
\n \n \n {{c.name}}\n \n \n \n \n
\n
\n
\n
\n \n \n
\n \n
\n
\n
\n
\n
\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ConstantsService } from 'jslib/services/constants.service';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { StorageService } from 'jslib/abstractions/storage.service';\n\nimport { Utils } from 'jslib/misc/utils';\n\n@Component({\n selector: 'app-user-confirm',\n templateUrl: 'user-confirm.component.html',\n})\nexport class UserConfirmComponent implements OnInit {\n @Input() name: string;\n @Input() userId: string;\n @Input() organizationUserId: string;\n @Input() organizationId: string;\n @Output() onConfirmedUser = new EventEmitter();\n\n dontAskAgain = false;\n loading = true;\n fingerprint: string;\n\n private publicKey: Uint8Array = null;\n\n constructor(private apiService: ApiService, private cryptoService: CryptoService,\n private storageService: StorageService) { }\n\n async ngOnInit() {\n try {\n const publicKeyResponse = await this.apiService.getUserPublicKey(this.userId);\n if (publicKeyResponse != null) {\n this.publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n const fingerprint = await this.cryptoService.getFingerprint(this.userId, this.publicKey.buffer);\n if (fingerprint != null) {\n this.fingerprint = fingerprint.join('-');\n }\n }\n } catch { }\n this.loading = false;\n }\n\n async submit() {\n if (this.loading) {\n return;\n }\n\n if (this.dontAskAgain) {\n await this.storageService.save(ConstantsService.autoConfirmFingerprints, true);\n }\n\n this.onConfirmedUser.emit(this.publicKey);\n }\n}\n","
\n
\n
\n
\n

\n {{'confirmUser' | i18n}}\n {{name}}\n

\n \n
\n
\n

\n {{'fingerprintEnsureIntegrityVerify' | i18n}}\n \n {{'learnMore' | i18n}}\n

\n

{{fingerprint}}

\n
\n \n \n
\n
\n
\n \n \n
\n
\n
\n
\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\nimport { OrganizationUserUpdateGroupsRequest } from 'jslib/models/request/organizationUserUpdateGroupsRequest';\nimport { GroupResponse } from 'jslib/models/response/groupResponse';\n\nimport { Utils } from 'jslib/misc/utils';\n\n@Component({\n selector: 'app-user-groups',\n templateUrl: 'user-groups.component.html',\n})\nexport class UserGroupsComponent implements OnInit {\n @Input() name: string;\n @Input() organizationUserId: string;\n @Input() organizationId: string;\n @Output() onSavedUser = new EventEmitter();\n\n loading = true;\n groups: GroupResponse[] = [];\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService) { }\n\n async ngOnInit() {\n const groupsResponse = await this.apiService.getGroups(this.organizationId);\n const groups = groupsResponse.data.map(r => r);\n groups.sort(Utils.getSortFunction(this.i18nService, 'name'));\n this.groups = groups;\n\n try {\n const userGroups = await this.apiService.getOrganizationUserGroups(\n this.organizationId, this.organizationUserId);\n if (userGroups != null && this.groups != null) {\n userGroups.forEach(ug => {\n const group = this.groups.filter(g => g.id === ug);\n if (group != null && group.length > 0) {\n (group[0] as any).checked = true;\n }\n });\n }\n } catch { }\n\n this.loading = false;\n }\n\n check(g: GroupResponse, select?: boolean) {\n (g as any).checked = select == null ? !(g as any).checked : select;\n if (!(g as any).checked) {\n (g as any).readOnly = false;\n }\n }\n\n selectAll(select: boolean) {\n this.groups.forEach(g => this.check(g, select));\n }\n\n async submit() {\n const request = new OrganizationUserUpdateGroupsRequest();\n request.groupIds = this.groups.filter(g => (g as any).checked).map(g => g.id);\n\n try {\n this.formPromise = this.apiService.putOrganizationUserGroups(this.organizationId, this.organizationUserId,\n request);\n await this.formPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('editedGroupsForUser', this.name));\n this.onSavedUser.emit();\n } catch { }\n }\n}\n","
\n
\n
\n
\n

\n {{'groupAccess' | i18n}}\n {{name}}\n

\n \n
\n
\n \n {{'loading' | i18n}}\n
\n
\n

{{'groupAccessUserDesc' | i18n}}

\n
\n {{'noGroupsInList' | i18n}}\n
\n \n \n \n \n \n \n \n
\n \n \n {{g.name}}\n
\n
\n
\n \n \n
\n
\n
\n
\n","import {\n Component,\n ComponentFactoryResolver,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { PolicyType } from 'jslib/enums/policyType';\n\nimport { EnvironmentService } from 'jslib/abstractions';\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { PolicyResponse } from 'jslib/models/response/policyResponse';\n\nimport { ModalComponent } from '../../modal.component';\n\nimport { PolicyEditComponent } from './policy-edit.component';\n\n@Component({\n selector: 'app-org-policies',\n templateUrl: 'policies.component.html',\n})\nexport class PoliciesComponent implements OnInit {\n @ViewChild('editTemplate', { read: ViewContainerRef, static: true }) editModalRef: ViewContainerRef;\n\n loading = true;\n organizationId: string;\n policies: any[];\n\n // Remove when removing deprecation warning\n enterpriseTokenPromise: Promise;\n userCanAccessBusinessPortal = false;\n\n private enterpriseUrl: string;\n\n private modal: ModalComponent = null;\n private orgPolicies: PolicyResponse[];\n private policiesEnabledMap: Map = new Map();\n\n constructor(private apiService: ApiService, private route: ActivatedRoute,\n private i18nService: I18nService, private componentFactoryResolver: ComponentFactoryResolver,\n private platformUtilsService: PlatformUtilsService, private userService: UserService,\n private router: Router, private environmentService: EnvironmentService) { }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organizationId = params.organizationId;\n const organization = await this.userService.getOrganization(this.organizationId);\n if (organization == null || !organization.usePolicies) {\n this.router.navigate(['/organizations', this.organizationId]);\n return;\n }\n this.userCanAccessBusinessPortal = organization.canAccessBusinessPortal;\n this.policies = [\n {\n name: this.i18nService.t('twoStepLogin'),\n description: this.i18nService.t('twoStepLoginPolicyDesc'),\n type: PolicyType.TwoFactorAuthentication,\n enabled: false,\n display: true,\n },\n {\n name: this.i18nService.t('masterPass'),\n description: this.i18nService.t('masterPassPolicyDesc'),\n type: PolicyType.MasterPassword,\n enabled: false,\n display: true,\n },\n {\n name: this.i18nService.t('passwordGenerator'),\n description: this.i18nService.t('passwordGeneratorPolicyDesc'),\n type: PolicyType.PasswordGenerator,\n enabled: false,\n display: true,\n },\n {\n name: this.i18nService.t('singleOrg'),\n description: this.i18nService.t('singleOrgDesc'),\n type: PolicyType.SingleOrg,\n enabled: false,\n display: true,\n },\n {\n name: this.i18nService.t('requireSso'),\n description: this.i18nService.t('requireSsoPolicyDesc'),\n type: PolicyType.RequireSso,\n enabled: false,\n display: organization.useSso,\n },\n {\n name: this.i18nService.t('personalOwnership'),\n description: this.i18nService.t('personalOwnershipPolicyDesc'),\n type: PolicyType.PersonalOwnership,\n enabled: false,\n display: true,\n },\n {\n name: this.i18nService.t('disableSend'),\n description: this.i18nService.t('disableSendPolicyDesc'),\n type: PolicyType.DisableSend,\n enabled: false,\n display: true,\n },\n {\n name: this.i18nService.t('sendOptions'),\n description: this.i18nService.t('sendOptionsPolicyDesc'),\n type: PolicyType.SendOptions,\n enabled: false,\n display: true,\n },\n ];\n await this.load();\n\n // Handle policies component launch from Event message\n const queryParamsSub = this.route.queryParams.subscribe(async qParams => {\n if (qParams.policyId != null) {\n const policyIdFromEvents: string = qParams.policyId;\n for (const orgPolicy of this.orgPolicies) {\n if (orgPolicy.id === policyIdFromEvents) {\n for (let i = 0; i < this.policies.length; i++) {\n if (this.policies[i].type === orgPolicy.type) {\n this.edit(this.policies[i]);\n break;\n }\n }\n break;\n }\n }\n }\n\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n });\n\n // Remove when removing deprecation warning\n this.enterpriseUrl = 'https://portal.bitwarden.com';\n if (this.environmentService.enterpriseUrl != null) {\n this.enterpriseUrl = this.environmentService.enterpriseUrl;\n } else if (this.environmentService.baseUrl != null) {\n this.enterpriseUrl = this.environmentService.baseUrl + '/portal';\n }\n }\n\n async load() {\n const response = await this.apiService.getPolicies(this.organizationId);\n this.orgPolicies = response.data != null && response.data.length > 0 ? response.data : [];\n this.orgPolicies.forEach(op => {\n this.policiesEnabledMap.set(op.type, op.enabled);\n });\n this.policies.forEach(p => {\n p.enabled = this.policiesEnabledMap.has(p.type) && this.policiesEnabledMap.get(p.type);\n });\n this.loading = false;\n }\n\n edit(p: any) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.editModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n PolicyEditComponent, this.editModalRef);\n\n childComponent.name = p.name;\n childComponent.description = p.description;\n childComponent.type = p.type;\n childComponent.organizationId = this.organizationId;\n childComponent.policiesEnabledMap = this.policiesEnabledMap;\n childComponent.onSavedPolicy.subscribe(() => {\n this.modal.close();\n this.load();\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n\n // Remove when removing deprecation warning\n async goToEnterprisePortal() {\n if (this.enterpriseTokenPromise != null) {\n return;\n }\n try {\n this.enterpriseTokenPromise = this.apiService.getEnterprisePortalSignInToken();\n const token = await this.enterpriseTokenPromise;\n if (token != null) {\n const userId = await this.userService.getUserId();\n this.platformUtilsService.launchUri(this.enterpriseUrl + '/login?userId=' + userId +\n '&token=' + (window as any).encodeURIComponent(token) + '&organizationId=' + this.organizationId);\n }\n } catch { }\n this.enterpriseTokenPromise = null;\n }\n}\n","\n

{{'webPoliciesDeprecationWarning' | i18n}}

\n \n
\n
\n

{{'policies' | i18n}}

\n
\n\n \n {{'loading' | i18n}}\n\n\n \n \n \n \n \n
\n {{p.name}}\n {{'enabled' | i18n}}\n {{p.description}}\n
\n\n","// Using index.ts is deprecated, please do not extend\nexport { ApiService } from './api.service';\nexport { AppIdService } from './appId.service';\nexport { AuditService } from './audit.service';\nexport { AuthService } from './auth.service';\nexport { CipherService } from './cipher.service';\nexport { CollectionService } from './collection.service';\nexport { CryptoService } from './crypto.service';\nexport { EnvironmentService } from './environment.service';\nexport { FolderService } from './folder.service';\nexport { I18nService } from './i18n.service';\nexport { LogService } from './log.service';\nexport { MessagingService } from './messaging.service';\nexport { PasswordGenerationService } from './passwordGeneration.service';\nexport { PlatformUtilsService } from './platformUtils.service';\nexport { SearchService } from './search.service';\nexport { SettingsService } from './settings.service';\nexport { StorageService } from './storage.service';\nexport { StateService } from './state.service';\nexport { SyncService } from './sync.service';\nexport { TokenService } from './token.service';\nexport { TotpService } from './totp.service';\nexport { UserService } from './user.service';\nexport { VaultTimeoutService } from './vaultTimeout.service';\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\nimport { PolicyType } from 'jslib/enums/policyType';\n\nimport { PolicyRequest } from 'jslib/models/request/policyRequest';\n\nimport { PolicyResponse } from 'jslib/models/response/policyResponse';\n\n@Component({\n selector: 'app-policy-edit',\n templateUrl: 'policy-edit.component.html',\n})\nexport class PolicyEditComponent implements OnInit {\n @Input() name: string;\n @Input() description: string;\n @Input() type: PolicyType;\n @Input() organizationId: string;\n @Input() policiesEnabledMap: Map = new Map();\n @Output() onSavedPolicy = new EventEmitter();\n\n policyType = PolicyType;\n loading = true;\n enabled = false;\n formPromise: Promise;\n passwordScores: any[];\n defaultTypes: any[];\n\n // Master password\n masterPassMinComplexity?: number = null;\n masterPassMinLength?: number;\n masterPassRequireUpper?: number;\n masterPassRequireLower?: number;\n masterPassRequireNumbers?: number;\n masterPassRequireSpecial?: number;\n\n // Password generator\n passGenDefaultType?: string;\n passGenMinLength?: number;\n passGenUseUpper?: boolean;\n passGenUseLower?: boolean;\n passGenUseNumbers?: boolean;\n passGenUseSpecial?: boolean;\n passGenMinNumbers?: number;\n passGenMinSpecial?: number;\n passGenMinNumberWords?: number;\n passGenCapitalize?: boolean;\n passGenIncludeNumber?: boolean;\n\n // Send options\n sendDisableHideEmail?: boolean;\n\n private policy: PolicyResponse;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService) {\n this.passwordScores = [\n { name: '-- ' + i18nService.t('select') + ' --', value: null },\n { name: i18nService.t('weak') + ' (0)', value: 0 },\n { name: i18nService.t('weak') + ' (1)', value: 1 },\n { name: i18nService.t('weak') + ' (2)', value: 2 },\n { name: i18nService.t('good') + ' (3)', value: 3 },\n { name: i18nService.t('strong') + ' (4)', value: 4 },\n ];\n this.defaultTypes = [\n { name: i18nService.t('userPreference'), value: null },\n { name: i18nService.t('password'), value: 'password' },\n { name: i18nService.t('passphrase'), value: 'passphrase' },\n ];\n }\n\n async ngOnInit() {\n await this.load();\n this.loading = false;\n }\n\n async load() {\n try {\n this.policy = await this.apiService.getPolicy(this.organizationId, this.type);\n\n if (this.policy != null) {\n this.enabled = this.policy.enabled;\n if (this.policy.data != null) {\n switch (this.type) {\n case PolicyType.PasswordGenerator:\n this.passGenDefaultType = this.policy.data.defaultType;\n this.passGenMinLength = this.policy.data.minLength;\n this.passGenUseUpper = this.policy.data.useUpper;\n this.passGenUseLower = this.policy.data.useLower;\n this.passGenUseNumbers = this.policy.data.useNumbers;\n this.passGenUseSpecial = this.policy.data.useSpecial;\n this.passGenMinNumbers = this.policy.data.minNumbers;\n this.passGenMinSpecial = this.policy.data.minSpecial;\n this.passGenMinNumberWords = this.policy.data.minNumberWords;\n this.passGenCapitalize = this.policy.data.capitalize;\n this.passGenIncludeNumber = this.policy.data.includeNumber;\n break;\n case PolicyType.MasterPassword:\n this.masterPassMinComplexity = this.policy.data.minComplexity;\n this.masterPassMinLength = this.policy.data.minLength;\n this.masterPassRequireUpper = this.policy.data.requireUpper;\n this.masterPassRequireLower = this.policy.data.requireLower;\n this.masterPassRequireNumbers = this.policy.data.requireNumbers;\n this.masterPassRequireSpecial = this.policy.data.requireSpecial;\n break;\n case PolicyType.SendOptions:\n this.sendDisableHideEmail = this.policy.data.disableHideEmail;\n break;\n default:\n break;\n }\n }\n }\n } catch (e) {\n if (e.statusCode === 404) {\n this.enabled = false;\n } else {\n throw e;\n }\n }\n }\n\n async submit() {\n if (this.preValidate()) {\n const request = new PolicyRequest();\n request.enabled = this.enabled;\n request.type = this.type;\n request.data = null;\n switch (this.type) {\n case PolicyType.PasswordGenerator:\n request.data = {\n defaultType: this.passGenDefaultType,\n minLength: this.passGenMinLength || null,\n useUpper: this.passGenUseUpper,\n useLower: this.passGenUseLower,\n useNumbers: this.passGenUseNumbers,\n useSpecial: this.passGenUseSpecial,\n minNumbers: this.passGenMinNumbers || null,\n minSpecial: this.passGenMinSpecial || null,\n minNumberWords: this.passGenMinNumberWords || null,\n capitalize: this.passGenCapitalize,\n includeNumber: this.passGenIncludeNumber,\n };\n break;\n case PolicyType.MasterPassword:\n request.data = {\n minComplexity: this.masterPassMinComplexity || null,\n minLength: this.masterPassMinLength || null,\n requireUpper: this.masterPassRequireUpper,\n requireLower: this.masterPassRequireLower,\n requireNumbers: this.masterPassRequireNumbers,\n requireSpecial: this.masterPassRequireSpecial,\n };\n break;\n case PolicyType.SendOptions:\n request.data = {\n disableHideEmail: this.sendDisableHideEmail,\n };\n break;\n default:\n break;\n }\n try {\n this.formPromise = this.apiService.putPolicy(this.organizationId, this.type, request);\n await this.formPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('editedPolicyId', this.name));\n this.onSavedPolicy.emit();\n } catch { }\n }\n }\n\n get checkboxDesc(): string {\n return this.type === PolicyType.PersonalOwnership ? this.i18nService.t('personalOwnershipCheckboxDesc') :\n this.i18nService.t('enabled');\n }\n\n private preValidate(): boolean {\n switch (this.type) {\n case PolicyType.RequireSso:\n // Don't need prevalidation checks if submitting to disable\n if (!this.enabled) {\n return true;\n }\n // Have SingleOrg policy enabled?\n if (!(this.policiesEnabledMap.has(PolicyType.SingleOrg)\n && this.policiesEnabledMap.get(PolicyType.SingleOrg))) {\n this.toasterService.popAsync('error', null, this.i18nService.t('requireSsoPolicyReqError'));\n return false;\n }\n return true;\n\n case PolicyType.SingleOrg:\n // Don't need prevalidation checks if submitting to enable\n if (this.enabled) {\n return true;\n }\n // If RequireSso Policy is enabled prevent submittal\n if (this.policiesEnabledMap.has(PolicyType.RequireSso)\n && this.policiesEnabledMap.get(PolicyType.RequireSso)) {\n this.toasterService.popAsync('error', null, this.i18nService.t('disableRequireSsoError'));\n return false;\n }\n return true;\n\n default:\n return true;\n }\n }\n}\n","
\n
\n
\n
\n

{{'editPolicy' | i18n}} - {{name}}

\n \n
\n
\n \n {{'loading' | i18n}}\n
\n
\n

{{description}}

\n \n {{'twoStepLoginPolicyWarning' | i18n}}\n \n \n {{'singleOrgPolicyWarning' | i18n}}\n \n \n \n {{'requireSsoPolicyReq' | i18n}}\n \n \n {{'requireSsoExemption' | i18n}}\n \n \n \n {{'personalOwnershipExemption' | i18n}}\n \n \n {{'disableSendExemption' | i18n}}\n \n \n {{'sendOptionsExemption' | i18n}}\n \n
\n
\n \n \n
\n
\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n
\n \n \n
\n
\n

{{'password' | i18n}}

\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n

{{'passphrase' | i18n}}

\n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n

{{'options' | i18n}}

\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n","import {\n Component,\n ComponentFactoryResolver,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { SyncService } from 'jslib/abstractions/sync.service';\n\nimport { OrganizationUpdateRequest } from 'jslib/models/request/organizationUpdateRequest';\nimport { OrganizationResponse } from 'jslib/models/response/organizationResponse';\n\nimport { ModalComponent } from '../../modal.component';\nimport { ApiKeyComponent } from '../../settings/api-key.component';\nimport { PurgeVaultComponent } from '../../settings/purge-vault.component';\nimport { TaxInfoComponent } from '../../settings/tax-info.component';\nimport { DeleteOrganizationComponent } from './delete-organization.component';\n\n@Component({\n selector: 'app-org-account',\n templateUrl: 'account.component.html',\n})\nexport class AccountComponent {\n @ViewChild('deleteOrganizationTemplate', { read: ViewContainerRef, static: true }) deleteModalRef: ViewContainerRef;\n @ViewChild('purgeOrganizationTemplate', { read: ViewContainerRef, static: true }) purgeModalRef: ViewContainerRef;\n @ViewChild('apiKeyTemplate', { read: ViewContainerRef, static: true }) apiKeyModalRef: ViewContainerRef;\n @ViewChild('rotateApiKeyTemplate', { read: ViewContainerRef, static: true }) rotateApiKeyModalRef: ViewContainerRef;\n @ViewChild(TaxInfoComponent) taxInfo: TaxInfoComponent;\n\n selfHosted = false;\n loading = true;\n canUseApi = false;\n org: OrganizationResponse;\n formPromise: Promise;\n taxFormPromise: Promise;\n\n private organizationId: string;\n private modal: ModalComponent = null;\n\n constructor(private componentFactoryResolver: ComponentFactoryResolver,\n private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private route: ActivatedRoute,\n private syncService: SyncService, private platformUtilsService: PlatformUtilsService) { }\n\n async ngOnInit() {\n this.selfHosted = this.platformUtilsService.isSelfHost();\n this.route.parent.parent.params.subscribe(async params => {\n this.organizationId = params.organizationId;\n try {\n this.org = await this.apiService.getOrganization(this.organizationId);\n this.canUseApi = this.org.useApi;\n } catch { }\n });\n this.loading = false;\n }\n\n async submit() {\n try {\n const request = new OrganizationUpdateRequest();\n request.name = this.org.name;\n request.businessName = this.org.businessName;\n request.billingEmail = this.org.billingEmail;\n request.identifier = this.org.identifier;\n this.formPromise = this.apiService.putOrganization(this.organizationId, request).then(() => {\n return this.syncService.fullSync(true);\n });\n await this.formPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('organizationUpdated'));\n } catch { }\n }\n\n async submitTaxInfo() {\n this.taxFormPromise = this.taxInfo.submitTaxInfo();\n await this.taxFormPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('taxInfoUpdated'));\n }\n\n deleteOrganization() {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.deleteModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n DeleteOrganizationComponent, this.deleteModalRef);\n childComponent.organizationId = this.organizationId;\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n purgeVault() {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.purgeModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(PurgeVaultComponent, this.purgeModalRef);\n childComponent.organizationId = this.organizationId;\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n viewApiKey() {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.apiKeyModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(ApiKeyComponent, this.apiKeyModalRef);\n childComponent.keyType = 'organization';\n childComponent.entityId = this.organizationId;\n childComponent.postKey = this.apiService.postOrganizationApiKey.bind(this.apiService);\n childComponent.scope = 'api.organization';\n childComponent.grantType = 'client_credentials';\n childComponent.apiKeyTitle = 'apiKey';\n childComponent.apiKeyWarning = 'apiKeyWarning';\n childComponent.apiKeyDescription = 'apiKeyDesc';\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n rotateApiKey() {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.rotateApiKeyModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(ApiKeyComponent, this.rotateApiKeyModalRef);\n childComponent.keyType = 'organization';\n childComponent.isRotation = true;\n childComponent.entityId = this.organizationId;\n childComponent.postKey = this.apiService.postOrganizationRotateApiKey.bind(this.apiService);\n childComponent.scope = 'api.organization';\n childComponent.grantType = 'client_credentials';\n childComponent.apiKeyTitle = 'apiKey';\n childComponent.apiKeyWarning = 'apiKeyWarning';\n childComponent.apiKeyDescription = 'apiKeyRotateDesc';\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n}\n","
\n

{{'myOrganization' | i18n}}

\n
\n
\n \n {{'loading' | i18n}}\n
\n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n
\n
\n \n
\n\n
\n

{{'apiKey' | i18n}}

\n
\n

\n {{'apiKeyDesc' | i18n}}\n \n {{'learnMore' | i18n}}\n \n

\n \n \n
\n
\n

{{'taxInformation' | i18n}}

\n
\n

{{'taxInformationDesc' | i18n}}

\n
\n \n {{'loading' | i18n}}\n
\n
\n \n \n
\n
\n

{{'dangerZone' | i18n}}

\n
\n
\n
\n

{{'dangerZoneDesc' | i18n}}

\n \n \n
\n
\n\n\n\n\n","import { TaxInfoUpdateRequest } from './taxInfoUpdateRequest';\n\nexport class OrganizationTaxInfoUpdateRequest extends TaxInfoUpdateRequest {\n taxId: string;\n line1: string;\n line2: string;\n city: string;\n state: string;\n}\n","export class TaxInfoUpdateRequest {\n country: string;\n postalCode: string;\n}\n","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\nimport { PasswordVerificationRequest } from 'jslib/models/request/passwordVerificationRequest';\n\n@Component({\n selector: 'app-delete-organization',\n templateUrl: 'delete-organization.component.html',\n})\nexport class DeleteOrganizationComponent {\n organizationId: string;\n\n masterPassword: string;\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private cryptoService: CryptoService,\n private router: Router) { }\n\n async submit() {\n if (this.masterPassword == null || this.masterPassword === '') {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassRequired'));\n return;\n }\n\n const request = new PasswordVerificationRequest();\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n try {\n this.formPromise = this.apiService.deleteOrganization(this.organizationId, request);\n await this.formPromise;\n this.toasterService.popAsync('success', this.i18nService.t('organizationDeleted'),\n this.i18nService.t('organizationDeletedDesc'));\n this.router.navigate(['/']);\n } catch { }\n }\n}\n","
\n
\n
\n
\n

{{'deleteOrganization' | i18n}}

\n \n
\n
\n

{{'deleteOrganizationDesc' | i18n}}

\n {{'deleteOrganizationWarning' | i18n}}\n \n \n
\n
\n \n \n
\n
\n
\n
\n","import {\n Component,\n OnInit,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\nimport { UserBillingComponent } from '../../settings/user-billing.component';\n\n@Component({\n selector: 'app-org-billing',\n templateUrl: '../../settings/user-billing.component.html',\n})\nexport class OrganizationBillingComponent extends UserBillingComponent implements OnInit {\n constructor(apiService: ApiService, i18nService: I18nService, toasterService: ToasterService,\n private route: ActivatedRoute, platformUtilsService: PlatformUtilsService) {\n super(apiService, i18nService, toasterService, platformUtilsService);\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organizationId = params.organizationId;\n await this.load();\n this.firstLoaded = true;\n });\n }\n}\n","export class WebConstants {\n static readonly stripeTestKey = 'pk_test_KPoCfZXu7mznb9uSCPZ2JpTD';\n static readonly stripeLiveKey = 'pk_live_bpN0P37nMxrMQkcaHXtAybJk';\n static readonly btSandboxKey = 'sandbox_r72q8jq6_9pnxkwm75f87sdc2';\n static readonly btProductionKey = 'production_qfbsv8kc_njj2zjtyngtjmbjd';\n static readonly paypal = {\n businessIdProduction: '4ZDA7DLUUJGMN',\n businessIdSandbox: 'AD3LAUZSNVPJY',\n buttonActionProduction: 'https://www.paypal.com/cgi-bin/webscr',\n buttonActionSandbox: 'https://www.sandbox.paypal.com/cgi-bin/webscr',\n };\n}\n","import {\n Component,\n OnInit,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { OrganizationSubscriptionResponse } from 'jslib/models/response/organizationSubscriptionResponse';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\nimport { PlanType } from 'jslib/enums/planType';\n\n@Component({\n selector: 'app-org-subscription',\n templateUrl: 'organization-subscription.component.html',\n})\nexport class OrganizationSubscriptionComponent implements OnInit {\n loading = false;\n firstLoaded = false;\n organizationId: string;\n adjustSeatsAdd = true;\n showAdjustSeats = false;\n adjustStorageAdd = true;\n showAdjustStorage = false;\n showUpdateLicense = false;\n showDownloadLicense = false;\n showChangePlan = false;\n sub: OrganizationSubscriptionResponse;\n selfHosted = false;\n\n cancelPromise: Promise;\n reinstatePromise: Promise;\n\n constructor(private apiService: ApiService, private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService, private toasterService: ToasterService,\n private messagingService: MessagingService, private route: ActivatedRoute) {\n this.selfHosted = platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organizationId = params.organizationId;\n await this.load();\n this.firstLoaded = true;\n });\n }\n\n async load() {\n if (this.loading) {\n return;\n }\n this.loading = true;\n this.sub = await this.apiService.getOrganizationSubscription(this.organizationId);\n this.loading = false;\n }\n\n async reinstate() {\n if (this.loading) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(this.i18nService.t('reinstateConfirmation'),\n this.i18nService.t('reinstateSubscription'), this.i18nService.t('yes'), this.i18nService.t('cancel'));\n if (!confirmed) {\n return;\n }\n\n try {\n this.reinstatePromise = this.apiService.postOrganizationReinstate(this.organizationId);\n await this.reinstatePromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('reinstated'));\n this.load();\n } catch { }\n }\n\n async cancel() {\n if (this.loading) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(this.i18nService.t('cancelConfirmation'),\n this.i18nService.t('cancelSubscription'), this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return;\n }\n\n try {\n this.cancelPromise = this.apiService.postOrganizationCancel(this.organizationId);\n await this.cancelPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('canceledSubscription'));\n this.load();\n } catch { }\n }\n\n async changePlan() {\n if (this.subscription == null && this.sub.planType === PlanType.Free) {\n this.showChangePlan = !this.showChangePlan;\n return;\n }\n const contactSupport = await this.platformUtilsService.showDialog(this.i18nService.t('changeBillingPlanDesc'),\n this.i18nService.t('changeBillingPlan'), this.i18nService.t('contactSupport'), this.i18nService.t('close'));\n if (contactSupport) {\n this.platformUtilsService.launchUri('https://bitwarden.com/contact');\n }\n }\n\n closeChangePlan(changed: boolean) {\n this.showChangePlan = false;\n }\n\n downloadLicense() {\n this.showDownloadLicense = !this.showDownloadLicense;\n }\n\n closeDownloadLicense() {\n this.showDownloadLicense = false;\n }\n\n updateLicense() {\n if (this.loading) {\n return;\n }\n this.showUpdateLicense = true;\n }\n\n closeUpdateLicense(updated: boolean) {\n this.showUpdateLicense = false;\n if (updated) {\n this.load();\n this.messagingService.send('updatedOrgLicense');\n }\n }\n\n adjustSeats(add: boolean) {\n this.adjustSeatsAdd = add;\n this.showAdjustSeats = true;\n }\n\n closeSeats(load: boolean) {\n this.showAdjustSeats = false;\n if (load) {\n this.load();\n }\n }\n\n adjustStorage(add: boolean) {\n this.adjustStorageAdd = add;\n this.showAdjustStorage = true;\n }\n\n closeStorage(load: boolean) {\n this.showAdjustStorage = false;\n if (load) {\n this.load();\n }\n }\n\n get isExpired() {\n return this.sub != null && this.sub.expiration != null &&\n new Date(this.sub.expiration) < new Date();\n }\n\n get subscriptionMarkedForCancel() {\n return this.subscription != null && !this.subscription.cancelled && this.subscription.cancelAtEndDate;\n }\n\n get subscription() {\n return this.sub != null ? this.sub.subscription : null;\n }\n\n get nextInvoice() {\n return this.sub != null ? this.sub.upcomingInvoice : null;\n }\n\n get storagePercentage() {\n return this.sub != null && this.sub.maxStorageGb ?\n +(100 * (this.sub.storageGb / this.sub.maxStorageGb)).toFixed(2) : 0;\n }\n\n get storageProgressWidth() {\n return this.storagePercentage < 5 ? 5 : 0;\n }\n\n get billingInterval() {\n const monthly = !this.sub.plan.isAnnual;\n return monthly ? 'month' : 'year';\n }\n\n get storageGbPrice() {\n return this.sub.plan.additionalStoragePricePerGb;\n }\n\n get seatPrice() {\n return this.sub.plan.seatPrice;\n }\n\n get canAdjustSeats() {\n return this.sub.plan.hasAdditionalSeatsOption;\n }\n\n get canDownloadLicense() {\n return (this.sub.planType !== PlanType.Free && this.subscription == null) ||\n (this.subscription != null && !this.subscription.cancelled);\n }\n}\n","
\n

\n {{'subscription' | i18n}}\n \n \n {{'loading' | i18n}}\n \n

\n
\n\n \n {{'loading' | i18n}}\n\n\n \n {{'subscriptionCanceled' | i18n}}\n \n

{{'subscriptionPendingCanceled' | i18n}}

\n \n
\n
\n
{{'billingPlan' | i18n}}
\n
{{sub.plan.name}}
\n
{{'expiration' | i18n}}
\n
\n {{sub.expiration | date:'mediumDate'}}\n \n \n {{'licenseIsExpired' | i18n}}\n \n
\n
{{'neverExpires' | i18n}}
\n
\n
\n
\n
\n
{{'billingPlan' | i18n}}
\n
{{sub.plan.name}}
\n \n
{{'status' | i18n}}
\n
\n {{subscription.status || '-'}}\n {{'pendingCancellation' | i18n}}\n
\n
{{'nextCharge' | i18n}}
\n
{{nextInvoice ? ((nextInvoice.date | date: 'mediumDate') + ', ' + (nextInvoice.amount | currency:'$'))\n : '-'}}\n
\n
\n
\n
\n
\n {{'details' | i18n}}\n \n \n \n \n \n \n \n
\n {{i.name}} {{i.quantity > 1 ? '×' + i.quantity : ''}} @ {{i.amount | currency:'$'}}\n \n {{(i.quantity * i.amount) | currency:'$'}} /{{i.interval | i18n}}\n
\n
\n
\n \n
\n \n \n {{'manageSubscription' | i18n}}\n \n
\n
\n
\n \n

{{'updateLicense' | i18n}}

\n \n
\n
\n
\n \n
\n \n \n \n
\n \n
\n \n
\n

{{'userSeats' | i18n}}

\n

{{'subscriptionUserSeats' | i18n : sub.seats}}

\n \n
\n
\n \n \n
\n \n
\n
\n

{{'storage' | i18n}}

\n

{{'subscriptionStorage' | i18n : sub.maxStorageGb || 0 : sub.storageName || '0 MB'}}

\n
\n
\n {{(storagePercentage / 100) | percent}}
\n
\n \n
\n
\n \n \n
\n \n
\n
\n
\n
\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\nimport { PlanType } from 'jslib/enums/planType';\nimport { ProductType } from 'jslib/enums/productType';\n\n@Component({\n selector: 'app-change-plan',\n templateUrl: 'change-plan.component.html',\n})\nexport class ChangePlanComponent {\n @Input() organizationId: string;\n @Output() onChanged = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n formPromise: Promise;\n defaultUpgradePlan: PlanType = PlanType.FamiliesAnnually;\n defaultUpgradeProduct: ProductType = ProductType.Families;\n\n constructor(private apiService: ApiService, private platformUtilsService: PlatformUtilsService) { }\n\n async submit() {\n try {\n this.onChanged.emit();\n } catch { }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n}\n","
\n
\n \n

{{'changeBillingPlan' | i18n}}

\n

{{'changeBillingPlanUpgrade' | i18n}}

\n \n \n
\n
\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\n@Component({\n selector: 'app-download-license',\n templateUrl: 'download-license.component.html',\n})\nexport class DownloadLicenseComponent {\n @Input() organizationId: string;\n @Output() onDownloaded = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n installationId: string;\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private platformUtilsService: PlatformUtilsService) { }\n\n async submit() {\n if (this.installationId == null || this.installationId === '') {\n return;\n }\n\n try {\n this.formPromise = this.apiService.getOrganizationLicense(this.organizationId, this.installationId);\n const license = await this.formPromise;\n const licenseString = JSON.stringify(license, null, 2);\n this.platformUtilsService.saveFile(window, licenseString, null, 'bitwarden_organization_license.json');\n this.onDownloaded.emit();\n } catch { }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n}\n","
\n
\n \n

{{'downloadLicense' | i18n}}

\n
\n
\n
\n \n \n \n \n
\n \n
\n
\n \n \n
\n
\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\n\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\nimport { SeatRequest } from 'jslib/models/request/seatRequest';\n\nimport { PaymentComponent } from '../../settings/payment.component';\n\n@Component({\n selector: 'app-adjust-seats',\n templateUrl: 'adjust-seats.component.html',\n})\nexport class AdjustSeatsComponent {\n @Input() seatPrice = 0;\n @Input() add = true;\n @Input() organizationId: string;\n @Input() interval = 'year';\n @Output() onAdjusted = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n @ViewChild(PaymentComponent, { static: true }) paymentComponent: PaymentComponent;\n\n seatAdjustment = 0;\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private router: Router,\n private activatedRoute: ActivatedRoute) { }\n\n async submit() {\n try {\n const request = new SeatRequest();\n request.seatAdjustment = this.seatAdjustment;\n if (!this.add) {\n request.seatAdjustment *= -1;\n }\n\n let paymentFailed = false;\n const action = async () => {\n const result = await this.apiService.postOrganizationSeat(this.organizationId, request);\n if (result != null && result.paymentIntentClientSecret != null) {\n try {\n await this.paymentComponent.handleStripeCardPayment(result.paymentIntentClientSecret, null);\n } catch {\n paymentFailed = true;\n }\n }\n };\n this.formPromise = action();\n await this.formPromise;\n this.onAdjusted.emit(this.seatAdjustment);\n if (paymentFailed) {\n this.toasterService.popAsync({\n body: this.i18nService.t('couldNotChargeCardPayInvoice'),\n type: 'warning',\n timeout: 10000,\n });\n this.router.navigate(['../billing'], { relativeTo: this.activatedRoute });\n } else {\n this.toasterService.popAsync('success', null,\n this.i18nService.t('adjustedSeats', request.seatAdjustment.toString()));\n }\n } catch { }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n\n get adjustedSeatTotal(): number {\n return this.seatAdjustment * this.seatPrice;\n }\n}\n","
\n
\n \n

{{(add ? 'addSeats' : 'removeSeats') | i18n}}

\n
\n
\n \n \n
\n
\n
\n {{'total' | i18n}}: {{seatAdjustment || 0}} × {{seatPrice | currency:'$'}} = {{adjustedSeatTotal\n | currency:'$'}} /{{interval | i18n}}\n
\n \n \n \n {{(add ? 'seatsAddNote' : 'seatsRemoveNote') | i18n}}\n \n
\n
\n\n","import { Component } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\n@Component({\n selector: 'app-org-settings',\n templateUrl: 'settings.component.html',\n})\nexport class SettingsComponent {\n access2fa = false;\n selfHosted: boolean;\n\n constructor(private route: ActivatedRoute, private userService: UserService,\n private platformUtilsService: PlatformUtilsService) { }\n\n ngOnInit() {\n this.route.parent.params.subscribe(async params => {\n this.selfHosted = await this.platformUtilsService.isSelfHost();\n const organization = await this.userService.getOrganization(params.organizationId);\n this.access2fa = organization.use2fa;\n });\n }\n}\n","\n","import {\n Component,\n ComponentFactoryResolver,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { PolicyService } from 'jslib/abstractions/policy.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { TwoFactorProviderType } from 'jslib/enums/twoFactorProviderType';\n\nimport { TwoFactorDuoComponent } from '../../settings/two-factor-duo.component';\nimport { TwoFactorSetupComponent as BaseTwoFactorSetupComponent } from '../../settings/two-factor-setup.component';\n\n@Component({\n selector: 'app-two-factor-setup',\n templateUrl: '../../settings/two-factor-setup.component.html',\n})\nexport class TwoFactorSetupComponent extends BaseTwoFactorSetupComponent {\n constructor(apiService: ApiService, userService: UserService,\n componentFactoryResolver: ComponentFactoryResolver, messagingService: MessagingService,\n policyService: PolicyService, private route: ActivatedRoute) {\n super(apiService, userService, componentFactoryResolver, messagingService, policyService);\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organizationId = params.organizationId;\n await super.ngOnInit();\n });\n }\n\n manage(type: TwoFactorProviderType) {\n switch (type) {\n case TwoFactorProviderType.OrganizationDuo:\n const duoComp = this.openModal(this.duoModalRef, TwoFactorDuoComponent);\n duoComp.type = TwoFactorProviderType.OrganizationDuo;\n duoComp.organizationId = this.organizationId;\n duoComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.OrganizationDuo);\n });\n break;\n default:\n break;\n }\n }\n\n protected getTwoFactorProviders() {\n return this.apiService.getTwoFactorOrganizationProviders(this.organizationId);\n }\n\n protected filterProvider(type: TwoFactorProviderType) {\n return type !== TwoFactorProviderType.OrganizationDuo;\n }\n}\n","import {\n Component,\n OnDestroy,\n OnInit,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { UpdateTwoFactorAuthenticatorRequest } from 'jslib/models/request/updateTwoFactorAuthenticatorRequest';\nimport { TwoFactorAuthenticatorResponse } from 'jslib/models/response/twoFactorAuthenticatorResponse';\n\nimport { TwoFactorProviderType } from 'jslib/enums/twoFactorProviderType';\n\nimport { TwoFactorBaseComponent } from './two-factor-base.component';\n\n@Component({\n selector: 'app-two-factor-authenticator',\n templateUrl: 'two-factor-authenticator.component.html',\n})\nexport class TwoFactorAuthenticatorComponent extends TwoFactorBaseComponent implements OnInit, OnDestroy {\n type = TwoFactorProviderType.Authenticator;\n key: string;\n token: string;\n formPromise: Promise;\n\n private qrScript: HTMLScriptElement;\n\n constructor(apiService: ApiService, i18nService: I18nService,\n toasterService: ToasterService, private userService: UserService,\n platformUtilsService: PlatformUtilsService) {\n super(apiService, i18nService, toasterService, platformUtilsService);\n this.qrScript = window.document.createElement('script');\n this.qrScript.src = 'scripts/qrious.min.js';\n this.qrScript.async = true;\n }\n\n ngOnInit() {\n window.document.body.appendChild(this.qrScript);\n }\n\n ngOnDestroy() {\n window.document.body.removeChild(this.qrScript);\n }\n\n auth(authResponse: any) {\n super.auth(authResponse);\n return this.processResponse(authResponse.response);\n }\n\n submit() {\n if (this.enabled) {\n return super.disable(this.formPromise);\n } else {\n return this.enable();\n }\n }\n\n protected enable() {\n const request = new UpdateTwoFactorAuthenticatorRequest();\n request.masterPasswordHash = this.masterPasswordHash;\n request.token = this.token;\n request.key = this.key;\n\n return super.enable(async () => {\n this.formPromise = this.apiService.putTwoFactorAuthenticator(request);\n const response = await this.formPromise;\n await this.processResponse(response);\n });\n }\n\n private async processResponse(response: TwoFactorAuthenticatorResponse) {\n this.token = null;\n this.enabled = response.enabled;\n this.key = response.key;\n const email = await this.userService.getEmail();\n window.setTimeout(() => {\n const qr = new (window as any).QRious({\n element: document.getElementById('qr'),\n value: 'otpauth://totp/Bitwarden:' + encodeURIComponent(email) +\n '?secret=' + encodeURIComponent(this.key) + '&issuer=Bitwarden',\n size: 160,\n });\n }, 100);\n }\n}\n","
\n
\n
\n
\n

\n {{'twoStepLogin' | i18n}}\n {{'authenticatorAppTitle' | i18n}}\n

\n \n
\n \n \n
\n
\n \n \"\"\n

{{'twoStepAuthenticatorDesc' | i18n}}

\n

\n 1. {{'twoStepAuthenticatorDownloadApp' | i18n}}\n

\n
\n \n \n

{{'twoStepLoginProviderEnabled' | i18n}}

\n {{'twoStepAuthenticatorReaddDesc' | i18n}}\n
\n \"\"\n

{{'twoStepAuthenticatorNeedApp' | i18n}}

\n
\n \n

{{'twoStepAuthenticatorAppsRecommended' | i18n}}

\n

\n 2. {{'twoStepAuthenticatorScanCode' | i18n}}\n

\n
\n

\n
\n {{key}}\n

\n \n \n \n \n
\n
\n \n \n
\n
\n
\n
\n
\n","import { Component } from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { TwoFactorEmailRequest } from 'jslib/models/request/twoFactorEmailRequest';\n\nimport { TwoFactorProviderType } from 'jslib/enums/twoFactorProviderType';\nimport { UpdateTwoFactorEmailRequest } from 'jslib/models/request/updateTwoFactorEmailRequest';\nimport { TwoFactorEmailResponse } from 'jslib/models/response/twoFactorEmailResponse';\n\nimport { TwoFactorBaseComponent } from './two-factor-base.component';\n\n@Component({\n selector: 'app-two-factor-email',\n templateUrl: 'two-factor-email.component.html',\n})\nexport class TwoFactorEmailComponent extends TwoFactorBaseComponent {\n type = TwoFactorProviderType.Email;\n email: string;\n token: string;\n sentEmail: string;\n formPromise: Promise;\n emailPromise: Promise;\n\n constructor(apiService: ApiService, i18nService: I18nService,\n toasterService: ToasterService, platformUtilsService: PlatformUtilsService,\n private userService: UserService) {\n super(apiService, i18nService, toasterService, platformUtilsService);\n }\n\n auth(authResponse: any) {\n super.auth(authResponse);\n return this.processResponse(authResponse.response);\n }\n\n submit() {\n if (this.enabled) {\n return super.disable(this.formPromise);\n } else {\n return this.enable();\n }\n }\n\n async sendEmail() {\n try {\n const request = new TwoFactorEmailRequest(this.email, this.masterPasswordHash);\n this.emailPromise = this.apiService.postTwoFactorEmailSetup(request);\n await this.emailPromise;\n this.sentEmail = this.email;\n } catch { }\n }\n\n protected enable() {\n const request = new UpdateTwoFactorEmailRequest();\n request.masterPasswordHash = this.masterPasswordHash;\n request.email = this.email;\n request.token = this.token;\n\n return super.enable(async () => {\n this.formPromise = this.apiService.putTwoFactorEmail(request);\n const response = await this.formPromise;\n await this.processResponse(response);\n });\n }\n\n private async processResponse(response: TwoFactorEmailResponse) {\n this.token = null;\n this.email = response.email;\n this.enabled = response.enabled;\n if (!this.enabled && (this.email == null || this.email === '')) {\n this.email = await this.userService.getEmail();\n }\n }\n}\n","
\n
\n
\n
\n

\n {{'twoStepLogin' | i18n}}\n {{'emailTitle' | i18n}}\n

\n \n
\n \n \n
\n
\n \n \n {{'twoStepLoginProviderEnabled' | i18n}}\n \n {{'email' | i18n}}: {{email}}\n \n \n

\n {{'twoFactorEmailDesc' | i18n}}\n \"\"\n

\n
\n \n \n
\n
\n \n \n {{'verificationCodeEmailSent' | i18n : sentEmail}}\n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n","import { Component } from '@angular/core';\n\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\nimport { TwoFactorRecoverResponse } from 'jslib/models/response/twoFactorRescoverResponse';\n\nimport { TwoFactorProviderType } from 'jslib/enums/twoFactorProviderType';\n\n@Component({\n selector: 'app-two-factor-recovery',\n templateUrl: 'two-factor-recovery.component.html',\n})\nexport class TwoFactorRecoveryComponent {\n type = -1;\n code: string;\n authed: boolean;\n twoFactorProviderType = TwoFactorProviderType;\n\n constructor(private i18nService: I18nService) { }\n\n auth(authResponse: any) {\n this.authed = true;\n this.processResponse(authResponse.response);\n }\n\n print() {\n const w = window.open();\n w.document.write('
' +\n '

' + this.i18nService.t('twoFactorRecoveryYourCode') + ':

' +\n '' +\n this.code + '
' +\n '

' + new Date() + '

');\n w.onafterprint = () => w.close();\n w.print();\n }\n\n private formatString(s: string) {\n if (s == null) {\n return null;\n }\n return s.replace(/(.{4})/g, '$1 ').trim().toUpperCase();\n }\n\n private processResponse(response: TwoFactorRecoverResponse) {\n this.code = this.formatString(response.code);\n }\n}\n","
\n
\n
\n
\n

\n {{'twoStepLogin' | i18n}}\n {{'recoveryCodeTitle' | i18n}}\n

\n \n
\n \n \n \n
\n \n

{{'twoFactorRecoveryYourCode' | i18n}}:

\n {{code}}\n
\n \n {{'twoFactorRecoveryNoCode' | i18n}}\n \n
\n
\n \n \n
\n
\n
\n
\n
\n","import {\n Component,\n NgZone,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\nimport { TwoFactorProviderType } from 'jslib/enums/twoFactorProviderType';\n\nimport { PasswordVerificationRequest } from 'jslib/models/request/passwordVerificationRequest';\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from 'jslib/models/request/updateTwoFactorWebAuthnDeleteRequest';\nimport { UpdateTwoFactorWebAuthnRequest } from 'jslib/models/request/updateTwoFactorWebAuthnRequest';\nimport {\n ChallengeResponse,\n TwoFactorWebAuthnResponse,\n} from 'jslib/models/response/twoFactorWebAuthnResponse';\n\nimport { TwoFactorBaseComponent } from './two-factor-base.component';\n\n@Component({\n selector: 'app-two-factor-webauthn',\n templateUrl: 'two-factor-webauthn.component.html',\n})\nexport class TwoFactorWebAuthnComponent extends TwoFactorBaseComponent {\n type = TwoFactorProviderType.WebAuthn;\n name: string;\n keys: any[];\n keyIdAvailable: number = null;\n keysConfiguredCount = 0;\n webAuthnError: boolean;\n webAuthnListening: boolean;\n webAuthnResponse: PublicKeyCredential;\n challengePromise: Promise;\n formPromise: Promise;\n\n constructor(apiService: ApiService, i18nService: I18nService,\n toasterService: ToasterService, platformUtilsService: PlatformUtilsService,\n private ngZone: NgZone) {\n super(apiService, i18nService, toasterService, platformUtilsService);\n }\n\n auth(authResponse: any) {\n super.auth(authResponse);\n this.processResponse(authResponse.response);\n }\n\n submit() {\n if (this.webAuthnResponse == null || this.keyIdAvailable == null) {\n // Should never happen.\n return Promise.reject();\n }\n const request = new UpdateTwoFactorWebAuthnRequest();\n request.masterPasswordHash = this.masterPasswordHash;\n request.deviceResponse = this.webAuthnResponse;\n request.id = this.keyIdAvailable;\n request.name = this.name;\n\n return super.enable(async () => {\n this.formPromise = this.apiService.putTwoFactorWebAuthn(request);\n const response = await this.formPromise;\n await this.processResponse(response);\n });\n }\n\n disable() {\n return super.disable(this.formPromise);\n }\n\n async remove(key: any) {\n if (this.keysConfiguredCount <= 1 || key.removePromise != null) {\n return;\n }\n const name = key.name != null ? key.name : this.i18nService.t('webAuthnkeyX', key.id);\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('removeU2fConfirmation'), name,\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return;\n }\n const request = new UpdateTwoFactorWebAuthnDeleteRequest();\n request.id = key.id;\n request.masterPasswordHash = this.masterPasswordHash;\n try {\n key.removePromise = this.apiService.deleteTwoFactorWebAuthn(request);\n const response = await key.removePromise;\n key.removePromise = null;\n await this.processResponse(response);\n } catch { }\n }\n\n async readKey() {\n if (this.keyIdAvailable == null) {\n return;\n }\n const request = new PasswordVerificationRequest();\n request.masterPasswordHash = this.masterPasswordHash;\n try {\n this.challengePromise = this.apiService.getTwoFactorWebAuthnChallenge(request);\n const challenge = await this.challengePromise;\n this.readDevice(challenge);\n } catch { }\n }\n\n private readDevice(webAuthnChallenge: ChallengeResponse) {\n // tslint:disable-next-line\n console.log('listening for key...');\n this.resetWebAuthn(true);\n\n navigator.credentials.create({\n publicKey: webAuthnChallenge,\n }).then((data: PublicKeyCredential) => {\n this.ngZone.run(() => {\n this.webAuthnListening = false;\n this.webAuthnResponse = data;\n });\n }).catch(err => {\n // tslint:disable-next-line\n console.error(err);\n this.resetWebAuthn(false);\n // TODO: Should we display the actual error?\n this.webAuthnError = true;\n });\n }\n\n private resetWebAuthn(listening = false) {\n this.webAuthnResponse = null;\n this.webAuthnError = false;\n this.webAuthnListening = listening;\n }\n\n private processResponse(response: TwoFactorWebAuthnResponse) {\n this.resetWebAuthn();\n this.keys = [];\n this.keyIdAvailable = null;\n this.name = null;\n this.keysConfiguredCount = 0;\n for (let i = 1; i <= 5; i++) {\n if (response.keys != null) {\n const key = response.keys.filter(k => k.id === i);\n if (key.length > 0) {\n this.keysConfiguredCount++;\n this.keys.push({\n id: i, name: key[0].name,\n configured: true,\n migrated: key[0].migrated,\n removePromise: null,\n });\n continue;\n }\n }\n this.keys.push({ id: i, name: null, configured: false, removePromise: null });\n if (this.keyIdAvailable == null) {\n this.keyIdAvailable = i;\n }\n }\n this.enabled = response.enabled;\n }\n}\n","
\n
\n
\n
\n

\n {{'twoStepLogin' | i18n}}\n {{'webAuthnTitle' | i18n}}\n

\n \n
\n \n \n
\n
\n \n {{'twoStepLoginProviderEnabled' | i18n}}\n \n \n

{{'twoFactorWebAuthnWarning' | i18n}}

\n
    \n
  • {{'twoFactorWebAuthnSupportWeb' | i18n}}
  • \n
\n
\n \"\"\n
    \n
  • \n \n {{'webAuthnkeyX' | i18n : i + 1}}\n {{k.name}}\n \n \n {{'webAuthnMigrated' | i18n}}\n \n \n 1 && k.configured\">\n \n -\n {{'remove' | i18n}}\n \n
  • \n
\n
\n

{{'twoFactorWebAuthnAdd' | i18n}}:

\n
    \n
  1. {{'twoFactorU2fGiveName' | i18n}}
  2. \n
  3. {{'twoFactorU2fPlugInReadKey' | i18n}}
  4. \n
  5. {{'twoFactorU2fTouchButton' | i18n}}
  6. \n
  7. {{'twoFactorU2fSaveForm' | i18n}}
  8. \n
\n
\n
\n \n \n
\n
\n \n \n \n \n \n \n \n {{'twoFactorU2fWaiting' | i18n}}...\n \n \n \n {{'twoFactorU2fClickSave' | i18n}}\n \n \n \n {{'twoFactorU2fProblemReadingTryAgain' | i18n}}\n \n \n
\n
\n \n \n \n
\n
\n
\n
\n
\n","import { Component } from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\nimport { UpdateTwoFactorYubioOtpRequest } from 'jslib/models/request/updateTwoFactorYubioOtpRequest';\nimport { TwoFactorYubiKeyResponse } from 'jslib/models/response/twoFactorYubiKeyResponse';\n\nimport { TwoFactorProviderType } from 'jslib/enums/twoFactorProviderType';\n\nimport { TwoFactorBaseComponent } from './two-factor-base.component';\n\n@Component({\n selector: 'app-two-factor-yubikey',\n templateUrl: 'two-factor-yubikey.component.html',\n})\nexport class TwoFactorYubiKeyComponent extends TwoFactorBaseComponent {\n type = TwoFactorProviderType.Yubikey;\n keys: any[];\n nfc = false;\n\n formPromise: Promise;\n disablePromise: Promise;\n\n constructor(apiService: ApiService, i18nService: I18nService,\n toasterService: ToasterService, platformUtilsService: PlatformUtilsService) {\n super(apiService, i18nService, toasterService, platformUtilsService);\n }\n\n auth(authResponse: any) {\n super.auth(authResponse);\n this.processResponse(authResponse.response);\n }\n\n submit() {\n const request = new UpdateTwoFactorYubioOtpRequest();\n request.masterPasswordHash = this.masterPasswordHash;\n request.key1 = this.keys != null && this.keys.length > 0 ? this.keys[0].key : null;\n request.key2 = this.keys != null && this.keys.length > 1 ? this.keys[1].key : null;\n request.key3 = this.keys != null && this.keys.length > 2 ? this.keys[2].key : null;\n request.key4 = this.keys != null && this.keys.length > 3 ? this.keys[3].key : null;\n request.key5 = this.keys != null && this.keys.length > 4 ? this.keys[4].key : null;\n request.nfc = this.nfc;\n\n return super.enable(async () => {\n this.formPromise = this.apiService.putTwoFactorYubiKey(request);\n const response = await this.formPromise;\n await this.processResponse(response);\n this.toasterService.popAsync('success', null, this.i18nService.t('yubikeysUpdated'));\n });\n }\n\n disable() {\n return super.disable(this.disablePromise);\n }\n\n remove(key: any) {\n key.existingKey = null;\n key.key = null;\n }\n\n private processResponse(response: TwoFactorYubiKeyResponse) {\n this.enabled = response.enabled;\n this.keys = [\n { key: response.key1, existingKey: this.padRight(response.key1) },\n { key: response.key2, existingKey: this.padRight(response.key2) },\n { key: response.key3, existingKey: this.padRight(response.key3) },\n { key: response.key4, existingKey: this.padRight(response.key4) },\n { key: response.key5, existingKey: this.padRight(response.key5) },\n ];\n this.nfc = response.nfc || !response.enabled;\n }\n\n private padRight(str: string, character = '•', size = 44) {\n if (str == null || character == null || str.length >= size) {\n return str;\n }\n const max = (size - str.length) / character.length;\n for (let i = 0; i < max; i++) {\n str += character;\n }\n return str;\n }\n}\n","
\n
\n
\n
\n

\n {{'twoStepLogin' | i18n}}\n YubiKey\n

\n \n
\n \n \n
\n
\n \n {{'twoStepLoginProviderEnabled' | i18n}}\n \n \n

{{'twoFactorYubikeyWarning' | i18n}}

\n
    \n
  • {{'twoFactorYubikeySupportUsb' | i18n}}
  • \n
  • {{'twoFactorYubikeySupportMobile' | i18n}}
  • \n
\n
\n \"\"\n

{{'twoFactorYubikeyAdd' | i18n}}:

\n
    \n
  1. {{'twoFactorYubikeyPlugIn' | i18n}}
  2. \n
  3. {{'twoFactorYubikeySelectKey' | i18n}}
  4. \n
  5. {{'twoFactorYubikeyTouchButton' | i18n}}
  6. \n
  7. {{'twoFactorYubikeySaveForm' | i18n}}
  8. \n
\n
\n
\n
\n \n \n
\n {{k.existingKey}}\n \n
\n
\n
\n {{'nfcSupport' | i18n}}\n
\n \n \n
\n {{'twoFactorYubikeySupportsNfcDesc' | i18n}}\n
\n
\n \n \n \n
\n
\n
\n
\n
\n","import { Component } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { EventService } from 'jslib/abstractions/event.service';\nimport { ExportService } from 'jslib/abstractions/export.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\nimport { ExportComponent as BaseExportComponent } from '../../tools/export.component';\n\nimport { EventType } from 'jslib/enums/eventType';\n\n@Component({\n selector: 'app-org-export',\n templateUrl: '../../tools/export.component.html',\n})\nexport class ExportComponent extends BaseExportComponent {\n constructor(cryptoService: CryptoService, i18nService: I18nService,\n platformUtilsService: PlatformUtilsService, exportService: ExportService,\n eventService: EventService, private route: ActivatedRoute) {\n super(cryptoService, i18nService, platformUtilsService, exportService, eventService);\n }\n\n ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organizationId = params.organizationId;\n });\n }\n\n getExportData() {\n return this.exportService.getOrganizationExport(this.organizationId, this.format);\n }\n\n getFileName() {\n return super.getFileName('org');\n }\n\n async collectEvent(): Promise {\n // TODO\n // await this.eventService.collect(EventType.Organization_ClientExportedVault);\n }\n}\n","import {\n Component,\n ComponentFactoryResolver,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { AuditService } from 'jslib/abstractions/audit.service';\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport {\n ExposedPasswordsReportComponent as BaseExposedPasswordsReportComponent,\n} from '../../tools/exposed-passwords-report.component';\n\nimport { Cipher } from 'jslib/models/domain/cipher';\nimport { CipherView } from 'jslib/models/view/cipherView';\n\n@Component({\n selector: 'app-exposed-passwords-report',\n templateUrl: '../../tools/exposed-passwords-report.component.html',\n})\nexport class ExposedPasswordsReportComponent extends BaseExposedPasswordsReportComponent {\n manageableCiphers: Cipher[];\n\n constructor(cipherService: CipherService, auditService: AuditService,\n componentFactoryResolver: ComponentFactoryResolver, messagingService: MessagingService,\n userService: UserService, private route: ActivatedRoute) {\n super(cipherService, auditService, componentFactoryResolver, messagingService, userService);\n }\n\n ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organization = await this.userService.getOrganization(params.organizationId);\n this.manageableCiphers = await this.cipherService.getAll();\n super.ngOnInit();\n });\n }\n\n getAllCiphers(): Promise {\n return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n }\n\n canManageCipher(c: CipherView): boolean {\n return this.manageableCiphers.some(x => x.id === c.id);\n }\n}\n","import { PasswordHistoryResponse } from '../response/passwordHistoryResponse';\n\nexport class PasswordHistoryData {\n password: string;\n lastUsedDate: string;\n\n constructor(response?: PasswordHistoryResponse) {\n if (response == null) {\n return;\n }\n\n this.password = response.password;\n this.lastUsedDate = response.lastUsedDate;\n }\n}\n","import { View } from './view';\n\nimport { Attachment } from '../domain/attachment';\nimport { SymmetricCryptoKey } from '../domain/symmetricCryptoKey';\n\nexport class AttachmentView implements View {\n id: string = null;\n url: string = null;\n size: string = null;\n sizeName: string = null;\n fileName: string = null;\n key: SymmetricCryptoKey = null;\n\n constructor(a?: Attachment) {\n if (!a) {\n return;\n }\n\n this.id = a.id;\n this.url = a.url;\n this.size = a.size;\n this.sizeName = a.sizeName;\n }\n\n get fileSize(): number {\n try {\n if (this.size != null) {\n return parseInt(this.size, null);\n }\n } catch { }\n return 0;\n }\n}\n","import { PasswordHistoryData } from '../data/passwordHistoryData';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\n\nimport { PasswordHistoryView } from '../view/passwordHistoryView';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class Password extends Domain {\n password: EncString;\n lastUsedDate: Date;\n\n constructor(obj?: PasswordHistoryData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(this, obj, {\n password: null,\n }, alreadyEncrypted);\n this.lastUsedDate = new Date(obj.lastUsedDate);\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return this.decryptObj(new PasswordHistoryView(this), {\n password: null,\n }, orgId, encKey);\n }\n\n toPasswordHistoryData(): PasswordHistoryData {\n const ph = new PasswordHistoryData();\n ph.lastUsedDate = this.lastUsedDate.toISOString();\n this.buildDataModel(this, ph, {\n password: null,\n });\n return ph;\n }\n}\n","import { CipherRequest } from './cipherRequest';\n\nimport { Cipher } from '../domain/cipher';\n\nexport class CipherCreateRequest {\n cipher: CipherRequest;\n collectionIds: string[];\n\n constructor(cipher: Cipher) {\n this.cipher = new CipherRequest(cipher);\n this.collectionIds = cipher.collectionIds;\n }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nexport class CardApi extends BaseResponse {\n cardholderName: string;\n brand: string;\n number: string;\n expMonth: string;\n expYear: string;\n code: string;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.cardholderName = this.getResponseProperty('CardholderName');\n this.brand = this.getResponseProperty('Brand');\n this.number = this.getResponseProperty('Number');\n this.expMonth = this.getResponseProperty('ExpMonth');\n this.expYear = this.getResponseProperty('ExpYear');\n this.code = this.getResponseProperty('Code');\n }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nimport { FieldType } from '../../enums/fieldType';\n\nexport class FieldApi extends BaseResponse {\n name: string;\n value: string;\n type: FieldType;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.type = this.getResponseProperty('Type');\n this.name = this.getResponseProperty('Name');\n this.value = this.getResponseProperty('Value');\n }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nexport class IdentityApi extends BaseResponse {\n title: string;\n firstName: string;\n middleName: string;\n lastName: string;\n address1: string;\n address2: string;\n address3: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n company: string;\n email: string;\n phone: string;\n ssn: string;\n username: string;\n passportNumber: string;\n licenseNumber: string;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.title = this.getResponseProperty('Title');\n this.firstName = this.getResponseProperty('FirstName');\n this.middleName = this.getResponseProperty('MiddleName');\n this.lastName = this.getResponseProperty('LastName');\n this.address1 = this.getResponseProperty('Address1');\n this.address2 = this.getResponseProperty('Address2');\n this.address3 = this.getResponseProperty('Address3');\n this.city = this.getResponseProperty('City');\n this.state = this.getResponseProperty('State');\n this.postalCode = this.getResponseProperty('PostalCode');\n this.country = this.getResponseProperty('Country');\n this.company = this.getResponseProperty('Company');\n this.email = this.getResponseProperty('Email');\n this.phone = this.getResponseProperty('Phone');\n this.ssn = this.getResponseProperty('SSN');\n this.username = this.getResponseProperty('Username');\n this.passportNumber = this.getResponseProperty('PassportNumber');\n this.licenseNumber = this.getResponseProperty('LicenseNumber');\n }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nimport { LoginUriApi } from './loginUriApi';\n\nexport class LoginApi extends BaseResponse {\n uris: LoginUriApi[];\n username: string;\n password: string;\n passwordRevisionDate: string;\n totp: string;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.username = this.getResponseProperty('Username');\n this.password = this.getResponseProperty('Password');\n this.passwordRevisionDate = this.getResponseProperty('PasswordRevisionDate');\n this.totp = this.getResponseProperty('Totp');\n\n const uris = this.getResponseProperty('Uris');\n if (uris != null) {\n this.uris = uris.map((u: any) => new LoginUriApi(u));\n }\n }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nimport { UriMatchType } from '../../enums/uriMatchType';\n\nexport class LoginUriApi extends BaseResponse {\n uri: string;\n match: UriMatchType = null;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.uri = this.getResponseProperty('Uri');\n const match = this.getResponseProperty('Match');\n this.match = match != null ? match : null;\n }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nimport { SecureNoteType } from '../../enums/secureNoteType';\n\nexport class SecureNoteApi extends BaseResponse {\n type: SecureNoteType;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.type = this.getResponseProperty('Type');\n }\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n Input,\n} from '@angular/core';\n\n@Directive({\n selector: '[appFallbackSrc]',\n})\nexport class FallbackSrcDirective {\n @Input('appFallbackSrc') appFallbackSrc: string;\n\n constructor(private el: ElementRef) {\n }\n\n @HostListener('error') onError() {\n this.el.nativeElement.src = this.appFallbackSrc;\n }\n}\n","import { Component } from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { ImportService } from 'jslib/abstractions/import.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { ImportComponent as BaseImportComponent } from '../../tools/import.component';\n\n@Component({\n selector: 'app-org-import',\n templateUrl: '../../tools/import.component.html',\n})\nexport class ImportComponent extends BaseImportComponent {\n organizationName: string;\n\n constructor(i18nService: I18nService, toasterService: ToasterService,\n importService: ImportService, router: Router, private route: ActivatedRoute,\n platformUtilsService: PlatformUtilsService,\n private userService: UserService) {\n super(i18nService, toasterService, importService, router, platformUtilsService);\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organizationId = params.organizationId;\n this.successNavigate = ['organizations', this.organizationId, 'vault'];\n super.ngOnInit();\n });\n const organization = await this.userService.getOrganization(this.organizationId);\n this.organizationName = organization.name;\n }\n\n async submit() {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('importWarning', this.organizationName),\n this.i18nService.t('warning'), this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return;\n }\n super.submit();\n }\n}\n","import {\n Component,\n ComponentFactoryResolver,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport {\n InactiveTwoFactorReportComponent as BaseInactiveTwoFactorReportComponent,\n} from '../../tools/inactive-two-factor-report.component';\n\nimport { CipherView } from 'jslib/models/view/cipherView';\n\n@Component({\n selector: 'app-inactive-two-factor-report',\n templateUrl: '../../tools/inactive-two-factor-report.component.html',\n})\nexport class InactiveTwoFactorReportComponent extends BaseInactiveTwoFactorReportComponent {\n constructor(cipherService: CipherService, componentFactoryResolver: ComponentFactoryResolver,\n messagingService: MessagingService, userService: UserService,\n private route: ActivatedRoute) {\n super(cipherService, componentFactoryResolver, messagingService, userService);\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organization = await this.userService.getOrganization(params.organizationId);\n await super.ngOnInit();\n });\n }\n\n getAllCiphers(): Promise {\n return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n }\n}\n","import {\n Component,\n ComponentFactoryResolver,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { Cipher } from 'jslib/models/domain/cipher';\n\nimport { CipherView } from 'jslib/models/view/cipherView';\n\nimport {\n ReusedPasswordsReportComponent as BaseReusedPasswordsReportComponent,\n} from '../../tools/reused-passwords-report.component';\n\n@Component({\n selector: 'app-reused-passwords-report',\n templateUrl: '../../tools/reused-passwords-report.component.html',\n})\nexport class ReusedPasswordsReportComponent extends BaseReusedPasswordsReportComponent {\n manageableCiphers: Cipher[];\n\n constructor(cipherService: CipherService, componentFactoryResolver: ComponentFactoryResolver,\n messagingService: MessagingService, userService: UserService,\n private route: ActivatedRoute) {\n super(cipherService, componentFactoryResolver, messagingService, userService);\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organization = await this.userService.getOrganization(params.organizationId);\n this.manageableCiphers = await this.cipherService.getAll();\n await super.ngOnInit();\n });\n }\n\n getAllCiphers(): Promise {\n return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n }\n\n canManageCipher(c: CipherView): boolean {\n return this.manageableCiphers.some(x => x.id === c.id);\n }\n}\n","import { Component } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { Organization } from 'jslib/models/domain/organization';\n\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\n@Component({\n selector: 'app-org-tools',\n templateUrl: 'tools.component.html',\n})\nexport class ToolsComponent {\n organization: Organization;\n accessReports = false;\n loading = true;\n\n constructor(private route: ActivatedRoute, private userService: UserService,\n private messagingService: MessagingService) { }\n\n ngOnInit() {\n this.route.parent.params.subscribe(async params => {\n this.organization = await this.userService.getOrganization(params.organizationId);\n // TODO: Maybe we want to just make sure they are not on a free plan? Just compare useTotp for now\n // since all paid plans include useTotp\n this.accessReports = this.organization.useTotp;\n this.loading = false;\n });\n }\n\n upgradeOrganization() {\n this.messagingService.send('upgradeOrganization', { organizationId: this.organization.id });\n }\n}\n","\n","import {\n Component,\n ComponentFactoryResolver,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport {\n UnsecuredWebsitesReportComponent as BaseUnsecuredWebsitesReportComponent,\n} from '../../tools/unsecured-websites-report.component';\n\nimport { CipherView } from 'jslib/models/view/cipherView';\n\n@Component({\n selector: 'app-unsecured-websites-report',\n templateUrl: '../../tools/unsecured-websites-report.component.html',\n})\nexport class UnsecuredWebsitesReportComponent extends BaseUnsecuredWebsitesReportComponent {\n constructor(cipherService: CipherService, componentFactoryResolver: ComponentFactoryResolver,\n messagingService: MessagingService, userService: UserService,\n private route: ActivatedRoute) {\n super(cipherService, componentFactoryResolver, messagingService, userService);\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organization = await this.userService.getOrganization(params.organizationId);\n await super.ngOnInit();\n });\n }\n\n getAllCiphers(): Promise {\n return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n }\n}\n","import {\n Component,\n ComponentFactoryResolver,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib/abstractions/passwordGeneration.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { Cipher } from 'jslib/models/domain/cipher';\n\nimport { CipherView } from 'jslib/models/view/cipherView';\n\nimport {\n WeakPasswordsReportComponent as BaseWeakPasswordsReportComponent,\n} from '../../tools/weak-passwords-report.component';\n\n@Component({\n selector: 'app-weak-passwords-report',\n templateUrl: '../../tools/weak-passwords-report.component.html',\n})\nexport class WeakPasswordsReportComponent extends BaseWeakPasswordsReportComponent {\n manageableCiphers: Cipher[];\n\n constructor(cipherService: CipherService, passwordGenerationService: PasswordGenerationService,\n componentFactoryResolver: ComponentFactoryResolver, messagingService: MessagingService,\n userService: UserService, private route: ActivatedRoute) {\n super(cipherService, passwordGenerationService, componentFactoryResolver, messagingService, userService);\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organization = await this.userService.getOrganization(params.organizationId);\n this.manageableCiphers = await this.cipherService.getAll();\n await super.ngOnInit();\n });\n }\n\n getAllCiphers(): Promise {\n return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n }\n\n canManageCipher(c: CipherView): boolean {\n return this.manageableCiphers.some(x => x.id === c.id);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ComponentFactoryResolver,\n NgZone,\n OnDestroy,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { SyncService } from 'jslib/abstractions/sync.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { BroadcasterService } from 'jslib/angular/services/broadcaster.service';\n\nimport { Organization } from 'jslib/models/domain/organization';\nimport { CipherView } from 'jslib/models/view/cipherView';\n\nimport { CipherType } from 'jslib/enums/cipherType';\n\nimport { ModalComponent } from '../../modal.component';\n\nimport { EntityEventsComponent } from '../manage/entity-events.component';\nimport { AddEditComponent } from './add-edit.component';\nimport { AttachmentsComponent } from './attachments.component';\nimport { CiphersComponent } from './ciphers.component';\nimport { CollectionsComponent } from './collections.component';\nimport { GroupingsComponent } from './groupings.component';\n\nconst BroadcasterSubscriptionId = 'OrgVaultComponent';\n\n@Component({\n selector: 'app-org-vault',\n templateUrl: 'vault.component.html',\n})\nexport class VaultComponent implements OnInit, OnDestroy {\n @ViewChild(GroupingsComponent, { static: true }) groupingsComponent: GroupingsComponent;\n @ViewChild(CiphersComponent, { static: true }) ciphersComponent: CiphersComponent;\n @ViewChild('attachments', { read: ViewContainerRef, static: true }) attachmentsModalRef: ViewContainerRef;\n @ViewChild('cipherAddEdit', { read: ViewContainerRef, static: true }) cipherAddEditModalRef: ViewContainerRef;\n @ViewChild('collections', { read: ViewContainerRef, static: true }) collectionsModalRef: ViewContainerRef;\n @ViewChild('eventsTemplate', { read: ViewContainerRef, static: true }) eventsModalRef: ViewContainerRef;\n\n organization: Organization;\n collectionId: string = null;\n type: CipherType = null;\n deleted: boolean = false;\n trashCleanupWarning: string = null;\n\n modal: ModalComponent = null;\n\n constructor(private route: ActivatedRoute, private userService: UserService,\n private router: Router, private changeDetectorRef: ChangeDetectorRef,\n private syncService: SyncService, private i18nService: I18nService,\n private componentFactoryResolver: ComponentFactoryResolver, private messagingService: MessagingService,\n private broadcasterService: BroadcasterService, private ngZone: NgZone,\n private platformUtilsService: PlatformUtilsService) { }\n\n ngOnInit() {\n this.trashCleanupWarning = this.i18nService.t(\n this.platformUtilsService.isSelfHost() ? 'trashCleanupWarningSelfHosted' : 'trashCleanupWarning'\n );\n\n const queryParams = this.route.parent.params.subscribe(async params => {\n this.organization = await this.userService.getOrganization(params.organizationId);\n this.groupingsComponent.organization = this.organization;\n this.ciphersComponent.organization = this.organization;\n\n const queryParamsSub = this.route.queryParams.subscribe(async qParams => {\n this.ciphersComponent.searchText = this.groupingsComponent.searchText = qParams.search;\n if (!this.organization.canManageAllCollections) {\n await this.syncService.fullSync(false);\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case 'syncCompleted':\n if (message.successfully) {\n await Promise.all([\n this.groupingsComponent.load(),\n this.ciphersComponent.refresh(),\n ]);\n this.changeDetectorRef.detectChanges();\n }\n break;\n }\n });\n });\n }\n await this.groupingsComponent.load();\n\n if (qParams == null) {\n this.groupingsComponent.selectedAll = true;\n await this.ciphersComponent.reload();\n } else {\n if (qParams.deleted) {\n this.groupingsComponent.selectedTrash = true;\n await this.filterDeleted(true);\n } else if (qParams.type) {\n const t = parseInt(qParams.type, null);\n this.groupingsComponent.selectedType = t;\n await this.filterCipherType(t, true);\n } else if (qParams.collectionId) {\n this.groupingsComponent.selectedCollectionId = qParams.collectionId;\n await this.filterCollection(qParams.collectionId, true);\n } else {\n this.groupingsComponent.selectedAll = true;\n await this.ciphersComponent.reload();\n }\n }\n\n if (qParams.viewEvents != null) {\n const cipher = this.ciphersComponent.ciphers.filter(c => c.id === qParams.viewEvents);\n if (cipher.length > 0) {\n this.viewEvents(cipher[0]);\n }\n }\n\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n\n if (queryParams != null) {\n queryParams.unsubscribe();\n }\n });\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n async clearGroupingFilters() {\n this.ciphersComponent.showAddNew = true;\n this.ciphersComponent.deleted = false;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchVault');\n await this.ciphersComponent.applyFilter();\n this.clearFilters();\n this.go();\n }\n\n async filterCipherType(type: CipherType, load = false) {\n this.ciphersComponent.showAddNew = true;\n this.ciphersComponent.deleted = false;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchType');\n const filter = (c: CipherView) => c.type === type;\n if (load) {\n await this.ciphersComponent.reload(filter);\n } else {\n await this.ciphersComponent.applyFilter(filter);\n }\n this.clearFilters();\n this.type = type;\n this.go();\n }\n\n async filterCollection(collectionId: string, load = false) {\n this.ciphersComponent.showAddNew = true;\n this.ciphersComponent.deleted = false;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchCollection');\n const filter = (c: CipherView) => {\n if (collectionId === 'unassigned') {\n return c.collectionIds == null || c.collectionIds.length === 0;\n } else {\n return c.collectionIds != null && c.collectionIds.indexOf(collectionId) > -1;\n }\n };\n if (load) {\n await this.ciphersComponent.reload(filter);\n } else {\n await this.ciphersComponent.applyFilter(filter);\n }\n this.clearFilters();\n this.collectionId = collectionId;\n this.go();\n }\n\n async filterDeleted(load: boolean = false) {\n this.ciphersComponent.showAddNew = false;\n this.ciphersComponent.deleted = true;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchTrash');\n if (load) {\n await this.ciphersComponent.reload(null, true);\n } else {\n await this.ciphersComponent.applyFilter(null);\n }\n this.clearFilters();\n this.deleted = true;\n this.go();\n }\n\n filterSearchText(searchText: string) {\n this.ciphersComponent.searchText = searchText;\n this.ciphersComponent.search(200);\n }\n\n editCipherAttachments(cipher: CipherView) {\n if (this.organization.maxStorageGb == null || this.organization.maxStorageGb === 0) {\n this.messagingService.send('upgradeOrganization', { organizationId: cipher.organizationId });\n return;\n }\n\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.attachmentsModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(AttachmentsComponent, this.attachmentsModalRef);\n\n childComponent.organization = this.organization;\n childComponent.cipherId = cipher.id;\n let madeAttachmentChanges = false;\n childComponent.onUploadedAttachment.subscribe(() => madeAttachmentChanges = true);\n childComponent.onDeletedAttachment.subscribe(() => madeAttachmentChanges = true);\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n if (madeAttachmentChanges) {\n await this.ciphersComponent.refresh();\n }\n madeAttachmentChanges = false;\n });\n }\n\n editCipherCollections(cipher: CipherView) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.collectionsModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(CollectionsComponent, this.collectionsModalRef);\n\n if (this.organization.canManageAllCollections) {\n childComponent.collectionIds = cipher.collectionIds;\n childComponent.collections = this.groupingsComponent.collections.filter(c => !c.readOnly);\n }\n childComponent.organization = this.organization;\n childComponent.cipherId = cipher.id;\n childComponent.onSavedCollections.subscribe(async () => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n addCipher() {\n const component = this.editCipher(null);\n component.organizationId = this.organization.id;\n component.type = this.type;\n if (this.organization.canManageAllCollections) {\n component.collections = this.groupingsComponent.collections.filter(c => !c.readOnly);\n }\n if (this.collectionId != null) {\n component.collectionIds = [this.collectionId];\n }\n }\n\n editCipher(cipher: CipherView) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.cipherAddEditModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(AddEditComponent, this.cipherAddEditModalRef);\n\n childComponent.organization = this.organization;\n childComponent.cipherId = cipher == null ? null : cipher.id;\n childComponent.onSavedCipher.subscribe(async (c: CipherView) => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n childComponent.onDeletedCipher.subscribe(async (c: CipherView) => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n childComponent.onRestoredCipher.subscribe(async (c: CipherView) => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n\n return childComponent;\n }\n\n cloneCipher(cipher: CipherView) {\n const component = this.editCipher(cipher);\n component.cloneMode = true;\n component.organizationId = this.organization.id;\n if (this.organization.canManageAllCollections) {\n component.collections = this.groupingsComponent.collections.filter(c => !c.readOnly);\n }\n // Regardless of Admin state, the collection Ids need to passed manually as they are not assigned value\n // in the add-edit componenet\n component.collectionIds = cipher.collectionIds;\n }\n\n async viewEvents(cipher: CipherView) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.eventsModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n EntityEventsComponent, this.eventsModalRef);\n\n childComponent.name = cipher.name;\n childComponent.organizationId = this.organization.id;\n childComponent.entityId = cipher.id;\n childComponent.showUser = true;\n childComponent.entity = 'cipher';\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n private clearFilters() {\n this.collectionId = null;\n this.type = null;\n this.deleted = false;\n }\n\n private go(queryParams: any = null) {\n if (queryParams == null) {\n queryParams = {\n type: this.type,\n collectionId: this.collectionId,\n deleted: this.deleted ? true : null,\n };\n }\n\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: queryParams,\n replaceUrl: true,\n });\n }\n}\n","
\n
\n
\n \n \n
\n
\n
\n

\n {{'vault' | i18n}}\n \n \n \n {{'loading' | i18n}}\n \n \n

\n
\n \n \n \n
\n
\n \n {{trashCleanupWarning}}\n \n \n \n
\n
\n
\n\n\n\n\n","import { Component } from '@angular/core';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { CipherData } from 'jslib/models/data/cipherData';\nimport { Cipher } from 'jslib/models/domain/cipher';\nimport { Organization } from 'jslib/models/domain/organization';\n\nimport { AttachmentView } from 'jslib/models/view/attachmentView';\n\nimport { AttachmentsComponent as BaseAttachmentsComponent } from '../../vault/attachments.component';\n\n@Component({\n selector: 'app-org-vault-attachments',\n templateUrl: '../../vault/attachments.component.html',\n})\nexport class AttachmentsComponent extends BaseAttachmentsComponent {\n viewOnly = false;\n organization: Organization;\n\n constructor(cipherService: CipherService, i18nService: I18nService,\n cryptoService: CryptoService, userService: UserService,\n platformUtilsService: PlatformUtilsService, apiService: ApiService) {\n super(cipherService, i18nService, cryptoService, userService, platformUtilsService, apiService);\n }\n\n protected async reupload(attachment: AttachmentView) {\n if (this.organization.canManageAllCollections && this.showFixOldAttachments(attachment)) {\n await super.reuploadCipherAttachment(attachment, true);\n }\n }\n\n protected async loadCipher() {\n if (!this.organization.canManageAllCollections) {\n return await super.loadCipher();\n }\n const response = await this.apiService.getCipherAdmin(this.cipherId);\n return new Cipher(new CipherData(response));\n }\n\n protected saveCipherAttachment(file: File) {\n return this.cipherService.saveAttachmentWithServer(this.cipherDomain, file, this.organization.canManageAllCollections);\n }\n\n protected deleteCipherAttachment(attachmentId: string) {\n if (!this.organization.canManageAllCollections) {\n return super.deleteCipherAttachment(attachmentId);\n }\n return this.apiService.deleteCipherAttachmentAdmin(this.cipherId, attachmentId);\n }\n\n protected showFixOldAttachments(attachment: AttachmentView) {\n return attachment.key == null && this.organization.canManageAllCollections;\n }\n}\n","import {\n Directive,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ApiService } from '../../abstractions/api.service';\nimport { CipherService } from '../../abstractions/cipher.service';\nimport { CryptoService } from '../../abstractions/crypto.service';\nimport { I18nService } from '../../abstractions/i18n.service';\nimport { PlatformUtilsService } from '../../abstractions/platformUtils.service';\nimport { UserService } from '../../abstractions/user.service';\n\nimport { Cipher } from '../../models/domain/cipher';\nimport { ErrorResponse } from '../../models/response';\n\nimport { AttachmentView } from '../../models/view/attachmentView';\nimport { CipherView } from '../../models/view/cipherView';\n\n@Directive()\nexport class AttachmentsComponent implements OnInit {\n @Input() cipherId: string;\n @Output() onUploadedAttachment = new EventEmitter();\n @Output() onDeletedAttachment = new EventEmitter();\n @Output() onReuploadedAttachment = new EventEmitter();\n\n cipher: CipherView;\n cipherDomain: Cipher;\n hasUpdatedKey: boolean;\n canAccessAttachments: boolean;\n formPromise: Promise;\n deletePromises: { [id: string]: Promise; } = {};\n reuploadPromises: { [id: string]: Promise; } = {};\n emergencyAccessId?: string = null;\n\n constructor(protected cipherService: CipherService, protected i18nService: I18nService,\n protected cryptoService: CryptoService, protected userService: UserService,\n protected platformUtilsService: PlatformUtilsService, protected apiService: ApiService,\n protected win: Window) { }\n\n async ngOnInit() {\n await this.init();\n }\n\n async submit() {\n if (!this.hasUpdatedKey) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('updateKey'));\n return;\n }\n\n const fileEl = document.getElementById('file') as HTMLInputElement;\n const files = fileEl.files;\n if (files == null || files.length === 0) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('selectFile'));\n return;\n }\n\n if (files[0].size > 524288000) { // 500 MB\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('maxFileSize'));\n return;\n }\n\n try {\n this.formPromise = this.saveCipherAttachment(files[0]);\n this.cipherDomain = await this.formPromise;\n this.cipher = await this.cipherDomain.decrypt();\n this.platformUtilsService.showToast('success', null, this.i18nService.t('attachmentSaved'));\n this.onUploadedAttachment.emit();\n } catch { }\n\n // reset file input\n // ref: https://stackoverflow.com/a/20552042\n fileEl.type = '';\n fileEl.type = 'file';\n fileEl.value = '';\n }\n\n async delete(attachment: AttachmentView) {\n if (this.deletePromises[attachment.id] != null) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('deleteAttachmentConfirmation'), this.i18nService.t('deleteAttachment'),\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return;\n }\n\n try {\n this.deletePromises[attachment.id] = this.deleteCipherAttachment(attachment.id);\n await this.deletePromises[attachment.id];\n this.platformUtilsService.showToast('success', null, this.i18nService.t('deletedAttachment'));\n const i = this.cipher.attachments.indexOf(attachment);\n if (i > -1) {\n this.cipher.attachments.splice(i, 1);\n }\n } catch { }\n\n this.deletePromises[attachment.id] = null;\n this.onDeletedAttachment.emit();\n }\n\n async download(attachment: AttachmentView) {\n const a = (attachment as any);\n if (a.downloading) {\n return;\n }\n\n if (!this.canAccessAttachments) {\n this.platformUtilsService.showToast('error', this.i18nService.t('premiumRequired'),\n this.i18nService.t('premiumRequiredDesc'));\n return;\n }\n\n let url: string;\n try {\n const attachmentDownloadResponse = await this.apiService.getAttachmentData(this.cipher.id, attachment.id,\n this.emergencyAccessId);\n url = attachmentDownloadResponse.url;\n } catch (e) {\n if (e instanceof ErrorResponse && (e as ErrorResponse).statusCode === 404) {\n url = attachment.url;\n } else if (e instanceof ErrorResponse) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n } else {\n throw e;\n }\n }\n\n a.downloading = true;\n const response = await fetch(new Request(url, { cache: 'no-store' }));\n if (response.status !== 200) {\n this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred'));\n a.downloading = false;\n return;\n }\n\n try {\n const buf = await response.arrayBuffer();\n const key = attachment.key != null ? attachment.key :\n await this.cryptoService.getOrgKey(this.cipher.organizationId);\n const decBuf = await this.cryptoService.decryptFromBytes(buf, key);\n this.platformUtilsService.saveFile(this.win, decBuf, null, attachment.fileName);\n } catch (e) {\n this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred'));\n }\n\n a.downloading = false;\n }\n\n protected async init() {\n this.cipherDomain = await this.loadCipher();\n this.cipher = await this.cipherDomain.decrypt();\n\n this.hasUpdatedKey = await this.cryptoService.hasEncKey();\n const canAccessPremium = await this.userService.canAccessPremium();\n this.canAccessAttachments = canAccessPremium || this.cipher.organizationId != null;\n\n if (!this.canAccessAttachments) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('premiumRequiredDesc'), this.i18nService.t('premiumRequired'),\n this.i18nService.t('learnMore'), this.i18nService.t('cancel'));\n if (confirmed) {\n this.platformUtilsService.launchUri('https://vault.bitwarden.com/#/?premium=purchase');\n }\n } else if (!this.hasUpdatedKey) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('updateKey'), this.i18nService.t('featureUnavailable'),\n this.i18nService.t('learnMore'), this.i18nService.t('cancel'), 'warning');\n if (confirmed) {\n this.platformUtilsService.launchUri('https://help.bitwarden.com/article/update-encryption-key/');\n }\n }\n }\n\n protected async reuploadCipherAttachment(attachment: AttachmentView, admin: boolean) {\n const a = (attachment as any);\n if (attachment.key != null || a.downloading || this.reuploadPromises[attachment.id] != null) {\n return;\n }\n\n try {\n this.reuploadPromises[attachment.id] = Promise.resolve().then(async () => {\n // 1. Download\n a.downloading = true;\n const response = await fetch(new Request(attachment.url, { cache: 'no-store' }));\n if (response.status !== 200) {\n this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred'));\n a.downloading = false;\n return;\n }\n\n try {\n // 2. Resave\n const buf = await response.arrayBuffer();\n const key = attachment.key != null ? attachment.key :\n await this.cryptoService.getOrgKey(this.cipher.organizationId);\n const decBuf = await this.cryptoService.decryptFromBytes(buf, key);\n this.cipherDomain = await this.cipherService.saveAttachmentRawWithServer(\n this.cipherDomain, attachment.fileName, decBuf, admin);\n this.cipher = await this.cipherDomain.decrypt();\n\n // 3. Delete old\n this.deletePromises[attachment.id] = this.deleteCipherAttachment(attachment.id);\n await this.deletePromises[attachment.id];\n const foundAttachment = this.cipher.attachments.filter(a2 => a2.id === attachment.id);\n if (foundAttachment.length > 0) {\n const i = this.cipher.attachments.indexOf(foundAttachment[0]);\n if (i > -1) {\n this.cipher.attachments.splice(i, 1);\n }\n }\n\n this.platformUtilsService.showToast('success', null, this.i18nService.t('attachmentSaved'));\n this.onReuploadedAttachment.emit();\n } catch (e) {\n this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred'));\n }\n\n a.downloading = false;\n });\n await this.reuploadPromises[attachment.id];\n } catch { }\n }\n\n protected loadCipher() {\n return this.cipherService.get(this.cipherId);\n }\n\n protected saveCipherAttachment(file: File) {\n return this.cipherService.saveAttachmentWithServer(this.cipherDomain, file);\n }\n\n protected deleteCipherAttachment(attachmentId: string) {\n return this.cipherService.deleteAttachmentWithServer(this.cipher.id, attachmentId);\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class GlobalDomainResponse extends BaseResponse {\n type: number;\n domains: string[];\n excluded: boolean;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty('Type');\n this.domains = this.getResponseProperty('Domains');\n this.excluded = this.getResponseProperty('Excluded');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { KdfType } from '../../enums/kdfType';\n\nexport class IdentityTokenResponse extends BaseResponse {\n accessToken: string;\n expiresIn: number;\n refreshToken: string;\n tokenType: string;\n\n resetMasterPassword: boolean;\n privateKey: string;\n key: string;\n twoFactorToken: string;\n kdf: KdfType;\n kdfIterations: number;\n\n constructor(response: any) {\n super(response);\n this.accessToken = response.access_token;\n this.expiresIn = response.expires_in;\n this.refreshToken = response.refresh_token;\n this.tokenType = response.token_type;\n\n this.resetMasterPassword = this.getResponseProperty('ResetMasterPassword');\n this.privateKey = this.getResponseProperty('PrivateKey');\n this.key = this.getResponseProperty('Key');\n this.twoFactorToken = this.getResponseProperty('TwoFactorToken');\n this.kdf = this.getResponseProperty('Kdf');\n this.kdfIterations = this.getResponseProperty('KdfIterations');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { TwoFactorProviderType } from '../../enums/twoFactorProviderType';\n\nexport class IdentityTwoFactorResponse extends BaseResponse {\n twoFactorProviders: TwoFactorProviderType[];\n twoFactorProviders2 = new Map();\n\n constructor(response: any) {\n super(response);\n this.twoFactorProviders = this.getResponseProperty('TwoFactorProviders');\n const twoFactorProviders2 = this.getResponseProperty('TwoFactorProviders2');\n if (twoFactorProviders2 != null) {\n for (const prop in twoFactorProviders2) {\n if (twoFactorProviders2.hasOwnProperty(prop)) {\n this.twoFactorProviders2.set(parseInt(prop, null), twoFactorProviders2[prop]);\n }\n }\n }\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class ListResponse extends BaseResponse {\n data: T[];\n continuationToken: string;\n\n constructor(response: any, t: new (dataResponse: any) => T) {\n super(response);\n const data = this.getResponseProperty('Data');\n this.data = data == null ? [] : data.map((dr: any) => new t(dr));\n this.continuationToken = this.getResponseProperty('ContinuationToken');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { OrganizationUserStatusType } from '../../enums/organizationUserStatusType';\nimport { OrganizationUserType } from '../../enums/organizationUserType';\nimport { PermissionsApi } from '../api/permissionsApi';\n\nexport class ProfileOrganizationResponse extends BaseResponse {\n id: string;\n name: string;\n usePolicies: boolean;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useBusinessPortal: boolean;\n useSso: boolean;\n selfHost: boolean;\n usersGetPremium: boolean;\n seats: number;\n maxCollections: number;\n maxStorageGb?: number;\n key: string;\n status: OrganizationUserStatusType;\n type: OrganizationUserType;\n enabled: boolean;\n ssoBound: boolean;\n identifier: string;\n permissions: PermissionsApi;\n resetPasswordKey: string;\n userId: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.name = this.getResponseProperty('Name');\n this.usePolicies = this.getResponseProperty('UsePolicies');\n this.useGroups = this.getResponseProperty('UseGroups');\n this.useDirectory = this.getResponseProperty('UseDirectory');\n this.useEvents = this.getResponseProperty('UseEvents');\n this.useTotp = this.getResponseProperty('UseTotp');\n this.use2fa = this.getResponseProperty('Use2fa');\n this.useApi = this.getResponseProperty('UseApi');\n this.useBusinessPortal = this.getResponseProperty('UseBusinessPortal');\n this.useSso = this.getResponseProperty('UseSso');\n this.selfHost = this.getResponseProperty('SelfHost');\n this.usersGetPremium = this.getResponseProperty('UsersGetPremium');\n this.seats = this.getResponseProperty('Seats');\n this.maxCollections = this.getResponseProperty('MaxCollections');\n this.maxStorageGb = this.getResponseProperty('MaxStorageGb');\n this.key = this.getResponseProperty('Key');\n this.status = this.getResponseProperty('Status');\n this.type = this.getResponseProperty('Type');\n this.enabled = this.getResponseProperty('Enabled');\n this.ssoBound = this.getResponseProperty('SsoBound');\n this.identifier = this.getResponseProperty('Identifier');\n this.permissions = new PermissionsApi(this.getResponseProperty('permissions'));\n this.resetPasswordKey = this.getResponseProperty('ResetPasswordKey');\n this.userId = this.getResponseProperty('UserId');\n }\n}\n","import { BaseResponse } from './baseResponse';\nimport { CipherResponse } from './cipherResponse';\nimport { CollectionDetailsResponse } from './collectionResponse';\nimport { DomainsResponse } from './domainsResponse';\nimport { FolderResponse } from './folderResponse';\nimport { PolicyResponse } from './policyResponse';\nimport { ProfileResponse } from './profileResponse';\nimport { SendResponse } from './sendResponse';\n\nexport class SyncResponse extends BaseResponse {\n profile?: ProfileResponse;\n folders: FolderResponse[] = [];\n collections: CollectionDetailsResponse[] = [];\n ciphers: CipherResponse[] = [];\n domains?: DomainsResponse;\n policies?: PolicyResponse[] = [];\n sends: SendResponse[] = [];\n\n constructor(response: any) {\n super(response);\n\n const profile = this.getResponseProperty('Profile');\n if (profile != null) {\n this.profile = new ProfileResponse(profile);\n }\n\n const folders = this.getResponseProperty('Folders');\n if (folders != null) {\n this.folders = folders.map((f: any) => new FolderResponse(f));\n }\n\n const collections = this.getResponseProperty('Collections');\n if (collections != null) {\n this.collections = collections.map((c: any) => new CollectionDetailsResponse(c));\n }\n\n const ciphers = this.getResponseProperty('Ciphers');\n if (ciphers != null) {\n this.ciphers = ciphers.map((c: any) => new CipherResponse(c));\n }\n\n const domains = this.getResponseProperty('Domains');\n if (domains != null) {\n this.domains = new DomainsResponse(domains);\n }\n\n const policies = this.getResponseProperty('Policies');\n if (policies != null) {\n this.policies = policies.map((p: any) => new PolicyResponse(p));\n }\n\n const sends = this.getResponseProperty('Sends');\n if (sends != null) {\n this.sends = sends.map((s: any) => new SendResponse(s));\n }\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { PolicyType } from '../../enums/policyType';\n\nexport class PolicyResponse extends BaseResponse {\n id: string;\n organizationId: string;\n type: PolicyType;\n data: any;\n enabled: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.organizationId = this.getResponseProperty('OrganizationId');\n this.type = this.getResponseProperty('Type');\n this.data = this.getResponseProperty('Data');\n this.enabled = this.getResponseProperty('Enabled');\n }\n}\n","import { Component } from '@angular/core';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { CollectionService } from 'jslib/abstractions/collection.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\nimport { CipherData } from 'jslib/models/data/cipherData';\nimport { Cipher } from 'jslib/models/domain/cipher';\nimport { Organization } from 'jslib/models/domain/organization';\nimport { CipherCollectionsRequest } from 'jslib/models/request/cipherCollectionsRequest';\n\nimport { CollectionsComponent as BaseCollectionsComponent } from '../../vault/collections.component';\n\n@Component({\n selector: 'app-org-vault-collections',\n templateUrl: '../../vault/collections.component.html',\n})\nexport class CollectionsComponent extends BaseCollectionsComponent {\n organization: Organization;\n\n constructor(collectionService: CollectionService, platformUtilsService: PlatformUtilsService,\n i18nService: I18nService, cipherService: CipherService,\n private apiService: ApiService) {\n super(collectionService, platformUtilsService, i18nService, cipherService);\n this.allowSelectNone = true;\n }\n\n protected async loadCipher() {\n if (!this.organization.canManageAllCollections) {\n return await super.loadCipher();\n }\n const response = await this.apiService.getCipherAdmin(this.cipherId);\n return new Cipher(new CipherData(response));\n }\n\n protected loadCipherCollections() {\n if (!this.organization.canManageAllCollections) {\n return super.loadCipherCollections();\n }\n return this.collectionIds;\n }\n\n protected loadCollections() {\n if (!this.organization.canManageAllCollections) {\n return super.loadCollections();\n }\n return Promise.resolve(this.collections);\n }\n\n protected saveCollections() {\n if (this.organization.canManageAllCollections) {\n const request = new CipherCollectionsRequest(this.cipherDomain.collectionIds);\n return this.apiService.putCipherCollectionsAdmin(this.cipherId, request);\n } else {\n return super.saveCollections();\n }\n }\n}\n","export class CipherCollectionsRequest {\n collectionIds: string[];\n\n constructor(collectionIds: string[]) {\n this.collectionIds = collectionIds == null ? [] : collectionIds;\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\nimport { Organization } from 'jslib/models/domain/organization';\nimport { CipherBulkDeleteRequest } from 'jslib/models/request/cipherBulkDeleteRequest';\n\n@Component({\n selector: 'app-vault-bulk-delete',\n templateUrl: 'bulk-delete.component.html',\n})\nexport class BulkDeleteComponent {\n @Input() cipherIds: string[] = [];\n @Input() permanent: boolean = false;\n @Input() organization: Organization;\n @Output() onDeleted = new EventEmitter();\n\n formPromise: Promise;\n\n constructor(private cipherService: CipherService, private toasterService: ToasterService,\n private i18nService: I18nService, private apiService: ApiService) { }\n\n async submit() {\n if (!this.organization || !this.organization.canManageAllCollections) {\n await this.deleteCiphers();\n } else {\n await this.deleteCiphersAdmin();\n }\n\n await this.formPromise;\n\n this.onDeleted.emit();\n this.toasterService.popAsync('success', null, this.i18nService.t(this.permanent ? 'permanentlyDeletedItems'\n : 'deletedItems'));\n }\n\n private async deleteCiphers() {\n if (this.permanent) {\n this.formPromise = await this.cipherService.deleteManyWithServer(this.cipherIds);\n } else {\n this.formPromise = await this.cipherService.softDeleteManyWithServer(this.cipherIds);\n }\n }\n\n private async deleteCiphersAdmin() {\n const deleteRequest = new CipherBulkDeleteRequest(this.cipherIds, this.organization.id);\n if (this.permanent) {\n this.formPromise = await this.apiService.deleteManyCiphersAdmin(deleteRequest);\n } else {\n this.formPromise = await this.apiService.putDeleteManyCiphersAdmin(deleteRequest);\n }\n }\n}\n","
\n
\n
\n
\n

\n {{(permanent ? 'permanentlyDeleteSelected' : 'deleteSelected') | i18n}}\n

\n \n
\n
\n {{(permanent ? 'permanentlyDeleteSelectedItemsDesc' : 'deleteSelectedItemsDesc') | i18n: cipherIds.length}}\n
\n
\n \n \n
\n
\n
\n
\n","export class CipherBulkDeleteRequest {\n ids: string[];\n organizationId: string;\n\n constructor(ids: string[], organizationId?: string) {\n this.ids = ids == null ? [] : ids;\n this.organizationId = organizationId;\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { FolderService } from 'jslib/abstractions/folder.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\nimport { FolderView } from 'jslib/models/view/folderView';\n\n@Component({\n selector: 'app-vault-bulk-move',\n templateUrl: 'bulk-move.component.html',\n})\nexport class BulkMoveComponent implements OnInit {\n @Input() cipherIds: string[] = [];\n @Output() onMoved = new EventEmitter();\n\n folderId: string = null;\n folders: FolderView[] = [];\n formPromise: Promise;\n\n constructor(private cipherService: CipherService, private toasterService: ToasterService,\n private i18nService: I18nService, private folderService: FolderService) { }\n\n async ngOnInit() {\n this.folders = await this.folderService.getAllDecrypted();\n this.folderId = this.folders[0].id;\n }\n\n async submit() {\n this.formPromise = this.cipherService.moveManyWithServer(this.cipherIds, this.folderId);\n await this.formPromise;\n this.onMoved.emit();\n this.toasterService.popAsync('success', null, this.i18nService.t('movedItems'));\n }\n}\n","
\n
\n
\n
\n

\n {{'moveSelected' | i18n}}\n

\n \n
\n
\n

{{'moveSelectedItemsDesc' | i18n: cipherIds.length}}

\n
\n \n \n
\n
\n
\n \n \n
\n
\n
\n
\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\n@Component({\n selector: 'app-vault-bulk-restore',\n templateUrl: 'bulk-restore.component.html',\n})\nexport class BulkRestoreComponent {\n @Input() cipherIds: string[] = [];\n @Output() onRestored = new EventEmitter();\n\n formPromise: Promise;\n\n constructor(private cipherService: CipherService, private toasterService: ToasterService,\n private i18nService: I18nService) { }\n\n async submit() {\n this.formPromise = this.cipherService.restoreManyWithServer(this.cipherIds);\n await this.formPromise;\n this.onRestored.emit();\n this.toasterService.popAsync('success', null, this.i18nService.t('restoredItems'));\n }\n}\n","
\n
\n
\n
\n

\n {{'restoreSelected' | i18n}}\n

\n \n
\n
\n {{'restoreSelectedItemsDesc' | i18n: cipherIds.length}}\n
\n
\n \n \n
\n
\n
\n
\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { CollectionService } from 'jslib/abstractions/collection.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { CipherView } from 'jslib/models/view';\nimport { CollectionView } from 'jslib/models/view/collectionView';\n\nimport { Organization } from 'jslib/models/domain/organization';\n\n@Component({\n selector: 'app-vault-bulk-share',\n templateUrl: 'bulk-share.component.html',\n})\nexport class BulkShareComponent implements OnInit {\n @Input() ciphers: CipherView[] = [];\n @Input() organizationId: string;\n @Output() onShared = new EventEmitter();\n\n nonShareableCount = 0;\n collections: CollectionView[] = [];\n organizations: Organization[] = [];\n shareableCiphers: CipherView[] = [];\n formPromise: Promise;\n\n private writeableCollections: CollectionView[] = [];\n\n constructor(private cipherService: CipherService, private toasterService: ToasterService,\n private i18nService: I18nService, private collectionService: CollectionService,\n private userService: UserService) { }\n\n async ngOnInit() {\n this.shareableCiphers = this.ciphers.filter(c => !c.hasOldAttachments && c.organizationId == null);\n this.nonShareableCount = this.ciphers.length - this.shareableCiphers.length;\n const allCollections = await this.collectionService.getAllDecrypted();\n this.writeableCollections = allCollections.filter(c => !c.readOnly);\n this.organizations = await this.userService.getAllOrganizations();\n if (this.organizationId == null && this.organizations.length > 0) {\n this.organizationId = this.organizations[0].id;\n }\n this.filterCollections();\n }\n\n ngOnDestroy() {\n this.selectAll(false);\n }\n\n filterCollections() {\n this.selectAll(false);\n if (this.organizationId == null || this.writeableCollections.length === 0) {\n this.collections = [];\n } else {\n this.collections = this.writeableCollections.filter(c => c.organizationId === this.organizationId);\n }\n }\n\n async submit() {\n const checkedCollectionIds = this.collections.filter(c => (c as any).checked).map(c => c.id);\n try {\n this.formPromise = this.cipherService.shareManyWithServer(this.shareableCiphers, this.organizationId,\n checkedCollectionIds);\n await this.formPromise;\n this.onShared.emit();\n this.toasterService.popAsync('success', null, this.i18nService.t('sharedItems'));\n } catch { }\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n }\n\n selectAll(select: boolean) {\n const collections = select ? this.collections : this.writeableCollections;\n collections.forEach(c => this.check(c, select));\n }\n\n get canSave() {\n if (this.shareableCiphers != null && this.shareableCiphers.length > 0 && this.collections != null) {\n for (let i = 0; i < this.collections.length; i++) {\n if ((this.collections[i] as any).checked) {\n return true;\n }\n }\n }\n return false;\n }\n}\n","
\n
\n
\n
\n

\n {{'shareSelected' | i18n}}\n

\n \n
\n
\n

{{'shareManyDesc' | i18n}}

\n

{{'shareSelectedItemsCountDesc' | i18n: this.ciphers.length : shareableCiphers.length : nonShareableCount}}\n

\n
\n \n \n
\n
\n

{{'collections' | i18n}}

\n
\n \n \n
\n
\n
\n {{'noCollectionsInList' | i18n}}\n
\n \n \n \n \n \n \n \n
\n \n \n {{c.name}}\n
\n
\n
\n \n \n
\n
\n
\n
\n","import {\n Component,\n OnInit,\n} from '@angular/core';\n\nimport { ActivatedRoute } from '@angular/router';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { CryptoFunctionService } from 'jslib/abstractions/cryptoFunction.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\nimport { Utils } from 'jslib/misc/utils';\n\nimport { SendAccess } from 'jslib/models/domain/sendAccess';\nimport { SymmetricCryptoKey } from 'jslib/models/domain/symmetricCryptoKey';\n\nimport { SendAccessView } from 'jslib/models/view/sendAccessView';\n\nimport { SendType } from 'jslib/enums/sendType';\nimport { SendAccessRequest } from 'jslib/models/request/sendAccessRequest';\nimport { ErrorResponse } from 'jslib/models/response/errorResponse';\n\nimport { SendAccessResponse } from 'jslib/models/response/sendAccessResponse';\n\n@Component({\n selector: 'app-send-access',\n templateUrl: 'access.component.html',\n})\nexport class AccessComponent implements OnInit {\n send: SendAccessView;\n sendType = SendType;\n downloading = false;\n loading = true;\n passwordRequired = false;\n formPromise: Promise;\n password: string;\n showText = false;\n unavailable = false;\n error = false;\n hideEmail = false;\n\n private id: string;\n private key: string;\n private decKey: SymmetricCryptoKey;\n private accessRequest: SendAccessRequest;\n\n constructor(private i18nService: I18nService, private cryptoFunctionService: CryptoFunctionService,\n private apiService: ApiService, private platformUtilsService: PlatformUtilsService,\n private route: ActivatedRoute, private cryptoService: CryptoService) {\n }\n\n get sendText() {\n if (this.send == null || this.send.text == null) {\n return null;\n }\n return this.showText ? this.send.text.text : this.send.text.maskedText;\n }\n\n get expirationDate() {\n if (this.send == null || this.send.expirationDate == null) {\n return null;\n }\n return this.send.expirationDate;\n }\n\n get creatorIdentifier() {\n if (this.send == null || this.send.creatorIdentifier == null) {\n return null;\n }\n return this.send.creatorIdentifier;\n }\n\n ngOnInit() {\n this.route.params.subscribe(async params => {\n this.id = params.sendId;\n this.key = params.key;\n if (this.key == null || this.id == null) {\n return;\n }\n await this.load();\n });\n }\n\n async download() {\n if (this.send == null || this.decKey == null) {\n return;\n }\n\n if (this.downloading) {\n return;\n }\n\n\n const downloadData = await this.apiService.getSendFileDownloadData(this.send, this.accessRequest);\n\n if (Utils.isNullOrWhitespace(downloadData.url)) {\n this.platformUtilsService.showToast('error', null, this.i18nService.t('missingSendFile'));\n return;\n }\n\n this.downloading = true;\n const response = await fetch(new Request(downloadData.url, { cache: 'no-store' }));\n if (response.status !== 200) {\n this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred'));\n this.downloading = false;\n return;\n }\n\n try {\n const buf = await response.arrayBuffer();\n const decBuf = await this.cryptoService.decryptFromBytes(buf, this.decKey);\n this.platformUtilsService.saveFile(window, decBuf, null, this.send.file.fileName);\n } catch (e) {\n this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred'));\n }\n\n this.downloading = false;\n }\n\n copyText() {\n this.platformUtilsService.copyToClipboard(this.send.text.text);\n this.platformUtilsService.showToast('success', null,\n this.i18nService.t('valueCopied', this.i18nService.t('sendTypeText')));\n }\n\n toggleText() {\n this.showText = !this.showText;\n }\n\n async load() {\n this.unavailable = false;\n this.error = false;\n this.hideEmail = false;\n const keyArray = Utils.fromUrlB64ToArray(this.key);\n this.accessRequest = new SendAccessRequest();\n if (this.password != null) {\n const passwordHash = await this.cryptoFunctionService.pbkdf2(this.password, keyArray, 'sha256', 100000);\n this.accessRequest.password = Utils.fromBufferToB64(passwordHash);\n }\n try {\n let sendResponse: SendAccessResponse = null;\n if (this.loading) {\n sendResponse = await this.apiService.postSendAccess(this.id, this.accessRequest);\n } else {\n this.formPromise = this.apiService.postSendAccess(this.id, this.accessRequest);\n sendResponse = await this.formPromise;\n }\n this.passwordRequired = false;\n const sendAccess = new SendAccess(sendResponse);\n this.decKey = await this.cryptoService.makeSendKey(keyArray);\n this.send = await sendAccess.decrypt(this.decKey);\n this.showText = this.send.text != null ? !this.send.text.hidden : true;\n } catch (e) {\n if (e instanceof ErrorResponse) {\n if (e.statusCode === 401) {\n this.passwordRequired = true;\n } else if (e.statusCode === 404) {\n this.unavailable = true;\n } else {\n this.error = true;\n }\n }\n }\n this.loading = false;\n this.hideEmail = this.creatorIdentifier == null && !this.passwordRequired && !this.loading && !this.unavailable;\n }\n}\n","
\n
\n
\n

Bitwarden Send

\n
\n
\n

{{'sendCreatorIdentifier' | i18n: creatorIdentifier }}

\n
\n
\n \n {{'viewSendHiddenEmailWarning' | i18n }} \n {{'learnMore' | i18n}}.\n \n
\n
\n
\n
\n
\n
\n \n {{'loading' | i18n}}\n
\n
\n

{{'sendProtectedPassword' | i18n}}

\n

{{'sendProtectedPasswordDontKnow' | i18n}}

\n
\n \n \n
\n
\n \n
\n
\n
\n {{'sendAccessUnavailable' | i18n}}\n
\n
\n {{'unexpectedError' | i18n}}\n
\n
\n

{{send.name}}

\n
\n \n \n {{'sendHiddenByDefault' | i18n}}\n
\n \n
\n \n \n
\n \n \n

{{send.file.fileName}}

\n \n \n
\n

Expires:\n {{expirationDate | date: 'medium'}}

\n
\n
\n
\n
\n

{{'sendAccessTaglineProductDesc' | i18n}}
\n {{'sendAccessTaglineLearnMore' | i18n}} Bitwarden Send\n {{'sendAccessTaglineOr' | i18n}} {{'sendAccessTaglineSignUp' | i18n}}\n {{'sendAccessTaglineTryToday' | i18n}}\n

\n
\n
\n
\n","import {\n Component,\n ComponentFactoryResolver,\n NgZone,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { SendView } from 'jslib/models/view/sendView';\n\nimport { SendComponent as BaseSendComponent } from 'jslib/angular/components/send/send.component';\n\nimport { AddEditComponent } from './add-edit.component';\n\nimport { ModalComponent } from '../modal.component';\n\nimport { EnvironmentService } from 'jslib/abstractions/environment.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib/abstractions/policy.service';\nimport { SearchService } from 'jslib/abstractions/search.service';\nimport { SendService } from 'jslib/abstractions/send.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { BroadcasterService } from 'jslib/angular/services/broadcaster.service';\n\nconst BroadcasterSubscriptionId = 'SendComponent';\n\n@Component({\n selector: 'app-send',\n templateUrl: 'send.component.html',\n})\nexport class SendComponent extends BaseSendComponent {\n @ViewChild('sendAddEdit', { read: ViewContainerRef, static: true }) sendAddEditModalRef: ViewContainerRef;\n\n modal: ModalComponent = null;\n\n constructor(sendService: SendService, i18nService: I18nService,\n platformUtilsService: PlatformUtilsService, environmentService: EnvironmentService,\n ngZone: NgZone, searchService: SearchService, policyService: PolicyService, userService: UserService,\n private componentFactoryResolver: ComponentFactoryResolver, private broadcasterService: BroadcasterService) {\n super(sendService, i18nService, platformUtilsService, environmentService, ngZone, searchService,\n policyService, userService);\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n await this.load();\n\n // Broadcaster subscription - load if sync completes in the background\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case 'syncCompleted':\n if (message.successfully) {\n await this.load();\n }\n break;\n }\n });\n });\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n addSend() {\n if (this.disableSend) {\n return;\n }\n\n const component = this.editSend(null);\n component.type = this.type;\n }\n\n editSend(send: SendView) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.sendAddEditModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n AddEditComponent, this.sendAddEditModalRef);\n\n childComponent.sendId = send == null ? null : send.id;\n childComponent.onSavedSend.subscribe(async (s: SendView) => {\n this.modal.close();\n await this.load();\n });\n childComponent.onDeletedSend.subscribe(async (s: SendView) => {\n this.modal.close();\n await this.load();\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n\n return childComponent;\n }\n}\n","
\n
\n
\n {{'sendDisabled' | i18n}}\n
\n
\n {{'sendDisabledWarning' | i18n}}\n
\n
\n
\n
\n
\n
\n {{'filters' | i18n}}\n
\n
\n \n \n

{{'types' | i18n}}

\n \n
\n
\n
\n
\n
\n

\n {{'send' | i18n}}\n \n \n \n {{'loading' | i18n}}\n \n \n

\n
\n \n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n \n \n
\n
\n {{s.name}}\n \n \n {{'disabled' | i18n}}\n \n \n \n {{'password' | i18n}}\n \n \n \n {{'maxAccessCountReached' | i18n}}\n \n \n \n {{'expired' | i18n}}\n \n \n \n {{'pendingDeletion' | i18n}}\n \n
\n {{s.deletionDate | date:'medium'}}\n
\n \n
\n
\n \n \n {{'loading' | i18n}}\n \n \n

{{'noSendsInList' | i18n}}

\n \n
\n
\n
\n
\n
\n\n","import { DatePipe } from '@angular/common';\n\nimport { Component } from '@angular/core';\n\nimport { EnvironmentService } from 'jslib/abstractions/environment.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib/abstractions/policy.service';\nimport { SendService } from 'jslib/abstractions/send.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { AddEditComponent as BaseAddEditComponent } from 'jslib/angular/components/send/add-edit.component';\n\n@Component({\n selector: 'app-send-add-edit',\n templateUrl: 'add-edit.component.html',\n})\nexport class AddEditComponent extends BaseAddEditComponent {\n constructor(i18nService: I18nService, platformUtilsService: PlatformUtilsService,\n environmentService: EnvironmentService, datePipe: DatePipe,\n sendService: SendService, userService: UserService,\n messagingService: MessagingService, policyService: PolicyService) {\n super(i18nService, platformUtilsService, environmentService, datePipe, sendService, userService,\n messagingService, policyService);\n }\n\n copyLinkToClipboard(link: string) {\n // Copy function on web depends on the modal being open or not. Since this event occurs during a transition\n // of the modal closing we need to add a small delay to make sure state of the DOM is consistent.\n window.setTimeout(() => super.copyLinkToClipboard(link), 500);\n }\n}\n","
\n
\n
\n
\n

{{title}}

\n \n
\n
\n \n {{'sendDisabledWarning' | i18n}}\n \n \n {{'sendOptionsPolicyInEffect' | i18n}}\n
    \n
  • {{'sendDisableHideEmailInEffect' | i18n}}
  • \n
\n
\n
\n
\n \n \n {{'sendNameDesc' | i18n}}\n
\n
\n
\n
\n \n
\n \n \n
\n
\n
\n \n \n
\n \n \n {{'sendTextDesc' | i18n}}\n
\n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n {{'file' | i18n}}\n {{send.file.fileName}} ({{send.file.sizeName}})\n
\n
\n \n \n {{'sendFileDesc' | i18n}} {{'maxFileSize' |\n i18n}}\n
\n
\n
\n

{{'share' | i18n}}

\n
\n \n \n
\n
\n
\n \n \n
\n
\n
\n

{{'options' | i18n}}

\n \n \n \n
\n
\n
\n
\n \n \n \n \n \n
\n \n \n \n
\n
\n
\n \n \n \n \n \n
\n
\n \n \n
\n
{{'deletionDateDesc' | i18n}}
\n
\n
\n
\n \n \n {{'clear' | i18n}}\n \n
\n \n \n \n \n
\n \n \n \n
\n
\n
\n \n \n \n \n \n
\n
\n \n \n
\n
{{'expirationDateDesc' | i18n}}
\n
\n
\n
\n
\n \n \n
{{'maxAccessCountDesc' | i18n}}
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n \n
\n \n
\n
\n
{{'sendPasswordDesc' | i18n}}
\n
\n
\n
\n \n \n
{{'sendNotesDesc' | i18n}}
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n \n \n \n
\n \n
\n
\n
\n
\n
\n","import { SendType } from '../../enums/sendType';\nimport { Utils } from '../../misc/utils';\n\nimport { Send } from '../domain/send';\nimport { SymmetricCryptoKey } from '../domain/symmetricCryptoKey';\n\nimport { SendFileView } from './sendFileView';\nimport { SendTextView } from './sendTextView';\nimport { View } from './view';\n\nexport class SendView implements View {\n id: string = null;\n accessId: string = null;\n name: string = null;\n notes: string = null;\n key: ArrayBuffer;\n cryptoKey: SymmetricCryptoKey;\n type: SendType = null;\n text = new SendTextView();\n file = new SendFileView();\n maxAccessCount?: number = null;\n accessCount: number = 0;\n revisionDate: Date = null;\n deletionDate: Date = null;\n expirationDate: Date = null;\n password: string = null;\n disabled: boolean = false;\n hideEmail: boolean = false;\n\n constructor(s?: Send) {\n if (!s) {\n return;\n }\n\n this.id = s.id;\n this.accessId = s.accessId;\n this.type = s.type;\n this.maxAccessCount = s.maxAccessCount;\n this.accessCount = s.accessCount;\n this.revisionDate = s.revisionDate;\n this.deletionDate = s.deletionDate;\n this.expirationDate = s.expirationDate;\n this.disabled = s.disabled;\n this.password = s.password;\n this.hideEmail = s.hideEmail;\n }\n\n get urlB64Key(): string {\n return Utils.fromBufferToUrlB64(this.key);\n }\n\n get maxAccessCountReached(): boolean {\n if (this.maxAccessCount == null) {\n return false;\n }\n return this.accessCount >= this.maxAccessCount;\n }\n\n get expired(): boolean {\n if (this.expirationDate == null) {\n return false;\n }\n return this.expirationDate <= new Date();\n }\n\n get pendingDelete(): boolean {\n return this.deletionDate <= new Date();\n }\n}\n","import {\n Component,\n ComponentFactoryResolver,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { ModalComponent } from '../modal.component';\nimport { ApiKeyComponent } from './api-key.component';\nimport { DeauthorizeSessionsComponent } from './deauthorize-sessions.component';\nimport { DeleteAccountComponent } from './delete-account.component';\nimport { PurgeVaultComponent } from './purge-vault.component';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\n@Component({\n selector: 'app-account',\n templateUrl: 'account.component.html',\n})\nexport class AccountComponent {\n @ViewChild('deauthorizeSessionsTemplate', { read: ViewContainerRef, static: true }) deauthModalRef: ViewContainerRef;\n @ViewChild('purgeVaultTemplate', { read: ViewContainerRef, static: true }) purgeModalRef: ViewContainerRef;\n @ViewChild('deleteAccountTemplate', { read: ViewContainerRef, static: true }) deleteModalRef: ViewContainerRef;\n @ViewChild('viewUserApiKeyTemplate', { read: ViewContainerRef, static: true }) viewUserApiKeyModalRef: ViewContainerRef;\n @ViewChild('rotateUserApiKeyTemplate', { read: ViewContainerRef, static: true }) rotateUserApiKeyModalRef: ViewContainerRef;\n\n private modal: ModalComponent = null;\n\n constructor(private componentFactoryResolver: ComponentFactoryResolver, private apiService: ApiService,\n private userService: UserService) { }\n\n deauthorizeSessions() {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.deauthModalRef.createComponent(factory).instance;\n this.modal.show(DeauthorizeSessionsComponent, this.deauthModalRef);\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n purgeVault() {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.purgeModalRef.createComponent(factory).instance;\n this.modal.show(PurgeVaultComponent, this.purgeModalRef);\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n deleteAccount() {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.deleteModalRef.createComponent(factory).instance;\n this.modal.show(DeleteAccountComponent, this.deleteModalRef);\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n async viewUserApiKey() {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.viewUserApiKeyModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(ApiKeyComponent, this.viewUserApiKeyModalRef);\n childComponent.keyType = 'user';\n childComponent.entityId = await this.userService.getUserId();\n childComponent.postKey = this.apiService.postUserApiKey.bind(this.apiService);\n childComponent.scope = 'api';\n childComponent.grantType = 'client_credentials';\n childComponent.apiKeyTitle = 'apiKey';\n childComponent.apiKeyWarning = 'userApiKeyWarning';\n childComponent.apiKeyDescription = 'userApiKeyDesc';\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n async rotateUserApiKey() {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.rotateUserApiKeyModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(ApiKeyComponent, this.rotateUserApiKeyModalRef);\n childComponent.keyType = 'user';\n childComponent.isRotation = true;\n childComponent.entityId = await this.userService.getUserId();\n childComponent.postKey = this.apiService.postUserRotateApiKey.bind(this.apiService);\n childComponent.scope = 'api';\n childComponent.grantType = 'client_credentials';\n childComponent.apiKeyTitle = 'apiKey';\n childComponent.apiKeyWarning = 'userApiKeyWarning';\n childComponent.apiKeyDescription = 'apiKeyRotateDesc';\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n}\n","
\n

{{'myAccount' | i18n}}

\n
\n\n
\n

{{'changeEmail' | i18n}}

\n
\n\n
\n

{{'changeMasterPassword' | i18n}}

\n
\n\n
\n

{{'encKeySettings' | i18n}}

\n
\n\n
\n

{{'apiKey' | i18n}}

\n
\n

\n {{'userApiKeyDesc' | i18n}}\n

\n\n\n
\n

{{'dangerZone' | i18n}}

\n
\n
\n
\n

{{'dangerZoneDesc' | i18n}}

\n \n \n \n
\n
\n\n\n\n\n\n","import { Component } from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\n\nimport { PasswordVerificationRequest } from 'jslib/models/request/passwordVerificationRequest';\n\n@Component({\n selector: 'app-deauthorize-sessions',\n templateUrl: 'deauthorize-sessions.component.html',\n})\nexport class DeauthorizeSessionsComponent {\n masterPassword: string;\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private cryptoService: CryptoService,\n private messagingService: MessagingService) { }\n\n async submit() {\n if (this.masterPassword == null || this.masterPassword === '') {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassRequired'));\n return;\n }\n\n const request = new PasswordVerificationRequest();\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n try {\n this.formPromise = this.apiService.postSecurityStamp(request);\n await this.formPromise;\n this.toasterService.popAsync('success', this.i18nService.t('sessionsDeauthorized'),\n this.i18nService.t('logBackIn'));\n this.messagingService.send('logout');\n } catch { }\n }\n}\n","
\n
\n
\n
\n

{{'deauthorizeSessions' | i18n}}

\n \n
\n
\n

{{'deauthorizeSessionsDesc' | i18n}}

\n {{'deauthorizeSessionsWarning' | i18n}}\n \n \n
\n
\n \n \n
\n
\n
\n
\n","import { Component } from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\n\nimport { PasswordVerificationRequest } from 'jslib/models/request/passwordVerificationRequest';\n\n@Component({\n selector: 'app-delete-account',\n templateUrl: 'delete-account.component.html',\n})\nexport class DeleteAccountComponent {\n masterPassword: string;\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private cryptoService: CryptoService,\n private messagingService: MessagingService) { }\n\n async submit() {\n if (this.masterPassword == null || this.masterPassword === '') {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassRequired'));\n return;\n }\n\n const request = new PasswordVerificationRequest();\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n try {\n this.formPromise = this.apiService.deleteAccount(request);\n await this.formPromise;\n this.toasterService.popAsync('success', this.i18nService.t('accountDeleted'),\n this.i18nService.t('accountDeletedDesc'));\n this.messagingService.send('logout');\n } catch { }\n }\n}\n","
\n
\n
\n
\n

{{'deleteAccount' | i18n}}

\n \n
\n
\n

{{'deleteAccountDesc' | i18n}}

\n {{'deleteAccountWarning' | i18n}}\n \n \n
\n
\n \n \n
\n
\n
\n
\n","import {\n Component,\n OnInit,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { UpdateProfileRequest } from 'jslib/models/request/updateProfileRequest';\n\nimport { ProfileResponse } from 'jslib/models/response/profileResponse';\n\n@Component({\n selector: 'app-profile',\n templateUrl: 'profile.component.html',\n})\nexport class ProfileComponent implements OnInit {\n loading = true;\n profile: ProfileResponse;\n fingerprint: string;\n\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private userService: UserService,\n private cryptoService: CryptoService) { }\n\n async ngOnInit() {\n this.profile = await this.apiService.getProfile();\n this.loading = false;\n const fingerprint = await this.cryptoService.getFingerprint(await this.userService.getUserId());\n if (fingerprint != null) {\n this.fingerprint = fingerprint.join('-');\n }\n }\n\n async submit() {\n try {\n const request = new UpdateProfileRequest(this.profile.name, this.profile.masterPasswordHint);\n this.formPromise = this.apiService.putProfile(request);\n await this.formPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('accountUpdated'));\n } catch { }\n }\n}\n","
\n \n {{'loading' | i18n}}\n
\n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n
\n
\n

\n {{'yourAccountsFingerprint' | i18n}}:\n \n
\n {{fingerprint}}\n

\n
\n
\n \n
\n","import {\n Component,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { EmailRequest } from 'jslib/models/request/emailRequest';\nimport { EmailTokenRequest } from 'jslib/models/request/emailTokenRequest';\n\n@Component({\n selector: 'app-change-email',\n templateUrl: 'change-email.component.html',\n})\nexport class ChangeEmailComponent {\n masterPassword: string;\n newEmail: string;\n token: string;\n tokenSent = false;\n\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private cryptoService: CryptoService,\n private messagingService: MessagingService, private userService: UserService) { }\n\n async submit() {\n const hasEncKey = await this.cryptoService.hasEncKey();\n if (!hasEncKey) {\n this.toasterService.popAsync('error', null, this.i18nService.t('updateKey'));\n return;\n }\n\n this.newEmail = this.newEmail.trim().toLowerCase();\n if (!this.tokenSent) {\n const request = new EmailTokenRequest();\n request.newEmail = this.newEmail;\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n try {\n this.formPromise = this.apiService.postEmailToken(request);\n await this.formPromise;\n this.tokenSent = true;\n } catch { }\n } else {\n const request = new EmailRequest();\n request.token = this.token;\n request.newEmail = this.newEmail;\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n const kdf = await this.userService.getKdf();\n const kdfIterations = await this.userService.getKdfIterations();\n const newKey = await this.cryptoService.makeKey(this.masterPassword, this.newEmail, kdf, kdfIterations);\n request.newMasterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, newKey);\n const newEncKey = await this.cryptoService.remakeEncKey(newKey);\n request.key = newEncKey[1].encryptedString;\n try {\n this.formPromise = this.apiService.postEmail(request);\n await this.formPromise;\n this.reset();\n this.toasterService.popAsync('success', this.i18nService.t('emailChanged'),\n this.i18nService.t('logBackIn'));\n this.messagingService.send('logout');\n } catch { }\n }\n }\n\n reset() {\n this.token = this.newEmail = this.masterPassword = null;\n this.tokenSent = false;\n }\n}\n","
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n
\n

{{'changeEmailDesc' | i18n : newEmail}}

\n {{'loggedOutWarning' | i18n}}\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n","import { PasswordVerificationRequest } from './passwordVerificationRequest';\n\nexport class EmailTokenRequest extends PasswordVerificationRequest {\n newEmail: string;\n masterPasswordHash: string;\n}\n","import { Component } from '@angular/core';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { FolderService } from 'jslib/abstractions/folder.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib/abstractions/policy.service';\nimport { SyncService } from 'jslib/abstractions/sync.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport {\n ChangePasswordComponent as BaseChangePasswordComponent,\n} from 'jslib/angular/components/change-password.component';\n\nimport { EmergencyAccessStatusType } from 'jslib/enums/emergencyAccessStatusType';\nimport { Utils } from 'jslib/misc/utils';\n\nimport { EncString } from 'jslib/models/domain/encString';\nimport { SymmetricCryptoKey } from 'jslib/models/domain/symmetricCryptoKey';\n\nimport { CipherWithIdRequest } from 'jslib/models/request/cipherWithIdRequest';\nimport { EmergencyAccessUpdateRequest } from 'jslib/models/request/emergencyAccessUpdateRequest';\nimport { FolderWithIdRequest } from 'jslib/models/request/folderWithIdRequest';\nimport { OrganizationUserResetPasswordEnrollmentRequest } from 'jslib/models/request/organizationUserResetPasswordEnrollmentRequest';\nimport { PasswordRequest } from 'jslib/models/request/passwordRequest';\nimport { UpdateKeyRequest } from 'jslib/models/request/updateKeyRequest';\n\n@Component({\n selector: 'app-change-password',\n templateUrl: 'change-password.component.html',\n})\nexport class ChangePasswordComponent extends BaseChangePasswordComponent {\n rotateEncKey = false;\n currentMasterPassword: string;\n\n constructor(i18nService: I18nService,\n cryptoService: CryptoService, messagingService: MessagingService,\n userService: UserService, passwordGenerationService: PasswordGenerationService,\n platformUtilsService: PlatformUtilsService, policyService: PolicyService,\n private folderService: FolderService, private cipherService: CipherService,\n private syncService: SyncService, private apiService: ApiService) {\n super(i18nService, cryptoService, messagingService, userService, passwordGenerationService,\n platformUtilsService, policyService);\n }\n\n async rotateEncKeyClicked() {\n if (this.rotateEncKey) {\n const ciphers = await this.cipherService.getAllDecrypted();\n let hasOldAttachments = false;\n if (ciphers != null) {\n for (let i = 0; i < ciphers.length; i++) {\n if (ciphers[i].organizationId == null && ciphers[i].hasOldAttachments) {\n hasOldAttachments = true;\n break;\n }\n }\n }\n\n if (hasOldAttachments) {\n const learnMore = await this.platformUtilsService.showDialog(\n this.i18nService.t('oldAttachmentsNeedFixDesc'), null,\n this.i18nService.t('learnMore'), this.i18nService.t('close'), 'warning');\n if (learnMore) {\n this.platformUtilsService.launchUri(\n 'https://help.bitwarden.com/article/attachments/#fixing-old-attachments');\n }\n this.rotateEncKey = false;\n return;\n }\n\n const result = await this.platformUtilsService.showDialog(\n this.i18nService.t('updateEncryptionKeyWarning') + ' ' +\n this.i18nService.t('updateEncryptionKeyExportWarning') + ' ' +\n this.i18nService.t('rotateEncKeyConfirmation'), this.i18nService.t('rotateEncKeyTitle'),\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!result) {\n this.rotateEncKey = false;\n }\n }\n }\n\n async submit() {\n const hasEncKey = await this.cryptoService.hasEncKey();\n if (!hasEncKey) {\n this.platformUtilsService.showToast('error', null, this.i18nService.t('updateKey'));\n return;\n }\n\n await super.submit();\n }\n\n async setupSubmitActions() {\n if (this.currentMasterPassword == null || this.currentMasterPassword === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassRequired'));\n return false;\n }\n\n if (this.rotateEncKey) {\n await this.syncService.fullSync(true);\n }\n\n return super.setupSubmitActions();\n }\n\n async performSubmitActions(newMasterPasswordHash: string, newKey: SymmetricCryptoKey,\n newEncKey: [SymmetricCryptoKey, EncString]) {\n const request = new PasswordRequest();\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.currentMasterPassword, null);\n request.newMasterPasswordHash = newMasterPasswordHash;\n request.key = newEncKey[1].encryptedString;\n\n try {\n if (this.rotateEncKey) {\n this.formPromise = this.apiService.postPassword(request).then(() => {\n return this.updateKey(newKey, request.newMasterPasswordHash);\n });\n } else {\n this.formPromise = this.apiService.postPassword(request);\n }\n\n await this.formPromise;\n\n this.platformUtilsService.showToast('success', this.i18nService.t('masterPasswordChanged'),\n this.i18nService.t('logBackIn'));\n this.messagingService.send('logout');\n } catch {\n this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred'));\n }\n }\n\n private async updateKey(key: SymmetricCryptoKey, masterPasswordHash: string) {\n const encKey = await this.cryptoService.makeEncKey(key);\n const privateKey = await this.cryptoService.getPrivateKey();\n let encPrivateKey: EncString = null;\n if (privateKey != null) {\n encPrivateKey = await this.cryptoService.encrypt(privateKey, encKey[0]);\n }\n const request = new UpdateKeyRequest();\n request.privateKey = encPrivateKey != null ? encPrivateKey.encryptedString : null;\n request.key = encKey[1].encryptedString;\n request.masterPasswordHash = masterPasswordHash;\n\n const folders = await this.folderService.getAllDecrypted();\n for (let i = 0; i < folders.length; i++) {\n if (folders[i].id == null) {\n continue;\n }\n const folder = await this.folderService.encrypt(folders[i], encKey[0]);\n request.folders.push(new FolderWithIdRequest(folder));\n }\n\n const ciphers = await this.cipherService.getAllDecrypted();\n for (let i = 0; i < ciphers.length; i++) {\n if (ciphers[i].organizationId != null) {\n continue;\n }\n\n const cipher = await this.cipherService.encrypt(ciphers[i], encKey[0]);\n request.ciphers.push(new CipherWithIdRequest(cipher));\n }\n\n await this.apiService.postAccountKey(request);\n\n await this.updateEmergencyAccesses(encKey[0]);\n\n await this.updateAllResetPasswordKeys(encKey[0]);\n }\n\n private async updateEmergencyAccesses(encKey: SymmetricCryptoKey) {\n const emergencyAccess = await this.apiService.getEmergencyAccessTrusted();\n const allowedStatuses = [\n EmergencyAccessStatusType.Confirmed,\n EmergencyAccessStatusType.RecoveryInitiated,\n EmergencyAccessStatusType.RecoveryApproved,\n ];\n\n const filteredAccesses = emergencyAccess.data.filter(d => allowedStatuses.includes(d.status));\n\n for (const details of filteredAccesses) {\n const publicKeyResponse = await this.apiService.getUserPublicKey(details.granteeId);\n const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n\n const updateRequest = new EmergencyAccessUpdateRequest();\n updateRequest.type = details.type;\n updateRequest.waitTimeDays = details.waitTimeDays;\n updateRequest.keyEncrypted = encryptedKey.encryptedString;\n\n await this.apiService.putEmergencyAccess(details.id, updateRequest);\n }\n }\n\n private async updateAllResetPasswordKeys(encKey: SymmetricCryptoKey) {\n const orgs = await this.userService.getAllOrganizations();\n\n for (const org of orgs) {\n // If not already enrolled, skip\n if (!org.isResetPasswordEnrolled) {\n continue;\n }\n\n // Re-enroll - encrpyt user's encKey.key with organization key\n const orgSymKey = await this.cryptoService.getOrgKey(org.id);\n const encryptedKey = await this.cryptoService.encrypt(encKey.key, orgSymKey);\n\n // Create/Execute request\n const request = new OrganizationUserResetPasswordEnrollmentRequest();\n request.resetPasswordKey = encryptedKey.encryptedString;\n\n await this.apiService.putOrganizationUserResetPasswordEnrollment(org.id, org.userId, request);\n }\n }\n}\n","{{'loggedOutWarning' | i18n}}\n\n {{'masterPasswordPolicyInEffect' | i18n}}\n
    \n
  • 0\">\n {{'policyInEffectMinComplexity' | i18n : getPasswordScoreAlertDisplay()}}\n
  • \n
  • 0\">\n {{'policyInEffectMinLength' | i18n : enforcedPolicyOptions?.minLength.toString()}}\n
  • \n
  • {{'policyInEffectUppercase' | i18n}}
  • \n
  • {{'policyInEffectLowercase' | i18n}}
  • \n
  • {{'policyInEffectNumbers' | i18n}}
  • \n
  • {{'policyInEffectSpecial' | i18n : '!@#$%^&*'}}
  • \n
\n
\n\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n \n \n \n \n \n
\n
\n \n
\n","export enum EmergencyAccessStatusType {\n Invited = 0,\n Accepted = 1,\n Confirmed = 2,\n RecoveryInitiated = 3,\n RecoveryApproved = 4,\n}\n","import { EmergencyAccessType } from '../../enums/emergencyAccessType';\n\nexport class EmergencyAccessUpdateRequest {\n type: EmergencyAccessType;\n waitTimeDays: number;\n keyEncrypted?: string;\n}\n","import { FolderRequest } from './folderRequest';\n\nimport { Folder } from '../domain/folder';\n\nexport class FolderWithIdRequest extends FolderRequest {\n id: string;\n\n constructor(folder: Folder) {\n super(folder);\n this.id = folder.id;\n }\n}\n","export class OrganizationUserResetPasswordEnrollmentRequest {\n resetPasswordKey: string;\n}\n","import { PasswordVerificationRequest } from './passwordVerificationRequest';\n\nexport class PasswordRequest extends PasswordVerificationRequest {\n newMasterPasswordHash: string;\n key: string;\n}\n","import { CipherWithIdRequest } from './cipherWithIdRequest';\nimport { FolderWithIdRequest } from './folderWithIdRequest';\n\nexport class UpdateKeyRequest {\n ciphers: CipherWithIdRequest[] = [];\n folders: FolderWithIdRequest[] = [];\n masterPasswordHash: string;\n privateKey: string;\n key: string;\n}\n","import {\n Component,\n OnInit,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { KdfRequest } from 'jslib/models/request/kdfRequest';\n\nimport { KdfType } from 'jslib/enums/kdfType';\n\n@Component({\n selector: 'app-change-kdf',\n templateUrl: 'change-kdf.component.html',\n})\nexport class ChangeKdfComponent implements OnInit {\n masterPassword: string;\n kdfIterations: number;\n kdf = KdfType.PBKDF2_SHA256;\n kdfOptions: any[] = [];\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private cryptoService: CryptoService,\n private messagingService: MessagingService, private userService: UserService) {\n this.kdfOptions = [\n { name: 'PBKDF2 SHA-256', value: KdfType.PBKDF2_SHA256 },\n ];\n }\n\n async ngOnInit() {\n this.kdf = await this.userService.getKdf();\n this.kdfIterations = await this.userService.getKdfIterations();\n }\n\n async submit() {\n const hasEncKey = await this.cryptoService.hasEncKey();\n if (!hasEncKey) {\n this.toasterService.popAsync('error', null, this.i18nService.t('updateKey'));\n return;\n }\n\n const request = new KdfRequest();\n request.kdf = this.kdf;\n request.kdfIterations = this.kdfIterations;\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n const email = await this.userService.getEmail();\n const newKey = await this.cryptoService.makeKey(this.masterPassword, email, this.kdf, this.kdfIterations);\n request.newMasterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, newKey);\n const newEncKey = await this.cryptoService.remakeEncKey(newKey);\n request.key = newEncKey[1].encryptedString;\n try {\n this.formPromise = this.apiService.postAccountKdf(request);\n await this.formPromise;\n this.toasterService.popAsync('success', this.i18nService.t('encKeySettingsChanged'),\n this.i18nService.t('logBackIn'));\n this.messagingService.send('logout');\n } catch { }\n }\n}\n","{{'loggedOutWarning' | i18n}}\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n \n \n \n
\n
\n
\n
\n \n \n \n \n \n
\n
\n
\n
\n
\n

{{'kdfIterationsDesc' | i18n : (100000 | number)}}

\n {{'warning' | i18n}}: {{'kdfIterationsWarning' | i18n : (50000 | number)}}\n
\n
\n
\n
\n \n
\n","import {\n Component,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { PlanType } from 'jslib/enums/planType';\nimport { ProductType } from 'jslib/enums/productType';\n\nimport { OrganizationPlansComponent } from './organization-plans.component';\n\n@Component({\n selector: 'app-create-organization',\n templateUrl: 'create-organization.component.html',\n})\nexport class CreateOrganizationComponent implements OnInit {\n @ViewChild(OrganizationPlansComponent, { static: true }) orgPlansComponent: OrganizationPlansComponent;\n\n constructor(private route: ActivatedRoute) { }\n\n ngOnInit() {\n const queryParamsSub = this.route.queryParams.subscribe(async qParams => {\n if (qParams.plan === 'families') {\n this.orgPlansComponent.plan = PlanType.FamiliesAnnually;\n this.orgPlansComponent.product = ProductType.Families;\n } else if (qParams.plan === 'teams') {\n this.orgPlansComponent.plan = PlanType.TeamsAnnually;\n this.orgPlansComponent.product = ProductType.Teams;\n } else if (qParams.plan === 'enterprise') {\n this.orgPlansComponent.plan = PlanType.EnterpriseAnnually;\n this.orgPlansComponent.product = ProductType.Enterprise;\n }\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n }\n}\n","
\n

{{'newOrganization' | i18n}}

\n
\n

{{'newOrganizationDesc' | i18n}}

\n\n","import {\n Component,\n OnInit,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\nimport { UpdateDomainsRequest } from 'jslib/models/request/updateDomainsRequest';\n\n@Component({\n selector: 'app-domain-rules',\n templateUrl: 'domain-rules.component.html',\n})\nexport class DomainRulesComponent implements OnInit {\n loading = true;\n custom: string[] = [];\n global: any[] = [];\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService) { }\n\n async ngOnInit() {\n const response = await this.apiService.getSettingsDomains();\n this.loading = false;\n if (response.equivalentDomains != null) {\n this.custom = response.equivalentDomains.map(d => d.join(', '));\n }\n if (response.globalEquivalentDomains != null) {\n this.global = response.globalEquivalentDomains.map(d => {\n return {\n domains: d.domains.join(', '),\n excluded: d.excluded,\n key: d.type,\n };\n });\n }\n }\n\n toggleExcluded(globalDomain: any) {\n globalDomain.excluded = !globalDomain.excluded;\n }\n\n customize(globalDomain: any) {\n globalDomain.excluded = true;\n this.custom.push(globalDomain.domains);\n }\n\n remove(index: number) {\n this.custom.splice(index, 1);\n }\n\n add() {\n this.custom.push('');\n }\n\n async submit() {\n const request = new UpdateDomainsRequest();\n request.excludedGlobalEquivalentDomains = this.global.filter(d => d.excluded)\n .map(d => d.key);\n if (request.excludedGlobalEquivalentDomains.length === 0) {\n request.excludedGlobalEquivalentDomains = null;\n }\n request.equivalentDomains = this.custom.filter(d => d != null && d.trim() !== '')\n .map(d => d.split(',').map(d2 => d2.trim()));\n if (request.equivalentDomains.length === 0) {\n request.equivalentDomains = null;\n }\n\n try {\n this.formPromise = this.apiService.putSettingsDomains(request);\n await this.formPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('domainsUpdated'));\n } catch { }\n }\n\n indexTrackBy(index: number, obj: any): any {\n return index;\n }\n}\n","
\n

{{'domainRules' | i18n}}

\n
\n

{{'domainRulesDesc' | i18n}}

\n
\n

{{'customEqDomains' | i18n}}

\n

\n \n {{'loading' | i18n}}\n

\n \n
\n
\n \n \n
\n \n
\n \n {{'newCustomDomainDesc' | i18n}}\n
\n \n

{{'globalEqDomains' | i18n}}

\n

\n \n {{'loading' | i18n}}\n

\n 0\">\n \n \n \n \n \n \n
{{d.domains}}\n \n
\n \n
\n","import {\n Component,\n OnInit,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { StateService } from 'jslib/abstractions/state.service';\nimport { StorageService } from 'jslib/abstractions/storage.service';\nimport { VaultTimeoutService } from 'jslib/abstractions/vaultTimeout.service';\n\nimport { ConstantsService } from 'jslib/services/constants.service';\n\nimport { Utils } from 'jslib/misc/utils';\n\n@Component({\n selector: 'app-options',\n templateUrl: 'options.component.html',\n})\nexport class OptionsComponent implements OnInit {\n vaultTimeout: number = null;\n vaultTimeoutAction: string = 'lock';\n disableIcons: boolean;\n enableGravatars: boolean;\n enableFullWidth: boolean;\n locale: string;\n vaultTimeouts: any[];\n localeOptions: any[];\n\n private startingLocale: string;\n\n constructor(private storageService: StorageService, private stateService: StateService,\n private i18nService: I18nService, private toasterService: ToasterService,\n private vaultTimeoutService: VaultTimeoutService, private platformUtilsService: PlatformUtilsService,\n private messagingService: MessagingService) {\n this.vaultTimeouts = [\n { name: i18nService.t('oneMinute'), value: 1 },\n { name: i18nService.t('fiveMinutes'), value: 5 },\n { name: i18nService.t('fifteenMinutes'), value: 15 },\n { name: i18nService.t('thirtyMinutes'), value: 30 },\n { name: i18nService.t('oneHour'), value: 60 },\n { name: i18nService.t('fourHours'), value: 240 },\n { name: i18nService.t('onRefresh'), value: -1 },\n ];\n if (this.platformUtilsService.isDev()) {\n this.vaultTimeouts.push({ name: i18nService.t('never'), value: null });\n }\n\n const localeOptions: any[] = [];\n i18nService.supportedTranslationLocales.forEach(locale => {\n let name = locale;\n if (i18nService.localeNames.has(locale)) {\n name += (' - ' + i18nService.localeNames.get(locale));\n }\n localeOptions.push({ name: name, value: locale });\n });\n localeOptions.sort(Utils.getSortFunction(i18nService, 'name'));\n localeOptions.splice(0, 0, { name: i18nService.t('default'), value: null });\n this.localeOptions = localeOptions;\n }\n\n async ngOnInit() {\n this.vaultTimeout = await this.storageService.get(ConstantsService.vaultTimeoutKey);\n this.vaultTimeoutAction = await this.storageService.get(ConstantsService.vaultTimeoutActionKey);\n this.disableIcons = await this.storageService.get(ConstantsService.disableFaviconKey);\n this.enableGravatars = await this.storageService.get('enableGravatars');\n this.enableFullWidth = await this.storageService.get('enableFullWidth');\n this.locale = this.startingLocale = await this.storageService.get(ConstantsService.localeKey);\n }\n\n async submit() {\n await this.vaultTimeoutService.setVaultTimeoutOptions(this.vaultTimeout != null ? this.vaultTimeout : null,\n this.vaultTimeoutAction);\n await this.storageService.save(ConstantsService.disableFaviconKey, this.disableIcons);\n await this.stateService.save(ConstantsService.disableFaviconKey, this.disableIcons);\n await this.storageService.save('enableGravatars', this.enableGravatars);\n await this.stateService.save('enableGravatars', this.enableGravatars);\n await this.storageService.save('enableFullWidth', this.enableFullWidth);\n this.messagingService.send('setFullWidth');\n await this.storageService.save(ConstantsService.localeKey, this.locale);\n if (this.locale !== this.startingLocale) {\n window.location.reload();\n } else {\n this.toasterService.popAsync('success', null, this.i18nService.t('optionsUpdated'));\n }\n }\n\n async vaultTimeoutActionChanged(newValue: string) {\n if (newValue === 'logOut') {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('vaultTimeoutLogOutConfirmation'),\n this.i18nService.t('vaultTimeoutLogOutConfirmationTitle'),\n this.i18nService.t('yes'), this.i18nService.t('cancel'), 'warning');\n if (!confirmed) {\n this.vaultTimeoutAction = 'lock';\n return;\n }\n }\n this.vaultTimeoutAction = newValue;\n }\n}\n","
\n

{{'options' | i18n}}

\n
\n

{{'optionsDesc' | i18n}}

\n
\n
\n
\n
\n \n \n {{'vaultTimeoutDesc' | i18n}}\n
\n
\n
\n
\n \n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n \n \n
\n \n {{'languageDesc' | i18n}}\n
\n
\n
\n
\n
\n \n \n \n \n \n
\n {{'disableIconsDesc' | i18n}}\n
\n
\n
\n \n \n \n \n \n
\n {{'enableGravatarsDesc' | i18n}}\n
\n\t
\n
\n \n \n
\n {{'enableFullWidthDesc' | i18n}}\n
\n \n
\n","import {\n AfterContentInit,\n Component,\n Input,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { AuthService } from 'jslib/abstractions/auth.service';\nimport { CryptoFunctionService } from 'jslib/abstractions/cryptoFunction.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PasswordGenerationService } from 'jslib/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { StateService } from 'jslib/abstractions/state.service';\nimport { StorageService } from 'jslib/abstractions/storage.service';\n\nimport { SsoComponent } from 'jslib/angular/components/sso.component';\n\nimport { Organization } from 'jslib/models/domain/organization';\n\n@Component({\n selector: 'app-link-sso',\n templateUrl: 'link-sso.component.html',\n})\nexport class LinkSsoComponent extends SsoComponent implements AfterContentInit {\n @Input() organization: Organization;\n returnUri: string = '/settings/organizations';\n\n constructor(platformUtilsService: PlatformUtilsService, i18nService: I18nService,\n apiService: ApiService, authService: AuthService,\n router: Router, route: ActivatedRoute,\n cryptoFunctionService: CryptoFunctionService, passwordGenerationService: PasswordGenerationService,\n storageService: StorageService, stateService: StateService) {\n super(authService, router,\n i18nService, route,\n storageService, stateService,\n platformUtilsService, apiService,\n cryptoFunctionService, passwordGenerationService);\n\n this.returnUri = '/settings/organizations';\n this.redirectUri = window.location.origin + '/sso-connector.html';\n this.clientId = 'web';\n }\n\n async ngAfterContentInit() {\n this.identifier = this.organization.identifier;\n }\n}\n","\n \n {{'linkSso' | i18n}}\n\n","import {\n Component,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { SyncService } from 'jslib/abstractions/sync.service';\nimport { TokenService } from 'jslib/abstractions/token.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { PaymentComponent } from './payment.component';\nimport { TaxInfoComponent } from './tax-info.component';\n\n@Component({\n selector: 'app-premium',\n templateUrl: 'premium.component.html',\n})\nexport class PremiumComponent implements OnInit {\n @ViewChild(PaymentComponent) paymentComponent: PaymentComponent;\n @ViewChild(TaxInfoComponent) taxInfoComponent: TaxInfoComponent;\n\n canAccessPremium = false;\n selfHosted = false;\n premiumPrice = 10;\n storageGbPrice = 4;\n additionalStorage = 0;\n\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, platformUtilsService: PlatformUtilsService,\n private tokenService: TokenService, private router: Router,\n private messagingService: MessagingService, private syncService: SyncService,\n private userService: UserService) {\n this.selfHosted = platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n this.canAccessPremium = await this.userService.canAccessPremium();\n const premium = await this.tokenService.getPremium();\n if (premium) {\n this.router.navigate(['/settings/subscription']);\n return;\n }\n }\n\n async submit() {\n let files: FileList = null;\n if (this.selfHosted) {\n const fileEl = document.getElementById('file') as HTMLInputElement;\n files = fileEl.files;\n if (files == null || files.length === 0) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('selectFile'));\n return;\n }\n }\n\n try {\n if (this.selfHosted) {\n if (!this.tokenService.getEmailVerified()) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('verifyEmailFirst'));\n return;\n }\n\n const fd = new FormData();\n fd.append('license', files[0]);\n this.formPromise = this.apiService.postAccountLicense(fd).then(() => {\n return this.finalizePremium();\n });\n } else {\n this.formPromise = this.paymentComponent.createPaymentToken().then(result => {\n const fd = new FormData();\n fd.append('paymentMethodType', result[1].toString());\n if (result[0] != null) {\n fd.append('paymentToken', result[0]);\n }\n fd.append('additionalStorageGb', (this.additionalStorage || 0).toString());\n fd.append('country', this.taxInfoComponent.taxInfo.country);\n fd.append('postalCode', this.taxInfoComponent.taxInfo.postalCode);\n return this.apiService.postPremium(fd);\n }).then(paymentResponse => {\n if (!paymentResponse.success && paymentResponse.paymentIntentClientSecret != null) {\n return this.paymentComponent.handleStripeCardPayment(paymentResponse.paymentIntentClientSecret,\n () => this.finalizePremium());\n } else {\n return this.finalizePremium();\n }\n });\n }\n await this.formPromise;\n } catch { }\n }\n\n async finalizePremium() {\n await this.apiService.refreshIdentityToken();\n await this.syncService.fullSync(true);\n this.toasterService.popAsync('success', null, this.i18nService.t('premiumUpdated'));\n this.messagingService.send('purchasedPremium');\n this.router.navigate(['/settings/subscription']);\n }\n\n get additionalStorageTotal(): number {\n return this.storageGbPrice * Math.abs(this.additionalStorage || 0);\n }\n\n get subtotal(): number {\n return this.premiumPrice + this.additionalStorageTotal;\n }\n\n get taxCharges(): number {\n return this.taxInfoComponent != null && this.taxInfoComponent.taxRate != null ?\n (this.taxInfoComponent.taxRate / 100) * this.subtotal :\n 0;\n }\n\n get total(): number {\n return (this.subtotal + this.taxCharges) || 0;\n }\n}\n","
\n

{{'goPremium' | i18n}}

\n
\n\n {{'alreadyPremiumFromOrg' | i18n}}\n\n\n

{{'premiumUpgradeUnlockFeatures' | i18n}}

\n
    \n
  • \n \n {{'premiumSignUpStorage' | i18n}}\n
  • \n
  • \n \n {{'premiumSignUpTwoStep' | i18n}}\n
  • \n
  • \n \n {{'premiumSignUpEmergency' |i18n}}\n
  • \n
  • \n \n {{'premiumSignUpReports' | i18n}}\n
  • \n
  • \n \n {{'premiumSignUpTotp' | i18n}}\n
  • \n
  • \n \n {{'premiumSignUpSupport' | i18n}}\n
  • \n
  • \n \n {{'premiumSignUpFuture' | i18n}}\n
  • \n
\n

{{'premiumPrice' | i18n : (premiumPrice | currency:'$')}}

\n \n {{'purchasePremium' | i18n}}\n \n
\n\n

{{'uploadLicenseFilePremium' | i18n}}

\n
\n
\n \n \n {{'licenseFileDesc' | i18n : 'bitwarden_premium_license.json'}}\n
\n \n
\n
\n
\n

{{'addons' | i18n}}

\n
\n
\n \n \n {{'additionalStorageIntervalDesc' | i18n : '1 GB' : (storageGbPrice | currency:'$') : ('year' | i18n)}}\n
\n
\n

{{'summary' | i18n}}

\n {{'premiumMembership' | i18n}}: {{premiumPrice | currency:'$'}}\n
{{'additionalStorageGb' | i18n}}: {{additionalStorage || 0}} GB × {{storageGbPrice | currency:'$'}} = {{additionalStorageTotal\n | currency:'$'}}\n
\n

{{'paymentInformation' | i18n}}

\n \n \n
\n
\n {{ 'planPrice' | i18n }}: {{ subtotal | currency: 'USD $' }}\n
\n \n {{ 'estimatedTax' | i18n }}: {{ taxCharges | currency: 'USD $' }}\n \n
\n
\n

{{'total' | i18n}}:\n {{total | currency:'USD $'}}/{{'year' | i18n}}

\n
\n {{'paymentChargedAnnually' | i18n}}\n \n
\n","import {\n Component,\n NgZone,\n OnDestroy,\n OnInit,\n} from '@angular/core';\n\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { TokenService } from 'jslib/abstractions/token.service';\n\nimport { BroadcasterService } from 'jslib/angular/services/broadcaster.service';\n\nconst BroadcasterSubscriptionId = 'SettingsComponent';\n\n@Component({\n selector: 'app-settings',\n templateUrl: 'settings.component.html',\n})\nexport class SettingsComponent implements OnInit, OnDestroy {\n premium: boolean;\n selfHosted: boolean;\n\n constructor(private tokenService: TokenService, private broadcasterService: BroadcasterService,\n private ngZone: NgZone, private platformUtilsService: PlatformUtilsService) { }\n\n async ngOnInit() {\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, async (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case 'purchasedPremium':\n await this.load();\n break;\n default:\n }\n });\n });\n\n this.selfHosted = await this.platformUtilsService.isSelfHost();\n await this.load();\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n async load() {\n this.premium = await this.tokenService.getPremium();\n }\n}\n","\n","import {\n Component,\n OnInit,\n} from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { SubscriptionResponse } from 'jslib/models/response/subscriptionResponse';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { TokenService } from 'jslib/abstractions/token.service';\n\n@Component({\n selector: 'app-user-subscription',\n templateUrl: 'user-subscription.component.html',\n})\nexport class UserSubscriptionComponent implements OnInit {\n loading = false;\n firstLoaded = false;\n adjustStorageAdd = true;\n showAdjustStorage = false;\n showUpdateLicense = false;\n sub: SubscriptionResponse;\n selfHosted = false;\n\n cancelPromise: Promise;\n reinstatePromise: Promise;\n\n constructor(private tokenService: TokenService, private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService, private i18nService: I18nService,\n private toasterService: ToasterService, private router: Router) {\n this.selfHosted = platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n await this.load();\n this.firstLoaded = true;\n }\n\n async load() {\n if (this.loading) {\n return;\n }\n\n if (this.tokenService.getPremium()) {\n this.loading = true;\n this.sub = await this.apiService.getUserSubscription();\n } else {\n this.router.navigate(['/settings/premium']);\n return;\n }\n\n this.loading = false;\n }\n\n async reinstate() {\n if (this.loading) {\n return;\n }\n\n if (this.usingInAppPurchase) {\n this.platformUtilsService.showDialog(this.i18nService.t('manageSubscriptionFromStore'),\n this.i18nService.t('cancelSubscription'), null, null, 'warning');\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(this.i18nService.t('reinstateConfirmation'),\n this.i18nService.t('reinstateSubscription'), this.i18nService.t('yes'), this.i18nService.t('cancel'));\n if (!confirmed) {\n return;\n }\n\n try {\n this.reinstatePromise = this.apiService.postReinstatePremium();\n await this.reinstatePromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('reinstated'));\n this.load();\n } catch { }\n }\n\n async cancel() {\n if (this.loading) {\n return;\n }\n\n if (this.usingInAppPurchase) {\n this.platformUtilsService.showDialog(this.i18nService.t('manageSubscriptionFromStore'),\n this.i18nService.t('cancelSubscription'), null, null, 'warning');\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(this.i18nService.t('cancelConfirmation'),\n this.i18nService.t('cancelSubscription'), this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return;\n }\n\n try {\n this.cancelPromise = this.apiService.postCancelPremium();\n await this.cancelPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('canceledSubscription'));\n this.load();\n } catch { }\n }\n\n downloadLicense() {\n if (this.loading) {\n return;\n }\n\n const licenseString = JSON.stringify(this.sub.license, null, 2);\n this.platformUtilsService.saveFile(window, licenseString, null, 'bitwarden_premium_license.json');\n }\n\n updateLicense() {\n if (this.loading) {\n return;\n }\n this.showUpdateLicense = true;\n }\n\n closeUpdateLicense(load: boolean) {\n this.showUpdateLicense = false;\n if (load) {\n this.load();\n }\n }\n\n adjustStorage(add: boolean) {\n if (this.usingInAppPurchase) {\n this.platformUtilsService.showDialog(this.i18nService.t('cannotPerformInAppPurchase'),\n this.i18nService.t(add ? 'addStorage' : 'removeStorage'), null, null, 'warning');\n return;\n }\n this.adjustStorageAdd = add;\n this.showAdjustStorage = true;\n }\n\n closeStorage(load: boolean) {\n this.showAdjustStorage = false;\n if (load) {\n this.load();\n }\n }\n\n get subscriptionMarkedForCancel() {\n return this.subscription != null && !this.subscription.cancelled && this.subscription.cancelAtEndDate;\n }\n\n get subscription() {\n return this.sub != null ? this.sub.subscription : null;\n }\n\n get nextInvoice() {\n return this.sub != null ? this.sub.upcomingInvoice : null;\n }\n\n get storagePercentage() {\n return this.sub != null && this.sub.maxStorageGb ?\n +(100 * (this.sub.storageGb / this.sub.maxStorageGb)).toFixed(2) : 0;\n }\n\n get storageProgressWidth() {\n return this.storagePercentage < 5 ? 5 : 0;\n }\n\n get usingInAppPurchase() {\n return this.sub != null ? this.sub.usingInAppPurchase : false;\n }\n}\n","
\n

\n {{'premiumMembership' | i18n}}\n \n \n {{'loading' | i18n}}\n \n

\n
\n\n \n {{'loading' | i18n}}\n\n\n \n {{'subscriptionCanceled' | i18n}}\n \n

{{'subscriptionPendingCanceled' | i18n}}

\n \n
\n
\n
{{'expiration' | i18n}}
\n
{{sub.expiration | date:'mediumDate'}}
\n
{{'neverExpires' | i18n}}
\n
\n
\n
\n
\n
{{'status' | i18n}}
\n
\n {{(subscription && subscription.status) || '-'}}\n {{'pendingCancellation' | i18n}}\n
\n
{{'nextCharge' | i18n}}
\n
{{nextInvoice ? ((nextInvoice.date | date: 'mediumDate') + ', ' + (nextInvoice.amount | currency:'$')) :\n '-'}}\n
\n
\n
\n
\n {{'details' | i18n}}\n \n \n \n \n \n \n \n
\n {{i.name}} {{i.quantity > 1 ? '×' + i.quantity : ''}} @ {{i.amount | currency:'$'}}\n \n {{(i.quantity * i.amount) | currency:'$'}} /{{i.interval | i18n}}\n
\n
\n
\n \n
\n \n \n {{'manageSubscription' | i18n}}\n \n
\n
\n
\n \n

{{'updateLicense' | i18n}}

\n \n \n
\n
\n
\n \n
\n \n \n
\n

{{'storage' | i18n}}

\n

{{'subscriptionStorage' | i18n : sub.maxStorageGb || 0 : sub.storageName || '0 MB'}}

\n
\n
\n {{(storagePercentage / 100) | percent}}
\n
\n \n
\n
\n \n \n
\n \n
\n
\n
\n
\n","import {\n Component,\n OnInit,\n} from '@angular/core';\n\nimport { AuditService } from 'jslib/abstractions/audit.service';\nimport { UserService } from 'jslib/abstractions/user.service';\nimport { BreachAccountResponse } from 'jslib/models/response/breachAccountResponse';\n\n@Component({\n selector: 'app-breach-report',\n templateUrl: 'breach-report.component.html',\n})\nexport class BreachReportComponent implements OnInit {\n error = false;\n username: string;\n checkedUsername: string;\n breachedAccounts: BreachAccountResponse[] = [];\n formPromise: Promise;\n\n constructor(private auditService: AuditService, private userService: UserService) { }\n\n async ngOnInit() {\n this.username = await this.userService.getEmail();\n }\n\n async submit() {\n this.error = false;\n this.username = this.username.toLowerCase();\n try {\n this.formPromise = this.auditService.breachedAccounts(this.username);\n this.breachedAccounts = await this.formPromise;\n } catch {\n this.error = true;\n }\n this.checkedUsername = this.username;\n }\n}\n","
\n

{{'dataBreachReport' | i18n}}

\n
\n

{{'breachDesc' | i18n}}

\n
\n
\n
\n \n \n {{'breachCheckUsernameEmail' | i18n}}\n
\n
\n \n
\n
\n

{{'reportError' | i18n}}...

\n \n \n {{'breachUsernameNotFound' | i18n : checkedUsername}}\n \n \n {{'breachUsernameFound' | i18n : checkedUsername : breachedAccounts.length}}\n \n
    \n
  • \n
    \n
    \n \"\"\n
    \n
    \n

    {{a.title}}

    \n

    \n

    {{'compromisedData' | i18n}}:

    \n
      \n
    • {{d}}
    • \n
    \n
    \n
    \n
    \n
    {{'website' | i18n}}
    \n
    {{a.domain}}
    \n
    {{'affectedUsers' | i18n}}
    \n
    {{a.pwnCount | number}}
    \n
    {{'breachOccurred' | i18n}}
    \n
    {{a.breachDate | date: 'mediumDate'}}
    \n
    {{'breachReported' | i18n}}
    \n
    {{a.addedDate | date: 'mediumDate'}}
    \n
    \n
    \n
    \n
  • \n
\n
\n
\n","import {\n Component,\n ComponentFactoryResolver,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PasswordGenerationService } from 'jslib/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\nimport {\n PasswordGeneratorComponent as BasePasswordGeneratorComponent,\n} from 'jslib/angular/components/password-generator.component';\n\nimport { ModalComponent } from '../modal.component';\nimport { PasswordGeneratorHistoryComponent } from './password-generator-history.component';\n\n@Component({\n selector: 'app-password-generator',\n templateUrl: 'password-generator.component.html',\n})\nexport class PasswordGeneratorComponent extends BasePasswordGeneratorComponent {\n @ViewChild('historyTemplate', { read: ViewContainerRef, static: true }) historyModalRef: ViewContainerRef;\n\n private modal: ModalComponent = null;\n\n constructor(passwordGenerationService: PasswordGenerationService, platformUtilsService: PlatformUtilsService,\n i18nService: I18nService, private componentFactoryResolver: ComponentFactoryResolver) {\n super(passwordGenerationService, platformUtilsService, i18nService, window);\n }\n\n history() {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.historyModalRef.createComponent(factory).instance;\n this.modal.show(PasswordGeneratorHistoryComponent, this.historyModalRef);\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n lengthChanged() {\n document.getElementById('length').focus();\n }\n\n minNumberChanged() {\n document.getElementById('min-number').focus();\n }\n\n minSpecialChanged() {\n document.getElementById('min-special').focus();\n }\n}\n","
\n

{{'passwordGenerator' | i18n}}

\n
\n\n {{'passwordGeneratorPolicyInEffect' | i18n}}\n\n
\n
\n
\n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n
\n \n \n
\n
\n \n
\n
\n\n","import { Component } from '@angular/core';\n\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PasswordGenerationService } from 'jslib/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\nimport {\n PasswordGeneratorHistoryComponent as BasePasswordGeneratorHistoryComponent,\n} from 'jslib/angular/components/password-generator-history.component';\n\n@Component({\n selector: 'app-password-generator-history',\n templateUrl: 'password-generator-history.component.html',\n})\nexport class PasswordGeneratorHistoryComponent extends BasePasswordGeneratorHistoryComponent {\n constructor(passwordGenerationService: PasswordGenerationService, platformUtilsService: PlatformUtilsService,\n i18nService: I18nService) {\n super(passwordGenerationService, platformUtilsService, i18nService, window);\n }\n}\n","
\n
\n
\n
\n

{{'passwordHistory' | i18n}}

\n \n
\n
    \n
  • \n
    \n
    \n {{h.date | date:'medium'}}\n
    \n
    \n \n
    \n
  • \n
\n
\n {{'noPasswordsInList' | i18n}}\n
\n
\n \n
\n \n
\n
\n
\n
\n
\n","import {\n Component,\n OnInit,\n} from '@angular/core';\n\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\n@Component({\n selector: 'app-tools',\n templateUrl: 'tools.component.html',\n})\nexport class ToolsComponent implements OnInit {\n canAccessPremium = false;\n\n constructor(private userService: UserService, private messagingService: MessagingService) { }\n\n async ngOnInit() {\n this.canAccessPremium = await this.userService.canAccessPremium();\n }\n\n premiumRequired() {\n if (!this.canAccessPremium) {\n this.messagingService.send('premiumRequired');\n return;\n }\n }\n}\n","\n","import {\n ChangeDetectorRef,\n Component,\n ComponentFactoryResolver,\n NgZone,\n OnDestroy,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { CipherType } from 'jslib/enums/cipherType';\n\nimport { CipherView } from 'jslib/models/view/cipherView';\n\nimport { ModalComponent } from '../modal.component';\n\nimport { OrganizationsComponent } from '../settings/organizations.component';\nimport { UpdateKeyComponent } from '../settings/update-key.component';\nimport { AddEditComponent } from './add-edit.component';\nimport { AttachmentsComponent } from './attachments.component';\nimport { CiphersComponent } from './ciphers.component';\nimport { CollectionsComponent } from './collections.component';\nimport { FolderAddEditComponent } from './folder-add-edit.component';\nimport { GroupingsComponent } from './groupings.component';\nimport { ShareComponent } from './share.component';\n\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { SyncService } from 'jslib/abstractions/sync.service';\nimport { TokenService } from 'jslib/abstractions/token.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { BroadcasterService } from 'jslib/angular/services/broadcaster.service';\n\nconst BroadcasterSubscriptionId = 'VaultComponent';\n\n@Component({\n selector: 'app-vault',\n templateUrl: 'vault.component.html',\n})\nexport class VaultComponent implements OnInit, OnDestroy {\n @ViewChild(GroupingsComponent, { static: true }) groupingsComponent: GroupingsComponent;\n @ViewChild(CiphersComponent, { static: true }) ciphersComponent: CiphersComponent;\n @ViewChild(OrganizationsComponent, { static: true }) organizationsComponent: OrganizationsComponent;\n @ViewChild('attachments', { read: ViewContainerRef, static: true }) attachmentsModalRef: ViewContainerRef;\n @ViewChild('folderAddEdit', { read: ViewContainerRef, static: true }) folderAddEditModalRef: ViewContainerRef;\n @ViewChild('cipherAddEdit', { read: ViewContainerRef, static: true }) cipherAddEditModalRef: ViewContainerRef;\n @ViewChild('share', { read: ViewContainerRef, static: true }) shareModalRef: ViewContainerRef;\n @ViewChild('collections', { read: ViewContainerRef, static: true }) collectionsModalRef: ViewContainerRef;\n @ViewChild('updateKeyTemplate', { read: ViewContainerRef, static: true }) updateKeyModalRef: ViewContainerRef;\n\n favorites: boolean = false;\n type: CipherType = null;\n folderId: string = null;\n collectionId: string = null;\n showVerifyEmail = false;\n showBrowserOutdated = false;\n showUpdateKey = false;\n showPremiumCallout = false;\n deleted: boolean = false;\n trashCleanupWarning: string = null;\n\n modal: ModalComponent = null;\n\n constructor(private syncService: SyncService, private route: ActivatedRoute,\n private router: Router, private changeDetectorRef: ChangeDetectorRef,\n private i18nService: I18nService, private componentFactoryResolver: ComponentFactoryResolver,\n private tokenService: TokenService, private cryptoService: CryptoService,\n private messagingService: MessagingService, private userService: UserService,\n private platformUtilsService: PlatformUtilsService, private broadcasterService: BroadcasterService,\n private ngZone: NgZone) { }\n\n async ngOnInit() {\n this.showVerifyEmail = !(await this.tokenService.getEmailVerified());\n this.showBrowserOutdated = window.navigator.userAgent.indexOf('MSIE') !== -1;\n this.trashCleanupWarning = this.i18nService.t(\n this.platformUtilsService.isSelfHost() ? 'trashCleanupWarningSelfHosted' : 'trashCleanupWarning'\n );\n\n const queryParamsSub = this.route.queryParams.subscribe(async params => {\n await this.syncService.fullSync(false);\n\n this.showUpdateKey = !(await this.cryptoService.hasEncKey());\n const canAccessPremium = await this.userService.canAccessPremium();\n this.showPremiumCallout = !this.showVerifyEmail && !canAccessPremium &&\n !this.platformUtilsService.isSelfHost();\n\n await Promise.all([\n this.groupingsComponent.load(),\n this.organizationsComponent.load(),\n ]);\n\n if (params == null) {\n this.groupingsComponent.selectedAll = true;\n await this.ciphersComponent.reload();\n } else {\n if (params.deleted) {\n this.groupingsComponent.selectedTrash = true;\n await this.filterDeleted();\n } else if (params.favorites) {\n this.groupingsComponent.selectedFavorites = true;\n await this.filterFavorites();\n } else if (params.type) {\n const t = parseInt(params.type, null);\n this.groupingsComponent.selectedType = t;\n await this.filterCipherType(t);\n } else if (params.folderId) {\n this.groupingsComponent.selectedFolder = true;\n this.groupingsComponent.selectedFolderId = params.folderId;\n await this.filterFolder(params.folderId);\n } else if (params.collectionId) {\n this.groupingsComponent.selectedCollectionId = params.collectionId;\n await this.filterCollection(params.collectionId);\n } else {\n this.groupingsComponent.selectedAll = true;\n await this.ciphersComponent.reload();\n }\n }\n\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case 'syncCompleted':\n if (message.successfully) {\n await Promise.all([\n this.groupingsComponent.load(),\n this.organizationsComponent.load(),\n this.ciphersComponent.load(this.ciphersComponent.filter),\n ]);\n this.changeDetectorRef.detectChanges();\n }\n break;\n }\n });\n });\n\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n async clearGroupingFilters() {\n this.ciphersComponent.showAddNew = true;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchVault');\n await this.ciphersComponent.reload();\n this.clearFilters();\n this.go();\n }\n\n async filterFavorites() {\n this.ciphersComponent.showAddNew = true;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchFavorites');\n await this.ciphersComponent.reload(c => c.favorite);\n this.clearFilters();\n this.favorites = true;\n this.go();\n }\n\n async filterDeleted() {\n this.ciphersComponent.showAddNew = false;\n this.ciphersComponent.deleted = true;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchTrash');\n await this.ciphersComponent.reload(null, true);\n this.clearFilters();\n this.deleted = true;\n this.go();\n }\n\n async filterCipherType(type: CipherType) {\n this.ciphersComponent.showAddNew = true;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchType');\n await this.ciphersComponent.reload(c => c.type === type);\n this.clearFilters();\n this.type = type;\n this.go();\n }\n\n async filterFolder(folderId: string) {\n this.ciphersComponent.showAddNew = true;\n folderId = folderId === 'none' ? null : folderId;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchFolder');\n await this.ciphersComponent.reload(c => c.folderId === folderId);\n this.clearFilters();\n this.folderId = folderId == null ? 'none' : folderId;\n this.go();\n }\n\n async filterCollection(collectionId: string) {\n this.ciphersComponent.showAddNew = true;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchCollection');\n await this.ciphersComponent.reload(c => c.collectionIds != null &&\n c.collectionIds.indexOf(collectionId) > -1);\n this.clearFilters();\n this.collectionId = collectionId;\n this.go();\n }\n\n filterSearchText(searchText: string) {\n this.ciphersComponent.searchText = searchText;\n this.ciphersComponent.search(200);\n }\n\n async editCipherAttachments(cipher: CipherView) {\n const canAccessPremium = await this.userService.canAccessPremium();\n if (cipher.organizationId == null && !canAccessPremium) {\n this.messagingService.send('premiumRequired');\n return;\n } else if (cipher.organizationId != null) {\n const org = await this.userService.getOrganization(cipher.organizationId);\n if (org != null && (org.maxStorageGb == null || org.maxStorageGb === 0)) {\n this.messagingService.send('upgradeOrganization', { organizationId: cipher.organizationId });\n return;\n }\n }\n\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.attachmentsModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(AttachmentsComponent, this.attachmentsModalRef);\n\n childComponent.cipherId = cipher.id;\n let madeAttachmentChanges = false;\n childComponent.onUploadedAttachment.subscribe(() => madeAttachmentChanges = true);\n childComponent.onDeletedAttachment.subscribe(() => madeAttachmentChanges = true);\n childComponent.onReuploadedAttachment.subscribe(() => madeAttachmentChanges = true);\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n if (madeAttachmentChanges) {\n await this.ciphersComponent.refresh();\n }\n madeAttachmentChanges = false;\n });\n }\n\n shareCipher(cipher: CipherView) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.shareModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(ShareComponent, this.shareModalRef);\n\n childComponent.cipherId = cipher.id;\n childComponent.onSharedCipher.subscribe(async () => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n editCipherCollections(cipher: CipherView) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.collectionsModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(CollectionsComponent, this.collectionsModalRef);\n\n childComponent.cipherId = cipher.id;\n childComponent.onSavedCollections.subscribe(async () => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n async addFolder() {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.folderAddEditModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n FolderAddEditComponent, this.folderAddEditModalRef);\n\n childComponent.folderId = null;\n childComponent.onSavedFolder.subscribe(async () => {\n this.modal.close();\n await this.groupingsComponent.loadFolders();\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n async editFolder(folderId: string) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.folderAddEditModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n FolderAddEditComponent, this.folderAddEditModalRef);\n\n childComponent.folderId = folderId;\n childComponent.onSavedFolder.subscribe(async () => {\n this.modal.close();\n await this.groupingsComponent.loadFolders();\n });\n childComponent.onDeletedFolder.subscribe(async () => {\n this.modal.close();\n await this.groupingsComponent.loadFolders();\n await this.filterFolder('none');\n this.groupingsComponent.selectedFolderId = null;\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n addCipher() {\n const component = this.editCipher(null);\n component.type = this.type;\n component.folderId = this.folderId === 'none' ? null : this.folderId;\n if (this.collectionId != null) {\n const collection = this.groupingsComponent.collections.filter(c => c.id === this.collectionId);\n if (collection.length > 0) {\n component.organizationId = collection[0].organizationId;\n component.collectionIds = [this.collectionId];\n }\n }\n }\n\n editCipher(cipher: CipherView) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.cipherAddEditModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n AddEditComponent, this.cipherAddEditModalRef);\n\n childComponent.cipherId = cipher == null ? null : cipher.id;\n childComponent.onSavedCipher.subscribe(async (c: CipherView) => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n childComponent.onDeletedCipher.subscribe(async (c: CipherView) => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n childComponent.onRestoredCipher.subscribe(async (c: CipherView) => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n\n return childComponent;\n }\n\n cloneCipher(cipher: CipherView) {\n const component = this.editCipher(cipher);\n component.cloneMode = true;\n }\n\n updateKey() {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.updateKeyModalRef.createComponent(factory).instance;\n this.modal.show(UpdateKeyComponent, this.updateKeyModalRef);\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n private clearFilters() {\n this.folderId = null;\n this.collectionId = null;\n this.favorites = false;\n this.type = null;\n this.deleted = false;\n }\n\n private go(queryParams: any = null) {\n if (queryParams == null) {\n queryParams = {\n favorites: this.favorites ? true : null,\n type: this.type,\n folderId: this.folderId,\n collectionId: this.collectionId,\n deleted: this.deleted ? true : null,\n };\n }\n\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: queryParams,\n replaceUrl: true,\n });\n }\n}\n","
\n
\n
\n \n \n
\n
\n
\n

\n {{'myVault' | i18n}}\n \n \n \n {{'loading' | i18n}}\n \n \n

\n
\n \n \n \n
\n
\n \n {{trashCleanupWarning}}\n \n \n \n
\n
\n
\n
\n {{'updateKeyTitle' | i18n}}\n
\n
\n

{{'updateEncryptionKeyShortDesc' | i18n}}

\n \n
\n
\n \n \n
\n
\n {{'updateBrowser' | i18n}}\n
\n
\n

{{'updateBrowserDesc' | i18n}}

\n \n {{'updateBrowser' | i18n}}\n \n
\n
\n
\n
\n {{'goPremium' | i18n}}\n
\n
\n

{{'premiumUpgradeUnlockFeatures' | i18n}}

\n \n {{'goPremium' | i18n}}\n \n
\n
\n
\n
\n {{'organizations' | i18n}}\n \n \n \n
\n
\n \n
\n
\n
\n
\n
\n\n\n\n\n\n\n","import { Component } from '@angular/core';\n\nimport {\n Toast,\n ToasterService,\n} from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { FolderService } from 'jslib/abstractions/folder.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { SyncService } from 'jslib/abstractions/sync.service';\n\nimport { EncString } from 'jslib/models/domain/encString';\n\nimport { CipherWithIdRequest } from 'jslib/models/request/cipherWithIdRequest';\nimport { FolderWithIdRequest } from 'jslib/models/request/folderWithIdRequest';\nimport { UpdateKeyRequest } from 'jslib/models/request/updateKeyRequest';\n\n@Component({\n selector: 'app-update-key',\n templateUrl: 'update-key.component.html',\n})\nexport class UpdateKeyComponent {\n masterPassword: string;\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private cryptoService: CryptoService,\n private messagingService: MessagingService, private syncService: SyncService,\n private folderService: FolderService, private cipherService: CipherService) { }\n\n async submit() {\n const hasEncKey = await this.cryptoService.hasEncKey();\n if (hasEncKey) {\n return;\n }\n\n if (this.masterPassword == null || this.masterPassword === '') {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassRequired'));\n return;\n }\n\n try {\n this.formPromise = this.makeRequest().then(request => {\n return this.apiService.postAccountKey(request);\n });\n await this.formPromise;\n const toast: Toast = {\n type: 'success',\n title: this.i18nService.t('keyUpdated'),\n body: this.i18nService.t('logBackInOthersToo'),\n timeout: 15000,\n };\n this.toasterService.popAsync(toast);\n this.messagingService.send('logout');\n } catch { }\n }\n\n private async makeRequest(): Promise {\n const key = await this.cryptoService.getKey();\n const encKey = await this.cryptoService.makeEncKey(key);\n const privateKey = await this.cryptoService.getPrivateKey();\n let encPrivateKey: EncString = null;\n if (privateKey != null) {\n encPrivateKey = await this.cryptoService.encrypt(privateKey, encKey[0]);\n }\n const request = new UpdateKeyRequest();\n request.privateKey = encPrivateKey != null ? encPrivateKey.encryptedString : null;\n request.key = encKey[1].encryptedString;\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n\n await this.syncService.fullSync(true);\n\n const folders = await this.folderService.getAllDecrypted();\n for (let i = 0; i < folders.length; i++) {\n if (folders[i].id == null) {\n continue;\n }\n const folder = await this.folderService.encrypt(folders[i], encKey[0]);\n request.folders.push(new FolderWithIdRequest(folder));\n }\n\n const ciphers = await this.cipherService.getAllDecrypted();\n for (let i = 0; i < ciphers.length; i++) {\n if (ciphers[i].organizationId != null) {\n continue;\n }\n const cipher = await this.cipherService.encrypt(ciphers[i], encKey[0]);\n request.ciphers.push(new CipherWithIdRequest(cipher));\n }\n\n return request;\n }\n}\n","
\n
\n
\n
\n

{{'updateEncryptionKey' | i18n}}

\n \n
\n
\n

{{'updateEncryptionKeyShortDesc' | i18n}} {{'updateEncryptionKeyDesc' | i18n}}\n {{'learnMore' | i18n}}\n

\n {{'updateEncryptionKeyWarning' | i18n}}\n \n \n
\n
\n \n \n
\n
\n
\n
\n","import { Component } from '@angular/core';\n\nimport { FolderService } from 'jslib/abstractions/folder.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\nimport {\n FolderAddEditComponent as BaseFolderAddEditComponent,\n} from 'jslib/angular/components/folder-add-edit.component';\n\n@Component({\n selector: 'app-folder-add-edit',\n templateUrl: 'folder-add-edit.component.html',\n})\nexport class FolderAddEditComponent extends BaseFolderAddEditComponent {\n constructor(folderService: FolderService, i18nService: I18nService,\n platformUtilsService: PlatformUtilsService) {\n super(folderService, i18nService, platformUtilsService);\n }\n}\n","
\n
\n
\n
\n

{{title}}

\n \n
\n
\n \n \n
\n
\n \n \n
\n \n
\n
\n
\n
\n
\n","import {\n Component,\n OnDestroy,\n} from '@angular/core';\n\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { CollectionService } from 'jslib/abstractions/collection.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { CollectionView } from 'jslib/models/view/collectionView';\n\nimport { ShareComponent as BaseShareComponent } from 'jslib/angular/components/share.component';\n\n@Component({\n selector: 'app-vault-share',\n templateUrl: 'share.component.html',\n})\nexport class ShareComponent extends BaseShareComponent implements OnDestroy {\n constructor(collectionService: CollectionService, platformUtilsService: PlatformUtilsService,\n i18nService: I18nService, userService: UserService,\n cipherService: CipherService) {\n super(collectionService, platformUtilsService, i18nService, userService, cipherService);\n }\n\n ngOnDestroy() {\n this.selectAll(false);\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n }\n\n selectAll(select: boolean) {\n const collections = select ? this.collections : this.writeableCollections;\n collections.forEach(c => this.check(c, select));\n }\n}\n","
\n
\n
\n
\n

\n {{'share' | i18n}}\n {{cipher.name}}\n

\n \n
\n
\n {{'noOrganizationsList' | i18n}}\n
\n
\n

{{'shareDesc' | i18n}}

\n
\n \n \n
\n
\n

{{'collections' | i18n}}

\n
\n \n \n
\n
\n
\n {{'noCollectionsInList' | i18n}}\n
\n \n \n \n \n \n \n \n
\n \n \n {{c.name}}\n
\n
\n
\n \n \n {{'newOrganization' | i18n}}\n \n \n
\n
\n
\n
\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-send-info',\n templateUrl: 'send-info.component.html',\n})\nexport class SendInfoComponent { }\n","
\n \n
\n {{'sendVaultCardProductDesc' | i18n}}\n {{'sendVaultCardLearnMore' |\n i18n}},\n {{'sendVaultCardSee' | i18n}}\n {{'sendVaultCardHowItWorks' | i18n}},\n {{'sendVaultCardOr' | i18n}}\n {{'sendVaultCardTryItNow' | i18n}}.\n
\n
\n","import { Component } from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\n@Component({\n selector: 'app-verify-email',\n templateUrl: 'verify-email.component.html',\n})\nexport class VerifyEmailComponent {\n actionPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService) { }\n\n async send() {\n if (this.actionPromise != null) {\n return;\n }\n try {\n this.actionPromise = this.apiService.postAccountVerifyEmail();\n await this.actionPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('checkInboxForVerification'));\n } catch { }\n this.actionPromise = null;\n }\n}\n","
\n
\n {{'verifyEmail' | i18n}}\n
\n
\n

{{'verifyEmailDesc' | i18n}}

\n \n
\n
\n","import { Injectable } from '@angular/core';\nimport {\n ActivatedRouteSnapshot,\n CanActivate,\n Router,\n} from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\n@Injectable()\nexport class OrganizationGuardService implements CanActivate {\n constructor(private userService: UserService, private router: Router,\n private toasterService: ToasterService, private i18nService: I18nService) { }\n\n async canActivate(route: ActivatedRouteSnapshot) {\n const org = await this.userService.getOrganization(route.params.organizationId);\n if (org == null) {\n this.router.navigate(['/']);\n return false;\n }\n if (!org.isOwner && !org.enabled) {\n this.toasterService.popAsync('error', null, this.i18nService.t('organizationIsDisabled'));\n this.router.navigate(['/']);\n return false;\n }\n\n return true;\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n ActivatedRouteSnapshot,\n CanActivate,\n Router,\n} from '@angular/router';\n\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { Permissions } from 'jslib/enums/permissions';\n\n@Injectable()\nexport class OrganizationTypeGuardService implements CanActivate {\n constructor(private userService: UserService, private router: Router) { }\n\n async canActivate(route: ActivatedRouteSnapshot) {\n const org = await this.userService.getOrganization(route.params.organizationId);\n const permissions = route.data == null ? null : route.data.permissions as Permissions[];\n\n if (\n (permissions.indexOf(Permissions.AccessBusinessPortal) !== -1 && org.canAccessBusinessPortal) ||\n (permissions.indexOf(Permissions.AccessEventLogs) !== -1 && org.canAccessEventLogs) ||\n (permissions.indexOf(Permissions.AccessImportExport) !== -1 && org.canAccessImportExport) ||\n (permissions.indexOf(Permissions.AccessReports) !== -1 && org.canAccessReports) ||\n (permissions.indexOf(Permissions.ManageAllCollections) !== -1 && org.canManageAllCollections) ||\n (permissions.indexOf(Permissions.ManageAssignedCollections) !== -1 && org.canManageAssignedCollections) ||\n (permissions.indexOf(Permissions.ManageGroups) !== -1 && org.canManageGroups) ||\n (permissions.indexOf(Permissions.ManageOrganization) !== -1 && org.isOwner) ||\n (permissions.indexOf(Permissions.ManagePolicies) !== -1 && org.canManagePolicies) ||\n (permissions.indexOf(Permissions.ManageUsers) !== -1 && org.canManageUsers)\n ) {\n return true;\n }\n\n this.router.navigate(['/organizations', org.id]);\n return false;\n }\n}\n","export enum Permissions {\n AccessBusinessPortal,\n AccessEventLogs,\n AccessImportExport,\n AccessReports,\n ManageAllCollections,\n ManageAssignedCollections,\n ManageGroups,\n ManageOrganization,\n ManagePolicies,\n ManageUsers,\n}\n","import { Injectable } from '@angular/core';\nimport {\n ActivatedRouteSnapshot,\n CanActivate,\n Router,\n RouterStateSnapshot,\n} from '@angular/router';\n\nimport { MessagingService } from '../../abstractions/messaging.service';\nimport { UserService } from '../../abstractions/user.service';\nimport { VaultTimeoutService } from '../../abstractions/vaultTimeout.service';\n\n@Injectable()\nexport class AuthGuardService implements CanActivate {\n constructor(private vaultTimeoutService: VaultTimeoutService, private userService: UserService,\n private router: Router, private messagingService: MessagingService) { }\n\n async canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot) {\n const isAuthed = await this.userService.isAuthenticated();\n if (!isAuthed) {\n this.messagingService.send('authBlocked');\n return false;\n }\n\n const locked = await this.vaultTimeoutService.isLocked();\n if (locked) {\n if (routerState != null) {\n this.messagingService.send('lockedUrl', { url: routerState.url });\n }\n this.router.navigate(['lock'], { queryParams: { promptBiometric: true }});\n return false;\n }\n\n return true;\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n CanActivate,\n Router,\n} from '@angular/router';\n\nimport { UserService } from '../../abstractions/user.service';\nimport { VaultTimeoutService } from '../../abstractions/vaultTimeout.service';\n\n@Injectable()\nexport class LockGuardService implements CanActivate {\n constructor(private vaultTimeoutService: VaultTimeoutService, private userService: UserService,\n private router: Router) { }\n\n async canActivate() {\n const locked = await this.vaultTimeoutService.isLocked();\n if (!locked) {\n const isAuthed = await this.userService.isAuthenticated();\n if (!isAuthed) {\n this.router.navigate(['login']);\n } else {\n this.router.navigate(['vault']);\n }\n return false;\n }\n\n return true;\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n CanActivate,\n Router,\n} from '@angular/router';\n\nimport { UserService } from '../../abstractions/user.service';\nimport { VaultTimeoutService } from '../../abstractions/vaultTimeout.service';\n\n@Injectable()\nexport class UnauthGuardService implements CanActivate {\n constructor(private vaultTimeoutService: VaultTimeoutService, private userService: UserService,\n private router: Router) { }\n\n async canActivate() {\n const isAuthed = await this.userService.isAuthenticated();\n if (isAuthed) {\n const locked = await this.vaultTimeoutService.isLocked();\n if (locked) {\n this.router.navigate(['lock']);\n } else {\n this.router.navigate(['vault']);\n }\n return false;\n }\n\n return true;\n }\n}\n","import {\n Component,\n ComponentFactoryResolver,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\n\nimport { CipherData } from 'jslib/models/data';\nimport { Cipher, SymmetricCryptoKey } from 'jslib/models/domain';\nimport { EmergencyAccessViewResponse } from 'jslib/models/response/emergencyAccessResponse';\nimport { CipherView } from 'jslib/models/view/cipherView';\n\nimport { ModalComponent } from '../modal.component';\n\nimport { EmergencyAccessAttachmentsComponent } from './emergency-access-attachments.component';\nimport { EmergencyAddEditComponent } from './emergency-add-edit.component';\n\n@Component({\n selector: 'emergency-access-view',\n templateUrl: 'emergency-access-view.component.html',\n})\nexport class EmergencyAccessViewComponent implements OnInit {\n @ViewChild('cipherAddEdit', { read: ViewContainerRef, static: true }) cipherAddEditModalRef: ViewContainerRef;\n @ViewChild('attachments', { read: ViewContainerRef, static: true }) attachmentsModalRef: ViewContainerRef;\n\n id: string;\n ciphers: CipherView[] = [];\n\n private modal: ModalComponent = null;\n\n constructor(private cipherService: CipherService, private cryptoService: CryptoService,\n private componentFactoryResolver: ComponentFactoryResolver, private router: Router,\n private route: ActivatedRoute, private apiService: ApiService) { }\n\n ngOnInit() {\n this.route.params.subscribe(qParams => {\n if (qParams.id == null) {\n return this.router.navigate(['settings/emergency-access']);\n }\n\n this.id = qParams.id;\n\n this.load();\n });\n }\n\n selectCipher(cipher: CipherView) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.cipherAddEditModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(EmergencyAddEditComponent, this.cipherAddEditModalRef);\n\n childComponent.cipherId = cipher == null ? null : cipher.id;\n childComponent.cipher = cipher;\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n\n return childComponent;\n }\n\n async load() {\n const response = await this.apiService.postEmergencyAccessView(this.id);\n this.ciphers = await this.getAllCiphers(response);\n }\n\n async viewAttachments(cipher: CipherView) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.attachmentsModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(EmergencyAccessAttachmentsComponent, this.attachmentsModalRef);\n\n childComponent.cipher = cipher;\n childComponent.emergencyAccessId = this.id;\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n protected async getAllCiphers(response: EmergencyAccessViewResponse): Promise {\n const ciphers = response.ciphers;\n\n const decCiphers: CipherView[] = [];\n const oldKeyBuffer = await this.cryptoService.rsaDecrypt(response.keyEncrypted);\n const oldEncKey = new SymmetricCryptoKey(oldKeyBuffer);\n\n const promises: any[] = [];\n ciphers.forEach(cipherResponse => {\n const cipherData = new CipherData(cipherResponse);\n const cipher = new Cipher(cipherData);\n promises.push(cipher.decrypt(oldEncKey).then(c => decCiphers.push(c)));\n });\n\n await Promise.all(promises);\n decCiphers.sort(this.cipherService.getLocaleSortingFunction());\n\n return decCiphers;\n }\n}\n","
\n

{{'vault' | i18n}}

\n
\n
\n \n \n \n \n \n \n \n \n \n
\n \n \n {{c.name}}\n \n \n {{'shared' | i18n}}\n \n \n \n {{'attachments' | i18n}}\n \n
\n {{c.subTitle}}\n
\n \n
\n
\n
\n\n\n","import { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class EncryptedObject {\n iv: ArrayBuffer;\n data: ArrayBuffer;\n mac: ArrayBuffer;\n key: SymmetricCryptoKey;\n}\n","export class EnvironmentUrls {\n base: string;\n api: string;\n identity: string;\n events: string;\n}\n","export class GeneratedPasswordHistory {\n password: string;\n date: number;\n\n constructor(password: string, date: number) {\n this.password = password;\n this.date = date;\n }\n}\n","import { Component } from '@angular/core';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { AttachmentView } from 'jslib/models/view/attachmentView';\n\nimport { AttachmentsComponent as BaseAttachmentsComponent } from 'jslib/angular/components/attachments.component';\n\n@Component({\n selector: 'emergency-access-attachments',\n templateUrl: '../vault/attachments.component.html',\n})\nexport class EmergencyAccessAttachmentsComponent extends BaseAttachmentsComponent {\n viewOnly = true;\n canAccessAttachments = true;\n\n constructor(cipherService: CipherService, i18nService: I18nService,\n cryptoService: CryptoService, userService: UserService,\n platformUtilsService: PlatformUtilsService, apiService: ApiService) {\n super(cipherService, i18nService, cryptoService, userService, platformUtilsService, apiService, window);\n }\n\n protected async init() {\n // Do nothing since cipher is already decoded\n }\n\n protected showFixOldAttachments(attachment: AttachmentView) {\n return false;\n }\n}\n","import { Component } from '@angular/core';\n\nimport { AuditService } from 'jslib/abstractions/audit.service';\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { CollectionService } from 'jslib/abstractions/collection.service';\nimport { EventService } from 'jslib/abstractions/event.service';\nimport { FolderService } from 'jslib/abstractions/folder.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib/abstractions/policy.service';\nimport { StateService } from 'jslib/abstractions/state.service';\nimport { TotpService } from 'jslib/abstractions/totp.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { Cipher } from 'jslib/models/domain/cipher';\n\nimport { AddEditComponent as BaseAddEditComponent } from '../vault/add-edit.component';\n\n@Component({\n selector: 'app-org-vault-add-edit',\n templateUrl: '../vault/add-edit.component.html',\n})\nexport class EmergencyAddEditComponent extends BaseAddEditComponent {\n originalCipher: Cipher = null;\n viewOnly = true;\n\n constructor(cipherService: CipherService, folderService: FolderService,\n i18nService: I18nService, platformUtilsService: PlatformUtilsService,\n auditService: AuditService, stateService: StateService,\n userService: UserService, collectionService: CollectionService,\n totpService: TotpService, passwordGenerationService: PasswordGenerationService,\n messagingService: MessagingService, eventService: EventService, policyService: PolicyService) {\n super(cipherService, folderService, i18nService, platformUtilsService, auditService, stateService,\n userService, collectionService, totpService, passwordGenerationService, messagingService,\n eventService, policyService);\n }\n\n async load() {\n this.title = this.i18nService.t('viewItem');\n }\n\n protected async loadCipher() {\n return Promise.resolve(this.originalCipher);\n }\n}\n","import { Component, ComponentFactoryResolver, OnInit, ViewChild, ViewContainerRef } from '@angular/core';\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { StorageService } from 'jslib/abstractions/storage.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { EmergencyAccessStatusType } from 'jslib/enums/emergencyAccessStatusType';\nimport { EmergencyAccessType } from 'jslib/enums/emergencyAccessType';\nimport { Utils } from 'jslib/misc/utils';\nimport { EmergencyAccessConfirmRequest } from 'jslib/models/request/emergencyAccessConfirmRequest';\nimport { EmergencyAccessGranteeDetailsResponse, EmergencyAccessGrantorDetailsResponse } from 'jslib/models/response/emergencyAccessResponse';\nimport { ConstantsService } from 'jslib/services/constants.service';\n\nimport { ModalComponent } from '../modal.component';\nimport { EmergencyAccessAddEditComponent } from './emergency-access-add-edit.component';\nimport { EmergencyAccessConfirmComponent } from './emergency-access-confirm.component';\nimport { EmergencyAccessTakeoverComponent } from './emergency-access-takeover.component';\n\n@Component({\n selector: 'emergency-access',\n templateUrl: 'emergency-access.component.html',\n})\nexport class EmergencyAccessComponent implements OnInit {\n @ViewChild('addEdit', { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef;\n @ViewChild('takeoverTemplate', { read: ViewContainerRef, static: true}) takeoverModalRef: ViewContainerRef;\n @ViewChild('confirmTemplate', { read: ViewContainerRef, static: true }) confirmModalRef: ViewContainerRef;\n\n canAccessPremium: boolean;\n trustedContacts: EmergencyAccessGranteeDetailsResponse[];\n grantedContacts: EmergencyAccessGrantorDetailsResponse[];\n emergencyAccessType = EmergencyAccessType;\n emergencyAccessStatusType = EmergencyAccessStatusType;\n actionPromise: Promise;\n isOrganizationOwner: boolean;\n\n private modal: ModalComponent = null;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private componentFactoryResolver: ComponentFactoryResolver,\n private platformUtilsService: PlatformUtilsService,\n private toasterService: ToasterService, private cryptoService: CryptoService,\n private storageService: StorageService, private userService: UserService,\n private messagingService: MessagingService) { }\n\n async ngOnInit() {\n this.canAccessPremium = await this.userService.canAccessPremium();\n const orgs = await this.userService.getAllOrganizations();\n this.isOrganizationOwner = orgs.some(o => o.isOwner);\n this.load();\n }\n\n async load() {\n this.trustedContacts = (await this.apiService.getEmergencyAccessTrusted()).data;\n this.grantedContacts = (await this.apiService.getEmergencyAccessGranted()).data;\n }\n\n async premiumRequired() {\n if (!this.canAccessPremium) {\n this.messagingService.send('premiumRequired');\n return;\n }\n }\n\n edit(details: EmergencyAccessGranteeDetailsResponse) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.addEditModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n EmergencyAccessAddEditComponent, this.addEditModalRef);\n\n childComponent.name = details?.name ?? details?.email;\n childComponent.emergencyAccessId = details?.id;\n childComponent.readOnly = !this.canAccessPremium;\n childComponent.onSaved.subscribe(() => {\n this.modal.close();\n this.load();\n });\n childComponent.onDeleted.subscribe(() => {\n this.modal.close();\n this.remove(details);\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n invite() {\n this.edit(null);\n }\n\n async reinvite(contact: EmergencyAccessGranteeDetailsResponse) {\n if (this.actionPromise != null) {\n return;\n }\n this.actionPromise = this.apiService.postEmergencyAccessReinvite(contact.id);\n await this.actionPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('hasBeenReinvited', contact.email));\n this.actionPromise = null;\n }\n\n async confirm(contact: EmergencyAccessGranteeDetailsResponse) {\n function updateUser() {\n contact.status = EmergencyAccessStatusType.Confirmed;\n }\n\n if (this.actionPromise != null) {\n return;\n }\n\n const autoConfirm = await this.storageService.get(ConstantsService.autoConfirmFingerprints);\n if (autoConfirm == null || !autoConfirm) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.confirmModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n EmergencyAccessConfirmComponent, this.confirmModalRef);\n\n childComponent.name = contact?.name ?? contact?.email;\n childComponent.emergencyAccessId = contact.id;\n childComponent.userId = contact?.granteeId;\n childComponent.onConfirmed.subscribe(async () => {\n this.modal.close();\n\n childComponent.formPromise = this.doConfirmation(contact);\n await childComponent.formPromise;\n\n updateUser();\n this.toasterService.popAsync('success', null, this.i18nService.t('hasBeenConfirmed', contact.name || contact.email));\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n return;\n }\n\n this.actionPromise = this.doConfirmation(contact);\n await this.actionPromise;\n updateUser();\n\n this.toasterService.popAsync('success', null, this.i18nService.t('hasBeenConfirmed', contact.name || contact.email));\n this.actionPromise = null;\n }\n\n async remove(details: EmergencyAccessGranteeDetailsResponse | EmergencyAccessGrantorDetailsResponse) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('removeUserConfirmation'), details.name || details.email,\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n await this.apiService.deleteEmergencyAccess(details.id);\n this.toasterService.popAsync('success', null, this.i18nService.t('removedUserId', details.name || details.email));\n\n if (details instanceof EmergencyAccessGranteeDetailsResponse) {\n this.removeGrantee(details);\n } else {\n this.removeGrantor(details);\n }\n } catch { }\n }\n\n async requestAccess(details: EmergencyAccessGrantorDetailsResponse) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('requestAccessConfirmation', details.waitTimeDays.toString()),\n details.name || details.email,\n this.i18nService.t('requestAccess'),\n this.i18nService.t('no'),\n 'warning',\n );\n\n if (!confirmed) {\n return false;\n }\n\n await this.apiService.postEmergencyAccessInitiate(details.id);\n\n details.status = EmergencyAccessStatusType.RecoveryInitiated;\n this.toasterService.popAsync('success', null, this.i18nService.t('requestSent', details.name || details.email));\n }\n\n async approve(details: EmergencyAccessGranteeDetailsResponse) {\n const type = this.i18nService.t(details.type === EmergencyAccessType.View ? 'view' : 'takeover');\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('approveAccessConfirmation', details.name || details.email, type),\n details.name || details.email,\n this.i18nService.t('approve'),\n this.i18nService.t('no'),\n 'warning',\n );\n\n if (!confirmed) {\n return false;\n }\n\n await this.apiService.postEmergencyAccessApprove(details.id);\n details.status = EmergencyAccessStatusType.RecoveryApproved;\n\n this.toasterService.popAsync('success', null, this.i18nService.t('emergencyApproved', details.name || details.email));\n }\n\n async reject(details: EmergencyAccessGranteeDetailsResponse) {\n await this.apiService.postEmergencyAccessReject(details.id);\n details.status = EmergencyAccessStatusType.Confirmed;\n\n this.toasterService.popAsync('success', null, this.i18nService.t('emergencyRejected', details.name || details.email));\n }\n\n async takeover(details: EmergencyAccessGrantorDetailsResponse) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.addEditModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n EmergencyAccessTakeoverComponent, this.takeoverModalRef);\n\n childComponent.name = details != null ? details.name || details.email : null;\n childComponent.email = details.email;\n childComponent.emergencyAccessId = details != null ? details.id : null;\n\n childComponent.onDone.subscribe(() => {\n this.modal.close();\n this.toasterService.popAsync('success', null, this.i18nService.t('passwordResetFor', details.name || details.email));\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n private removeGrantee(details: EmergencyAccessGranteeDetailsResponse) {\n const index = this.trustedContacts.indexOf(details);\n if (index > -1) {\n this.trustedContacts.splice(index, 1);\n }\n }\n\n private removeGrantor(details: EmergencyAccessGrantorDetailsResponse) {\n const index = this.grantedContacts.indexOf(details);\n if (index > -1) {\n this.grantedContacts.splice(index, 1);\n }\n }\n\n // Encrypt the master password hash using the grantees public key, and send it to bitwarden for escrow.\n private async doConfirmation(details: EmergencyAccessGranteeDetailsResponse) {\n const encKey = await this.cryptoService.getEncKey();\n const publicKeyResponse = await this.apiService.getUserPublicKey(details.granteeId);\n const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n\n try {\n // tslint:disable-next-line\n console.log('User\\'s fingerprint: ' +\n (await this.cryptoService.getFingerprint(details.granteeId, publicKey.buffer)).join('-'));\n } catch { }\n\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n const request = new EmergencyAccessConfirmRequest();\n request.key = encryptedKey.encryptedString;\n await this.apiService.postEmergencyAccessConfirm(details.id, request);\n }\n}\n","
\n

{{'emergencyAccess' | i18n}}

\n
\n

\n {{'emergencyAccessDesc' | i18n}}\n \n {{'learnMore' | i18n}}.\n \n

\n\n

\n {{'warning' | i18n }}: {{'emergencyAccessOwnerWarning' | i18n}}\n

\n\n
\n

\n {{'trustedEmergencyContacts' | i18n}}\n \n {{'premium' | i18n}}\n \n

\n
\n \n
\n
\n\n\n \n \n \n \n \n \n \n
\n \n \n {{c.email}}\n {{'invited' | i18n}}\n {{'accepted' | i18n}}\n {{'emergencyAccessRecoveryInitiated' | i18n}}\n {{'emergencyAccessRecoveryApproved' | i18n}}\n \n {{'view' | i18n}}\n {{'takeover' | i18n}}\n\n {{c.name}}\n \n \n
\n\n

{{'noTrustedContacts' | i18n}}

\n\n
\n

{{'designatedEmergencyContacts' | i18n}}

\n
\n\n\n \n \n \n \n \n \n \n
\n \n \n {{c.email}}\n {{'invited' | i18n}}\n {{'accepted' | i18n}}\n {{'emergencyAccessRecoveryInitiated' | i18n}}\n {{'emergencyAccessRecoveryApproved' | i18n}}\n \n {{'view' | i18n}}\n {{'takeover' | i18n}}\n\n {{c.name}}\n \n \n
\n\n

{{'noGrantedAccess' | i18n}}

\n\n\n\n\n","export enum EmergencyAccessType\n{\n View = 0,\n Takeover = 1,\n}\n","import { EmergencyAccessStatusType } from '../../enums/emergencyAccessStatusType';\nimport { EmergencyAccessType } from '../../enums/emergencyAccessType';\nimport { KdfType } from '../../enums/kdfType';\nimport { BaseResponse } from './baseResponse';\nimport { CipherResponse } from './cipherResponse';\n\nexport class EmergencyAccessGranteeDetailsResponse extends BaseResponse {\n id: string;\n granteeId: string;\n name: string;\n email: string;\n type: EmergencyAccessType;\n status: EmergencyAccessStatusType;\n waitTimeDays: number;\n creationDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.granteeId = this.getResponseProperty('GranteeId');\n this.name = this.getResponseProperty('Name');\n this.email = this.getResponseProperty('Email');\n this.type = this.getResponseProperty('Type');\n this.status = this.getResponseProperty('Status');\n this.waitTimeDays = this.getResponseProperty('WaitTimeDays');\n this.creationDate = this.getResponseProperty('CreationDate');\n }\n}\n\nexport class EmergencyAccessGrantorDetailsResponse extends BaseResponse {\n id: string;\n grantorId: string;\n name: string;\n email: string;\n type: EmergencyAccessType;\n status: EmergencyAccessStatusType;\n waitTimeDays: number;\n creationDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.grantorId = this.getResponseProperty('GrantorId');\n this.name = this.getResponseProperty('Name');\n this.email = this.getResponseProperty('Email');\n this.type = this.getResponseProperty('Type');\n this.status = this.getResponseProperty('Status');\n this.waitTimeDays = this.getResponseProperty('WaitTimeDays');\n this.creationDate = this.getResponseProperty('CreationDate');\n }\n}\n\nexport class EmergencyAccessTakeoverResponse extends BaseResponse {\n keyEncrypted: string;\n kdf: KdfType;\n kdfIterations: number;\n\n constructor(response: any) {\n super(response);\n\n this.keyEncrypted = this.getResponseProperty('KeyEncrypted');\n this.kdf = this.getResponseProperty('Kdf');\n this.kdfIterations = this.getResponseProperty('KdfIterations');\n }\n}\n\nexport class EmergencyAccessViewResponse extends BaseResponse {\n keyEncrypted: string;\n ciphers: CipherResponse[] = [];\n\n constructor(response: any) {\n super(response);\n\n this.keyEncrypted = this.getResponseProperty('KeyEncrypted');\n\n const ciphers = this.getResponseProperty('Ciphers');\n if (ciphers != null) {\n this.ciphers = ciphers.map((c: any) => new CipherResponse(c));\n }\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\n\nimport { EmergencyAccessType } from 'jslib/enums/emergencyAccessType';\nimport { EmergencyAccessInviteRequest } from 'jslib/models/request/emergencyAccessInviteRequest';\nimport { EmergencyAccessUpdateRequest } from 'jslib/models/request/emergencyAccessUpdateRequest';\n\n@Component({\n selector: 'emergency-access-add-edit',\n templateUrl: 'emergency-access-add-edit.component.html',\n})\nexport class EmergencyAccessAddEditComponent implements OnInit {\n @Input() name: string;\n @Input() emergencyAccessId: string;\n @Output() onSaved = new EventEmitter();\n @Output() onDeleted = new EventEmitter();\n\n loading = true;\n readOnly: boolean = false;\n editMode: boolean = false;\n title: string;\n email: string;\n type: EmergencyAccessType = EmergencyAccessType.View;\n\n formPromise: Promise;\n\n emergencyAccessType = EmergencyAccessType;\n waitTimes: { name: string; value: number; }[];\n waitTime: number;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService) { }\n\n async ngOnInit() {\n this.editMode = this.loading = this.emergencyAccessId != null;\n\n this.waitTimes = [\n { name: this.i18nService.t('oneDay'), value: 1 },\n { name: this.i18nService.t('days', '2'), value: 2 },\n { name: this.i18nService.t('days', '7'), value: 7 },\n { name: this.i18nService.t('days', '14'), value: 14 },\n { name: this.i18nService.t('days', '30'), value: 30 },\n { name: this.i18nService.t('days', '90'), value: 90 },\n ];\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t('editEmergencyContact');\n try {\n const emergencyAccess = await this.apiService.getEmergencyAccess(this.emergencyAccessId);\n this.type = emergencyAccess.type;\n this.waitTime = emergencyAccess.waitTimeDays;\n } catch { }\n } else {\n this.title = this.i18nService.t('inviteEmergencyContact');\n this.waitTime = this.waitTimes[2].value;\n }\n\n this.loading = false;\n }\n\n async submit() {\n try {\n if (this.editMode) {\n const request = new EmergencyAccessUpdateRequest();\n request.type = this.type;\n request.waitTimeDays = this.waitTime;\n\n this.formPromise = this.apiService.putEmergencyAccess(this.emergencyAccessId, request);\n } else {\n const request = new EmergencyAccessInviteRequest();\n request.email = this.email.trim();\n request.type = this.type;\n request.waitTimeDays = this.waitTime;\n\n this.formPromise = this.apiService.postEmergencyAccessInvite(request);\n }\n\n await this.formPromise;\n this.toasterService.popAsync('success', null,\n this.i18nService.t(this.editMode ? 'editedUserId' : 'invitedUsers', this.name));\n this.onSaved.emit();\n } catch { }\n }\n\n async delete() {\n this.onDeleted.emit();\n }\n}\n","
\n
\n
\n
\n

\n {{'premium' | i18n}}\n {{title}}\n {{name}}\n

\n \n
\n
\n \n {{'loading' | i18n}}\n
\n
\n \n

{{'inviteEmergencyContactDesc' | i18n}}

\n
\n \n \n
\n
\n

\n {{'userAccess' | i18n}}\n \n \n \n

\n
\n \n \n
\n
\n \n \n
\n
\n \n \n {{'waitTimeDesc' | i18n}}\n
\n
\n
\n \n \n
\n \n
\n
\n
\n
\n
\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ConstantsService } from 'jslib/services/constants.service';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { StorageService } from 'jslib/abstractions/storage.service';\n\nimport { Utils } from 'jslib/misc/utils';\n\n@Component({\n selector: 'emergency-access-confirm',\n templateUrl: 'emergency-access-confirm.component.html',\n})\nexport class EmergencyAccessConfirmComponent implements OnInit {\n @Input() name: string;\n @Input() userId: string;\n @Input() emergencyAccessId: string;\n @Input() formPromise: Promise;\n @Output() onConfirmed = new EventEmitter();\n\n dontAskAgain = false;\n loading = true;\n fingerprint: string;\n\n constructor(private apiService: ApiService, private cryptoService: CryptoService,\n private storageService: StorageService) { }\n\n async ngOnInit() {\n try {\n const publicKeyResponse = await this.apiService.getUserPublicKey(this.userId);\n if (publicKeyResponse != null) {\n const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n const fingerprint = await this.cryptoService.getFingerprint(this.userId, publicKey.buffer);\n if (fingerprint != null) {\n this.fingerprint = fingerprint.join('-');\n }\n }\n } catch { }\n this.loading = false;\n }\n\n async submit() {\n if (this.loading) {\n return;\n }\n\n if (this.dontAskAgain) {\n await this.storageService.save(ConstantsService.autoConfirmFingerprints, true);\n }\n\n try {\n this.onConfirmed.emit();\n } catch { }\n }\n}\n","
\n
\n
\n
\n

\n {{'confirmUser' | i18n}}\n {{name}}\n

\n \n
\n
\n

\n {{'fingerprintEnsureIntegrityVerify' | i18n}}\n \n {{'learnMore' | i18n}}\n

\n

{{fingerprint}}

\n
\n \n \n
\n
\n
\n \n \n
\n
\n
\n
\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib/abstractions/policy.service';\nimport { UserService } from 'jslib/abstractions/user.service';\nimport { ChangePasswordComponent } from 'jslib/angular/components/change-password.component';\n\nimport { KdfType } from 'jslib/enums/kdfType';\nimport { PolicyData } from 'jslib/models/data/policyData';\nimport { Policy } from 'jslib/models/domain/policy';\nimport { SymmetricCryptoKey } from 'jslib/models/domain/symmetricCryptoKey';\nimport { EmergencyAccessPasswordRequest } from 'jslib/models/request/emergencyAccessPasswordRequest';\nimport { ListResponse } from 'jslib/models/response';\nimport { EmergencyAccessTakeoverResponse } from 'jslib/models/response/emergencyAccessResponse';\nimport { PolicyResponse } from 'jslib/models/response/policyResponse';\n\n@Component({\n selector: 'emergency-access-takeover',\n templateUrl: 'emergency-access-takeover.component.html',\n})\nexport class EmergencyAccessTakeoverComponent extends ChangePasswordComponent implements OnInit {\n @Output() onDone = new EventEmitter();\n @Input() emergencyAccessId: string;\n @Input() name: string;\n @Input() email: string;\n @Input() kdf: KdfType;\n @Input() kdfIterations: number;\n\n formPromise: Promise;\n\n constructor(i18nService: I18nService, cryptoService: CryptoService,\n messagingService: MessagingService, userService: UserService,\n passwordGenerationService: PasswordGenerationService,\n platformUtilsService: PlatformUtilsService, policyService: PolicyService,\n private apiService: ApiService, private toasterService: ToasterService) {\n super(i18nService, cryptoService, messagingService, userService, passwordGenerationService,\n platformUtilsService, policyService);\n }\n\n async ngOnInit() {\n const response = await this.apiService.getEmergencyGrantorPolicies(this.emergencyAccessId);\n if (response.data != null && response.data.length > 0) {\n const policies = response.data.map((policyResponse: PolicyResponse) => new Policy(new PolicyData(policyResponse)));\n this.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions(policies);\n }\n }\n\n async submit() {\n if (!await this.strongPassword()) {\n return;\n }\n\n const takeoverResponse = await this.apiService.postEmergencyAccessTakeover(this.emergencyAccessId);\n\n const oldKeyBuffer = await this.cryptoService.rsaDecrypt(takeoverResponse.keyEncrypted);\n const oldEncKey = new SymmetricCryptoKey(oldKeyBuffer);\n\n if (oldEncKey == null) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'), this.i18nService.t('unexpectedError'));\n return;\n }\n\n const key = await this.cryptoService.makeKey(this.masterPassword, this.email, takeoverResponse.kdf, takeoverResponse.kdfIterations);\n const masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, key);\n\n const encKey = await this.cryptoService.remakeEncKey(key, oldEncKey);\n\n const request = new EmergencyAccessPasswordRequest();\n request.newMasterPasswordHash = masterPasswordHash;\n request.key = encKey[1].encryptedString;\n\n this.apiService.postEmergencyAccessPassword(this.emergencyAccessId, request);\n\n try {\n this.onDone.emit();\n } catch { }\n }\n}\n","
\n
\n
\n
\n

\n {{'takeover' | i18n}}\n {{name}}\n

\n \n
\n
\n {{'loggedOutWarning' | i18n}}\n \n {{'masterPasswordPolicyInEffect' | i18n}}\n
    \n
  • 0\">\n {{'policyInEffectMinComplexity' | i18n : getPasswordScoreAlertDisplay()}}\n
  • \n
  • 0\">\n {{'policyInEffectMinLength' | i18n : enforcedPolicyOptions?.minLength.toString()}}\n
  • \n
  • \n {{'policyInEffectUppercase' | i18n}}
  • \n
  • \n {{'policyInEffectLowercase' | i18n}}
  • \n
  • \n {{'policyInEffectNumbers' | i18n}}
  • \n
  • \n {{'policyInEffectSpecial' | i18n : '!@#$%^&*'}}
  • \n
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n","import { DeviceType } from '../enums/deviceType';\nimport { PolicyType } from '../enums/policyType';\n\nimport { ApiService as ApiServiceAbstraction } from '../abstractions/api.service';\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\nimport { TokenService } from '../abstractions/token.service';\n\nimport { EnvironmentUrls } from '../models/domain/environmentUrls';\n\nimport { AttachmentRequest } from '../models/request/attachmentRequest';\nimport { BitPayInvoiceRequest } from '../models/request/bitPayInvoiceRequest';\nimport { CipherBulkDeleteRequest } from '../models/request/cipherBulkDeleteRequest';\nimport { CipherBulkMoveRequest } from '../models/request/cipherBulkMoveRequest';\nimport { CipherBulkShareRequest } from '../models/request/cipherBulkShareRequest';\nimport { CipherCollectionsRequest } from '../models/request/cipherCollectionsRequest';\nimport { CipherCreateRequest } from '../models/request/cipherCreateRequest';\nimport { CipherRequest } from '../models/request/cipherRequest';\nimport { CipherShareRequest } from '../models/request/cipherShareRequest';\nimport { CollectionRequest } from '../models/request/collectionRequest';\nimport { DeleteRecoverRequest } from '../models/request/deleteRecoverRequest';\nimport { EmailRequest } from '../models/request/emailRequest';\nimport { EmailTokenRequest } from '../models/request/emailTokenRequest';\nimport { EmergencyAccessAcceptRequest } from '../models/request/emergencyAccessAcceptRequest';\nimport { EmergencyAccessConfirmRequest } from '../models/request/emergencyAccessConfirmRequest';\nimport { EmergencyAccessInviteRequest } from '../models/request/emergencyAccessInviteRequest';\nimport { EmergencyAccessPasswordRequest } from '../models/request/emergencyAccessPasswordRequest';\nimport { EmergencyAccessUpdateRequest } from '../models/request/emergencyAccessUpdateRequest';\nimport { EventRequest } from '../models/request/eventRequest';\nimport { FolderRequest } from '../models/request/folderRequest';\nimport { GroupRequest } from '../models/request/groupRequest';\nimport { IapCheckRequest } from '../models/request/iapCheckRequest';\nimport { ImportCiphersRequest } from '../models/request/importCiphersRequest';\nimport { ImportDirectoryRequest } from '../models/request/importDirectoryRequest';\nimport { ImportOrganizationCiphersRequest } from '../models/request/importOrganizationCiphersRequest';\nimport { KdfRequest } from '../models/request/kdfRequest';\nimport { KeysRequest } from '../models/request/keysRequest';\nimport { OrganizationCreateRequest } from '../models/request/organizationCreateRequest';\nimport { OrganizationTaxInfoUpdateRequest } from '../models/request/organizationTaxInfoUpdateRequest';\nimport { OrganizationUpdateRequest } from '../models/request/organizationUpdateRequest';\nimport { OrganizationUpgradeRequest } from '../models/request/organizationUpgradeRequest';\nimport { OrganizationUserAcceptRequest } from '../models/request/organizationUserAcceptRequest';\nimport { OrganizationUserConfirmRequest } from '../models/request/organizationUserConfirmRequest';\nimport { OrganizationUserInviteRequest } from '../models/request/organizationUserInviteRequest';\nimport { OrganizationUserResetPasswordEnrollmentRequest } from '../models/request/organizationUserResetPasswordEnrollmentRequest';\nimport { OrganizationUserUpdateGroupsRequest } from '../models/request/organizationUserUpdateGroupsRequest';\nimport { OrganizationUserUpdateRequest } from '../models/request/organizationUserUpdateRequest';\nimport { PasswordHintRequest } from '../models/request/passwordHintRequest';\nimport { PasswordRequest } from '../models/request/passwordRequest';\nimport { PasswordVerificationRequest } from '../models/request/passwordVerificationRequest';\nimport { PaymentRequest } from '../models/request/paymentRequest';\nimport { PolicyRequest } from '../models/request/policyRequest';\nimport { PreloginRequest } from '../models/request/preloginRequest';\nimport { RegisterRequest } from '../models/request/registerRequest';\nimport { SeatRequest } from '../models/request/seatRequest';\nimport { SelectionReadOnlyRequest } from '../models/request/selectionReadOnlyRequest';\nimport { SendAccessRequest } from '../models/request/sendAccessRequest';\nimport { SendRequest } from '../models/request/sendRequest';\nimport { SetPasswordRequest } from '../models/request/setPasswordRequest';\nimport { StorageRequest } from '../models/request/storageRequest';\nimport { TaxInfoUpdateRequest } from '../models/request/taxInfoUpdateRequest';\nimport { TokenRequest } from '../models/request/tokenRequest';\nimport { TwoFactorEmailRequest } from '../models/request/twoFactorEmailRequest';\nimport { TwoFactorProviderRequest } from '../models/request/twoFactorProviderRequest';\nimport { TwoFactorRecoveryRequest } from '../models/request/twoFactorRecoveryRequest';\nimport { UpdateDomainsRequest } from '../models/request/updateDomainsRequest';\nimport { UpdateKeyRequest } from '../models/request/updateKeyRequest';\nimport { UpdateProfileRequest } from '../models/request/updateProfileRequest';\nimport { UpdateTwoFactorAuthenticatorRequest } from '../models/request/updateTwoFactorAuthenticatorRequest';\nimport { UpdateTwoFactorDuoRequest } from '../models/request/updateTwoFactorDuoRequest';\nimport { UpdateTwoFactorEmailRequest } from '../models/request/updateTwoFactorEmailRequest';\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from '../models/request/updateTwoFactorWebAuthnDeleteRequest';\nimport { UpdateTwoFactorWebAuthnRequest } from '../models/request/updateTwoFactorWebAuthnRequest';\nimport { UpdateTwoFactorYubioOtpRequest } from '../models/request/updateTwoFactorYubioOtpRequest';\nimport { VerifyBankRequest } from '../models/request/verifyBankRequest';\nimport { VerifyDeleteRecoverRequest } from '../models/request/verifyDeleteRecoverRequest';\nimport { VerifyEmailRequest } from '../models/request/verifyEmailRequest';\n\nimport { Utils } from '../misc/utils';\nimport { ApiKeyResponse } from '../models/response/apiKeyResponse';\nimport { AttachmentResponse } from '../models/response/attachmentResponse';\nimport { AttachmentUploadDataResponse } from '../models/response/attachmentUploadDataResponse';\nimport { BillingResponse } from '../models/response/billingResponse';\nimport { BreachAccountResponse } from '../models/response/breachAccountResponse';\nimport { CipherResponse } from '../models/response/cipherResponse';\nimport {\n CollectionGroupDetailsResponse,\n CollectionResponse,\n} from '../models/response/collectionResponse';\nimport { DomainsResponse } from '../models/response/domainsResponse';\nimport {\n EmergencyAccessGranteeDetailsResponse,\n EmergencyAccessGrantorDetailsResponse,\n EmergencyAccessTakeoverResponse,\n EmergencyAccessViewResponse\n} from '../models/response/emergencyAccessResponse';\nimport { ErrorResponse } from '../models/response/errorResponse';\nimport { EventResponse } from '../models/response/eventResponse';\nimport { FolderResponse } from '../models/response/folderResponse';\nimport {\n GroupDetailsResponse,\n GroupResponse,\n} from '../models/response/groupResponse';\nimport { IdentityTokenResponse } from '../models/response/identityTokenResponse';\nimport { IdentityTwoFactorResponse } from '../models/response/identityTwoFactorResponse';\nimport { ListResponse } from '../models/response/listResponse';\nimport { OrganizationResponse } from '../models/response/organizationResponse';\nimport { OrganizationSubscriptionResponse } from '../models/response/organizationSubscriptionResponse';\nimport {\n OrganizationUserDetailsResponse,\n OrganizationUserUserDetailsResponse,\n} from '../models/response/organizationUserResponse';\nimport { PaymentResponse } from '../models/response/paymentResponse';\nimport { PlanResponse } from '../models/response/planResponse';\nimport { PolicyResponse } from '../models/response/policyResponse';\nimport { PreloginResponse } from '../models/response/preloginResponse';\nimport { ProfileResponse } from '../models/response/profileResponse';\nimport { SelectionReadOnlyResponse } from '../models/response/selectionReadOnlyResponse';\nimport { SendAccessResponse } from '../models/response/sendAccessResponse';\nimport { SendFileDownloadDataResponse } from '../models/response/sendFileDownloadDataResponse';\nimport { SendFileUploadDataResponse } from '../models/response/sendFileUploadDataResponse';\nimport { SendResponse } from '../models/response/sendResponse';\nimport { SubscriptionResponse } from '../models/response/subscriptionResponse';\nimport { SyncResponse } from '../models/response/syncResponse';\nimport { TaxInfoResponse } from '../models/response/taxInfoResponse';\nimport { TaxRateResponse } from '../models/response/taxRateResponse';\nimport { TwoFactorAuthenticatorResponse } from '../models/response/twoFactorAuthenticatorResponse';\nimport { TwoFactorDuoResponse } from '../models/response/twoFactorDuoResponse';\nimport { TwoFactorEmailResponse } from '../models/response/twoFactorEmailResponse';\nimport { TwoFactorProviderResponse } from '../models/response/twoFactorProviderResponse';\nimport { TwoFactorRecoverResponse } from '../models/response/twoFactorRescoverResponse';\nimport { TwoFactorWebAuthnResponse } from '../models/response/twoFactorWebAuthnResponse';\nimport { ChallengeResponse } from '../models/response/twoFactorWebAuthnResponse';\nimport { TwoFactorYubiKeyResponse } from '../models/response/twoFactorYubiKeyResponse';\nimport { UserKeyResponse } from '../models/response/userKeyResponse';\n\nimport { SendAccessView } from '../models/view/sendAccessView';\n\nexport class ApiService implements ApiServiceAbstraction {\n urlsSet: boolean = false;\n apiBaseUrl: string;\n identityBaseUrl: string;\n eventsBaseUrl: string;\n\n private device: DeviceType;\n private deviceType: string;\n private isWebClient = false;\n private isDesktopClient = false;\n private usingBaseUrl = false;\n\n constructor(private tokenService: TokenService, private platformUtilsService: PlatformUtilsService,\n private logoutCallback: (expired: boolean) => Promise, private customUserAgent: string = null) {\n this.device = platformUtilsService.getDevice();\n this.deviceType = this.device.toString();\n this.isWebClient = this.device === DeviceType.IEBrowser || this.device === DeviceType.ChromeBrowser ||\n this.device === DeviceType.EdgeBrowser || this.device === DeviceType.FirefoxBrowser ||\n this.device === DeviceType.OperaBrowser || this.device === DeviceType.SafariBrowser ||\n this.device === DeviceType.UnknownBrowser || this.device === DeviceType.VivaldiBrowser;\n this.isDesktopClient = this.device === DeviceType.WindowsDesktop || this.device === DeviceType.MacOsDesktop ||\n this.device === DeviceType.LinuxDesktop;\n }\n\n setUrls(urls: EnvironmentUrls): void {\n this.urlsSet = true;\n\n if (urls.base != null) {\n this.usingBaseUrl = true;\n this.apiBaseUrl = urls.base + '/api';\n this.identityBaseUrl = urls.base + '/identity';\n this.eventsBaseUrl = urls.base + '/events';\n return;\n }\n\n this.apiBaseUrl = urls.api;\n this.identityBaseUrl = urls.identity;\n this.eventsBaseUrl = urls.events;\n\n // Production\n if (this.apiBaseUrl == null) {\n this.apiBaseUrl = 'https://api.bitwarden.com';\n }\n if (this.identityBaseUrl == null) {\n this.identityBaseUrl = 'https://identity.bitwarden.com';\n }\n if (this.eventsBaseUrl == null) {\n this.eventsBaseUrl = 'https://events.bitwarden.com';\n }\n }\n\n // Auth APIs\n\n async postIdentityToken(request: TokenRequest): Promise {\n const headers = new Headers({\n 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',\n 'Accept': 'application/json',\n 'Device-Type': this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set('User-Agent', this.customUserAgent);\n }\n const response = await this.fetch(new Request(this.identityBaseUrl + '/connect/token', {\n body: this.qsStringify(request.toIdentityToken(request.clientId ?? this.platformUtilsService.identityClientId)),\n credentials: this.getCredentials(),\n cache: 'no-store',\n headers: headers,\n method: 'POST',\n }));\n\n let responseJson: any = null;\n if (this.isJsonResponse(response)) {\n responseJson = await response.json();\n }\n\n if (responseJson != null) {\n if (response.status === 200) {\n return new IdentityTokenResponse(responseJson);\n } else if (response.status === 400 && responseJson.TwoFactorProviders2 &&\n Object.keys(responseJson.TwoFactorProviders2).length) {\n await this.tokenService.clearTwoFactorToken(request.email);\n return new IdentityTwoFactorResponse(responseJson);\n }\n }\n\n return Promise.reject(new ErrorResponse(responseJson, response.status, true));\n }\n\n async refreshIdentityToken(): Promise {\n try {\n await this.doRefreshToken();\n } catch (e) {\n return Promise.reject(null);\n }\n }\n\n // Account APIs\n\n async getProfile(): Promise {\n const r = await this.send('GET', '/accounts/profile', null, true, true);\n return new ProfileResponse(r);\n }\n\n async getUserBilling(): Promise {\n const r = await this.send('GET', '/accounts/billing', null, true, true);\n return new BillingResponse(r);\n }\n\n async getUserSubscription(): Promise {\n const r = await this.send('GET', '/accounts/subscription', null, true, true);\n return new SubscriptionResponse(r);\n }\n\n async getTaxInfo(): Promise {\n const r = await this.send('GET', '/accounts/tax', null, true, true);\n return new TaxInfoResponse(r);\n }\n\n async putProfile(request: UpdateProfileRequest): Promise {\n const r = await this.send('PUT', '/accounts/profile', request, true, true);\n return new ProfileResponse(r);\n }\n\n putTaxInfo(request: TaxInfoUpdateRequest): Promise {\n return this.send('PUT', '/accounts/tax', request, true, false);\n }\n\n async postPrelogin(request: PreloginRequest): Promise {\n const r = await this.send('POST', '/accounts/prelogin', request, false, true);\n return new PreloginResponse(r);\n }\n\n postEmailToken(request: EmailTokenRequest): Promise {\n return this.send('POST', '/accounts/email-token', request, true, false);\n }\n\n postEmail(request: EmailRequest): Promise {\n return this.send('POST', '/accounts/email', request, true, false);\n }\n\n postPassword(request: PasswordRequest): Promise {\n return this.send('POST', '/accounts/password', request, true, false);\n }\n\n setPassword(request: SetPasswordRequest): Promise {\n return this.send('POST', '/accounts/set-password', request, true, false);\n }\n\n postSecurityStamp(request: PasswordVerificationRequest): Promise {\n return this.send('POST', '/accounts/security-stamp', request, true, false);\n }\n\n deleteAccount(request: PasswordVerificationRequest): Promise {\n return this.send('DELETE', '/accounts', request, true, false);\n }\n\n async getAccountRevisionDate(): Promise {\n const r = await this.send('GET', '/accounts/revision-date', null, true, true);\n return r as number;\n }\n\n postPasswordHint(request: PasswordHintRequest): Promise {\n return this.send('POST', '/accounts/password-hint', request, false, false);\n }\n\n postRegister(request: RegisterRequest): Promise {\n return this.send('POST', '/accounts/register', request, false, false);\n }\n\n async postPremium(data: FormData): Promise {\n const r = await this.send('POST', '/accounts/premium', data, true, true);\n return new PaymentResponse(r);\n }\n\n async postIapCheck(request: IapCheckRequest): Promise {\n return this.send('POST', '/accounts/iap-check', request, true, false);\n }\n\n postReinstatePremium(): Promise {\n return this.send('POST', '/accounts/reinstate-premium', null, true, false);\n }\n\n postCancelPremium(): Promise {\n return this.send('POST', '/accounts/cancel-premium', null, true, false);\n }\n\n async postAccountStorage(request: StorageRequest): Promise {\n const r = await this.send('POST', '/accounts/storage', request, true, true);\n return new PaymentResponse(r);\n }\n\n postAccountPayment(request: PaymentRequest): Promise {\n return this.send('POST', '/accounts/payment', request, true, false);\n }\n\n postAccountLicense(data: FormData): Promise {\n return this.send('POST', '/accounts/license', data, true, false);\n }\n\n postAccountKeys(request: KeysRequest): Promise {\n return this.send('POST', '/accounts/keys', request, true, false);\n }\n\n postAccountKey(request: UpdateKeyRequest): Promise {\n return this.send('POST', '/accounts/key', request, true, false);\n }\n\n postAccountVerifyEmail(): Promise {\n return this.send('POST', '/accounts/verify-email', null, true, false);\n }\n\n postAccountVerifyEmailToken(request: VerifyEmailRequest): Promise {\n return this.send('POST', '/accounts/verify-email-token', request, false, false);\n }\n\n postAccountVerifyPassword(request: PasswordVerificationRequest): Promise {\n return this.send('POST', '/accounts/verify-password', request, true, false);\n }\n\n postAccountRecoverDelete(request: DeleteRecoverRequest): Promise {\n return this.send('POST', '/accounts/delete-recover', request, false, false);\n }\n\n postAccountRecoverDeleteToken(request: VerifyDeleteRecoverRequest): Promise {\n return this.send('POST', '/accounts/delete-recover-token', request, false, false);\n }\n\n postAccountKdf(request: KdfRequest): Promise {\n return this.send('POST', '/accounts/kdf', request, true, false);\n }\n\n async getEnterprisePortalSignInToken(): Promise {\n const r = await this.send('GET', '/accounts/enterprise-portal-signin-token', null, true, true);\n return r as string;\n }\n\n async deleteSsoUser(organizationId: string): Promise {\n return this.send('DELETE', '/accounts/sso/' + organizationId, null, true, false);\n }\n\n async getSsoUserIdentifier(): Promise {\n return this.send('GET', '/accounts/sso/user-identifier', null, true, true);\n }\n\n async postUserApiKey(id: string, request: PasswordVerificationRequest): Promise {\n const r = await this.send('POST', '/accounts/api-key', request, true, true);\n return new ApiKeyResponse(r);\n }\n\n async postUserRotateApiKey(id: string, request: PasswordVerificationRequest): Promise {\n const r = await this.send('POST', '/accounts/rotate-api-key', request, true, true);\n return new ApiKeyResponse(r);\n }\n\n // Folder APIs\n\n async getFolder(id: string): Promise {\n const r = await this.send('GET', '/folders/' + id, null, true, true);\n return new FolderResponse(r);\n }\n\n async postFolder(request: FolderRequest): Promise {\n const r = await this.send('POST', '/folders', request, true, true);\n return new FolderResponse(r);\n }\n\n async putFolder(id: string, request: FolderRequest): Promise {\n const r = await this.send('PUT', '/folders/' + id, request, true, true);\n return new FolderResponse(r);\n }\n\n deleteFolder(id: string): Promise {\n return this.send('DELETE', '/folders/' + id, null, true, false);\n }\n\n // Send APIs\n\n async getSend(id: string): Promise {\n const r = await this.send('GET', '/sends/' + id, null, true, true);\n return new SendResponse(r);\n }\n\n async postSendAccess(id: string, request: SendAccessRequest, apiUrl?: string): Promise {\n const r = await this.send('POST', '/sends/access/' + id, request, false, true, apiUrl);\n return new SendAccessResponse(r);\n }\n\n\n async getSendFileDownloadData(send: SendAccessView, request: SendAccessRequest, apiUrl?: string): Promise {\n const r = await this.send('POST', '/sends/' + send.id + '/access/file/' + send.file.id, request, false, true, apiUrl);\n return new SendFileDownloadDataResponse(r);\n }\n\n async getSends(): Promise> {\n const r = await this.send('GET', '/sends', null, true, true);\n return new ListResponse(r, SendResponse);\n }\n\n async postSend(request: SendRequest): Promise {\n const r = await this.send('POST', '/sends', request, true, true);\n return new SendResponse(r);\n }\n\n async postFileTypeSend(request: SendRequest): Promise {\n const r = await this.send('POST', '/sends/file/v2', request, true, true);\n return new SendFileUploadDataResponse(r);\n }\n\n async renewSendFileUploadUrl(sendId: string, fileId: string): Promise {\n const r = await this.send('GET', '/sends/' + sendId + '/file/' + fileId, null, true, true);\n return new SendFileUploadDataResponse(r);\n }\n\n postSendFile(sendId: string, fileId: string, data: FormData): Promise {\n return this.send('POST', '/sends/' + sendId + '/file/' + fileId, data, true, false);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async postSendFileLegacy(data: FormData): Promise {\n const r = await this.send('POST', '/sends/file', data, true, true);\n return new SendResponse(r);\n }\n\n async putSend(id: string, request: SendRequest): Promise {\n const r = await this.send('PUT', '/sends/' + id, request, true, true);\n return new SendResponse(r);\n }\n\n async putSendRemovePassword(id: string): Promise {\n const r = await this.send('PUT', '/sends/' + id + '/remove-password', null, true, true);\n return new SendResponse(r);\n }\n\n deleteSend(id: string): Promise {\n return this.send('DELETE', '/sends/' + id, null, true, false);\n }\n\n // Cipher APIs\n\n async getCipher(id: string): Promise {\n const r = await this.send('GET', '/ciphers/' + id, null, true, true);\n return new CipherResponse(r);\n }\n\n async getCipherAdmin(id: string): Promise {\n const r = await this.send('GET', '/ciphers/' + id + '/admin', null, true, true);\n return new CipherResponse(r);\n }\n\n async getCiphersOrganization(organizationId: string): Promise> {\n const r = await this.send('GET', '/ciphers/organization-details?organizationId=' + organizationId,\n null, true, true);\n return new ListResponse(r, CipherResponse);\n }\n\n async postCipher(request: CipherRequest): Promise {\n const r = await this.send('POST', '/ciphers', request, true, true);\n return new CipherResponse(r);\n }\n\n async postCipherCreate(request: CipherCreateRequest): Promise {\n const r = await this.send('POST', '/ciphers/create', request, true, true);\n return new CipherResponse(r);\n }\n\n async postCipherAdmin(request: CipherCreateRequest): Promise {\n const r = await this.send('POST', '/ciphers/admin', request, true, true);\n return new CipherResponse(r);\n }\n\n async putCipher(id: string, request: CipherRequest): Promise {\n const r = await this.send('PUT', '/ciphers/' + id, request, true, true);\n return new CipherResponse(r);\n }\n\n async putCipherAdmin(id: string, request: CipherRequest): Promise {\n const r = await this.send('PUT', '/ciphers/' + id + '/admin', request, true, true);\n return new CipherResponse(r);\n }\n\n deleteCipher(id: string): Promise {\n return this.send('DELETE', '/ciphers/' + id, null, true, false);\n }\n\n deleteCipherAdmin(id: string): Promise {\n return this.send('DELETE', '/ciphers/' + id + '/admin', null, true, false);\n }\n\n deleteManyCiphers(request: CipherBulkDeleteRequest): Promise {\n return this.send('DELETE', '/ciphers', request, true, false);\n }\n\n deleteManyCiphersAdmin(request: CipherBulkDeleteRequest): Promise {\n return this.send('DELETE', '/ciphers/admin', request, true, false);\n }\n\n putMoveCiphers(request: CipherBulkMoveRequest): Promise {\n return this.send('PUT', '/ciphers/move', request, true, false);\n }\n\n async putShareCipher(id: string, request: CipherShareRequest): Promise {\n const r = await this.send('PUT', '/ciphers/' + id + '/share', request, true, true);\n return new CipherResponse(r);\n }\n\n putShareCiphers(request: CipherBulkShareRequest): Promise {\n return this.send('PUT', '/ciphers/share', request, true, false);\n }\n\n putCipherCollections(id: string, request: CipherCollectionsRequest): Promise {\n return this.send('PUT', '/ciphers/' + id + '/collections', request, true, false);\n }\n\n putCipherCollectionsAdmin(id: string, request: CipherCollectionsRequest): Promise {\n return this.send('PUT', '/ciphers/' + id + '/collections-admin', request, true, false);\n }\n\n postPurgeCiphers(request: PasswordVerificationRequest, organizationId: string = null): Promise {\n let path = '/ciphers/purge';\n if (organizationId != null) {\n path += '?organizationId=' + organizationId;\n }\n return this.send('POST', path, request, true, false);\n }\n\n postImportCiphers(request: ImportCiphersRequest): Promise {\n return this.send('POST', '/ciphers/import', request, true, false);\n }\n\n postImportOrganizationCiphers(organizationId: string, request: ImportOrganizationCiphersRequest): Promise {\n return this.send('POST', '/ciphers/import-organization?organizationId=' + organizationId, request, true, false);\n }\n\n putDeleteCipher(id: string): Promise {\n return this.send('PUT', '/ciphers/' + id + '/delete', null, true, false);\n }\n\n putDeleteCipherAdmin(id: string): Promise {\n return this.send('PUT', '/ciphers/' + id + '/delete-admin', null, true, false);\n }\n\n putDeleteManyCiphers(request: CipherBulkDeleteRequest): Promise {\n return this.send('PUT', '/ciphers/delete', request, true, false);\n }\n\n putDeleteManyCiphersAdmin(request: CipherBulkDeleteRequest): Promise {\n return this.send('PUT', '/ciphers/delete-admin', request, true, false);\n }\n\n async putRestoreCipher(id: string): Promise {\n const r = await this.send('PUT', '/ciphers/' + id + '/restore', null, true, true);\n return new CipherResponse(r);\n }\n\n async putRestoreCipherAdmin(id: string): Promise {\n const r = await this.send('PUT', '/ciphers/' + id + '/restore-admin', null, true, true);\n return new CipherResponse(r);\n }\n\n async putRestoreManyCiphers(request: CipherBulkDeleteRequest): Promise> {\n const r = await this.send('PUT', '/ciphers/restore', request, true, true);\n return new ListResponse(r, CipherResponse);\n }\n\n // Attachments APIs\n\n async getAttachmentData(cipherId: string, attachmentId: string, emergencyAccessId?: string): Promise {\n const path = (emergencyAccessId != null ?\n '/emergency-access/' + emergencyAccessId + '/' :\n '/ciphers/') + cipherId + '/attachment/' + attachmentId;\n const r = await this.send('GET', path, null, true, true);\n return new AttachmentResponse(r);\n }\n\n async postCipherAttachment(id: string, request: AttachmentRequest): Promise {\n const r = await this.send('POST', '/ciphers/' + id + '/attachment/v2', request, true, true);\n return new AttachmentUploadDataResponse(r);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async postCipherAttachmentLegacy(id: string, data: FormData): Promise {\n const r = await this.send('POST', '/ciphers/' + id + '/attachment', data, true, true);\n return new CipherResponse(r);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async postCipherAttachmentAdminLegacy(id: string, data: FormData): Promise {\n const r = await this.send('POST', '/ciphers/' + id + '/attachment-admin', data, true, true);\n return new CipherResponse(r);\n }\n\n deleteCipherAttachment(id: string, attachmentId: string): Promise {\n return this.send('DELETE', '/ciphers/' + id + '/attachment/' + attachmentId, null, true, false);\n }\n\n deleteCipherAttachmentAdmin(id: string, attachmentId: string): Promise {\n return this.send('DELETE', '/ciphers/' + id + '/attachment/' + attachmentId + '/admin', null, true, false);\n }\n\n postShareCipherAttachment(id: string, attachmentId: string, data: FormData,\n organizationId: string): Promise {\n return this.send('POST', '/ciphers/' + id + '/attachment/' +\n attachmentId + '/share?organizationId=' + organizationId, data, true, false);\n }\n\n async renewAttachmentUploadUrl(id: string, attachmentId: string): Promise {\n const r = await this.send('GET', '/ciphers/' + id + '/attachment/' + attachmentId + '/renew', null, true, true);\n return new AttachmentUploadDataResponse(r);\n }\n\n postAttachmentFile(id: string, attachmentId: string, data: FormData): Promise {\n return this.send('POST', '/ciphers/' + id + '/attachment/' + attachmentId, data, true, false);\n }\n\n // Collections APIs\n\n async getCollectionDetails(organizationId: string, id: string): Promise {\n const r = await this.send('GET', '/organizations/' + organizationId + '/collections/' + id + '/details',\n null, true, true);\n return new CollectionGroupDetailsResponse(r);\n }\n\n async getUserCollections(): Promise> {\n const r = await this.send('GET', '/collections', null, true, true);\n return new ListResponse(r, CollectionResponse);\n }\n\n async getCollections(organizationId: string): Promise> {\n const r = await this.send('GET', '/organizations/' + organizationId + '/collections', null, true, true);\n return new ListResponse(r, CollectionResponse);\n }\n\n async getCollectionUsers(organizationId: string, id: string): Promise {\n const r = await this.send('GET', '/organizations/' + organizationId + '/collections/' + id + '/users',\n null, true, true);\n return r.map((dr: any) => new SelectionReadOnlyResponse(dr));\n }\n\n async postCollection(organizationId: string, request: CollectionRequest): Promise {\n const r = await this.send('POST', '/organizations/' + organizationId + '/collections', request, true, true);\n return new CollectionResponse(r);\n }\n\n async putCollection(organizationId: string, id: string, request: CollectionRequest): Promise {\n const r = await this.send('PUT', '/organizations/' + organizationId + '/collections/' + id,\n request, true, true);\n return new CollectionResponse(r);\n }\n\n async putCollectionUsers(organizationId: string, id: string, request: SelectionReadOnlyRequest[]): Promise {\n await this.send('PUT', '/organizations/' + organizationId + '/collections/' + id + '/users',\n request, true, false);\n }\n\n deleteCollection(organizationId: string, id: string): Promise {\n return this.send('DELETE', '/organizations/' + organizationId + '/collections/' + id, null, true, false);\n }\n\n deleteCollectionUser(organizationId: string, id: string, organizationUserId: string): Promise {\n return this.send('DELETE',\n '/organizations/' + organizationId + '/collections/' + id + '/user/' + organizationUserId,\n null, true, false);\n }\n\n // Groups APIs\n\n async getGroupDetails(organizationId: string, id: string): Promise {\n const r = await this.send('GET', '/organizations/' + organizationId + '/groups/' + id + '/details',\n null, true, true);\n return new GroupDetailsResponse(r);\n }\n\n async getGroups(organizationId: string): Promise> {\n const r = await this.send('GET', '/organizations/' + organizationId + '/groups', null, true, true);\n return new ListResponse(r, GroupResponse);\n }\n\n async getGroupUsers(organizationId: string, id: string): Promise {\n const r = await this.send('GET', '/organizations/' + organizationId + '/groups/' + id + '/users',\n null, true, true);\n return r;\n }\n\n async postGroup(organizationId: string, request: GroupRequest): Promise {\n const r = await this.send('POST', '/organizations/' + organizationId + '/groups', request, true, true);\n return new GroupResponse(r);\n }\n\n async putGroup(organizationId: string, id: string, request: GroupRequest): Promise {\n const r = await this.send('PUT', '/organizations/' + organizationId + '/groups/' + id, request, true, true);\n return new GroupResponse(r);\n }\n\n async putGroupUsers(organizationId: string, id: string, request: string[]): Promise {\n await this.send('PUT', '/organizations/' + organizationId + '/groups/' + id + '/users', request, true, false);\n }\n\n deleteGroup(organizationId: string, id: string): Promise {\n return this.send('DELETE', '/organizations/' + organizationId + '/groups/' + id, null, true, false);\n }\n\n deleteGroupUser(organizationId: string, id: string, organizationUserId: string): Promise {\n return this.send('DELETE',\n '/organizations/' + organizationId + '/groups/' + id + '/user/' + organizationUserId, null, true, false);\n }\n\n // Policy APIs\n\n async getPolicy(organizationId: string, type: PolicyType): Promise {\n const r = await this.send('GET', '/organizations/' + organizationId + '/policies/' + type, null, true, true);\n return new PolicyResponse(r);\n }\n\n async getPolicies(organizationId: string): Promise> {\n const r = await this.send('GET', '/organizations/' + organizationId + '/policies', null, true, true);\n return new ListResponse(r, PolicyResponse);\n }\n\n async getPoliciesByToken(organizationId: string, token: string, email: string, organizationUserId: string):\n Promise> {\n const r = await this.send('GET', '/organizations/' + organizationId + '/policies/token?' +\n 'token=' + encodeURIComponent(token) + '&email=' + encodeURIComponent(email) +\n '&organizationUserId=' + organizationUserId, null, false, true);\n return new ListResponse(r, PolicyResponse);\n }\n\n async putPolicy(organizationId: string, type: PolicyType, request: PolicyRequest): Promise {\n const r = await this.send('PUT', '/organizations/' + organizationId + '/policies/' + type, request, true, true);\n return new PolicyResponse(r);\n }\n\n // Organization User APIs\n\n async getOrganizationUser(organizationId: string, id: string): Promise {\n const r = await this.send('GET', '/organizations/' + organizationId + '/users/' + id, null, true, true);\n return new OrganizationUserDetailsResponse(r);\n }\n\n async getOrganizationUserGroups(organizationId: string, id: string): Promise {\n const r = await this.send('GET', '/organizations/' + organizationId + '/users/' + id + '/groups',\n null, true, true);\n return r;\n }\n\n async getOrganizationUsers(organizationId: string): Promise> {\n const r = await this.send('GET', '/organizations/' + organizationId + '/users', null, true, true);\n return new ListResponse(r, OrganizationUserUserDetailsResponse);\n }\n\n postOrganizationUserInvite(organizationId: string, request: OrganizationUserInviteRequest): Promise {\n return this.send('POST', '/organizations/' + organizationId + '/users/invite', request, true, false);\n }\n\n postOrganizationUserReinvite(organizationId: string, id: string): Promise {\n return this.send('POST', '/organizations/' + organizationId + '/users/' + id + '/reinvite', null, true, false);\n }\n\n postOrganizationUserAccept(organizationId: string, id: string,\n request: OrganizationUserAcceptRequest): Promise {\n return this.send('POST', '/organizations/' + organizationId + '/users/' + id + '/accept', request, true, false);\n }\n\n postOrganizationUserConfirm(organizationId: string, id: string,\n request: OrganizationUserConfirmRequest): Promise {\n return this.send('POST', '/organizations/' + organizationId + '/users/' + id + '/confirm',\n request, true, false);\n }\n\n putOrganizationUser(organizationId: string, id: string, request: OrganizationUserUpdateRequest): Promise {\n return this.send('PUT', '/organizations/' + organizationId + '/users/' + id, request, true, false);\n }\n\n putOrganizationUserGroups(organizationId: string, id: string,\n request: OrganizationUserUpdateGroupsRequest): Promise {\n return this.send('PUT', '/organizations/' + organizationId + '/users/' + id + '/groups', request, true, false);\n }\n\n putOrganizationUserResetPasswordEnrollment(organizationId: string, userId: string,\n request: OrganizationUserResetPasswordEnrollmentRequest): Promise {\n return this.send('PUT', '/organizations/' + organizationId + '/users/' + userId + '/reset-password-enrollment',\n request, true, false);\n }\n\n deleteOrganizationUser(organizationId: string, id: string): Promise {\n return this.send('DELETE', '/organizations/' + organizationId + '/users/' + id, null, true, false);\n }\n\n // Plan APIs\n\n async getPlans(): Promise> {\n const r = await this.send('GET', '/plans/', null, true, true);\n return new ListResponse(r, PlanResponse);\n }\n\n async postImportDirectory(organizationId: string, request: ImportDirectoryRequest): Promise {\n return this.send('POST', '/organizations/' + organizationId + '/import', request, true, false);\n }\n\n async getTaxRates(): Promise> {\n const r = await this.send('GET', '/plans/sales-tax-rates/', null, true, true);\n return new ListResponse(r, TaxRateResponse);\n }\n\n // Settings APIs\n\n async getSettingsDomains(): Promise {\n const r = await this.send('GET', '/settings/domains', null, true, true);\n return new DomainsResponse(r);\n }\n\n async putSettingsDomains(request: UpdateDomainsRequest): Promise {\n const r = await this.send('PUT', '/settings/domains', request, true, true);\n return new DomainsResponse(r);\n }\n\n // Sync APIs\n\n async getSync(): Promise {\n const path = this.isDesktopClient || this.isWebClient ? '/sync?excludeDomains=true' : '/sync';\n const r = await this.send('GET', path, null, true, true);\n return new SyncResponse(r);\n }\n\n // Two-factor APIs\n\n async getTwoFactorProviders(): Promise> {\n const r = await this.send('GET', '/two-factor', null, true, true);\n return new ListResponse(r, TwoFactorProviderResponse);\n }\n\n async getTwoFactorOrganizationProviders(organizationId: string): Promise> {\n const r = await this.send('GET', '/organizations/' + organizationId + '/two-factor', null, true, true);\n return new ListResponse(r, TwoFactorProviderResponse);\n }\n\n async getTwoFactorAuthenticator(request: PasswordVerificationRequest): Promise {\n const r = await this.send('POST', '/two-factor/get-authenticator', request, true, true);\n return new TwoFactorAuthenticatorResponse(r);\n }\n\n async getTwoFactorEmail(request: PasswordVerificationRequest): Promise {\n const r = await this.send('POST', '/two-factor/get-email', request, true, true);\n return new TwoFactorEmailResponse(r);\n }\n\n async getTwoFactorDuo(request: PasswordVerificationRequest): Promise {\n const r = await this.send('POST', '/two-factor/get-duo', request, true, true);\n return new TwoFactorDuoResponse(r);\n }\n\n async getTwoFactorOrganizationDuo(organizationId: string,\n request: PasswordVerificationRequest): Promise {\n const r = await this.send('POST', '/organizations/' + organizationId + '/two-factor/get-duo',\n request, true, true);\n return new TwoFactorDuoResponse(r);\n }\n\n async getTwoFactorYubiKey(request: PasswordVerificationRequest): Promise {\n const r = await this.send('POST', '/two-factor/get-yubikey', request, true, true);\n return new TwoFactorYubiKeyResponse(r);\n }\n\n async getTwoFactorWebAuthn(request: PasswordVerificationRequest): Promise {\n const r = await this.send('POST', '/two-factor/get-webauthn', request, true, true);\n return new TwoFactorWebAuthnResponse(r);\n }\n\n async getTwoFactorWebAuthnChallenge(request: PasswordVerificationRequest): Promise {\n const r = await this.send('POST', '/two-factor/get-webauthn-challenge', request, true, true);\n return new ChallengeResponse(r);\n }\n\n async getTwoFactorRecover(request: PasswordVerificationRequest): Promise {\n const r = await this.send('POST', '/two-factor/get-recover', request, true, true);\n return new TwoFactorRecoverResponse(r);\n }\n\n async putTwoFactorAuthenticator(\n request: UpdateTwoFactorAuthenticatorRequest): Promise {\n const r = await this.send('PUT', '/two-factor/authenticator', request, true, true);\n return new TwoFactorAuthenticatorResponse(r);\n }\n\n async putTwoFactorEmail(request: UpdateTwoFactorEmailRequest): Promise {\n const r = await this.send('PUT', '/two-factor/email', request, true, true);\n return new TwoFactorEmailResponse(r);\n }\n\n async putTwoFactorDuo(request: UpdateTwoFactorDuoRequest): Promise {\n const r = await this.send('PUT', '/two-factor/duo', request, true, true);\n return new TwoFactorDuoResponse(r);\n }\n\n async putTwoFactorOrganizationDuo(organizationId: string,\n request: UpdateTwoFactorDuoRequest): Promise {\n const r = await this.send('PUT', '/organizations/' + organizationId + '/two-factor/duo', request, true, true);\n return new TwoFactorDuoResponse(r);\n }\n\n async putTwoFactorYubiKey(request: UpdateTwoFactorYubioOtpRequest): Promise {\n const r = await this.send('PUT', '/two-factor/yubikey', request, true, true);\n return new TwoFactorYubiKeyResponse(r);\n }\n\n async putTwoFactorWebAuthn(request: UpdateTwoFactorWebAuthnRequest): Promise {\n const response = request.deviceResponse.response as AuthenticatorAttestationResponse;\n const data: any = Object.assign({}, request);\n\n data.deviceResponse = {\n id: request.deviceResponse.id,\n rawId: btoa(request.deviceResponse.id),\n type: request.deviceResponse.type,\n extensions: request.deviceResponse.getClientExtensionResults(),\n response: {\n AttestationObject: Utils.fromBufferToB64(response.attestationObject),\n clientDataJson: Utils.fromBufferToB64(response.clientDataJSON),\n },\n };\n\n const r = await this.send('PUT', '/two-factor/webauthn', data, true, true);\n return new TwoFactorWebAuthnResponse(r);\n }\n\n async deleteTwoFactorWebAuthn(request: UpdateTwoFactorWebAuthnDeleteRequest): Promise {\n const r = await this.send('DELETE', '/two-factor/webauthn', request, true, true);\n return new TwoFactorWebAuthnResponse(r);\n }\n\n async putTwoFactorDisable(request: TwoFactorProviderRequest): Promise {\n const r = await this.send('PUT', '/two-factor/disable', request, true, true);\n return new TwoFactorProviderResponse(r);\n }\n\n async putTwoFactorOrganizationDisable(organizationId: string,\n request: TwoFactorProviderRequest): Promise {\n const r = await this.send('PUT', '/organizations/' + organizationId + '/two-factor/disable',\n request, true, true);\n return new TwoFactorProviderResponse(r);\n }\n\n postTwoFactorRecover(request: TwoFactorRecoveryRequest): Promise {\n return this.send('POST', '/two-factor/recover', request, false, false);\n }\n\n postTwoFactorEmailSetup(request: TwoFactorEmailRequest): Promise {\n return this.send('POST', '/two-factor/send-email', request, true, false);\n }\n\n postTwoFactorEmail(request: TwoFactorEmailRequest): Promise {\n return this.send('POST', '/two-factor/send-email-login', request, false, false);\n }\n\n // Emergency Access APIs\n\n async getEmergencyAccessTrusted(): Promise> {\n const r = await this.send('GET', '/emergency-access/trusted', null, true, true);\n return new ListResponse(r, EmergencyAccessGranteeDetailsResponse);\n }\n\n async getEmergencyAccessGranted(): Promise> {\n const r = await this.send('GET', '/emergency-access/granted', null, true, true);\n return new ListResponse(r, EmergencyAccessGrantorDetailsResponse);\n }\n\n async getEmergencyAccess(id: string): Promise {\n const r = await this.send('GET', '/emergency-access/' + id, null, true, true);\n return new EmergencyAccessGranteeDetailsResponse(r);\n }\n\n async getEmergencyGrantorPolicies(id: string): Promise> {\n const r = await this.send('GET', '/emergency-access/' + id + '/policies', null, true, true);\n return new ListResponse(r, PolicyResponse);\n }\n\n putEmergencyAccess(id: string, request: EmergencyAccessUpdateRequest): Promise {\n return this.send('PUT', '/emergency-access/' + id, request, true, false);\n }\n\n deleteEmergencyAccess(id: string): Promise {\n return this.send('DELETE', '/emergency-access/' + id, null, true, false);\n }\n\n postEmergencyAccessInvite(request: EmergencyAccessInviteRequest): Promise {\n return this.send('POST', '/emergency-access/invite', request, true, false);\n }\n\n postEmergencyAccessReinvite(id: string): Promise {\n return this.send('POST', '/emergency-access/' + id + '/reinvite', null, true, false);\n }\n\n postEmergencyAccessAccept(id: string, request: EmergencyAccessAcceptRequest): Promise {\n return this.send('POST', '/emergency-access/' + id + '/accept', request, true, false);\n }\n\n postEmergencyAccessConfirm(id: string, request: EmergencyAccessConfirmRequest): Promise {\n return this.send('POST', '/emergency-access/' + id + '/confirm', request, true, false);\n }\n\n postEmergencyAccessInitiate(id: string): Promise {\n return this.send('POST', '/emergency-access/' + id + '/initiate', null, true, false);\n }\n\n postEmergencyAccessApprove(id: string): Promise {\n return this.send('POST', '/emergency-access/' + id + '/approve', null, true, false);\n }\n\n postEmergencyAccessReject(id: string): Promise {\n return this.send('POST', '/emergency-access/' + id + '/reject', null, true, false);\n }\n\n async postEmergencyAccessTakeover(id: string): Promise {\n const r = await this.send('POST', '/emergency-access/' + id + '/takeover', null, true, true);\n return new EmergencyAccessTakeoverResponse(r);\n }\n\n async postEmergencyAccessPassword(id: string, request: EmergencyAccessPasswordRequest): Promise {\n const r = await this.send('POST', '/emergency-access/' + id + '/password', request, true, true);\n }\n\n async postEmergencyAccessView(id: string): Promise {\n const r = await this.send('POST', '/emergency-access/' + id + '/view', null, true, true);\n return new EmergencyAccessViewResponse(r);\n }\n\n // Organization APIs\n\n async getOrganization(id: string): Promise {\n const r = await this.send('GET', '/organizations/' + id, null, true, true);\n return new OrganizationResponse(r);\n }\n\n async getOrganizationBilling(id: string): Promise {\n const r = await this.send('GET', '/organizations/' + id + '/billing', null, true, true);\n return new BillingResponse(r);\n }\n\n async getOrganizationSubscription(id: string): Promise {\n const r = await this.send('GET', '/organizations/' + id + '/subscription', null, true, true);\n return new OrganizationSubscriptionResponse(r);\n }\n\n async getOrganizationLicense(id: string, installationId: string): Promise {\n return this.send('GET', '/organizations/' + id + '/license?installationId=' + installationId,\n null, true, true);\n }\n\n async getOrganizationTaxInfo(id: string): Promise {\n const r = await this.send('GET', '/organizations/' + id + '/tax', null, true, true);\n return new TaxInfoResponse(r);\n }\n\n async postOrganization(request: OrganizationCreateRequest): Promise {\n const r = await this.send('POST', '/organizations', request, true, true);\n return new OrganizationResponse(r);\n }\n\n async putOrganization(id: string, request: OrganizationUpdateRequest): Promise {\n const r = await this.send('PUT', '/organizations/' + id, request, true, true);\n return new OrganizationResponse(r);\n }\n\n async putOrganizationTaxInfo(id: string, request: OrganizationTaxInfoUpdateRequest): Promise {\n return this.send('PUT', '/organizations/' + id + '/tax', request, true, false);\n }\n\n postLeaveOrganization(id: string): Promise {\n return this.send('POST', '/organizations/' + id + '/leave', null, true, false);\n }\n\n async postOrganizationLicense(data: FormData): Promise {\n const r = await this.send('POST', '/organizations/license', data, true, true);\n return new OrganizationResponse(r);\n }\n\n async postOrganizationLicenseUpdate(id: string, data: FormData): Promise {\n return this.send('POST', '/organizations/' + id + '/license', data, true, false);\n }\n\n async postOrganizationApiKey(id: string, request: PasswordVerificationRequest): Promise {\n const r = await this.send('POST', '/organizations/' + id + '/api-key', request, true, true);\n return new ApiKeyResponse(r);\n }\n\n async postOrganizationRotateApiKey(id: string, request: PasswordVerificationRequest): Promise {\n const r = await this.send('POST', '/organizations/' + id + '/rotate-api-key', request, true, true);\n return new ApiKeyResponse(r);\n }\n\n async postOrganizationUpgrade(id: string, request: OrganizationUpgradeRequest): Promise {\n const r = await this.send('POST', '/organizations/' + id + '/upgrade', request, true, true);\n return new PaymentResponse(r);\n }\n\n async postOrganizationSeat(id: string, request: SeatRequest): Promise {\n const r = await this.send('POST', '/organizations/' + id + '/seat', request, true, true);\n return new PaymentResponse(r);\n }\n\n async postOrganizationStorage(id: string, request: StorageRequest): Promise {\n const r = await this.send('POST', '/organizations/' + id + '/storage', request, true, true);\n return new PaymentResponse(r);\n }\n\n postOrganizationPayment(id: string, request: PaymentRequest): Promise {\n return this.send('POST', '/organizations/' + id + '/payment', request, true, false);\n }\n\n postOrganizationVerifyBank(id: string, request: VerifyBankRequest): Promise {\n return this.send('POST', '/organizations/' + id + '/verify-bank', request, true, false);\n }\n\n postOrganizationCancel(id: string): Promise {\n return this.send('POST', '/organizations/' + id + '/cancel', null, true, false);\n }\n\n postOrganizationReinstate(id: string): Promise {\n return this.send('POST', '/organizations/' + id + '/reinstate', null, true, false);\n }\n\n deleteOrganization(id: string, request: PasswordVerificationRequest): Promise {\n return this.send('DELETE', '/organizations/' + id, request, true, false);\n }\n\n // Event APIs\n\n async getEvents(start: string, end: string, token: string): Promise> {\n const r = await this.send('GET', this.addEventParameters('/events', start, end, token), null, true, true);\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsCipher(id: string, start: string, end: string,\n token: string): Promise> {\n const r = await this.send('GET', this.addEventParameters('/ciphers/' + id + '/events', start, end, token),\n null, true, true);\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsOrganization(id: string, start: string, end: string,\n token: string): Promise> {\n const r = await this.send('GET', this.addEventParameters('/organizations/' + id + '/events', start, end, token),\n null, true, true);\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsOrganizationUser(organizationId: string, id: string,\n start: string, end: string, token: string): Promise> {\n const r = await this.send('GET',\n this.addEventParameters('/organizations/' + organizationId + '/users/' + id + '/events', start, end, token),\n null, true, true);\n return new ListResponse(r, EventResponse);\n }\n\n async postEventsCollect(request: EventRequest[]): Promise {\n const authHeader = await this.getActiveBearerToken();\n const headers = new Headers({\n 'Device-Type': this.deviceType,\n 'Authorization': 'Bearer ' + authHeader,\n 'Content-Type': 'application/json; charset=utf-8',\n });\n if (this.customUserAgent != null) {\n headers.set('User-Agent', this.customUserAgent);\n }\n const response = await this.fetch(new Request(this.eventsBaseUrl + '/collect', {\n cache: 'no-store',\n credentials: this.getCredentials(),\n method: 'POST',\n body: JSON.stringify(request),\n headers: headers,\n }));\n if (response.status !== 200) {\n return Promise.reject('Event post failed.');\n }\n }\n\n // User APIs\n\n async getUserPublicKey(id: string): Promise {\n const r = await this.send('GET', '/users/' + id + '/public-key', null, true, true);\n return new UserKeyResponse(r);\n }\n\n // HIBP APIs\n\n async getHibpBreach(username: string): Promise {\n const r = await this.send('GET', '/hibp/breach?username=' + username, null, true, true);\n return r.map((a: any) => new BreachAccountResponse(a));\n }\n\n // Misc\n\n async postBitPayInvoice(request: BitPayInvoiceRequest): Promise {\n const r = await this.send('POST', '/bitpay-invoice', request, true, true);\n return r as string;\n }\n\n async postSetupPayment(): Promise {\n const r = await this.send('POST', '/setup-payment', null, true, true);\n return r as string;\n }\n\n // Helpers\n\n async getActiveBearerToken(): Promise {\n let accessToken = await this.tokenService.getToken();\n if (this.tokenService.tokenNeedsRefresh()) {\n const tokenResponse = await this.doRefreshToken();\n accessToken = tokenResponse.accessToken;\n }\n return accessToken;\n }\n\n fetch(request: Request): Promise {\n if (request.method === 'GET') {\n request.headers.set('Cache-Control', 'no-store');\n request.headers.set('Pragma', 'no-cache');\n }\n return this.nativeFetch(request);\n }\n\n nativeFetch(request: Request): Promise {\n return fetch(request);\n }\n\n async preValidateSso(identifier: string): Promise {\n if (identifier == null || identifier === '') {\n throw new Error('Organization Identifier was not provided.');\n }\n const headers = new Headers({\n 'Accept': 'application/json',\n 'Device-Type': this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set('User-Agent', this.customUserAgent);\n }\n\n const path = `/account/prevalidate?domainHint=${encodeURIComponent(identifier)}`;\n const response = await this.fetch(new Request(this.identityBaseUrl + path, {\n cache: 'no-store',\n credentials: this.getCredentials(),\n headers: headers,\n method: 'GET',\n }));\n\n if (response.status === 200) {\n return true;\n } else {\n const error = await this.handleError(response, false, true);\n return Promise.reject(error);\n }\n }\n\n private async send(method: 'GET' | 'POST' | 'PUT' | 'DELETE', path: string, body: any,\n authed: boolean, hasResponse: boolean, apiUrl?: string): Promise {\n apiUrl = Utils.isNullOrWhitespace(apiUrl) ? this.apiBaseUrl : apiUrl;\n const headers = new Headers({\n 'Device-Type': this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set('User-Agent', this.customUserAgent);\n }\n\n const requestInit: RequestInit = {\n cache: 'no-store',\n credentials: this.getCredentials(),\n method: method,\n };\n\n if (authed) {\n const authHeader = await this.getActiveBearerToken();\n headers.set('Authorization', 'Bearer ' + authHeader);\n }\n if (body != null) {\n if (typeof body === 'string') {\n requestInit.body = body;\n headers.set('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');\n } else if (typeof body === 'object') {\n if (body instanceof FormData) {\n requestInit.body = body;\n } else {\n headers.set('Content-Type', 'application/json; charset=utf-8');\n requestInit.body = JSON.stringify(body);\n }\n }\n }\n if (hasResponse) {\n headers.set('Accept', 'application/json');\n }\n\n requestInit.headers = headers;\n const response = await this.fetch(new Request(apiUrl + path, requestInit));\n\n if (hasResponse && response.status === 200) {\n const responseJson = await response.json();\n return responseJson;\n } else if (response.status !== 200) {\n const error = await this.handleError(response, false, authed);\n return Promise.reject(error);\n }\n }\n\n private async handleError(response: Response, tokenError: boolean, authed: boolean): Promise {\n if (authed && ((tokenError && response.status === 400) || response.status === 401 || response.status === 403)) {\n await this.logoutCallback(true);\n return null;\n }\n\n let responseJson: any = null;\n if (this.isJsonResponse(response)) {\n responseJson = await response.json();\n } else if (this.isTextResponse(response)) {\n responseJson = { Message: await response.text() };\n }\n\n return new ErrorResponse(responseJson, response.status, tokenError);\n }\n\n private async doRefreshToken(): Promise {\n const refreshToken = await this.tokenService.getRefreshToken();\n if (refreshToken == null || refreshToken === '') {\n throw new Error();\n }\n const headers = new Headers({\n 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',\n 'Accept': 'application/json',\n 'Device-Type': this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set('User-Agent', this.customUserAgent);\n }\n\n const decodedToken = this.tokenService.decodeToken();\n const response = await this.fetch(new Request(this.identityBaseUrl + '/connect/token', {\n body: this.qsStringify({\n grant_type: 'refresh_token',\n client_id: decodedToken.client_id,\n refresh_token: refreshToken,\n }),\n cache: 'no-store',\n credentials: this.getCredentials(),\n headers: headers,\n method: 'POST',\n }));\n\n if (response.status === 200) {\n const responseJson = await response.json();\n const tokenResponse = new IdentityTokenResponse(responseJson);\n await this.tokenService.setTokens(tokenResponse.accessToken, tokenResponse.refreshToken);\n return tokenResponse;\n } else {\n const error = await this.handleError(response, true, true);\n return Promise.reject(error);\n }\n }\n\n private qsStringify(params: any): string {\n return Object.keys(params).map(key => {\n return encodeURIComponent(key) + '=' + encodeURIComponent(params[key]);\n }).join('&');\n }\n\n private getCredentials(): RequestCredentials {\n if (!this.isWebClient || this.usingBaseUrl) {\n return 'include';\n }\n return undefined;\n }\n\n private addEventParameters(base: string, start: string, end: string, token: string) {\n if (start != null) {\n base += ('?start=' + start);\n }\n if (end != null) {\n base += (base.indexOf('?') > -1 ? '&' : '?');\n base += ('end=' + end);\n }\n if (token != null) {\n base += (base.indexOf('?') > -1 ? '&' : '?');\n base += ('continuationToken=' + token);\n }\n return base;\n }\n\n private isJsonResponse(response: Response): boolean {\n const typeHeader = response.headers.get('content-type');\n return typeHeader != null && typeHeader.indexOf('application/json') > -1;\n }\n\n private isTextResponse(response: Response): boolean {\n const typeHeader = response.headers.get('content-type');\n return typeHeader != null && typeHeader.indexOf('text') > -1;\n }\n}\n","import { BaseResponse } from './baseResponse';\nimport { PlanResponse } from './planResponse';\n\nimport { PlanType } from '../../enums/planType';\n\nexport class OrganizationResponse extends BaseResponse {\n id: string;\n identifier: string;\n name: string;\n businessName: string;\n businessAddress1: string;\n businessAddress2: string;\n businessAddress3: string;\n businessCountry: string;\n businessTaxNumber: string;\n billingEmail: string;\n plan: PlanResponse;\n planType: PlanType;\n seats: number;\n maxCollections: number;\n maxStorageGb: number;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.identifier = this.getResponseProperty('Identifier');\n this.name = this.getResponseProperty('Name');\n this.businessName = this.getResponseProperty('BusinessName');\n this.businessAddress1 = this.getResponseProperty('BusinessAddress1');\n this.businessAddress2 = this.getResponseProperty('BusinessAddress2');\n this.businessAddress3 = this.getResponseProperty('BusinessAddress3');\n this.businessCountry = this.getResponseProperty('BusinessCountry');\n this.businessTaxNumber = this.getResponseProperty('BusinessTaxNumber');\n this.billingEmail = this.getResponseProperty('BillingEmail');\n const plan = this.getResponseProperty('Plan');\n this.plan = plan == null ? null : new PlanResponse(plan);\n this.planType = this.getResponseProperty('PlanType');\n this.seats = this.getResponseProperty('Seats');\n this.maxCollections = this.getResponseProperty('MaxCollections');\n this.maxStorageGb = this.getResponseProperty('MaxStorageGb');\n this.useGroups = this.getResponseProperty('UseGroups');\n this.useDirectory = this.getResponseProperty('UseDirectory');\n this.useEvents = this.getResponseProperty('UseEvents');\n this.useTotp = this.getResponseProperty('UseTotp');\n this.use2fa = this.getResponseProperty('Use2fa');\n this.useApi = this.getResponseProperty('UseApi');\n }\n}\n","import { PlanType } from '../../enums/planType';\nimport { ProductType } from '../../enums/productType';\n\nimport { BaseResponse } from './baseResponse';\n\nexport class PlanResponse extends BaseResponse {\n type: PlanType;\n product: ProductType;\n name: string;\n isAnnual: boolean;\n nameLocalizationKey: string;\n descriptionLocalizationKey: string;\n canBeUsedByBusiness: boolean;\n baseSeats: number;\n baseStorageGb: number;\n maxCollections: number;\n maxUsers: number;\n\n hasAdditionalSeatsOption: boolean;\n maxAdditionalSeats: number;\n hasAdditionalStorageOption: boolean;\n maxAdditionalStorage: number;\n hasPremiumAccessOption: boolean;\n trialPeriodDays: number;\n\n hasSelfHost: boolean;\n hasPolicies: boolean;\n hasGroups: boolean;\n hasDirectory: boolean;\n hasEvents: boolean;\n hasTotp: boolean;\n has2fa: boolean;\n hasApi: boolean;\n hasSso: boolean;\n usersGetPremium: boolean;\n\n upgradeSortOrder: number;\n displaySortOrder: number;\n legacyYear: number;\n disabled: boolean;\n\n stripePlanId: string;\n stripeSeatPlanId: string;\n stripeStoragePlanId: string;\n stripePremiumAccessPlanId: string;\n basePrice: number;\n seatPrice: number;\n additionalStoragePricePerGb: number;\n premiumAccessOptionPrice: number;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty('Type');\n this.product = this.getResponseProperty('Product');\n this.name = this.getResponseProperty('Name');\n this.isAnnual = this.getResponseProperty('IsAnnual');\n this.nameLocalizationKey = this.getResponseProperty('NameLocalizationKey');\n this.descriptionLocalizationKey = this.getResponseProperty('DescriptionLocalizationKey');\n this.canBeUsedByBusiness = this.getResponseProperty('CanBeUsedByBusiness');\n this.baseSeats = this.getResponseProperty('BaseSeats');\n this.baseStorageGb = this.getResponseProperty('BaseStorageGb');\n this.maxCollections = this.getResponseProperty('MaxCollections');\n this.maxUsers = this.getResponseProperty('MaxUsers');\n this.hasAdditionalSeatsOption = this.getResponseProperty('HasAdditionalSeatsOption');\n this.maxAdditionalSeats = this.getResponseProperty('MaxAdditionalSeats');\n this.hasAdditionalStorageOption = this.getResponseProperty('HasAdditionalStorageOption');\n this.maxAdditionalStorage = this.getResponseProperty('MaxAdditionalStorage');\n this.hasPremiumAccessOption = this.getResponseProperty('HasPremiumAccessOption');\n this.trialPeriodDays = this.getResponseProperty('TrialPeriodDays');\n this.hasSelfHost = this.getResponseProperty('HasSelfHost');\n this.hasPolicies = this.getResponseProperty('HasPolicies');\n this.hasGroups = this.getResponseProperty('HasGroups');\n this.hasDirectory = this.getResponseProperty('HasDirectory');\n this.hasEvents = this.getResponseProperty('HasEvents');\n this.hasTotp = this.getResponseProperty('HasTotp');\n this.has2fa = this.getResponseProperty('Has2fa');\n this.hasApi = this.getResponseProperty('HasApi');\n this.hasSso = this.getResponseProperty('HasSso');\n this.usersGetPremium = this.getResponseProperty('UsersGetPremium');\n this.upgradeSortOrder = this.getResponseProperty('UpgradeSortOrder');\n this.displaySortOrder = this.getResponseProperty('SortOrder');\n this.legacyYear = this.getResponseProperty('LegacyYear');\n this.disabled = this.getResponseProperty('Disabled');\n this.stripePlanId = this.getResponseProperty('StripePlanId');\n this.stripeSeatPlanId = this.getResponseProperty('StripeSeatPlanId');\n this.stripeStoragePlanId = this.getResponseProperty('StripeStoragePlanId');\n this.stripePremiumAccessPlanId = this.getResponseProperty('StripePremiumAccessPlanId');\n this.basePrice = this.getResponseProperty('BasePrice');\n this.seatPrice = this.getResponseProperty('SeatPrice');\n this.additionalStoragePricePerGb = this.getResponseProperty('AdditionalStoragePricePerGb');\n this.premiumAccessOptionPrice = this.getResponseProperty('PremiumAccessOptionPrice');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class SubscriptionResponse extends BaseResponse {\n storageName: string;\n storageGb: number;\n maxStorageGb: number;\n subscription: BillingSubscriptionResponse;\n upcomingInvoice: BillingSubscriptionUpcomingInvoiceResponse;\n license: any;\n expiration: string;\n usingInAppPurchase: boolean;\n\n constructor(response: any) {\n super(response);\n this.storageName = this.getResponseProperty('StorageName');\n this.storageGb = this.getResponseProperty('StorageGb');\n this.maxStorageGb = this.getResponseProperty('MaxStorageGb');\n this.license = this.getResponseProperty('License');\n this.expiration = this.getResponseProperty('Expiration');\n this.usingInAppPurchase = this.getResponseProperty('UsingInAppPurchase');\n const subscription = this.getResponseProperty('Subscription');\n const upcomingInvoice = this.getResponseProperty('UpcomingInvoice');\n this.subscription = subscription == null ? null : new BillingSubscriptionResponse(subscription);\n this.upcomingInvoice = upcomingInvoice == null ? null :\n new BillingSubscriptionUpcomingInvoiceResponse(upcomingInvoice);\n }\n}\n\nexport class BillingSubscriptionResponse extends BaseResponse {\n trialStartDate: string;\n trialEndDate: string;\n periodStartDate: string;\n periodEndDate: string;\n cancelledDate: string;\n cancelAtEndDate: boolean;\n status: string;\n cancelled: boolean;\n items: BillingSubscriptionItemResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.trialEndDate = this.getResponseProperty('TrialStartDate');\n this.trialEndDate = this.getResponseProperty('TrialEndDate');\n this.periodStartDate = this.getResponseProperty('PeriodStartDate');\n this.periodEndDate = this.getResponseProperty('PeriodEndDate');\n this.cancelledDate = this.getResponseProperty('CancelledDate');\n this.cancelAtEndDate = this.getResponseProperty('CancelAtEndDate');\n this.status = this.getResponseProperty('Status');\n this.cancelled = this.getResponseProperty('Cancelled');\n const items = this.getResponseProperty('Items');\n if (items != null) {\n this.items = items.map((i: any) => new BillingSubscriptionItemResponse(i));\n }\n }\n}\n\nexport class BillingSubscriptionItemResponse extends BaseResponse {\n name: string;\n amount: number;\n quantity: number;\n interval: string;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty('Name');\n this.amount = this.getResponseProperty('Amount');\n this.quantity = this.getResponseProperty('Quantity');\n this.interval = this.getResponseProperty('Interval');\n }\n}\n\nexport class BillingSubscriptionUpcomingInvoiceResponse extends BaseResponse {\n date: string;\n amount: number;\n\n constructor(response: any) {\n super(response);\n this.date = this.getResponseProperty('Date');\n this.amount = this.getResponseProperty('Amount');\n }\n}\n","import { Utils } from '../../misc/utils';\nimport { BaseResponse } from './baseResponse';\n\nexport class TwoFactorWebAuthnResponse extends BaseResponse {\n enabled: boolean;\n keys: KeyResponse[];\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty('Enabled');\n const keys = this.getResponseProperty('Keys');\n this.keys = keys == null ? null : keys.map((k: any) => new KeyResponse(k));\n }\n}\n\nexport class KeyResponse extends BaseResponse {\n name: string;\n id: number;\n migrated: boolean;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty('Name');\n this.id = this.getResponseProperty('Id');\n this.migrated = this.getResponseProperty('Migrated');\n }\n}\n\nexport class ChallengeResponse extends BaseResponse implements PublicKeyCredentialCreationOptions {\n attestation?: AttestationConveyancePreference;\n authenticatorSelection?: AuthenticatorSelectionCriteria;\n challenge: BufferSource;\n excludeCredentials?: PublicKeyCredentialDescriptor[];\n extensions?: AuthenticationExtensionsClientInputs;\n pubKeyCredParams: PublicKeyCredentialParameters[];\n rp: PublicKeyCredentialRpEntity;\n timeout?: number;\n user: PublicKeyCredentialUserEntity;\n\n constructor(response: any) {\n super(response);\n this.attestation = this.getResponseProperty('attestation');\n this.authenticatorSelection = this.getResponseProperty('authenticatorSelection');\n this.challenge = Utils.fromUrlB64ToArray(this.getResponseProperty('challenge'));\n this.excludeCredentials = this.getResponseProperty('excludeCredentials').map((c: any) => {\n c.id = Utils.fromUrlB64ToArray(c.id).buffer;\n return c;\n });\n this.extensions = this.getResponseProperty('extensions');\n this.pubKeyCredParams = this.getResponseProperty('pubKeyCredParams');\n this.rp = this.getResponseProperty('rp');\n this.timeout = this.getResponseProperty('timeout');\n\n const user = this.getResponseProperty('user');\n user.id = Utils.fromUrlB64ToArray(user.id);\n\n this.user = user;\n }\n}\n","import { Utils } from '../misc/utils';\n\nimport { AppIdService as AppIdServiceAbstraction } from '../abstractions/appId.service';\nimport { StorageService } from '../abstractions/storage.service';\n\nexport class AppIdService implements AppIdServiceAbstraction {\n constructor(private storageService: StorageService) {\n }\n\n getAppId(): Promise {\n return this.makeAndGetAppId('appId');\n }\n\n getAnonymousAppId(): Promise {\n return this.makeAndGetAppId('anonymousAppId');\n }\n\n private async makeAndGetAppId(key: string) {\n const existingId = await this.storageService.get(key);\n if (existingId != null) {\n return existingId;\n }\n\n const guid = Utils.newGuid();\n await this.storageService.save(key, guid);\n return guid;\n }\n}\n","import { ApiService } from '../abstractions/api.service';\nimport { AuditService as AuditServiceAbstraction } from '../abstractions/audit.service';\nimport { CryptoFunctionService } from '../abstractions/cryptoFunction.service';\n\nimport { throttle } from '../misc/throttle';\nimport { Utils } from '../misc/utils';\n\nimport { BreachAccountResponse } from '../models/response/breachAccountResponse';\nimport { ErrorResponse } from '../models/response/errorResponse';\n\nconst PwnedPasswordsApi = 'https://api.pwnedpasswords.com/range/';\n\nexport class AuditService implements AuditServiceAbstraction {\n constructor(private cryptoFunctionService: CryptoFunctionService, private apiService: ApiService) { }\n\n @throttle(100, () => 'passwordLeaked')\n async passwordLeaked(password: string): Promise {\n const hashBytes = await this.cryptoFunctionService.hash(password, 'sha1');\n const hash = Utils.fromBufferToHex(hashBytes).toUpperCase();\n const hashStart = hash.substr(0, 5);\n const hashEnding = hash.substr(5);\n\n const response = await this.apiService.nativeFetch(new Request(PwnedPasswordsApi + hashStart));\n const leakedHashes = await response.text();\n const match = leakedHashes.split(/\\r?\\n/).find(v => {\n return v.split(':')[0] === hashEnding;\n });\n\n return match != null ? parseInt(match.split(':')[1], 10) : 0;\n }\n\n async breachedAccounts(username: string): Promise {\n try {\n return await this.apiService.getHibpBreach(username);\n } catch (e) {\n const error = e as ErrorResponse;\n if (error.statusCode === 404) {\n return [];\n }\n throw new Error();\n }\n }\n}\n","import { CipherType } from '../enums/cipherType';\nimport { FieldType } from '../enums/fieldType';\nimport { UriMatchType } from '../enums/uriMatchType';\n\nimport { CipherData } from '../models/data/cipherData';\n\nimport { Attachment } from '../models/domain/attachment';\nimport { Card } from '../models/domain/card';\nimport { Cipher } from '../models/domain/cipher';\nimport Domain from '../models/domain/domainBase';\nimport { EncArrayBuffer } from '../models/domain/encArrayBuffer';\nimport { EncString } from '../models/domain/encString';\nimport { Field } from '../models/domain/field';\nimport { Identity } from '../models/domain/identity';\nimport { Login } from '../models/domain/login';\nimport { LoginUri } from '../models/domain/loginUri';\nimport { Password } from '../models/domain/password';\nimport { SecureNote } from '../models/domain/secureNote';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nimport { AttachmentRequest } from '../models/request/attachmentRequest';\nimport { CipherBulkDeleteRequest } from '../models/request/cipherBulkDeleteRequest';\nimport { CipherBulkMoveRequest } from '../models/request/cipherBulkMoveRequest';\nimport { CipherBulkRestoreRequest } from '../models/request/cipherBulkRestoreRequest';\nimport { CipherBulkShareRequest } from '../models/request/cipherBulkShareRequest';\nimport { CipherCollectionsRequest } from '../models/request/cipherCollectionsRequest';\nimport { CipherCreateRequest } from '../models/request/cipherCreateRequest';\nimport { CipherRequest } from '../models/request/cipherRequest';\nimport { CipherShareRequest } from '../models/request/cipherShareRequest';\n\nimport { CipherResponse } from '../models/response/cipherResponse';\nimport { ErrorResponse } from '../models/response/errorResponse';\n\nimport { AttachmentView } from '../models/view/attachmentView';\nimport { CipherView } from '../models/view/cipherView';\nimport { FieldView } from '../models/view/fieldView';\nimport { PasswordHistoryView } from '../models/view/passwordHistoryView';\nimport { View } from '../models/view/view';\n\nimport { SortedCiphersCache } from '../models/domain/sortedCiphersCache';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { CipherService as CipherServiceAbstraction } from '../abstractions/cipher.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { FileUploadService } from '../abstractions/fileUpload.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport { SearchService } from '../abstractions/search.service';\nimport { SettingsService } from '../abstractions/settings.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\n\nimport { ConstantsService } from './constants.service';\n\nimport { sequentialize } from '../misc/sequentialize';\nimport { Utils } from '../misc/utils';\n\nconst Keys = {\n ciphersPrefix: 'ciphers_',\n localData: 'sitesLocalData',\n neverDomains: 'neverDomains',\n};\n\nconst DomainMatchBlacklist = new Map>([\n ['google.com', new Set(['script.google.com'])],\n]);\n\nexport class CipherService implements CipherServiceAbstraction {\n // tslint:disable-next-line\n _decryptedCipherCache: CipherView[];\n\n private sortedCiphersCache: SortedCiphersCache = new SortedCiphersCache(this.sortCiphersByLastUsed);\n\n constructor(private cryptoService: CryptoService, private userService: UserService,\n private settingsService: SettingsService, private apiService: ApiService,\n private fileUploadService: FileUploadService, private storageService: StorageService,\n private i18nService: I18nService, private searchService: () => SearchService) {\n }\n\n get decryptedCipherCache() {\n return this._decryptedCipherCache;\n }\n set decryptedCipherCache(value: CipherView[]) {\n this._decryptedCipherCache = value;\n if (this.searchService != null) {\n if (value == null) {\n this.searchService().clearIndex();\n } else {\n this.searchService().indexCiphers();\n }\n }\n }\n\n clearCache(): void {\n this.decryptedCipherCache = null;\n this.sortedCiphersCache.clear();\n }\n\n async encrypt(model: CipherView, key?: SymmetricCryptoKey, originalCipher: Cipher = null): Promise {\n // Adjust password history\n if (model.id != null) {\n if (originalCipher == null) {\n originalCipher = await this.get(model.id);\n }\n if (originalCipher != null) {\n const existingCipher = await originalCipher.decrypt();\n model.passwordHistory = existingCipher.passwordHistory || [];\n if (model.type === CipherType.Login && existingCipher.type === CipherType.Login) {\n if (existingCipher.login.password != null && existingCipher.login.password !== '' &&\n existingCipher.login.password !== model.login.password) {\n const ph = new PasswordHistoryView();\n ph.password = existingCipher.login.password;\n ph.lastUsedDate = model.login.passwordRevisionDate = new Date();\n model.passwordHistory.splice(0, 0, ph);\n } else {\n model.login.passwordRevisionDate = existingCipher.login.passwordRevisionDate;\n }\n }\n if (existingCipher.hasFields) {\n const existingHiddenFields = existingCipher.fields.filter(f => f.type === FieldType.Hidden &&\n f.name != null && f.name !== '' && f.value != null && f.value !== '');\n const hiddenFields = model.fields == null ? [] :\n model.fields.filter(f => f.type === FieldType.Hidden && f.name != null && f.name !== '');\n existingHiddenFields.forEach(ef => {\n const matchedField = hiddenFields.find(f => f.name === ef.name);\n if (matchedField == null || matchedField.value !== ef.value) {\n const ph = new PasswordHistoryView();\n ph.password = ef.name + ': ' + ef.value;\n ph.lastUsedDate = new Date();\n model.passwordHistory.splice(0, 0, ph);\n }\n });\n }\n }\n if (model.passwordHistory != null && model.passwordHistory.length === 0) {\n model.passwordHistory = null;\n } else if (model.passwordHistory != null && model.passwordHistory.length > 5) {\n // only save last 5 history\n model.passwordHistory = model.passwordHistory.slice(0, 5);\n }\n }\n\n const cipher = new Cipher();\n cipher.id = model.id;\n cipher.folderId = model.folderId;\n cipher.favorite = model.favorite;\n cipher.organizationId = model.organizationId;\n cipher.type = model.type;\n cipher.collectionIds = model.collectionIds;\n cipher.revisionDate = model.revisionDate;\n\n if (key == null && cipher.organizationId != null) {\n key = await this.cryptoService.getOrgKey(cipher.organizationId);\n if (key == null) {\n throw new Error('Cannot encrypt cipher for organization. No key.');\n }\n }\n await Promise.all([\n this.encryptObjProperty(model, cipher, {\n name: null,\n notes: null,\n }, key),\n this.encryptCipherData(cipher, model, key),\n this.encryptFields(model.fields, key).then(fields => {\n cipher.fields = fields;\n }),\n this.encryptPasswordHistories(model.passwordHistory, key).then(ph => {\n cipher.passwordHistory = ph;\n }),\n this.encryptAttachments(model.attachments, key).then(attachments => {\n cipher.attachments = attachments;\n }),\n ]);\n\n return cipher;\n }\n\n async encryptAttachments(attachmentsModel: AttachmentView[], key: SymmetricCryptoKey): Promise {\n if (attachmentsModel == null || attachmentsModel.length === 0) {\n return null;\n }\n\n const promises: Promise[] = [];\n const encAttachments: Attachment[] = [];\n attachmentsModel.forEach(async model => {\n const attachment = new Attachment();\n attachment.id = model.id;\n attachment.size = model.size;\n attachment.sizeName = model.sizeName;\n attachment.url = model.url;\n const promise = this.encryptObjProperty(model, attachment, {\n fileName: null,\n }, key).then(async () => {\n if (model.key != null) {\n attachment.key = await this.cryptoService.encrypt(model.key.key, key);\n }\n encAttachments.push(attachment);\n });\n promises.push(promise);\n });\n\n await Promise.all(promises);\n return encAttachments;\n }\n\n async encryptFields(fieldsModel: FieldView[], key: SymmetricCryptoKey): Promise {\n if (!fieldsModel || !fieldsModel.length) {\n return null;\n }\n\n const self = this;\n const encFields: Field[] = [];\n await fieldsModel.reduce((promise, field) => {\n return promise.then(() => {\n return self.encryptField(field, key);\n }).then((encField: Field) => {\n encFields.push(encField);\n });\n }, Promise.resolve());\n\n return encFields;\n }\n\n async encryptField(fieldModel: FieldView, key: SymmetricCryptoKey): Promise {\n const field = new Field();\n field.type = fieldModel.type;\n // normalize boolean type field values\n if (fieldModel.type === FieldType.Boolean && fieldModel.value !== 'true') {\n fieldModel.value = 'false';\n }\n\n await this.encryptObjProperty(fieldModel, field, {\n name: null,\n value: null,\n }, key);\n\n return field;\n }\n\n async encryptPasswordHistories(phModels: PasswordHistoryView[], key: SymmetricCryptoKey): Promise {\n if (!phModels || !phModels.length) {\n return null;\n }\n\n const self = this;\n const encPhs: Password[] = [];\n await phModels.reduce((promise, ph) => {\n return promise.then(() => {\n return self.encryptPasswordHistory(ph, key);\n }).then((encPh: Password) => {\n encPhs.push(encPh);\n });\n }, Promise.resolve());\n\n return encPhs;\n }\n\n async encryptPasswordHistory(phModel: PasswordHistoryView, key: SymmetricCryptoKey): Promise {\n const ph = new Password();\n ph.lastUsedDate = phModel.lastUsedDate;\n\n await this.encryptObjProperty(phModel, ph, {\n password: null,\n }, key);\n\n return ph;\n }\n\n async get(id: string): Promise {\n const userId = await this.userService.getUserId();\n const localData = await this.storageService.get(Keys.localData);\n const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n Keys.ciphersPrefix + userId);\n if (ciphers == null || !ciphers.hasOwnProperty(id)) {\n return null;\n }\n\n return new Cipher(ciphers[id], false, localData ? localData[id] : null);\n }\n\n async getAll(): Promise {\n const userId = await this.userService.getUserId();\n const localData = await this.storageService.get(Keys.localData);\n const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n Keys.ciphersPrefix + userId);\n const response: Cipher[] = [];\n for (const id in ciphers) {\n if (ciphers.hasOwnProperty(id)) {\n response.push(new Cipher(ciphers[id], false, localData ? localData[id] : null));\n }\n }\n return response;\n }\n\n @sequentialize(() => 'getAllDecrypted')\n async getAllDecrypted(): Promise {\n if (this.decryptedCipherCache != null) {\n const userId = await this.userService.getUserId();\n if ((this.searchService().indexedEntityId ?? userId) !== userId)\n {\n await this.searchService().indexCiphers(userId, this.decryptedCipherCache);\n }\n return this.decryptedCipherCache;\n }\n\n const decCiphers: CipherView[] = [];\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error('No key.');\n }\n\n const promises: any[] = [];\n const ciphers = await this.getAll();\n ciphers.forEach(cipher => {\n promises.push(cipher.decrypt().then(c => decCiphers.push(c)));\n });\n\n await Promise.all(promises);\n decCiphers.sort(this.getLocaleSortingFunction());\n this.decryptedCipherCache = decCiphers;\n return this.decryptedCipherCache;\n }\n\n async getAllDecryptedForGrouping(groupingId: string, folder: boolean = true): Promise {\n const ciphers = await this.getAllDecrypted();\n\n return ciphers.filter(cipher => {\n if (cipher.isDeleted) {\n return false;\n }\n if (folder && cipher.folderId === groupingId) {\n return true;\n } else if (!folder && cipher.collectionIds != null && cipher.collectionIds.indexOf(groupingId) > -1) {\n return true;\n }\n\n return false;\n });\n }\n\n async getAllDecryptedForUrl(url: string, includeOtherTypes?: CipherType[],\n defaultMatch: UriMatchType = null): Promise {\n if (url == null && includeOtherTypes == null) {\n return Promise.resolve([]);\n }\n\n const domain = Utils.getDomain(url);\n const eqDomainsPromise = domain == null ? Promise.resolve([]) :\n this.settingsService.getEquivalentDomains().then((eqDomains: any[][]) => {\n let matches: any[] = [];\n eqDomains.forEach(eqDomain => {\n if (eqDomain.length && eqDomain.indexOf(domain) >= 0) {\n matches = matches.concat(eqDomain);\n }\n });\n\n if (!matches.length) {\n matches.push(domain);\n }\n\n return matches;\n });\n\n const result = await Promise.all([eqDomainsPromise, this.getAllDecrypted()]);\n const matchingDomains = result[0];\n const ciphers = result[1];\n\n if (defaultMatch == null) {\n defaultMatch = await this.storageService.get(ConstantsService.defaultUriMatch);\n if (defaultMatch == null) {\n defaultMatch = UriMatchType.Domain;\n }\n }\n\n return ciphers.filter(cipher => {\n if (cipher.deletedDate != null) {\n return false;\n }\n if (includeOtherTypes != null && includeOtherTypes.indexOf(cipher.type) > -1) {\n return true;\n }\n\n if (url != null && cipher.type === CipherType.Login && cipher.login.uris != null) {\n for (let i = 0; i < cipher.login.uris.length; i++) {\n const u = cipher.login.uris[i];\n if (u.uri == null) {\n continue;\n }\n\n const match = u.match == null ? defaultMatch : u.match;\n switch (match) {\n case UriMatchType.Domain:\n if (domain != null && u.domain != null && matchingDomains.indexOf(u.domain) > -1) {\n if (DomainMatchBlacklist.has(u.domain)) {\n const domainUrlHost = Utils.getHost(url);\n if (!DomainMatchBlacklist.get(u.domain).has(domainUrlHost)) {\n return true;\n }\n } else {\n return true;\n }\n }\n break;\n case UriMatchType.Host:\n const urlHost = Utils.getHost(url);\n if (urlHost != null && urlHost === Utils.getHost(u.uri)) {\n return true;\n }\n break;\n case UriMatchType.Exact:\n if (url === u.uri) {\n return true;\n }\n break;\n case UriMatchType.StartsWith:\n if (url.startsWith(u.uri)) {\n return true;\n }\n break;\n case UriMatchType.RegularExpression:\n try {\n const regex = new RegExp(u.uri, 'i');\n if (regex.test(url)) {\n return true;\n }\n } catch { }\n break;\n case UriMatchType.Never:\n default:\n break;\n }\n }\n }\n\n return false;\n });\n }\n\n async getAllFromApiForOrganization(organizationId: string): Promise {\n const ciphers = await this.apiService.getCiphersOrganization(organizationId);\n if (ciphers != null && ciphers.data != null && ciphers.data.length) {\n const decCiphers: CipherView[] = [];\n const promises: any[] = [];\n ciphers.data.forEach(r => {\n const data = new CipherData(r);\n const cipher = new Cipher(data);\n promises.push(cipher.decrypt().then(c => decCiphers.push(c)));\n });\n await Promise.all(promises);\n decCiphers.sort(this.getLocaleSortingFunction());\n return decCiphers;\n } else {\n return [];\n }\n }\n\n async getLastUsedForUrl(url: string): Promise {\n return this.getCipherForUrl(url, true, false);\n }\n\n async getLastLaunchedForUrl(url: string): Promise {\n return this.getCipherForUrl(url, false, true);\n }\n\n async getNextCipherForUrl(url: string): Promise {\n return this.getCipherForUrl(url, false, false);\n }\n\n updateLastUsedIndexForUrl(url: string) {\n this.sortedCiphersCache.updateLastUsedIndex(url);\n }\n\n async updateLastUsedDate(id: string): Promise {\n let ciphersLocalData = await this.storageService.get(Keys.localData);\n if (!ciphersLocalData) {\n ciphersLocalData = {};\n }\n\n if (ciphersLocalData[id]) {\n ciphersLocalData[id].lastUsedDate = new Date().getTime();\n } else {\n ciphersLocalData[id] = {\n lastUsedDate: new Date().getTime(),\n };\n }\n\n await this.storageService.save(Keys.localData, ciphersLocalData);\n\n if (this.decryptedCipherCache == null) {\n return;\n }\n\n for (let i = 0; i < this.decryptedCipherCache.length; i++) {\n const cached = this.decryptedCipherCache[i];\n if (cached.id === id) {\n cached.localData = ciphersLocalData[id];\n break;\n }\n }\n }\n\n async updateLastLaunchedDate(id: string): Promise {\n let ciphersLocalData = await this.storageService.get(Keys.localData);\n if (!ciphersLocalData) {\n ciphersLocalData = {};\n }\n\n if (ciphersLocalData[id]) {\n ciphersLocalData[id].lastLaunched = new Date().getTime();\n } else {\n ciphersLocalData[id] = {\n lastUsedDate: new Date().getTime(),\n };\n }\n\n await this.storageService.save(Keys.localData, ciphersLocalData);\n\n if (this.decryptedCipherCache == null) {\n return;\n }\n\n for (let i = 0; i < this.decryptedCipherCache.length; i++) {\n const cached = this.decryptedCipherCache[i];\n if (cached.id === id) {\n cached.localData = ciphersLocalData[id];\n break;\n }\n }\n }\n\n async saveNeverDomain(domain: string): Promise {\n if (domain == null) {\n return;\n }\n\n let domains = await this.storageService.get<{ [id: string]: any; }>(Keys.neverDomains);\n if (!domains) {\n domains = {};\n }\n domains[domain] = null;\n await this.storageService.save(Keys.neverDomains, domains);\n }\n\n async saveWithServer(cipher: Cipher): Promise {\n let response: CipherResponse;\n if (cipher.id == null) {\n if (cipher.collectionIds != null) {\n const request = new CipherCreateRequest(cipher);\n response = await this.apiService.postCipherCreate(request);\n } else {\n const request = new CipherRequest(cipher);\n response = await this.apiService.postCipher(request);\n }\n cipher.id = response.id;\n } else {\n const request = new CipherRequest(cipher);\n response = await this.apiService.putCipher(cipher.id, request);\n }\n\n const userId = await this.userService.getUserId();\n const data = new CipherData(response, userId, cipher.collectionIds);\n await this.upsert(data);\n }\n\n async shareWithServer(cipher: CipherView, organizationId: string, collectionIds: string[]): Promise {\n const attachmentPromises: Promise[] = [];\n if (cipher.attachments != null) {\n cipher.attachments.forEach(attachment => {\n if (attachment.key == null) {\n attachmentPromises.push(this.shareAttachmentWithServer(attachment, cipher.id, organizationId));\n }\n });\n }\n await Promise.all(attachmentPromises);\n\n cipher.organizationId = organizationId;\n cipher.collectionIds = collectionIds;\n const encCipher = await this.encrypt(cipher);\n const request = new CipherShareRequest(encCipher);\n const response = await this.apiService.putShareCipher(cipher.id, request);\n const userId = await this.userService.getUserId();\n const data = new CipherData(response, userId, collectionIds);\n await this.upsert(data);\n }\n\n async shareManyWithServer(ciphers: CipherView[], organizationId: string, collectionIds: string[]): Promise {\n const promises: Promise[] = [];\n const encCiphers: Cipher[] = [];\n for (const cipher of ciphers) {\n cipher.organizationId = organizationId;\n cipher.collectionIds = collectionIds;\n promises.push(this.encrypt(cipher).then(c => {\n encCiphers.push(c);\n }));\n }\n await Promise.all(promises);\n const request = new CipherBulkShareRequest(encCiphers, collectionIds);\n await this.apiService.putShareCiphers(request);\n const userId = await this.userService.getUserId();\n await this.upsert(encCiphers.map(c => c.toCipherData(userId)));\n }\n\n saveAttachmentWithServer(cipher: Cipher, unencryptedFile: any, admin = false): Promise {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsArrayBuffer(unencryptedFile);\n reader.onload = async (evt: any) => {\n try {\n const cData = await this.saveAttachmentRawWithServer(cipher,\n unencryptedFile.name, evt.target.result, admin);\n resolve(cData);\n } catch (e) {\n reject(e);\n }\n };\n reader.onerror = evt => {\n reject('Error reading file.');\n };\n });\n }\n\n async saveAttachmentRawWithServer(cipher: Cipher, filename: string,\n data: ArrayBuffer, admin = false): Promise {\n const key = await this.cryptoService.getOrgKey(cipher.organizationId);\n const encFileName = await this.cryptoService.encrypt(filename, key);\n\n const dataEncKey = await this.cryptoService.makeEncKey(key);\n const encData = await this.cryptoService.encryptToBytes(data, dataEncKey[0]);\n\n const request: AttachmentRequest = {\n key: dataEncKey[1].encryptedString,\n fileName: encFileName.encryptedString,\n fileSize: encData.buffer.byteLength,\n adminRequest: admin,\n };\n\n let response: CipherResponse;\n try {\n const uploadDataResponse = await this.apiService.postCipherAttachment(cipher.id, request);\n response = admin ? uploadDataResponse.cipherMiniResponse : uploadDataResponse.cipherResponse;\n await this.fileUploadService.uploadCipherAttachment(admin, uploadDataResponse, filename, encData);\n } catch (e) {\n if (e instanceof ErrorResponse && (e as ErrorResponse).statusCode === 404 || (e as ErrorResponse).statusCode === 405) {\n response = await this.legacyServerAttachmentFileUpload(admin, cipher.id, encFileName, encData, dataEncKey[1]);\n } else if (e instanceof ErrorResponse) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n } else {\n throw e;\n }\n }\n\n const userId = await this.userService.getUserId();\n const cData = new CipherData(response, userId, cipher.collectionIds);\n if (!admin) {\n await this.upsert(cData);\n }\n return new Cipher(cData);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async legacyServerAttachmentFileUpload(admin: boolean, cipherId: string, encFileName: EncString,\n encData: EncArrayBuffer, key: EncString) {\n const fd = new FormData();\n try {\n const blob = new Blob([encData.buffer], { type: 'application/octet-stream' });\n fd.append('key', key.encryptedString);\n fd.append('data', blob, encFileName.encryptedString);\n } catch (e) {\n if (Utils.isNode && !Utils.isBrowser) {\n fd.append('key', key.encryptedString);\n fd.append('data', Buffer.from(encData.buffer) as any, {\n filepath: encFileName.encryptedString,\n contentType: 'application/octet-stream',\n } as any);\n } else {\n throw e;\n }\n }\n\n let response: CipherResponse;\n try {\n if (admin) {\n response = await this.apiService.postCipherAttachmentAdminLegacy(cipherId, fd);\n } else {\n response = await this.apiService.postCipherAttachmentLegacy(cipherId, fd);\n }\n } catch (e) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n }\n\n return response;\n }\n\n async saveCollectionsWithServer(cipher: Cipher): Promise {\n const request = new CipherCollectionsRequest(cipher.collectionIds);\n await this.apiService.putCipherCollections(cipher.id, request);\n const userId = await this.userService.getUserId();\n const data = cipher.toCipherData(userId);\n await this.upsert(data);\n }\n\n async upsert(cipher: CipherData | CipherData[]): Promise {\n const userId = await this.userService.getUserId();\n let ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n Keys.ciphersPrefix + userId);\n if (ciphers == null) {\n ciphers = {};\n }\n\n if (cipher instanceof CipherData) {\n const c = cipher as CipherData;\n ciphers[c.id] = c;\n } else {\n (cipher as CipherData[]).forEach(c => {\n ciphers[c.id] = c;\n });\n }\n\n await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n this.decryptedCipherCache = null;\n }\n\n async replace(ciphers: { [id: string]: CipherData; }): Promise {\n const userId = await this.userService.getUserId();\n await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n this.decryptedCipherCache = null;\n }\n\n async clear(userId: string): Promise {\n await this.storageService.remove(Keys.ciphersPrefix + userId);\n this.clearCache();\n }\n\n async moveManyWithServer(ids: string[], folderId: string): Promise {\n await this.apiService.putMoveCiphers(new CipherBulkMoveRequest(ids, folderId));\n\n const userId = await this.userService.getUserId();\n let ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n Keys.ciphersPrefix + userId);\n if (ciphers == null) {\n ciphers = {};\n }\n\n ids.forEach(id => {\n if (ciphers.hasOwnProperty(id)) {\n ciphers[id].folderId = folderId;\n }\n });\n\n await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n this.decryptedCipherCache = null;\n }\n\n async delete(id: string | string[]): Promise {\n const userId = await this.userService.getUserId();\n const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n Keys.ciphersPrefix + userId);\n if (ciphers == null) {\n return;\n }\n\n if (typeof id === 'string') {\n if (ciphers[id] == null) {\n return;\n }\n delete ciphers[id];\n } else {\n (id as string[]).forEach(i => {\n delete ciphers[i];\n });\n }\n\n await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n this.decryptedCipherCache = null;\n }\n\n async deleteWithServer(id: string): Promise {\n await this.apiService.deleteCipher(id);\n await this.delete(id);\n }\n\n async deleteManyWithServer(ids: string[]): Promise {\n await this.apiService.deleteManyCiphers(new CipherBulkDeleteRequest(ids));\n await this.delete(ids);\n }\n\n async deleteAttachment(id: string, attachmentId: string): Promise {\n const userId = await this.userService.getUserId();\n const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n Keys.ciphersPrefix + userId);\n\n if (ciphers == null || !ciphers.hasOwnProperty(id) || ciphers[id].attachments == null) {\n return;\n }\n\n for (let i = 0; i < ciphers[id].attachments.length; i++) {\n if (ciphers[id].attachments[i].id === attachmentId) {\n ciphers[id].attachments.splice(i, 1);\n }\n }\n\n await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n this.decryptedCipherCache = null;\n }\n\n async deleteAttachmentWithServer(id: string, attachmentId: string): Promise {\n try {\n await this.apiService.deleteCipherAttachment(id, attachmentId);\n } catch (e) {\n return Promise.reject((e as ErrorResponse).getSingleMessage());\n }\n await this.deleteAttachment(id, attachmentId);\n }\n\n sortCiphersByLastUsed(a: CipherView, b: CipherView): number {\n const aLastUsed = a.localData && a.localData.lastUsedDate ? a.localData.lastUsedDate as number : null;\n const bLastUsed = b.localData && b.localData.lastUsedDate ? b.localData.lastUsedDate as number : null;\n\n const bothNotNull = aLastUsed != null && bLastUsed != null;\n if (bothNotNull && aLastUsed < bLastUsed) {\n return 1;\n }\n if (aLastUsed != null && bLastUsed == null) {\n return -1;\n }\n\n if (bothNotNull && aLastUsed > bLastUsed) {\n return -1;\n }\n if (bLastUsed != null && aLastUsed == null) {\n return 1;\n }\n\n return 0;\n }\n\n sortCiphersByLastUsedThenName(a: CipherView, b: CipherView): number {\n const result = this.sortCiphersByLastUsed(a, b);\n if (result !== 0) {\n return result;\n }\n\n return this.getLocaleSortingFunction()(a, b);\n }\n\n getLocaleSortingFunction(): (a: CipherView, b: CipherView) => number {\n return (a, b) => {\n let aName = a.name;\n let bName = b.name;\n\n if (aName == null && bName != null) {\n return -1;\n }\n if (aName != null && bName == null) {\n return 1;\n }\n if (aName == null && bName == null) {\n return 0;\n }\n\n const result = this.i18nService.collator ? this.i18nService.collator.compare(aName, bName) :\n aName.localeCompare(bName);\n\n if (result !== 0 || a.type !== CipherType.Login || b.type !== CipherType.Login) {\n return result;\n }\n\n if (a.login.username != null) {\n aName += a.login.username;\n }\n\n if (b.login.username != null) {\n bName += b.login.username;\n }\n\n return this.i18nService.collator ? this.i18nService.collator.compare(aName, bName) :\n aName.localeCompare(bName);\n };\n }\n\n async softDelete(id: string | string[]): Promise {\n const userId = await this.userService.getUserId();\n const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n Keys.ciphersPrefix + userId);\n if (ciphers == null) {\n return;\n }\n\n const setDeletedDate = (cipherId: string) => {\n if (ciphers[cipherId] == null) {\n return;\n }\n ciphers[cipherId].deletedDate = new Date().toISOString();\n };\n\n if (typeof id === 'string') {\n setDeletedDate(id);\n } else {\n (id as string[]).forEach(setDeletedDate);\n }\n\n await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n this.decryptedCipherCache = null;\n }\n\n async softDeleteWithServer(id: string): Promise {\n await this.apiService.putDeleteCipher(id);\n await this.softDelete(id);\n }\n\n async softDeleteManyWithServer(ids: string[]): Promise {\n await this.apiService.putDeleteManyCiphers(new CipherBulkDeleteRequest(ids));\n await this.softDelete(ids);\n }\n\n async restore(cipher: { id: string, revisionDate: string; } | { id: string, revisionDate: string; }[]) {\n const userId = await this.userService.getUserId();\n const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n Keys.ciphersPrefix + userId);\n if (ciphers == null) {\n return;\n }\n\n const clearDeletedDate = (c: { id: string, revisionDate: string; }) => {\n if (ciphers[c.id] == null) {\n return;\n }\n ciphers[c.id].deletedDate = null;\n ciphers[c.id].revisionDate = c.revisionDate;\n };\n\n\n if (cipher.constructor.name === 'Array') {\n (cipher as { id: string, revisionDate: string; }[]).forEach(clearDeletedDate);\n } else {\n clearDeletedDate(cipher as { id: string, revisionDate: string; });\n }\n\n await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n this.decryptedCipherCache = null;\n }\n\n async restoreWithServer(id: string): Promise {\n const response = await this.apiService.putRestoreCipher(id);\n await this.restore({ id: id, revisionDate: response.revisionDate });\n }\n\n async restoreManyWithServer(ids: string[]): Promise {\n const response = await this.apiService.putRestoreManyCiphers(new CipherBulkRestoreRequest(ids));\n const restores: { id: string, revisionDate: string; }[] = [];\n for (const cipher of response.data) {\n restores.push({ id: cipher.id, revisionDate: cipher.revisionDate });\n }\n await this.restore(restores);\n }\n\n // Helpers\n\n private async shareAttachmentWithServer(attachmentView: AttachmentView, cipherId: string,\n organizationId: string): Promise {\n const attachmentResponse = await this.apiService.nativeFetch(\n new Request(attachmentView.url, { cache: 'no-store' }));\n if (attachmentResponse.status !== 200) {\n throw Error('Failed to download attachment: ' + attachmentResponse.status.toString());\n }\n\n const buf = await attachmentResponse.arrayBuffer();\n const decBuf = await this.cryptoService.decryptFromBytes(buf, null);\n const key = await this.cryptoService.getOrgKey(organizationId);\n const encFileName = await this.cryptoService.encrypt(attachmentView.fileName, key);\n\n const dataEncKey = await this.cryptoService.makeEncKey(key);\n const encData = await this.cryptoService.encryptToBytes(decBuf, dataEncKey[0]);\n\n const fd = new FormData();\n try {\n const blob = new Blob([encData.buffer], { type: 'application/octet-stream' });\n fd.append('key', dataEncKey[1].encryptedString);\n fd.append('data', blob, encFileName.encryptedString);\n } catch (e) {\n if (Utils.isNode && !Utils.isBrowser) {\n fd.append('key', dataEncKey[1].encryptedString);\n fd.append('data', Buffer.from(encData.buffer) as any, {\n filepath: encFileName.encryptedString,\n contentType: 'application/octet-stream',\n } as any);\n } else {\n throw e;\n }\n }\n\n try {\n await this.apiService.postShareCipherAttachment(cipherId, attachmentView.id, fd, organizationId);\n } catch (e) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n }\n }\n\n private async encryptObjProperty(model: V, obj: D,\n map: any, key: SymmetricCryptoKey): Promise {\n const promises = [];\n const self = this;\n\n for (const prop in map) {\n if (!map.hasOwnProperty(prop)) {\n continue;\n }\n\n // tslint:disable-next-line\n (function (theProp, theObj) {\n const p = Promise.resolve().then(() => {\n const modelProp = (model as any)[(map[theProp] || theProp)];\n if (modelProp && modelProp !== '') {\n return self.cryptoService.encrypt(modelProp, key);\n }\n return null;\n }).then((val: EncString) => {\n (theObj as any)[theProp] = val;\n });\n promises.push(p);\n })(prop, obj);\n }\n\n await Promise.all(promises);\n }\n\n private async encryptCipherData(cipher: Cipher, model: CipherView, key: SymmetricCryptoKey) {\n switch (cipher.type) {\n case CipherType.Login:\n cipher.login = new Login();\n cipher.login.passwordRevisionDate = model.login.passwordRevisionDate;\n await this.encryptObjProperty(model.login, cipher.login, {\n username: null,\n password: null,\n totp: null,\n }, key);\n\n if (model.login.uris != null) {\n cipher.login.uris = [];\n for (let i = 0; i < model.login.uris.length; i++) {\n const loginUri = new LoginUri();\n loginUri.match = model.login.uris[i].match;\n await this.encryptObjProperty(model.login.uris[i], loginUri, {\n uri: null,\n }, key);\n cipher.login.uris.push(loginUri);\n }\n }\n return;\n case CipherType.SecureNote:\n cipher.secureNote = new SecureNote();\n cipher.secureNote.type = model.secureNote.type;\n return;\n case CipherType.Card:\n cipher.card = new Card();\n await this.encryptObjProperty(model.card, cipher.card, {\n cardholderName: null,\n brand: null,\n number: null,\n expMonth: null,\n expYear: null,\n code: null,\n }, key);\n return;\n case CipherType.Identity:\n cipher.identity = new Identity();\n await this.encryptObjProperty(model.identity, cipher.identity, {\n title: null,\n firstName: null,\n middleName: null,\n lastName: null,\n address1: null,\n address2: null,\n address3: null,\n city: null,\n state: null,\n postalCode: null,\n country: null,\n company: null,\n email: null,\n phone: null,\n ssn: null,\n username: null,\n passportNumber: null,\n licenseNumber: null,\n }, key);\n return;\n default:\n throw new Error('Unknown cipher type.');\n }\n }\n\n private async getCipherForUrl(url: string, lastUsed: boolean, lastLaunched: boolean): Promise {\n if (!this.sortedCiphersCache.isCached(url)) {\n const ciphers = await this.getAllDecryptedForUrl(url);\n if (!ciphers) {\n return null;\n }\n this.sortedCiphersCache.addCiphers(url, ciphers);\n }\n\n if (lastLaunched) {\n return this.sortedCiphersCache.getLastLaunched(url);\n } else if (lastUsed) {\n return this.sortedCiphersCache.getLastUsed(url);\n } else {\n return this.sortedCiphersCache.getNext(url);\n }\n }\n}\n","/**\n * Use as a Decorator on async functions, it will prevent multiple 'active' calls as the same time\n *\n * If a promise was returned from a previous call to this function, that hasn't yet resolved it will\n * be returned, instead of calling the original function again\n *\n * Results are not cached, once the promise has returned, the next call will result in a fresh call\n *\n * Read more at https://github.com/bitwarden/jslib/pull/7\n */\nexport function sequentialize(cacheKey: (args: any[]) => string) {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n const originalMethod: () => Promise = descriptor.value;\n const caches = new Map>>();\n\n const getCache = (obj: any) => {\n let cache = caches.get(obj);\n if (cache != null) {\n return cache;\n }\n cache = new Map>();\n caches.set(obj, cache);\n return cache;\n };\n\n return {\n value: function(...args: any[]) {\n const cache = getCache(this);\n const argsCacheKey = cacheKey(args);\n let response = cache.get(argsCacheKey);\n if (response != null) {\n return response;\n }\n\n const onFinally = () => {\n cache.delete(argsCacheKey);\n if (cache.size === 0) {\n caches.delete(this);\n }\n };\n response = originalMethod.apply(this, args).then((val: any) => {\n onFinally();\n return val;\n }).catch((err: any) => {\n onFinally();\n throw err;\n });\n\n cache.set(argsCacheKey, response);\n return response;\n },\n };\n };\n}\n","import { CollectionData } from '../models/data/collectionData';\n\nimport { Collection } from '../models/domain/collection';\nimport { TreeNode } from '../models/domain/treeNode';\n\nimport { CollectionView } from '../models/view/collectionView';\n\nimport { CollectionService as CollectionServiceAbstraction } from '../abstractions/collection.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\n\nimport { ServiceUtils } from '../misc/serviceUtils';\nimport { Utils } from '../misc/utils';\n\nconst Keys = {\n collectionsPrefix: 'collections_',\n};\nconst NestingDelimiter = '/';\n\nexport class CollectionService implements CollectionServiceAbstraction {\n decryptedCollectionCache: CollectionView[];\n\n constructor(private cryptoService: CryptoService, private userService: UserService,\n private storageService: StorageService, private i18nService: I18nService) {\n }\n\n clearCache(): void {\n this.decryptedCollectionCache = null;\n }\n\n async encrypt(model: CollectionView): Promise {\n if (model.organizationId == null) {\n throw new Error('Collection has no organization id.');\n }\n const key = await this.cryptoService.getOrgKey(model.organizationId);\n if (key == null) {\n throw new Error('No key for this collection\\'s organization.');\n }\n const collection = new Collection();\n collection.id = model.id;\n collection.organizationId = model.organizationId;\n collection.readOnly = model.readOnly;\n collection.name = await this.cryptoService.encrypt(model.name, key);\n return collection;\n }\n\n async decryptMany(collections: Collection[]): Promise {\n if (collections == null) {\n return [];\n }\n const decCollections: CollectionView[] = [];\n const promises: Promise[] = [];\n collections.forEach(collection => {\n promises.push(collection.decrypt().then(c => decCollections.push(c)));\n });\n await Promise.all(promises);\n return decCollections.sort(Utils.getSortFunction(this.i18nService, 'name'));\n }\n\n async get(id: string): Promise {\n const userId = await this.userService.getUserId();\n const collections = await this.storageService.get<{ [id: string]: CollectionData; }>(\n Keys.collectionsPrefix + userId);\n if (collections == null || !collections.hasOwnProperty(id)) {\n return null;\n }\n\n return new Collection(collections[id]);\n }\n\n async getAll(): Promise {\n const userId = await this.userService.getUserId();\n const collections = await this.storageService.get<{ [id: string]: CollectionData; }>(\n Keys.collectionsPrefix + userId);\n const response: Collection[] = [];\n for (const id in collections) {\n if (collections.hasOwnProperty(id)) {\n response.push(new Collection(collections[id]));\n }\n }\n return response;\n }\n\n async getAllDecrypted(): Promise {\n if (this.decryptedCollectionCache != null) {\n return this.decryptedCollectionCache;\n }\n\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error('No key.');\n }\n\n const collections = await this.getAll();\n this.decryptedCollectionCache = await this.decryptMany(collections);\n return this.decryptedCollectionCache;\n }\n\n async getAllNested(collections: CollectionView[] = null): Promise[]> {\n if (collections == null) {\n collections = await this.getAllDecrypted();\n }\n const nodes: TreeNode[] = [];\n collections.forEach(c => {\n const collectionCopy = new CollectionView();\n collectionCopy.id = c.id;\n collectionCopy.organizationId = c.organizationId;\n const parts = c.name != null ? c.name.replace(/^\\/+|\\/+$/g, '').split(NestingDelimiter) : [];\n ServiceUtils.nestedTraverse(nodes, 0, parts, collectionCopy, null, NestingDelimiter);\n });\n return nodes;\n }\n\n async getNested(id: string): Promise> {\n const collections = await this.getAllNested();\n return ServiceUtils.getTreeNodeObject(collections, id) as TreeNode;\n }\n\n async upsert(collection: CollectionData | CollectionData[]): Promise {\n const userId = await this.userService.getUserId();\n let collections = await this.storageService.get<{ [id: string]: CollectionData; }>(\n Keys.collectionsPrefix + userId);\n if (collections == null) {\n collections = {};\n }\n\n if (collection instanceof CollectionData) {\n const c = collection as CollectionData;\n collections[c.id] = c;\n } else {\n (collection as CollectionData[]).forEach(c => {\n collections[c.id] = c;\n });\n }\n\n await this.storageService.save(Keys.collectionsPrefix + userId, collections);\n this.decryptedCollectionCache = null;\n }\n\n async replace(collections: { [id: string]: CollectionData; }): Promise {\n const userId = await this.userService.getUserId();\n await this.storageService.save(Keys.collectionsPrefix + userId, collections);\n this.decryptedCollectionCache = null;\n }\n\n async clear(userId: string): Promise {\n await this.storageService.remove(Keys.collectionsPrefix + userId);\n this.decryptedCollectionCache = null;\n }\n\n async delete(id: string | string[]): Promise {\n const userId = await this.userService.getUserId();\n const collections = await this.storageService.get<{ [id: string]: CollectionData; }>(\n Keys.collectionsPrefix + userId);\n if (collections == null) {\n return;\n }\n\n if (typeof id === 'string') {\n const i = id as string;\n delete collections[id];\n } else {\n (id as string[]).forEach(i => {\n delete collections[i];\n });\n }\n\n await this.storageService.save(Keys.collectionsPrefix + userId, collections);\n this.decryptedCollectionCache = null;\n }\n}\n","import {\n ITreeNodeObject,\n TreeNode,\n} from '../models/domain/treeNode';\n\nexport class ServiceUtils {\n static nestedTraverse(nodeTree: TreeNode[], partIndex: number, parts: string[],\n obj: ITreeNodeObject, parent: ITreeNodeObject, delimiter: string) {\n if (parts.length <= partIndex) {\n return;\n }\n\n const end = partIndex === parts.length - 1;\n const partName = parts[partIndex];\n\n for (let i = 0; i < nodeTree.length; i++) {\n if (nodeTree[i].node.name !== parts[partIndex]) {\n continue;\n }\n if (end && nodeTree[i].node.id !== obj.id) {\n // Another node with the same name.\n nodeTree.push(new TreeNode(obj, partName, parent));\n return;\n }\n ServiceUtils.nestedTraverse(nodeTree[i].children, partIndex + 1, parts,\n obj, nodeTree[i].node, delimiter);\n return;\n }\n\n if (nodeTree.filter(n => n.node.name === partName).length === 0) {\n if (end) {\n nodeTree.push(new TreeNode(obj, partName, parent));\n return;\n }\n const newPartName = parts[partIndex] + delimiter + parts[partIndex + 1];\n ServiceUtils.nestedTraverse(nodeTree, 0, [newPartName, ...parts.slice(partIndex + 2)],\n obj, parent, delimiter);\n }\n }\n\n static getTreeNodeObject(nodeTree: TreeNode[], id: string): TreeNode {\n for (let i = 0; i < nodeTree.length; i++) {\n if (nodeTree[i].node.id === id) {\n return nodeTree[i];\n } else if (nodeTree[i].children != null) {\n const node = ServiceUtils.getTreeNodeObject(nodeTree[i].children, id);\n if (node !== null) {\n return node;\n }\n }\n }\n return null;\n }\n}\n","import { CryptoService } from '../abstractions/crypto.service';\n\nexport class ContainerService {\n constructor(private cryptoService: CryptoService) {\n }\n\n // deprecated, use attachToGlobal instead\n attachToWindow(win: any) {\n this.attachToGlobal(win);\n }\n\n attachToGlobal(global: any) {\n if (!global.bitwardenContainerService) {\n global.bitwardenContainerService = this;\n }\n }\n\n getCryptoService(): CryptoService {\n return this.cryptoService;\n }\n}\n","import * as bigInt from 'big-integer';\n\nimport { EncryptionType } from '../enums/encryptionType';\nimport { KdfType } from '../enums/kdfType';\n\nimport { EncArrayBuffer } from '../models/domain/encArrayBuffer';\nimport { EncryptedObject } from '../models/domain/encryptedObject';\nimport { EncString } from '../models/domain/encString';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\nimport { ProfileOrganizationResponse } from '../models/response/profileOrganizationResponse';\n\nimport { CryptoService as CryptoServiceAbstraction } from '../abstractions/crypto.service';\nimport { CryptoFunctionService } from '../abstractions/cryptoFunction.service';\nimport { LogService } from '../abstractions/log.service';\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\nimport { StorageService } from '../abstractions/storage.service';\n\nimport { ConstantsService } from './constants.service';\n\nimport { sequentialize } from '../misc/sequentialize';\nimport { Utils } from '../misc/utils';\nimport { EEFLongWordList } from '../misc/wordlist';\n\nconst Keys = {\n key: 'key', // Master Key\n encOrgKeys: 'encOrgKeys',\n encPrivateKey: 'encPrivateKey',\n encKey: 'encKey', // Generated Symmetric Key\n keyHash: 'keyHash',\n};\n\nexport class CryptoService implements CryptoServiceAbstraction {\n private key: SymmetricCryptoKey;\n private encKey: SymmetricCryptoKey;\n private legacyEtmKey: SymmetricCryptoKey;\n private keyHash: string;\n private publicKey: ArrayBuffer;\n private privateKey: ArrayBuffer;\n private orgKeys: Map;\n\n constructor(private storageService: StorageService, private secureStorageService: StorageService,\n private cryptoFunctionService: CryptoFunctionService, private platformUtilService: PlatformUtilsService,\n private logService: LogService) {\n }\n\n async setKey(key: SymmetricCryptoKey): Promise {\n this.key = key;\n\n const option = await this.storageService.get(ConstantsService.vaultTimeoutKey);\n const biometric = await this.storageService.get(ConstantsService.biometricUnlockKey);\n if (option != null && !(biometric && this.platformUtilService.supportsSecureStorage())) {\n // if we have a lock option set, we do not store the key\n return;\n }\n\n return this.secureStorageService.save(Keys.key, key.keyB64);\n }\n\n setKeyHash(keyHash: string): Promise<{}> {\n this.keyHash = keyHash;\n return this.storageService.save(Keys.keyHash, keyHash);\n }\n\n async setEncKey(encKey: string): Promise<{}> {\n if (encKey == null) {\n return;\n }\n\n await this.storageService.save(Keys.encKey, encKey);\n this.encKey = null;\n }\n\n async setEncPrivateKey(encPrivateKey: string): Promise<{}> {\n if (encPrivateKey == null) {\n return;\n }\n\n await this.storageService.save(Keys.encPrivateKey, encPrivateKey);\n this.privateKey = null;\n }\n\n setOrgKeys(orgs: ProfileOrganizationResponse[]): Promise<{}> {\n const orgKeys: any = {};\n orgs.forEach(org => {\n orgKeys[org.id] = org.key;\n });\n\n this.orgKeys = null;\n return this.storageService.save(Keys.encOrgKeys, orgKeys);\n }\n\n async getKey(): Promise {\n if (this.key != null) {\n return this.key;\n }\n\n const key = await this.secureStorageService.get(Keys.key);\n if (key != null) {\n this.key = new SymmetricCryptoKey(Utils.fromB64ToArray(key).buffer);\n }\n\n return key == null ? null : this.key;\n }\n\n async getKeyHash(): Promise {\n if (this.keyHash != null) {\n return this.keyHash;\n }\n\n const keyHash = await this.storageService.get(Keys.keyHash);\n if (keyHash != null) {\n this.keyHash = keyHash;\n }\n\n return keyHash == null ? null : this.keyHash;\n }\n\n @sequentialize(() => 'getEncKey')\n async getEncKey(key: SymmetricCryptoKey = null): Promise {\n if (this.encKey != null) {\n return this.encKey;\n }\n\n const encKey = await this.storageService.get(Keys.encKey);\n if (encKey == null) {\n return null;\n }\n\n if (key == null) {\n key = await this.getKey();\n }\n if (key == null) {\n return null;\n }\n\n let decEncKey: ArrayBuffer;\n const encKeyCipher = new EncString(encKey);\n if (encKeyCipher.encryptionType === EncryptionType.AesCbc256_B64) {\n decEncKey = await this.decryptToBytes(encKeyCipher, key);\n } else if (encKeyCipher.encryptionType === EncryptionType.AesCbc256_HmacSha256_B64) {\n const newKey = await this.stretchKey(key);\n decEncKey = await this.decryptToBytes(encKeyCipher, newKey);\n } else {\n throw new Error('Unsupported encKey type.');\n }\n\n if (decEncKey == null) {\n return null;\n }\n this.encKey = new SymmetricCryptoKey(decEncKey);\n return this.encKey;\n }\n\n async getPublicKey(): Promise {\n if (this.publicKey != null) {\n return this.publicKey;\n }\n\n const privateKey = await this.getPrivateKey();\n if (privateKey == null) {\n return null;\n }\n\n this.publicKey = await this.cryptoFunctionService.rsaExtractPublicKey(privateKey);\n return this.publicKey;\n }\n\n async getPrivateKey(): Promise {\n if (this.privateKey != null) {\n return this.privateKey;\n }\n\n const encPrivateKey = await this.storageService.get(Keys.encPrivateKey);\n if (encPrivateKey == null) {\n return null;\n }\n\n this.privateKey = await this.decryptToBytes(new EncString(encPrivateKey), null);\n return this.privateKey;\n }\n\n async getFingerprint(userId: string, publicKey?: ArrayBuffer): Promise {\n if (publicKey == null) {\n publicKey = await this.getPublicKey();\n }\n if (publicKey === null) {\n throw new Error('No public key available.');\n }\n const keyFingerprint = await this.cryptoFunctionService.hash(publicKey, 'sha256');\n const userFingerprint = await this.cryptoFunctionService.hkdfExpand(keyFingerprint, userId, 32, 'sha256');\n return this.hashPhrase(userFingerprint);\n }\n\n @sequentialize(() => 'getOrgKeys')\n async getOrgKeys(): Promise> {\n if (this.orgKeys != null && this.orgKeys.size > 0) {\n return this.orgKeys;\n }\n\n const encOrgKeys = await this.storageService.get(Keys.encOrgKeys);\n if (encOrgKeys == null) {\n return null;\n }\n\n const orgKeys: Map = new Map();\n let setKey = false;\n\n for (const orgId in encOrgKeys) {\n if (!encOrgKeys.hasOwnProperty(orgId)) {\n continue;\n }\n\n const decValue = await this.rsaDecrypt(encOrgKeys[orgId]);\n orgKeys.set(orgId, new SymmetricCryptoKey(decValue));\n setKey = true;\n }\n\n if (setKey) {\n this.orgKeys = orgKeys;\n }\n\n return this.orgKeys;\n }\n\n async getOrgKey(orgId: string): Promise {\n if (orgId == null) {\n return null;\n }\n\n const orgKeys = await this.getOrgKeys();\n if (orgKeys == null || !orgKeys.has(orgId)) {\n return null;\n }\n\n return orgKeys.get(orgId);\n }\n\n async hasKey(): Promise {\n return (await this.getKey()) != null;\n }\n\n async hasEncKey(): Promise {\n const encKey = await this.storageService.get(Keys.encKey);\n return encKey != null;\n }\n\n clearKey(): Promise {\n this.key = this.legacyEtmKey = null;\n return this.secureStorageService.remove(Keys.key);\n }\n\n clearKeyHash(): Promise {\n this.keyHash = null;\n return this.storageService.remove(Keys.keyHash);\n }\n\n clearEncKey(memoryOnly?: boolean): Promise {\n this.encKey = null;\n if (memoryOnly) {\n return Promise.resolve();\n }\n return this.storageService.remove(Keys.encKey);\n }\n\n clearKeyPair(memoryOnly?: boolean): Promise {\n this.privateKey = null;\n this.publicKey = null;\n if (memoryOnly) {\n return Promise.resolve();\n }\n return this.storageService.remove(Keys.encPrivateKey);\n }\n\n clearOrgKeys(memoryOnly?: boolean): Promise {\n this.orgKeys = null;\n if (memoryOnly) {\n return Promise.resolve();\n }\n return this.storageService.remove(Keys.encOrgKeys);\n }\n\n clearPinProtectedKey(): Promise {\n return this.storageService.remove(ConstantsService.pinProtectedKey);\n }\n\n clearKeys(): Promise {\n return Promise.all([\n this.clearKey(),\n this.clearKeyHash(),\n this.clearOrgKeys(),\n this.clearEncKey(),\n this.clearKeyPair(),\n this.clearPinProtectedKey(),\n ]);\n }\n\n async toggleKey(): Promise {\n const key = await this.getKey();\n const option = await this.storageService.get(ConstantsService.vaultTimeoutKey);\n const biometric = await this.storageService.get(ConstantsService.biometricUnlockKey);\n if ((!biometric && this.platformUtilService.supportsSecureStorage()) && (option != null || option === 0)) {\n // if we have a lock option set, clear the key\n await this.clearKey();\n this.key = key;\n return;\n }\n\n await this.setKey(key);\n }\n\n async makeKey(password: string, salt: string, kdf: KdfType, kdfIterations: number):\n Promise {\n let key: ArrayBuffer = null;\n if (kdf == null || kdf === KdfType.PBKDF2_SHA256) {\n if (kdfIterations == null) {\n kdfIterations = 5000;\n } else if (kdfIterations < 5000) {\n throw new Error('PBKDF2 iteration minimum is 5000.');\n }\n key = await this.cryptoFunctionService.pbkdf2(password, salt, 'sha256', kdfIterations);\n } else {\n throw new Error('Unknown Kdf.');\n }\n return new SymmetricCryptoKey(key);\n }\n\n async makeKeyFromPin(pin: string, salt: string, kdf: KdfType, kdfIterations: number,\n protectedKeyCs: EncString = null):\n Promise {\n if (protectedKeyCs == null) {\n const pinProtectedKey = await this.storageService.get(ConstantsService.pinProtectedKey);\n if (pinProtectedKey == null) {\n throw new Error('No PIN protected key found.');\n }\n protectedKeyCs = new EncString(pinProtectedKey);\n }\n const pinKey = await this.makePinKey(pin, salt, kdf, kdfIterations);\n const decKey = await this.decryptToBytes(protectedKeyCs, pinKey);\n return new SymmetricCryptoKey(decKey);\n }\n\n async makeShareKey(): Promise<[EncString, SymmetricCryptoKey]> {\n const shareKey = await this.cryptoFunctionService.randomBytes(64);\n const publicKey = await this.getPublicKey();\n const encShareKey = await this.rsaEncrypt(shareKey, publicKey);\n return [encShareKey, new SymmetricCryptoKey(shareKey)];\n }\n\n async makeKeyPair(key?: SymmetricCryptoKey): Promise<[string, EncString]> {\n const keyPair = await this.cryptoFunctionService.rsaGenerateKeyPair(2048);\n const publicB64 = Utils.fromBufferToB64(keyPair[0]);\n const privateEnc = await this.encrypt(keyPair[1], key);\n return [publicB64, privateEnc];\n }\n\n async makePinKey(pin: string, salt: string, kdf: KdfType, kdfIterations: number): Promise {\n const pinKey = await this.makeKey(pin, salt, kdf, kdfIterations);\n return await this.stretchKey(pinKey);\n }\n\n async makeSendKey(keyMaterial: ArrayBuffer): Promise {\n const sendKey = await this.cryptoFunctionService.hkdf(keyMaterial, 'bitwarden-send', 'send', 64, 'sha256');\n return new SymmetricCryptoKey(sendKey);\n }\n\n async hashPassword(password: string, key: SymmetricCryptoKey): Promise {\n if (key == null) {\n key = await this.getKey();\n }\n if (password == null || key == null) {\n throw new Error('Invalid parameters.');\n }\n\n const hash = await this.cryptoFunctionService.pbkdf2(key.key, password, 'sha256', 1);\n return Utils.fromBufferToB64(hash);\n }\n\n async makeEncKey(key: SymmetricCryptoKey): Promise<[SymmetricCryptoKey, EncString]> {\n const theKey = await this.getKeyForEncryption(key);\n const encKey = await this.cryptoFunctionService.randomBytes(64);\n return this.buildEncKey(theKey, encKey);\n }\n\n async remakeEncKey(key: SymmetricCryptoKey, encKey?: SymmetricCryptoKey): Promise<[SymmetricCryptoKey, EncString]> {\n if (encKey == null) {\n encKey = await this.getEncKey();\n }\n return this.buildEncKey(key, encKey.key);\n }\n\n async encrypt(plainValue: string | ArrayBuffer, key?: SymmetricCryptoKey): Promise {\n if (plainValue == null) {\n return Promise.resolve(null);\n }\n\n let plainBuf: ArrayBuffer;\n if (typeof (plainValue) === 'string') {\n plainBuf = Utils.fromUtf8ToArray(plainValue).buffer;\n } else {\n plainBuf = plainValue;\n }\n\n const encObj = await this.aesEncrypt(plainBuf, key);\n const iv = Utils.fromBufferToB64(encObj.iv);\n const data = Utils.fromBufferToB64(encObj.data);\n const mac = encObj.mac != null ? Utils.fromBufferToB64(encObj.mac) : null;\n return new EncString(encObj.key.encType, data, iv, mac);\n }\n\n async encryptToBytes(plainValue: ArrayBuffer, key?: SymmetricCryptoKey): Promise {\n const encValue = await this.aesEncrypt(plainValue, key);\n let macLen = 0;\n if (encValue.mac != null) {\n macLen = encValue.mac.byteLength;\n }\n\n const encBytes = new Uint8Array(1 + encValue.iv.byteLength + macLen + encValue.data.byteLength);\n encBytes.set([encValue.key.encType]);\n encBytes.set(new Uint8Array(encValue.iv), 1);\n if (encValue.mac != null) {\n encBytes.set(new Uint8Array(encValue.mac), 1 + encValue.iv.byteLength);\n }\n\n encBytes.set(new Uint8Array(encValue.data), 1 + encValue.iv.byteLength + macLen);\n return new EncArrayBuffer(encBytes.buffer);\n }\n\n async rsaEncrypt(data: ArrayBuffer, publicKey?: ArrayBuffer): Promise {\n if (publicKey == null) {\n publicKey = await this.getPublicKey();\n }\n if (publicKey == null) {\n throw new Error('Public key unavailable.');\n }\n\n const encBytes = await this.cryptoFunctionService.rsaEncrypt(data, publicKey, 'sha1');\n return new EncString(EncryptionType.Rsa2048_OaepSha1_B64, Utils.fromBufferToB64(encBytes));\n }\n\n async rsaDecrypt(encValue: string): Promise {\n const headerPieces = encValue.split('.');\n let encType: EncryptionType = null;\n let encPieces: string[];\n\n if (headerPieces.length === 1) {\n encType = EncryptionType.Rsa2048_OaepSha256_B64;\n encPieces = [headerPieces[0]];\n } else if (headerPieces.length === 2) {\n try {\n encType = parseInt(headerPieces[0], null);\n encPieces = headerPieces[1].split('|');\n } catch (e) { }\n }\n\n switch (encType) {\n case EncryptionType.Rsa2048_OaepSha256_B64:\n case EncryptionType.Rsa2048_OaepSha1_B64:\n // HmacSha256 types are deprecated\n case EncryptionType.Rsa2048_OaepSha256_HmacSha256_B64:\n case EncryptionType.Rsa2048_OaepSha1_HmacSha256_B64:\n break;\n default:\n throw new Error('encType unavailable.');\n }\n\n if (encPieces == null || encPieces.length <= 0) {\n throw new Error('encPieces unavailable.');\n }\n\n const data = Utils.fromB64ToArray(encPieces[0]).buffer;\n const privateKey = await this.getPrivateKey();\n if (privateKey == null) {\n throw new Error('No private key.');\n }\n\n let alg: 'sha1' | 'sha256' = 'sha1';\n switch (encType) {\n case EncryptionType.Rsa2048_OaepSha256_B64:\n case EncryptionType.Rsa2048_OaepSha256_HmacSha256_B64:\n alg = 'sha256';\n break;\n case EncryptionType.Rsa2048_OaepSha1_B64:\n case EncryptionType.Rsa2048_OaepSha1_HmacSha256_B64:\n break;\n default:\n throw new Error('encType unavailable.');\n }\n\n return this.cryptoFunctionService.rsaDecrypt(data, privateKey, alg);\n }\n\n async decryptToBytes(encString: EncString, key?: SymmetricCryptoKey): Promise {\n const iv = Utils.fromB64ToArray(encString.iv).buffer;\n const data = Utils.fromB64ToArray(encString.data).buffer;\n const mac = encString.mac ? Utils.fromB64ToArray(encString.mac).buffer : null;\n const decipher = await this.aesDecryptToBytes(encString.encryptionType, data, iv, mac, key);\n if (decipher == null) {\n return null;\n }\n\n return decipher;\n }\n\n async decryptToUtf8(encString: EncString, key?: SymmetricCryptoKey): Promise {\n return await this.aesDecryptToUtf8(encString.encryptionType, encString.data,\n encString.iv, encString.mac, key);\n }\n\n async decryptFromBytes(encBuf: ArrayBuffer, key: SymmetricCryptoKey): Promise {\n if (encBuf == null) {\n throw new Error('no encBuf.');\n }\n\n const encBytes = new Uint8Array(encBuf);\n const encType = encBytes[0];\n let ctBytes: Uint8Array = null;\n let ivBytes: Uint8Array = null;\n let macBytes: Uint8Array = null;\n\n switch (encType) {\n case EncryptionType.AesCbc128_HmacSha256_B64:\n case EncryptionType.AesCbc256_HmacSha256_B64:\n if (encBytes.length <= 49) { // 1 + 16 + 32 + ctLength\n return null;\n }\n\n ivBytes = encBytes.slice(1, 17);\n macBytes = encBytes.slice(17, 49);\n ctBytes = encBytes.slice(49);\n break;\n case EncryptionType.AesCbc256_B64:\n if (encBytes.length <= 17) { // 1 + 16 + ctLength\n return null;\n }\n\n ivBytes = encBytes.slice(1, 17);\n ctBytes = encBytes.slice(17);\n break;\n default:\n return null;\n }\n\n return await this.aesDecryptToBytes(encType, ctBytes.buffer, ivBytes.buffer,\n macBytes != null ? macBytes.buffer : null, key);\n }\n\n // EFForg/OpenWireless\n // ref https://github.com/EFForg/OpenWireless/blob/master/app/js/diceware.js\n async randomNumber(min: number, max: number): Promise {\n let rval = 0;\n const range = max - min + 1;\n const bitsNeeded = Math.ceil(Math.log2(range));\n if (bitsNeeded > 53) {\n throw new Error('We cannot generate numbers larger than 53 bits.');\n }\n\n const bytesNeeded = Math.ceil(bitsNeeded / 8);\n const mask = Math.pow(2, bitsNeeded) - 1;\n // 7776 -> (2^13 = 8192) -1 == 8191 or 0x00001111 11111111\n\n // Fill a byte array with N random numbers\n const byteArray = new Uint8Array(await this.cryptoFunctionService.randomBytes(bytesNeeded));\n\n let p = (bytesNeeded - 1) * 8;\n for (let i = 0; i < bytesNeeded; i++) {\n rval += byteArray[i] * Math.pow(2, p);\n p -= 8;\n }\n\n // Use & to apply the mask and reduce the number of recursive lookups\n // tslint:disable-next-line\n rval = rval & mask;\n\n if (rval >= range) {\n // Integer out of acceptable range\n return this.randomNumber(min, max);\n }\n\n // Return an integer that falls within the range\n return min + rval;\n }\n\n // Helpers\n\n private async aesEncrypt(data: ArrayBuffer, key: SymmetricCryptoKey): Promise {\n const obj = new EncryptedObject();\n obj.key = await this.getKeyForEncryption(key);\n obj.iv = await this.cryptoFunctionService.randomBytes(16);\n obj.data = await this.cryptoFunctionService.aesEncrypt(data, obj.iv, obj.key.encKey);\n\n if (obj.key.macKey != null) {\n const macData = new Uint8Array(obj.iv.byteLength + obj.data.byteLength);\n macData.set(new Uint8Array(obj.iv), 0);\n macData.set(new Uint8Array(obj.data), obj.iv.byteLength);\n obj.mac = await this.cryptoFunctionService.hmac(macData.buffer, obj.key.macKey, 'sha256');\n }\n\n return obj;\n }\n\n private async aesDecryptToUtf8(encType: EncryptionType, data: string, iv: string, mac: string,\n key: SymmetricCryptoKey): Promise {\n const keyForEnc = await this.getKeyForEncryption(key);\n const theKey = this.resolveLegacyKey(encType, keyForEnc);\n\n if (theKey.macKey != null && mac == null) {\n this.logService.error('mac required.');\n return null;\n }\n\n if (theKey.encType !== encType) {\n this.logService.error('encType unavailable.');\n return null;\n }\n\n const fastParams = this.cryptoFunctionService.aesDecryptFastParameters(data, iv, mac, theKey);\n if (fastParams.macKey != null && fastParams.mac != null) {\n const computedMac = await this.cryptoFunctionService.hmacFast(fastParams.macData,\n fastParams.macKey, 'sha256');\n const macsEqual = await this.cryptoFunctionService.compareFast(fastParams.mac, computedMac);\n if (!macsEqual) {\n this.logService.error('mac failed.');\n return null;\n }\n }\n\n return this.cryptoFunctionService.aesDecryptFast(fastParams);\n }\n\n private async aesDecryptToBytes(encType: EncryptionType, data: ArrayBuffer, iv: ArrayBuffer,\n mac: ArrayBuffer, key: SymmetricCryptoKey): Promise {\n const keyForEnc = await this.getKeyForEncryption(key);\n const theKey = this.resolveLegacyKey(encType, keyForEnc);\n\n if (theKey.macKey != null && mac == null) {\n return null;\n }\n\n if (theKey.encType !== encType) {\n return null;\n }\n\n if (theKey.macKey != null && mac != null) {\n const macData = new Uint8Array(iv.byteLength + data.byteLength);\n macData.set(new Uint8Array(iv), 0);\n macData.set(new Uint8Array(data), iv.byteLength);\n const computedMac = await this.cryptoFunctionService.hmac(macData.buffer, theKey.macKey, 'sha256');\n if (computedMac === null) {\n return null;\n }\n\n const macsMatch = await this.cryptoFunctionService.compare(mac, computedMac);\n if (!macsMatch) {\n this.logService.error('mac failed.');\n return null;\n }\n }\n\n return await this.cryptoFunctionService.aesDecrypt(data, iv, theKey.encKey);\n }\n\n private async getKeyForEncryption(key?: SymmetricCryptoKey): Promise {\n if (key != null) {\n return key;\n }\n\n const encKey = await this.getEncKey();\n if (encKey != null) {\n return encKey;\n }\n\n return await this.getKey();\n }\n\n private resolveLegacyKey(encType: EncryptionType, key: SymmetricCryptoKey): SymmetricCryptoKey {\n if (encType === EncryptionType.AesCbc128_HmacSha256_B64 &&\n key.encType === EncryptionType.AesCbc256_B64) {\n // Old encrypt-then-mac scheme, make a new key\n if (this.legacyEtmKey == null) {\n this.legacyEtmKey = new SymmetricCryptoKey(key.key, EncryptionType.AesCbc128_HmacSha256_B64);\n }\n return this.legacyEtmKey;\n }\n\n return key;\n }\n\n private async stretchKey(key: SymmetricCryptoKey): Promise {\n const newKey = new Uint8Array(64);\n const encKey = await this.cryptoFunctionService.hkdfExpand(key.key, 'enc', 32, 'sha256');\n const macKey = await this.cryptoFunctionService.hkdfExpand(key.key, 'mac', 32, 'sha256');\n newKey.set(new Uint8Array(encKey));\n newKey.set(new Uint8Array(macKey), 32);\n return new SymmetricCryptoKey(newKey.buffer);\n }\n\n private async hashPhrase(hash: ArrayBuffer, minimumEntropy: number = 64) {\n const entropyPerWord = Math.log(EEFLongWordList.length) / Math.log(2);\n let numWords = Math.ceil(minimumEntropy / entropyPerWord);\n\n const hashArr = Array.from(new Uint8Array(hash));\n const entropyAvailable = hashArr.length * 4;\n if (numWords * entropyPerWord > entropyAvailable) {\n throw new Error('Output entropy of hash function is too small');\n }\n\n const phrase: string[] = [];\n let hashNumber = bigInt.fromArray(hashArr, 256);\n while (numWords--) {\n const remainder = hashNumber.mod(EEFLongWordList.length);\n hashNumber = hashNumber.divide(EEFLongWordList.length);\n phrase.push(EEFLongWordList[remainder as any]);\n }\n return phrase;\n }\n\n private async buildEncKey(key: SymmetricCryptoKey, encKey: ArrayBuffer)\n : Promise<[SymmetricCryptoKey, EncString]> {\n let encKeyEnc: EncString = null;\n if (key.key.byteLength === 32) {\n const newKey = await this.stretchKey(key);\n encKeyEnc = await this.encrypt(encKey, newKey);\n } else if (key.key.byteLength === 64) {\n encKeyEnc = await this.encrypt(encKey, key);\n } else {\n throw new Error('Invalid key size.');\n }\n return [new SymmetricCryptoKey(encKey), encKeyEnc];\n }\n}\n","// EFF's Long Wordlist from https://www.eff.org/dice\nexport const EEFLongWordList = [\n 'abacus',\n 'abdomen',\n 'abdominal',\n 'abide',\n 'abiding',\n 'ability',\n 'ablaze',\n 'able',\n 'abnormal',\n 'abrasion',\n 'abrasive',\n 'abreast',\n 'abridge',\n 'abroad',\n 'abruptly',\n 'absence',\n 'absentee',\n 'absently',\n 'absinthe',\n 'absolute',\n 'absolve',\n 'abstain',\n 'abstract',\n 'absurd',\n 'accent',\n 'acclaim',\n 'acclimate',\n 'accompany',\n 'account',\n 'accuracy',\n 'accurate',\n 'accustom',\n 'acetone',\n 'achiness',\n 'aching',\n 'acid',\n 'acorn',\n 'acquaint',\n 'acquire',\n 'acre',\n 'acrobat',\n 'acronym',\n 'acting',\n 'action',\n 'activate',\n 'activator',\n 'active',\n 'activism',\n 'activist',\n 'activity',\n 'actress',\n 'acts',\n 'acutely',\n 'acuteness',\n 'aeration',\n 'aerobics',\n 'aerosol',\n 'aerospace',\n 'afar',\n 'affair',\n 'affected',\n 'affecting',\n 'affection',\n 'affidavit',\n 'affiliate',\n 'affirm',\n 'affix',\n 'afflicted',\n 'affluent',\n 'afford',\n 'affront',\n 'aflame',\n 'afloat',\n 'aflutter',\n 'afoot',\n 'afraid',\n 'afterglow',\n 'afterlife',\n 'aftermath',\n 'aftermost',\n 'afternoon',\n 'aged',\n 'ageless',\n 'agency',\n 'agenda',\n 'agent',\n 'aggregate',\n 'aghast',\n 'agile',\n 'agility',\n 'aging',\n 'agnostic',\n 'agonize',\n 'agonizing',\n 'agony',\n 'agreeable',\n 'agreeably',\n 'agreed',\n 'agreeing',\n 'agreement',\n 'aground',\n 'ahead',\n 'ahoy',\n 'aide',\n 'aids',\n 'aim',\n 'ajar',\n 'alabaster',\n 'alarm',\n 'albatross',\n 'album',\n 'alfalfa',\n 'algebra',\n 'algorithm',\n 'alias',\n 'alibi',\n 'alienable',\n 'alienate',\n 'aliens',\n 'alike',\n 'alive',\n 'alkaline',\n 'alkalize',\n 'almanac',\n 'almighty',\n 'almost',\n 'aloe',\n 'aloft',\n 'aloha',\n 'alone',\n 'alongside',\n 'aloof',\n 'alphabet',\n 'alright',\n 'although',\n 'altitude',\n 'alto',\n 'aluminum',\n 'alumni',\n 'always',\n 'amaretto',\n 'amaze',\n 'amazingly',\n 'amber',\n 'ambiance',\n 'ambiguity',\n 'ambiguous',\n 'ambition',\n 'ambitious',\n 'ambulance',\n 'ambush',\n 'amendable',\n 'amendment',\n 'amends',\n 'amenity',\n 'amiable',\n 'amicably',\n 'amid',\n 'amigo',\n 'amino',\n 'amiss',\n 'ammonia',\n 'ammonium',\n 'amnesty',\n 'amniotic',\n 'among',\n 'amount',\n 'amperage',\n 'ample',\n 'amplifier',\n 'amplify',\n 'amply',\n 'amuck',\n 'amulet',\n 'amusable',\n 'amused',\n 'amusement',\n 'amuser',\n 'amusing',\n 'anaconda',\n 'anaerobic',\n 'anagram',\n 'anatomist',\n 'anatomy',\n 'anchor',\n 'anchovy',\n 'ancient',\n 'android',\n 'anemia',\n 'anemic',\n 'aneurism',\n 'anew',\n 'angelfish',\n 'angelic',\n 'anger',\n 'angled',\n 'angler',\n 'angles',\n 'angling',\n 'angrily',\n 'angriness',\n 'anguished',\n 'angular',\n 'animal',\n 'animate',\n 'animating',\n 'animation',\n 'animator',\n 'anime',\n 'animosity',\n 'ankle',\n 'annex',\n 'annotate',\n 'announcer',\n 'annoying',\n 'annually',\n 'annuity',\n 'anointer',\n 'another',\n 'answering',\n 'antacid',\n 'antarctic',\n 'anteater',\n 'antelope',\n 'antennae',\n 'anthem',\n 'anthill',\n 'anthology',\n 'antibody',\n 'antics',\n 'antidote',\n 'antihero',\n 'antiquely',\n 'antiques',\n 'antiquity',\n 'antirust',\n 'antitoxic',\n 'antitrust',\n 'antiviral',\n 'antivirus',\n 'antler',\n 'antonym',\n 'antsy',\n 'anvil',\n 'anybody',\n 'anyhow',\n 'anymore',\n 'anyone',\n 'anyplace',\n 'anything',\n 'anytime',\n 'anyway',\n 'anywhere',\n 'aorta',\n 'apache',\n 'apostle',\n 'appealing',\n 'appear',\n 'appease',\n 'appeasing',\n 'appendage',\n 'appendix',\n 'appetite',\n 'appetizer',\n 'applaud',\n 'applause',\n 'apple',\n 'appliance',\n 'applicant',\n 'applied',\n 'apply',\n 'appointee',\n 'appraisal',\n 'appraiser',\n 'apprehend',\n 'approach',\n 'approval',\n 'approve',\n 'apricot',\n 'april',\n 'apron',\n 'aptitude',\n 'aptly',\n 'aqua',\n 'aqueduct',\n 'arbitrary',\n 'arbitrate',\n 'ardently',\n 'area',\n 'arena',\n 'arguable',\n 'arguably',\n 'argue',\n 'arise',\n 'armadillo',\n 'armband',\n 'armchair',\n 'armed',\n 'armful',\n 'armhole',\n 'arming',\n 'armless',\n 'armoire',\n 'armored',\n 'armory',\n 'armrest',\n 'army',\n 'aroma',\n 'arose',\n 'around',\n 'arousal',\n 'arrange',\n 'array',\n 'arrest',\n 'arrival',\n 'arrive',\n 'arrogance',\n 'arrogant',\n 'arson',\n 'art',\n 'ascend',\n 'ascension',\n 'ascent',\n 'ascertain',\n 'ashamed',\n 'ashen',\n 'ashes',\n 'ashy',\n 'aside',\n 'askew',\n 'asleep',\n 'asparagus',\n 'aspect',\n 'aspirate',\n 'aspire',\n 'aspirin',\n 'astonish',\n 'astound',\n 'astride',\n 'astrology',\n 'astronaut',\n 'astronomy',\n 'astute',\n 'atlantic',\n 'atlas',\n 'atom',\n 'atonable',\n 'atop',\n 'atrium',\n 'atrocious',\n 'atrophy',\n 'attach',\n 'attain',\n 'attempt',\n 'attendant',\n 'attendee',\n 'attention',\n 'attentive',\n 'attest',\n 'attic',\n 'attire',\n 'attitude',\n 'attractor',\n 'attribute',\n 'atypical',\n 'auction',\n 'audacious',\n 'audacity',\n 'audible',\n 'audibly',\n 'audience',\n 'audio',\n 'audition',\n 'augmented',\n 'august',\n 'authentic',\n 'author',\n 'autism',\n 'autistic',\n 'autograph',\n 'automaker',\n 'automated',\n 'automatic',\n 'autopilot',\n 'available',\n 'avalanche',\n 'avatar',\n 'avenge',\n 'avenging',\n 'avenue',\n 'average',\n 'aversion',\n 'avert',\n 'aviation',\n 'aviator',\n 'avid',\n 'avoid',\n 'await',\n 'awaken',\n 'award',\n 'aware',\n 'awhile',\n 'awkward',\n 'awning',\n 'awoke',\n 'awry',\n 'axis',\n 'babble',\n 'babbling',\n 'babied',\n 'baboon',\n 'backache',\n 'backboard',\n 'backboned',\n 'backdrop',\n 'backed',\n 'backer',\n 'backfield',\n 'backfire',\n 'backhand',\n 'backing',\n 'backlands',\n 'backlash',\n 'backless',\n 'backlight',\n 'backlit',\n 'backlog',\n 'backpack',\n 'backpedal',\n 'backrest',\n 'backroom',\n 'backshift',\n 'backside',\n 'backslid',\n 'backspace',\n 'backspin',\n 'backstab',\n 'backstage',\n 'backtalk',\n 'backtrack',\n 'backup',\n 'backward',\n 'backwash',\n 'backwater',\n 'backyard',\n 'bacon',\n 'bacteria',\n 'bacterium',\n 'badass',\n 'badge',\n 'badland',\n 'badly',\n 'badness',\n 'baffle',\n 'baffling',\n 'bagel',\n 'bagful',\n 'baggage',\n 'bagged',\n 'baggie',\n 'bagginess',\n 'bagging',\n 'baggy',\n 'bagpipe',\n 'baguette',\n 'baked',\n 'bakery',\n 'bakeshop',\n 'baking',\n 'balance',\n 'balancing',\n 'balcony',\n 'balmy',\n 'balsamic',\n 'bamboo',\n 'banana',\n 'banish',\n 'banister',\n 'banjo',\n 'bankable',\n 'bankbook',\n 'banked',\n 'banker',\n 'banking',\n 'banknote',\n 'bankroll',\n 'banner',\n 'bannister',\n 'banshee',\n 'banter',\n 'barbecue',\n 'barbed',\n 'barbell',\n 'barber',\n 'barcode',\n 'barge',\n 'bargraph',\n 'barista',\n 'baritone',\n 'barley',\n 'barmaid',\n 'barman',\n 'barn',\n 'barometer',\n 'barrack',\n 'barracuda',\n 'barrel',\n 'barrette',\n 'barricade',\n 'barrier',\n 'barstool',\n 'bartender',\n 'barterer',\n 'bash',\n 'basically',\n 'basics',\n 'basil',\n 'basin',\n 'basis',\n 'basket',\n 'batboy',\n 'batch',\n 'bath',\n 'baton',\n 'bats',\n 'battalion',\n 'battered',\n 'battering',\n 'battery',\n 'batting',\n 'battle',\n 'bauble',\n 'bazooka',\n 'blabber',\n 'bladder',\n 'blade',\n 'blah',\n 'blame',\n 'blaming',\n 'blanching',\n 'blandness',\n 'blank',\n 'blaspheme',\n 'blasphemy',\n 'blast',\n 'blatancy',\n 'blatantly',\n 'blazer',\n 'blazing',\n 'bleach',\n 'bleak',\n 'bleep',\n 'blemish',\n 'blend',\n 'bless',\n 'blighted',\n 'blimp',\n 'bling',\n 'blinked',\n 'blinker',\n 'blinking',\n 'blinks',\n 'blip',\n 'blissful',\n 'blitz',\n 'blizzard',\n 'bloated',\n 'bloating',\n 'blob',\n 'blog',\n 'bloomers',\n 'blooming',\n 'blooper',\n 'blot',\n 'blouse',\n 'blubber',\n 'bluff',\n 'bluish',\n 'blunderer',\n 'blunt',\n 'blurb',\n 'blurred',\n 'blurry',\n 'blurt',\n 'blush',\n 'blustery',\n 'boaster',\n 'boastful',\n 'boasting',\n 'boat',\n 'bobbed',\n 'bobbing',\n 'bobble',\n 'bobcat',\n 'bobsled',\n 'bobtail',\n 'bodacious',\n 'body',\n 'bogged',\n 'boggle',\n 'bogus',\n 'boil',\n 'bok',\n 'bolster',\n 'bolt',\n 'bonanza',\n 'bonded',\n 'bonding',\n 'bondless',\n 'boned',\n 'bonehead',\n 'boneless',\n 'bonelike',\n 'boney',\n 'bonfire',\n 'bonnet',\n 'bonsai',\n 'bonus',\n 'bony',\n 'boogeyman',\n 'boogieman',\n 'book',\n 'boondocks',\n 'booted',\n 'booth',\n 'bootie',\n 'booting',\n 'bootlace',\n 'bootleg',\n 'boots',\n 'boozy',\n 'borax',\n 'boring',\n 'borough',\n 'borrower',\n 'borrowing',\n 'boss',\n 'botanical',\n 'botanist',\n 'botany',\n 'botch',\n 'both',\n 'bottle',\n 'bottling',\n 'bottom',\n 'bounce',\n 'bouncing',\n 'bouncy',\n 'bounding',\n 'boundless',\n 'bountiful',\n 'bovine',\n 'boxcar',\n 'boxer',\n 'boxing',\n 'boxlike',\n 'boxy',\n 'breach',\n 'breath',\n 'breeches',\n 'breeching',\n 'breeder',\n 'breeding',\n 'breeze',\n 'breezy',\n 'brethren',\n 'brewery',\n 'brewing',\n 'briar',\n 'bribe',\n 'brick',\n 'bride',\n 'bridged',\n 'brigade',\n 'bright',\n 'brilliant',\n 'brim',\n 'bring',\n 'brink',\n 'brisket',\n 'briskly',\n 'briskness',\n 'bristle',\n 'brittle',\n 'broadband',\n 'broadcast',\n 'broaden',\n 'broadly',\n 'broadness',\n 'broadside',\n 'broadways',\n 'broiler',\n 'broiling',\n 'broken',\n 'broker',\n 'bronchial',\n 'bronco',\n 'bronze',\n 'bronzing',\n 'brook',\n 'broom',\n 'brought',\n 'browbeat',\n 'brownnose',\n 'browse',\n 'browsing',\n 'bruising',\n 'brunch',\n 'brunette',\n 'brunt',\n 'brush',\n 'brussels',\n 'brute',\n 'brutishly',\n 'bubble',\n 'bubbling',\n 'bubbly',\n 'buccaneer',\n 'bucked',\n 'bucket',\n 'buckle',\n 'buckshot',\n 'buckskin',\n 'bucktooth',\n 'buckwheat',\n 'buddhism',\n 'buddhist',\n 'budding',\n 'buddy',\n 'budget',\n 'buffalo',\n 'buffed',\n 'buffer',\n 'buffing',\n 'buffoon',\n 'buggy',\n 'bulb',\n 'bulge',\n 'bulginess',\n 'bulgur',\n 'bulk',\n 'bulldog',\n 'bulldozer',\n 'bullfight',\n 'bullfrog',\n 'bullhorn',\n 'bullion',\n 'bullish',\n 'bullpen',\n 'bullring',\n 'bullseye',\n 'bullwhip',\n 'bully',\n 'bunch',\n 'bundle',\n 'bungee',\n 'bunion',\n 'bunkbed',\n 'bunkhouse',\n 'bunkmate',\n 'bunny',\n 'bunt',\n 'busboy',\n 'bush',\n 'busily',\n 'busload',\n 'bust',\n 'busybody',\n 'buzz',\n 'cabana',\n 'cabbage',\n 'cabbie',\n 'cabdriver',\n 'cable',\n 'caboose',\n 'cache',\n 'cackle',\n 'cacti',\n 'cactus',\n 'caddie',\n 'caddy',\n 'cadet',\n 'cadillac',\n 'cadmium',\n 'cage',\n 'cahoots',\n 'cake',\n 'calamari',\n 'calamity',\n 'calcium',\n 'calculate',\n 'calculus',\n 'caliber',\n 'calibrate',\n 'calm',\n 'caloric',\n 'calorie',\n 'calzone',\n 'camcorder',\n 'cameo',\n 'camera',\n 'camisole',\n 'camper',\n 'campfire',\n 'camping',\n 'campsite',\n 'campus',\n 'canal',\n 'canary',\n 'cancel',\n 'candied',\n 'candle',\n 'candy',\n 'cane',\n 'canine',\n 'canister',\n 'cannabis',\n 'canned',\n 'canning',\n 'cannon',\n 'cannot',\n 'canola',\n 'canon',\n 'canopener',\n 'canopy',\n 'canteen',\n 'canyon',\n 'capable',\n 'capably',\n 'capacity',\n 'cape',\n 'capillary',\n 'capital',\n 'capitol',\n 'capped',\n 'capricorn',\n 'capsize',\n 'capsule',\n 'caption',\n 'captivate',\n 'captive',\n 'captivity',\n 'capture',\n 'caramel',\n 'carat',\n 'caravan',\n 'carbon',\n 'cardboard',\n 'carded',\n 'cardiac',\n 'cardigan',\n 'cardinal',\n 'cardstock',\n 'carefully',\n 'caregiver',\n 'careless',\n 'caress',\n 'caretaker',\n 'cargo',\n 'caring',\n 'carless',\n 'carload',\n 'carmaker',\n 'carnage',\n 'carnation',\n 'carnival',\n 'carnivore',\n 'carol',\n 'carpenter',\n 'carpentry',\n 'carpool',\n 'carport',\n 'carried',\n 'carrot',\n 'carrousel',\n 'carry',\n 'cartel',\n 'cartload',\n 'carton',\n 'cartoon',\n 'cartridge',\n 'cartwheel',\n 'carve',\n 'carving',\n 'carwash',\n 'cascade',\n 'case',\n 'cash',\n 'casing',\n 'casino',\n 'casket',\n 'cassette',\n 'casually',\n 'casualty',\n 'catacomb',\n 'catalog',\n 'catalyst',\n 'catalyze',\n 'catapult',\n 'cataract',\n 'catatonic',\n 'catcall',\n 'catchable',\n 'catcher',\n 'catching',\n 'catchy',\n 'caterer',\n 'catering',\n 'catfight',\n 'catfish',\n 'cathedral',\n 'cathouse',\n 'catlike',\n 'catnap',\n 'catnip',\n 'catsup',\n 'cattail',\n 'cattishly',\n 'cattle',\n 'catty',\n 'catwalk',\n 'caucasian',\n 'caucus',\n 'causal',\n 'causation',\n 'cause',\n 'causing',\n 'cauterize',\n 'caution',\n 'cautious',\n 'cavalier',\n 'cavalry',\n 'caviar',\n 'cavity',\n 'cedar',\n 'celery',\n 'celestial',\n 'celibacy',\n 'celibate',\n 'celtic',\n 'cement',\n 'census',\n 'ceramics',\n 'ceremony',\n 'certainly',\n 'certainty',\n 'certified',\n 'certify',\n 'cesarean',\n 'cesspool',\n 'chafe',\n 'chaffing',\n 'chain',\n 'chair',\n 'chalice',\n 'challenge',\n 'chamber',\n 'chamomile',\n 'champion',\n 'chance',\n 'change',\n 'channel',\n 'chant',\n 'chaos',\n 'chaperone',\n 'chaplain',\n 'chapped',\n 'chaps',\n 'chapter',\n 'character',\n 'charbroil',\n 'charcoal',\n 'charger',\n 'charging',\n 'chariot',\n 'charity',\n 'charm',\n 'charred',\n 'charter',\n 'charting',\n 'chase',\n 'chasing',\n 'chaste',\n 'chastise',\n 'chastity',\n 'chatroom',\n 'chatter',\n 'chatting',\n 'chatty',\n 'cheating',\n 'cheddar',\n 'cheek',\n 'cheer',\n 'cheese',\n 'cheesy',\n 'chef',\n 'chemicals',\n 'chemist',\n 'chemo',\n 'cherisher',\n 'cherub',\n 'chess',\n 'chest',\n 'chevron',\n 'chevy',\n 'chewable',\n 'chewer',\n 'chewing',\n 'chewy',\n 'chief',\n 'chihuahua',\n 'childcare',\n 'childhood',\n 'childish',\n 'childless',\n 'childlike',\n 'chili',\n 'chill',\n 'chimp',\n 'chip',\n 'chirping',\n 'chirpy',\n 'chitchat',\n 'chivalry',\n 'chive',\n 'chloride',\n 'chlorine',\n 'choice',\n 'chokehold',\n 'choking',\n 'chomp',\n 'chooser',\n 'choosing',\n 'choosy',\n 'chop',\n 'chosen',\n 'chowder',\n 'chowtime',\n 'chrome',\n 'chubby',\n 'chuck',\n 'chug',\n 'chummy',\n 'chump',\n 'chunk',\n 'churn',\n 'chute',\n 'cider',\n 'cilantro',\n 'cinch',\n 'cinema',\n 'cinnamon',\n 'circle',\n 'circling',\n 'circular',\n 'circulate',\n 'circus',\n 'citable',\n 'citadel',\n 'citation',\n 'citizen',\n 'citric',\n 'citrus',\n 'city',\n 'civic',\n 'civil',\n 'clad',\n 'claim',\n 'clambake',\n 'clammy',\n 'clamor',\n 'clamp',\n 'clamshell',\n 'clang',\n 'clanking',\n 'clapped',\n 'clapper',\n 'clapping',\n 'clarify',\n 'clarinet',\n 'clarity',\n 'clash',\n 'clasp',\n 'class',\n 'clatter',\n 'clause',\n 'clavicle',\n 'claw',\n 'clay',\n 'clean',\n 'clear',\n 'cleat',\n 'cleaver',\n 'cleft',\n 'clench',\n 'clergyman',\n 'clerical',\n 'clerk',\n 'clever',\n 'clicker',\n 'client',\n 'climate',\n 'climatic',\n 'cling',\n 'clinic',\n 'clinking',\n 'clip',\n 'clique',\n 'cloak',\n 'clobber',\n 'clock',\n 'clone',\n 'cloning',\n 'closable',\n 'closure',\n 'clothes',\n 'clothing',\n 'cloud',\n 'clover',\n 'clubbed',\n 'clubbing',\n 'clubhouse',\n 'clump',\n 'clumsily',\n 'clumsy',\n 'clunky',\n 'clustered',\n 'clutch',\n 'clutter',\n 'coach',\n 'coagulant',\n 'coastal',\n 'coaster',\n 'coasting',\n 'coastland',\n 'coastline',\n 'coat',\n 'coauthor',\n 'cobalt',\n 'cobbler',\n 'cobweb',\n 'cocoa',\n 'coconut',\n 'cod',\n 'coeditor',\n 'coerce',\n 'coexist',\n 'coffee',\n 'cofounder',\n 'cognition',\n 'cognitive',\n 'cogwheel',\n 'coherence',\n 'coherent',\n 'cohesive',\n 'coil',\n 'coke',\n 'cola',\n 'cold',\n 'coleslaw',\n 'coliseum',\n 'collage',\n 'collapse',\n 'collar',\n 'collected',\n 'collector',\n 'collide',\n 'collie',\n 'collision',\n 'colonial',\n 'colonist',\n 'colonize',\n 'colony',\n 'colossal',\n 'colt',\n 'coma',\n 'come',\n 'comfort',\n 'comfy',\n 'comic',\n 'coming',\n 'comma',\n 'commence',\n 'commend',\n 'comment',\n 'commerce',\n 'commode',\n 'commodity',\n 'commodore',\n 'common',\n 'commotion',\n 'commute',\n 'commuting',\n 'compacted',\n 'compacter',\n 'compactly',\n 'compactor',\n 'companion',\n 'company',\n 'compare',\n 'compel',\n 'compile',\n 'comply',\n 'component',\n 'composed',\n 'composer',\n 'composite',\n 'compost',\n 'composure',\n 'compound',\n 'compress',\n 'comprised',\n 'computer',\n 'computing',\n 'comrade',\n 'concave',\n 'conceal',\n 'conceded',\n 'concept',\n 'concerned',\n 'concert',\n 'conch',\n 'concierge',\n 'concise',\n 'conclude',\n 'concrete',\n 'concur',\n 'condense',\n 'condiment',\n 'condition',\n 'condone',\n 'conducive',\n 'conductor',\n 'conduit',\n 'cone',\n 'confess',\n 'confetti',\n 'confidant',\n 'confident',\n 'confider',\n 'confiding',\n 'configure',\n 'confined',\n 'confining',\n 'confirm',\n 'conflict',\n 'conform',\n 'confound',\n 'confront',\n 'confused',\n 'confusing',\n 'confusion',\n 'congenial',\n 'congested',\n 'congrats',\n 'congress',\n 'conical',\n 'conjoined',\n 'conjure',\n 'conjuror',\n 'connected',\n 'connector',\n 'consensus',\n 'consent',\n 'console',\n 'consoling',\n 'consonant',\n 'constable',\n 'constant',\n 'constrain',\n 'constrict',\n 'construct',\n 'consult',\n 'consumer',\n 'consuming',\n 'contact',\n 'container',\n 'contempt',\n 'contend',\n 'contented',\n 'contently',\n 'contents',\n 'contest',\n 'context',\n 'contort',\n 'contour',\n 'contrite',\n 'control',\n 'contusion',\n 'convene',\n 'convent',\n 'copartner',\n 'cope',\n 'copied',\n 'copier',\n 'copilot',\n 'coping',\n 'copious',\n 'copper',\n 'copy',\n 'coral',\n 'cork',\n 'cornball',\n 'cornbread',\n 'corncob',\n 'cornea',\n 'corned',\n 'corner',\n 'cornfield',\n 'cornflake',\n 'cornhusk',\n 'cornmeal',\n 'cornstalk',\n 'corny',\n 'coronary',\n 'coroner',\n 'corporal',\n 'corporate',\n 'corral',\n 'correct',\n 'corridor',\n 'corrode',\n 'corroding',\n 'corrosive',\n 'corsage',\n 'corset',\n 'cortex',\n 'cosigner',\n 'cosmetics',\n 'cosmic',\n 'cosmos',\n 'cosponsor',\n 'cost',\n 'cottage',\n 'cotton',\n 'couch',\n 'cough',\n 'could',\n 'countable',\n 'countdown',\n 'counting',\n 'countless',\n 'country',\n 'county',\n 'courier',\n 'covenant',\n 'cover',\n 'coveted',\n 'coveting',\n 'coyness',\n 'cozily',\n 'coziness',\n 'cozy',\n 'crabbing',\n 'crabgrass',\n 'crablike',\n 'crabmeat',\n 'cradle',\n 'cradling',\n 'crafter',\n 'craftily',\n 'craftsman',\n 'craftwork',\n 'crafty',\n 'cramp',\n 'cranberry',\n 'crane',\n 'cranial',\n 'cranium',\n 'crank',\n 'crate',\n 'crave',\n 'craving',\n 'crawfish',\n 'crawlers',\n 'crawling',\n 'crayfish',\n 'crayon',\n 'crazed',\n 'crazily',\n 'craziness',\n 'crazy',\n 'creamed',\n 'creamer',\n 'creamlike',\n 'crease',\n 'creasing',\n 'creatable',\n 'create',\n 'creation',\n 'creative',\n 'creature',\n 'credible',\n 'credibly',\n 'credit',\n 'creed',\n 'creme',\n 'creole',\n 'crepe',\n 'crept',\n 'crescent',\n 'crested',\n 'cresting',\n 'crestless',\n 'crevice',\n 'crewless',\n 'crewman',\n 'crewmate',\n 'crib',\n 'cricket',\n 'cried',\n 'crier',\n 'crimp',\n 'crimson',\n 'cringe',\n 'cringing',\n 'crinkle',\n 'crinkly',\n 'crisped',\n 'crisping',\n 'crisply',\n 'crispness',\n 'crispy',\n 'criteria',\n 'critter',\n 'croak',\n 'crock',\n 'crook',\n 'croon',\n 'crop',\n 'cross',\n 'crouch',\n 'crouton',\n 'crowbar',\n 'crowd',\n 'crown',\n 'crucial',\n 'crudely',\n 'crudeness',\n 'cruelly',\n 'cruelness',\n 'cruelty',\n 'crumb',\n 'crummiest',\n 'crummy',\n 'crumpet',\n 'crumpled',\n 'cruncher',\n 'crunching',\n 'crunchy',\n 'crusader',\n 'crushable',\n 'crushed',\n 'crusher',\n 'crushing',\n 'crust',\n 'crux',\n 'crying',\n 'cryptic',\n 'crystal',\n 'cubbyhole',\n 'cube',\n 'cubical',\n 'cubicle',\n 'cucumber',\n 'cuddle',\n 'cuddly',\n 'cufflink',\n 'culinary',\n 'culminate',\n 'culpable',\n 'culprit',\n 'cultivate',\n 'cultural',\n 'culture',\n 'cupbearer',\n 'cupcake',\n 'cupid',\n 'cupped',\n 'cupping',\n 'curable',\n 'curator',\n 'curdle',\n 'cure',\n 'curfew',\n 'curing',\n 'curled',\n 'curler',\n 'curliness',\n 'curling',\n 'curly',\n 'curry',\n 'curse',\n 'cursive',\n 'cursor',\n 'curtain',\n 'curtly',\n 'curtsy',\n 'curvature',\n 'curve',\n 'curvy',\n 'cushy',\n 'cusp',\n 'cussed',\n 'custard',\n 'custodian',\n 'custody',\n 'customary',\n 'customer',\n 'customize',\n 'customs',\n 'cut',\n 'cycle',\n 'cyclic',\n 'cycling',\n 'cyclist',\n 'cylinder',\n 'cymbal',\n 'cytoplasm',\n 'cytoplast',\n 'dab',\n 'dad',\n 'daffodil',\n 'dagger',\n 'daily',\n 'daintily',\n 'dainty',\n 'dairy',\n 'daisy',\n 'dallying',\n 'dance',\n 'dancing',\n 'dandelion',\n 'dander',\n 'dandruff',\n 'dandy',\n 'danger',\n 'dangle',\n 'dangling',\n 'daredevil',\n 'dares',\n 'daringly',\n 'darkened',\n 'darkening',\n 'darkish',\n 'darkness',\n 'darkroom',\n 'darling',\n 'darn',\n 'dart',\n 'darwinism',\n 'dash',\n 'dastardly',\n 'data',\n 'datebook',\n 'dating',\n 'daughter',\n 'daunting',\n 'dawdler',\n 'dawn',\n 'daybed',\n 'daybreak',\n 'daycare',\n 'daydream',\n 'daylight',\n 'daylong',\n 'dayroom',\n 'daytime',\n 'dazzler',\n 'dazzling',\n 'deacon',\n 'deafening',\n 'deafness',\n 'dealer',\n 'dealing',\n 'dealmaker',\n 'dealt',\n 'dean',\n 'debatable',\n 'debate',\n 'debating',\n 'debit',\n 'debrief',\n 'debtless',\n 'debtor',\n 'debug',\n 'debunk',\n 'decade',\n 'decaf',\n 'decal',\n 'decathlon',\n 'decay',\n 'deceased',\n 'deceit',\n 'deceiver',\n 'deceiving',\n 'december',\n 'decency',\n 'decent',\n 'deception',\n 'deceptive',\n 'decibel',\n 'decidable',\n 'decimal',\n 'decimeter',\n 'decipher',\n 'deck',\n 'declared',\n 'decline',\n 'decode',\n 'decompose',\n 'decorated',\n 'decorator',\n 'decoy',\n 'decrease',\n 'decree',\n 'dedicate',\n 'dedicator',\n 'deduce',\n 'deduct',\n 'deed',\n 'deem',\n 'deepen',\n 'deeply',\n 'deepness',\n 'deface',\n 'defacing',\n 'defame',\n 'default',\n 'defeat',\n 'defection',\n 'defective',\n 'defendant',\n 'defender',\n 'defense',\n 'defensive',\n 'deferral',\n 'deferred',\n 'defiance',\n 'defiant',\n 'defile',\n 'defiling',\n 'define',\n 'definite',\n 'deflate',\n 'deflation',\n 'deflator',\n 'deflected',\n 'deflector',\n 'defog',\n 'deforest',\n 'defraud',\n 'defrost',\n 'deftly',\n 'defuse',\n 'defy',\n 'degraded',\n 'degrading',\n 'degrease',\n 'degree',\n 'dehydrate',\n 'deity',\n 'dejected',\n 'delay',\n 'delegate',\n 'delegator',\n 'delete',\n 'deletion',\n 'delicacy',\n 'delicate',\n 'delicious',\n 'delighted',\n 'delirious',\n 'delirium',\n 'deliverer',\n 'delivery',\n 'delouse',\n 'delta',\n 'deluge',\n 'delusion',\n 'deluxe',\n 'demanding',\n 'demeaning',\n 'demeanor',\n 'demise',\n 'democracy',\n 'democrat',\n 'demote',\n 'demotion',\n 'demystify',\n 'denatured',\n 'deniable',\n 'denial',\n 'denim',\n 'denote',\n 'dense',\n 'density',\n 'dental',\n 'dentist',\n 'denture',\n 'deny',\n 'deodorant',\n 'deodorize',\n 'departed',\n 'departure',\n 'depict',\n 'deplete',\n 'depletion',\n 'deplored',\n 'deploy',\n 'deport',\n 'depose',\n 'depraved',\n 'depravity',\n 'deprecate',\n 'depress',\n 'deprive',\n 'depth',\n 'deputize',\n 'deputy',\n 'derail',\n 'deranged',\n 'derby',\n 'derived',\n 'desecrate',\n 'deserve',\n 'deserving',\n 'designate',\n 'designed',\n 'designer',\n 'designing',\n 'deskbound',\n 'desktop',\n 'deskwork',\n 'desolate',\n 'despair',\n 'despise',\n 'despite',\n 'destiny',\n 'destitute',\n 'destruct',\n 'detached',\n 'detail',\n 'detection',\n 'detective',\n 'detector',\n 'detention',\n 'detergent',\n 'detest',\n 'detonate',\n 'detonator',\n 'detoxify',\n 'detract',\n 'deuce',\n 'devalue',\n 'deviancy',\n 'deviant',\n 'deviate',\n 'deviation',\n 'deviator',\n 'device',\n 'devious',\n 'devotedly',\n 'devotee',\n 'devotion',\n 'devourer',\n 'devouring',\n 'devoutly',\n 'dexterity',\n 'dexterous',\n 'diabetes',\n 'diabetic',\n 'diabolic',\n 'diagnoses',\n 'diagnosis',\n 'diagram',\n 'dial',\n 'diameter',\n 'diaper',\n 'diaphragm',\n 'diary',\n 'dice',\n 'dicing',\n 'dictate',\n 'dictation',\n 'dictator',\n 'difficult',\n 'diffused',\n 'diffuser',\n 'diffusion',\n 'diffusive',\n 'dig',\n 'dilation',\n 'diligence',\n 'diligent',\n 'dill',\n 'dilute',\n 'dime',\n 'diminish',\n 'dimly',\n 'dimmed',\n 'dimmer',\n 'dimness',\n 'dimple',\n 'diner',\n 'dingbat',\n 'dinghy',\n 'dinginess',\n 'dingo',\n 'dingy',\n 'dining',\n 'dinner',\n 'diocese',\n 'dioxide',\n 'diploma',\n 'dipped',\n 'dipper',\n 'dipping',\n 'directed',\n 'direction',\n 'directive',\n 'directly',\n 'directory',\n 'direness',\n 'dirtiness',\n 'disabled',\n 'disagree',\n 'disallow',\n 'disarm',\n 'disarray',\n 'disaster',\n 'disband',\n 'disbelief',\n 'disburse',\n 'discard',\n 'discern',\n 'discharge',\n 'disclose',\n 'discolor',\n 'discount',\n 'discourse',\n 'discover',\n 'discuss',\n 'disdain',\n 'disengage',\n 'disfigure',\n 'disgrace',\n 'dish',\n 'disinfect',\n 'disjoin',\n 'disk',\n 'dislike',\n 'disliking',\n 'dislocate',\n 'dislodge',\n 'disloyal',\n 'dismantle',\n 'dismay',\n 'dismiss',\n 'dismount',\n 'disobey',\n 'disorder',\n 'disown',\n 'disparate',\n 'disparity',\n 'dispatch',\n 'dispense',\n 'dispersal',\n 'dispersed',\n 'disperser',\n 'displace',\n 'display',\n 'displease',\n 'disposal',\n 'dispose',\n 'disprove',\n 'dispute',\n 'disregard',\n 'disrupt',\n 'dissuade',\n 'distance',\n 'distant',\n 'distaste',\n 'distill',\n 'distinct',\n 'distort',\n 'distract',\n 'distress',\n 'district',\n 'distrust',\n 'ditch',\n 'ditto',\n 'ditzy',\n 'dividable',\n 'divided',\n 'dividend',\n 'dividers',\n 'dividing',\n 'divinely',\n 'diving',\n 'divinity',\n 'divisible',\n 'divisibly',\n 'division',\n 'divisive',\n 'divorcee',\n 'dizziness',\n 'dizzy',\n 'doable',\n 'docile',\n 'dock',\n 'doctrine',\n 'document',\n 'dodge',\n 'dodgy',\n 'doily',\n 'doing',\n 'dole',\n 'dollar',\n 'dollhouse',\n 'dollop',\n 'dolly',\n 'dolphin',\n 'domain',\n 'domelike',\n 'domestic',\n 'dominion',\n 'dominoes',\n 'donated',\n 'donation',\n 'donator',\n 'donor',\n 'donut',\n 'doodle',\n 'doorbell',\n 'doorframe',\n 'doorknob',\n 'doorman',\n 'doormat',\n 'doornail',\n 'doorpost',\n 'doorstep',\n 'doorstop',\n 'doorway',\n 'doozy',\n 'dork',\n 'dormitory',\n 'dorsal',\n 'dosage',\n 'dose',\n 'dotted',\n 'doubling',\n 'douche',\n 'dove',\n 'down',\n 'dowry',\n 'doze',\n 'drab',\n 'dragging',\n 'dragonfly',\n 'dragonish',\n 'dragster',\n 'drainable',\n 'drainage',\n 'drained',\n 'drainer',\n 'drainpipe',\n 'dramatic',\n 'dramatize',\n 'drank',\n 'drapery',\n 'drastic',\n 'draw',\n 'dreaded',\n 'dreadful',\n 'dreadlock',\n 'dreamboat',\n 'dreamily',\n 'dreamland',\n 'dreamless',\n 'dreamlike',\n 'dreamt',\n 'dreamy',\n 'drearily',\n 'dreary',\n 'drench',\n 'dress',\n 'drew',\n 'dribble',\n 'dried',\n 'drier',\n 'drift',\n 'driller',\n 'drilling',\n 'drinkable',\n 'drinking',\n 'dripping',\n 'drippy',\n 'drivable',\n 'driven',\n 'driver',\n 'driveway',\n 'driving',\n 'drizzle',\n 'drizzly',\n 'drone',\n 'drool',\n 'droop',\n 'drop-down',\n 'dropbox',\n 'dropkick',\n 'droplet',\n 'dropout',\n 'dropper',\n 'drove',\n 'drown',\n 'drowsily',\n 'drudge',\n 'drum',\n 'dry',\n 'dubbed',\n 'dubiously',\n 'duchess',\n 'duckbill',\n 'ducking',\n 'duckling',\n 'ducktail',\n 'ducky',\n 'duct',\n 'dude',\n 'duffel',\n 'dugout',\n 'duh',\n 'duke',\n 'duller',\n 'dullness',\n 'duly',\n 'dumping',\n 'dumpling',\n 'dumpster',\n 'duo',\n 'dupe',\n 'duplex',\n 'duplicate',\n 'duplicity',\n 'durable',\n 'durably',\n 'duration',\n 'duress',\n 'during',\n 'dusk',\n 'dust',\n 'dutiful',\n 'duty',\n 'duvet',\n 'dwarf',\n 'dweeb',\n 'dwelled',\n 'dweller',\n 'dwelling',\n 'dwindle',\n 'dwindling',\n 'dynamic',\n 'dynamite',\n 'dynasty',\n 'dyslexia',\n 'dyslexic',\n 'each',\n 'eagle',\n 'earache',\n 'eardrum',\n 'earflap',\n 'earful',\n 'earlobe',\n 'early',\n 'earmark',\n 'earmuff',\n 'earphone',\n 'earpiece',\n 'earplugs',\n 'earring',\n 'earshot',\n 'earthen',\n 'earthlike',\n 'earthling',\n 'earthly',\n 'earthworm',\n 'earthy',\n 'earwig',\n 'easeful',\n 'easel',\n 'easiest',\n 'easily',\n 'easiness',\n 'easing',\n 'eastbound',\n 'eastcoast',\n 'easter',\n 'eastward',\n 'eatable',\n 'eaten',\n 'eatery',\n 'eating',\n 'eats',\n 'ebay',\n 'ebony',\n 'ebook',\n 'ecard',\n 'eccentric',\n 'echo',\n 'eclair',\n 'eclipse',\n 'ecologist',\n 'ecology',\n 'economic',\n 'economist',\n 'economy',\n 'ecosphere',\n 'ecosystem',\n 'edge',\n 'edginess',\n 'edging',\n 'edgy',\n 'edition',\n 'editor',\n 'educated',\n 'education',\n 'educator',\n 'eel',\n 'effective',\n 'effects',\n 'efficient',\n 'effort',\n 'eggbeater',\n 'egging',\n 'eggnog',\n 'eggplant',\n 'eggshell',\n 'egomaniac',\n 'egotism',\n 'egotistic',\n 'either',\n 'eject',\n 'elaborate',\n 'elastic',\n 'elated',\n 'elbow',\n 'eldercare',\n 'elderly',\n 'eldest',\n 'electable',\n 'election',\n 'elective',\n 'elephant',\n 'elevate',\n 'elevating',\n 'elevation',\n 'elevator',\n 'eleven',\n 'elf',\n 'eligible',\n 'eligibly',\n 'eliminate',\n 'elite',\n 'elitism',\n 'elixir',\n 'elk',\n 'ellipse',\n 'elliptic',\n 'elm',\n 'elongated',\n 'elope',\n 'eloquence',\n 'eloquent',\n 'elsewhere',\n 'elude',\n 'elusive',\n 'elves',\n 'email',\n 'embargo',\n 'embark',\n 'embassy',\n 'embattled',\n 'embellish',\n 'ember',\n 'embezzle',\n 'emblaze',\n 'emblem',\n 'embody',\n 'embolism',\n 'emboss',\n 'embroider',\n 'emcee',\n 'emerald',\n 'emergency',\n 'emission',\n 'emit',\n 'emote',\n 'emoticon',\n 'emotion',\n 'empathic',\n 'empathy',\n 'emperor',\n 'emphases',\n 'emphasis',\n 'emphasize',\n 'emphatic',\n 'empirical',\n 'employed',\n 'employee',\n 'employer',\n 'emporium',\n 'empower',\n 'emptier',\n 'emptiness',\n 'empty',\n 'emu',\n 'enable',\n 'enactment',\n 'enamel',\n 'enchanted',\n 'enchilada',\n 'encircle',\n 'enclose',\n 'enclosure',\n 'encode',\n 'encore',\n 'encounter',\n 'encourage',\n 'encroach',\n 'encrust',\n 'encrypt',\n 'endanger',\n 'endeared',\n 'endearing',\n 'ended',\n 'ending',\n 'endless',\n 'endnote',\n 'endocrine',\n 'endorphin',\n 'endorse',\n 'endowment',\n 'endpoint',\n 'endurable',\n 'endurance',\n 'enduring',\n 'energetic',\n 'energize',\n 'energy',\n 'enforced',\n 'enforcer',\n 'engaged',\n 'engaging',\n 'engine',\n 'engorge',\n 'engraved',\n 'engraver',\n 'engraving',\n 'engross',\n 'engulf',\n 'enhance',\n 'enigmatic',\n 'enjoyable',\n 'enjoyably',\n 'enjoyer',\n 'enjoying',\n 'enjoyment',\n 'enlarged',\n 'enlarging',\n 'enlighten',\n 'enlisted',\n 'enquirer',\n 'enrage',\n 'enrich',\n 'enroll',\n 'enslave',\n 'ensnare',\n 'ensure',\n 'entail',\n 'entangled',\n 'entering',\n 'entertain',\n 'enticing',\n 'entire',\n 'entitle',\n 'entity',\n 'entomb',\n 'entourage',\n 'entrap',\n 'entree',\n 'entrench',\n 'entrust',\n 'entryway',\n 'entwine',\n 'enunciate',\n 'envelope',\n 'enviable',\n 'enviably',\n 'envious',\n 'envision',\n 'envoy',\n 'envy',\n 'enzyme',\n 'epic',\n 'epidemic',\n 'epidermal',\n 'epidermis',\n 'epidural',\n 'epilepsy',\n 'epileptic',\n 'epilogue',\n 'epiphany',\n 'episode',\n 'equal',\n 'equate',\n 'equation',\n 'equator',\n 'equinox',\n 'equipment',\n 'equity',\n 'equivocal',\n 'eradicate',\n 'erasable',\n 'erased',\n 'eraser',\n 'erasure',\n 'ergonomic',\n 'errand',\n 'errant',\n 'erratic',\n 'error',\n 'erupt',\n 'escalate',\n 'escalator',\n 'escapable',\n 'escapade',\n 'escapist',\n 'escargot',\n 'eskimo',\n 'esophagus',\n 'espionage',\n 'espresso',\n 'esquire',\n 'essay',\n 'essence',\n 'essential',\n 'establish',\n 'estate',\n 'esteemed',\n 'estimate',\n 'estimator',\n 'estranged',\n 'estrogen',\n 'etching',\n 'eternal',\n 'eternity',\n 'ethanol',\n 'ether',\n 'ethically',\n 'ethics',\n 'euphemism',\n 'evacuate',\n 'evacuee',\n 'evade',\n 'evaluate',\n 'evaluator',\n 'evaporate',\n 'evasion',\n 'evasive',\n 'even',\n 'everglade',\n 'evergreen',\n 'everybody',\n 'everyday',\n 'everyone',\n 'evict',\n 'evidence',\n 'evident',\n 'evil',\n 'evoke',\n 'evolution',\n 'evolve',\n 'exact',\n 'exalted',\n 'example',\n 'excavate',\n 'excavator',\n 'exceeding',\n 'exception',\n 'excess',\n 'exchange',\n 'excitable',\n 'exciting',\n 'exclaim',\n 'exclude',\n 'excluding',\n 'exclusion',\n 'exclusive',\n 'excretion',\n 'excretory',\n 'excursion',\n 'excusable',\n 'excusably',\n 'excuse',\n 'exemplary',\n 'exemplify',\n 'exemption',\n 'exerciser',\n 'exert',\n 'exes',\n 'exfoliate',\n 'exhale',\n 'exhaust',\n 'exhume',\n 'exile',\n 'existing',\n 'exit',\n 'exodus',\n 'exonerate',\n 'exorcism',\n 'exorcist',\n 'expand',\n 'expanse',\n 'expansion',\n 'expansive',\n 'expectant',\n 'expedited',\n 'expediter',\n 'expel',\n 'expend',\n 'expenses',\n 'expensive',\n 'expert',\n 'expire',\n 'expiring',\n 'explain',\n 'expletive',\n 'explicit',\n 'explode',\n 'exploit',\n 'explore',\n 'exploring',\n 'exponent',\n 'exporter',\n 'exposable',\n 'expose',\n 'exposure',\n 'express',\n 'expulsion',\n 'exquisite',\n 'extended',\n 'extending',\n 'extent',\n 'extenuate',\n 'exterior',\n 'external',\n 'extinct',\n 'extortion',\n 'extradite',\n 'extras',\n 'extrovert',\n 'extrude',\n 'extruding',\n 'exuberant',\n 'fable',\n 'fabric',\n 'fabulous',\n 'facebook',\n 'facecloth',\n 'facedown',\n 'faceless',\n 'facelift',\n 'faceplate',\n 'faceted',\n 'facial',\n 'facility',\n 'facing',\n 'facsimile',\n 'faction',\n 'factoid',\n 'factor',\n 'factsheet',\n 'factual',\n 'faculty',\n 'fade',\n 'fading',\n 'failing',\n 'falcon',\n 'fall',\n 'false',\n 'falsify',\n 'fame',\n 'familiar',\n 'family',\n 'famine',\n 'famished',\n 'fanatic',\n 'fancied',\n 'fanciness',\n 'fancy',\n 'fanfare',\n 'fang',\n 'fanning',\n 'fantasize',\n 'fantastic',\n 'fantasy',\n 'fascism',\n 'fastball',\n 'faster',\n 'fasting',\n 'fastness',\n 'faucet',\n 'favorable',\n 'favorably',\n 'favored',\n 'favoring',\n 'favorite',\n 'fax',\n 'feast',\n 'federal',\n 'fedora',\n 'feeble',\n 'feed',\n 'feel',\n 'feisty',\n 'feline',\n 'felt-tip',\n 'feminine',\n 'feminism',\n 'feminist',\n 'feminize',\n 'femur',\n 'fence',\n 'fencing',\n 'fender',\n 'ferment',\n 'fernlike',\n 'ferocious',\n 'ferocity',\n 'ferret',\n 'ferris',\n 'ferry',\n 'fervor',\n 'fester',\n 'festival',\n 'festive',\n 'festivity',\n 'fetal',\n 'fetch',\n 'fever',\n 'fiber',\n 'fiction',\n 'fiddle',\n 'fiddling',\n 'fidelity',\n 'fidgeting',\n 'fidgety',\n 'fifteen',\n 'fifth',\n 'fiftieth',\n 'fifty',\n 'figment',\n 'figure',\n 'figurine',\n 'filing',\n 'filled',\n 'filler',\n 'filling',\n 'film',\n 'filter',\n 'filth',\n 'filtrate',\n 'finale',\n 'finalist',\n 'finalize',\n 'finally',\n 'finance',\n 'financial',\n 'finch',\n 'fineness',\n 'finer',\n 'finicky',\n 'finished',\n 'finisher',\n 'finishing',\n 'finite',\n 'finless',\n 'finlike',\n 'fiscally',\n 'fit',\n 'five',\n 'flaccid',\n 'flagman',\n 'flagpole',\n 'flagship',\n 'flagstick',\n 'flagstone',\n 'flail',\n 'flakily',\n 'flaky',\n 'flame',\n 'flammable',\n 'flanked',\n 'flanking',\n 'flannels',\n 'flap',\n 'flaring',\n 'flashback',\n 'flashbulb',\n 'flashcard',\n 'flashily',\n 'flashing',\n 'flashy',\n 'flask',\n 'flatbed',\n 'flatfoot',\n 'flatly',\n 'flatness',\n 'flatten',\n 'flattered',\n 'flatterer',\n 'flattery',\n 'flattop',\n 'flatware',\n 'flatworm',\n 'flavored',\n 'flavorful',\n 'flavoring',\n 'flaxseed',\n 'fled',\n 'fleshed',\n 'fleshy',\n 'flick',\n 'flier',\n 'flight',\n 'flinch',\n 'fling',\n 'flint',\n 'flip',\n 'flirt',\n 'float',\n 'flock',\n 'flogging',\n 'flop',\n 'floral',\n 'florist',\n 'floss',\n 'flounder',\n 'flyable',\n 'flyaway',\n 'flyer',\n 'flying',\n 'flyover',\n 'flypaper',\n 'foam',\n 'foe',\n 'fog',\n 'foil',\n 'folic',\n 'folk',\n 'follicle',\n 'follow',\n 'fondling',\n 'fondly',\n 'fondness',\n 'fondue',\n 'font',\n 'food',\n 'fool',\n 'footage',\n 'football',\n 'footbath',\n 'footboard',\n 'footer',\n 'footgear',\n 'foothill',\n 'foothold',\n 'footing',\n 'footless',\n 'footman',\n 'footnote',\n 'footpad',\n 'footpath',\n 'footprint',\n 'footrest',\n 'footsie',\n 'footsore',\n 'footwear',\n 'footwork',\n 'fossil',\n 'foster',\n 'founder',\n 'founding',\n 'fountain',\n 'fox',\n 'foyer',\n 'fraction',\n 'fracture',\n 'fragile',\n 'fragility',\n 'fragment',\n 'fragrance',\n 'fragrant',\n 'frail',\n 'frame',\n 'framing',\n 'frantic',\n 'fraternal',\n 'frayed',\n 'fraying',\n 'frays',\n 'freckled',\n 'freckles',\n 'freebase',\n 'freebee',\n 'freebie',\n 'freedom',\n 'freefall',\n 'freehand',\n 'freeing',\n 'freeload',\n 'freely',\n 'freemason',\n 'freeness',\n 'freestyle',\n 'freeware',\n 'freeway',\n 'freewill',\n 'freezable',\n 'freezing',\n 'freight',\n 'french',\n 'frenzied',\n 'frenzy',\n 'frequency',\n 'frequent',\n 'fresh',\n 'fretful',\n 'fretted',\n 'friction',\n 'friday',\n 'fridge',\n 'fried',\n 'friend',\n 'frighten',\n 'frightful',\n 'frigidity',\n 'frigidly',\n 'frill',\n 'fringe',\n 'frisbee',\n 'frisk',\n 'fritter',\n 'frivolous',\n 'frolic',\n 'from',\n 'front',\n 'frostbite',\n 'frosted',\n 'frostily',\n 'frosting',\n 'frostlike',\n 'frosty',\n 'froth',\n 'frown',\n 'frozen',\n 'fructose',\n 'frugality',\n 'frugally',\n 'fruit',\n 'frustrate',\n 'frying',\n 'gab',\n 'gaffe',\n 'gag',\n 'gainfully',\n 'gaining',\n 'gains',\n 'gala',\n 'gallantly',\n 'galleria',\n 'gallery',\n 'galley',\n 'gallon',\n 'gallows',\n 'gallstone',\n 'galore',\n 'galvanize',\n 'gambling',\n 'game',\n 'gaming',\n 'gamma',\n 'gander',\n 'gangly',\n 'gangrene',\n 'gangway',\n 'gap',\n 'garage',\n 'garbage',\n 'garden',\n 'gargle',\n 'garland',\n 'garlic',\n 'garment',\n 'garnet',\n 'garnish',\n 'garter',\n 'gas',\n 'gatherer',\n 'gathering',\n 'gating',\n 'gauging',\n 'gauntlet',\n 'gauze',\n 'gave',\n 'gawk',\n 'gazing',\n 'gear',\n 'gecko',\n 'geek',\n 'geiger',\n 'gem',\n 'gender',\n 'generic',\n 'generous',\n 'genetics',\n 'genre',\n 'gentile',\n 'gentleman',\n 'gently',\n 'gents',\n 'geography',\n 'geologic',\n 'geologist',\n 'geology',\n 'geometric',\n 'geometry',\n 'geranium',\n 'gerbil',\n 'geriatric',\n 'germicide',\n 'germinate',\n 'germless',\n 'germproof',\n 'gestate',\n 'gestation',\n 'gesture',\n 'getaway',\n 'getting',\n 'getup',\n 'giant',\n 'gibberish',\n 'giblet',\n 'giddily',\n 'giddiness',\n 'giddy',\n 'gift',\n 'gigabyte',\n 'gigahertz',\n 'gigantic',\n 'giggle',\n 'giggling',\n 'giggly',\n 'gigolo',\n 'gilled',\n 'gills',\n 'gimmick',\n 'girdle',\n 'giveaway',\n 'given',\n 'giver',\n 'giving',\n 'gizmo',\n 'gizzard',\n 'glacial',\n 'glacier',\n 'glade',\n 'gladiator',\n 'gladly',\n 'glamorous',\n 'glamour',\n 'glance',\n 'glancing',\n 'glandular',\n 'glare',\n 'glaring',\n 'glass',\n 'glaucoma',\n 'glazing',\n 'gleaming',\n 'gleeful',\n 'glider',\n 'gliding',\n 'glimmer',\n 'glimpse',\n 'glisten',\n 'glitch',\n 'glitter',\n 'glitzy',\n 'gloater',\n 'gloating',\n 'gloomily',\n 'gloomy',\n 'glorified',\n 'glorifier',\n 'glorify',\n 'glorious',\n 'glory',\n 'gloss',\n 'glove',\n 'glowing',\n 'glowworm',\n 'glucose',\n 'glue',\n 'gluten',\n 'glutinous',\n 'glutton',\n 'gnarly',\n 'gnat',\n 'goal',\n 'goatskin',\n 'goes',\n 'goggles',\n 'going',\n 'goldfish',\n 'goldmine',\n 'goldsmith',\n 'golf',\n 'goliath',\n 'gonad',\n 'gondola',\n 'gone',\n 'gong',\n 'good',\n 'gooey',\n 'goofball',\n 'goofiness',\n 'goofy',\n 'google',\n 'goon',\n 'gopher',\n 'gore',\n 'gorged',\n 'gorgeous',\n 'gory',\n 'gosling',\n 'gossip',\n 'gothic',\n 'gotten',\n 'gout',\n 'gown',\n 'grab',\n 'graceful',\n 'graceless',\n 'gracious',\n 'gradation',\n 'graded',\n 'grader',\n 'gradient',\n 'grading',\n 'gradually',\n 'graduate',\n 'graffiti',\n 'grafted',\n 'grafting',\n 'grain',\n 'granddad',\n 'grandkid',\n 'grandly',\n 'grandma',\n 'grandpa',\n 'grandson',\n 'granite',\n 'granny',\n 'granola',\n 'grant',\n 'granular',\n 'grape',\n 'graph',\n 'grapple',\n 'grappling',\n 'grasp',\n 'grass',\n 'gratified',\n 'gratify',\n 'grating',\n 'gratitude',\n 'gratuity',\n 'gravel',\n 'graveness',\n 'graves',\n 'graveyard',\n 'gravitate',\n 'gravity',\n 'gravy',\n 'gray',\n 'grazing',\n 'greasily',\n 'greedily',\n 'greedless',\n 'greedy',\n 'green',\n 'greeter',\n 'greeting',\n 'grew',\n 'greyhound',\n 'grid',\n 'grief',\n 'grievance',\n 'grieving',\n 'grievous',\n 'grill',\n 'grimace',\n 'grimacing',\n 'grime',\n 'griminess',\n 'grimy',\n 'grinch',\n 'grinning',\n 'grip',\n 'gristle',\n 'grit',\n 'groggily',\n 'groggy',\n 'groin',\n 'groom',\n 'groove',\n 'grooving',\n 'groovy',\n 'grope',\n 'ground',\n 'grouped',\n 'grout',\n 'grove',\n 'grower',\n 'growing',\n 'growl',\n 'grub',\n 'grudge',\n 'grudging',\n 'grueling',\n 'gruffly',\n 'grumble',\n 'grumbling',\n 'grumbly',\n 'grumpily',\n 'grunge',\n 'grunt',\n 'guacamole',\n 'guidable',\n 'guidance',\n 'guide',\n 'guiding',\n 'guileless',\n 'guise',\n 'gulf',\n 'gullible',\n 'gully',\n 'gulp',\n 'gumball',\n 'gumdrop',\n 'gumminess',\n 'gumming',\n 'gummy',\n 'gurgle',\n 'gurgling',\n 'guru',\n 'gush',\n 'gusto',\n 'gusty',\n 'gutless',\n 'guts',\n 'gutter',\n 'guy',\n 'guzzler',\n 'gyration',\n 'habitable',\n 'habitant',\n 'habitat',\n 'habitual',\n 'hacked',\n 'hacker',\n 'hacking',\n 'hacksaw',\n 'had',\n 'haggler',\n 'haiku',\n 'half',\n 'halogen',\n 'halt',\n 'halved',\n 'halves',\n 'hamburger',\n 'hamlet',\n 'hammock',\n 'hamper',\n 'hamster',\n 'hamstring',\n 'handbag',\n 'handball',\n 'handbook',\n 'handbrake',\n 'handcart',\n 'handclap',\n 'handclasp',\n 'handcraft',\n 'handcuff',\n 'handed',\n 'handful',\n 'handgrip',\n 'handgun',\n 'handheld',\n 'handiness',\n 'handiwork',\n 'handlebar',\n 'handled',\n 'handler',\n 'handling',\n 'handmade',\n 'handoff',\n 'handpick',\n 'handprint',\n 'handrail',\n 'handsaw',\n 'handset',\n 'handsfree',\n 'handshake',\n 'handstand',\n 'handwash',\n 'handwork',\n 'handwoven',\n 'handwrite',\n 'handyman',\n 'hangnail',\n 'hangout',\n 'hangover',\n 'hangup',\n 'hankering',\n 'hankie',\n 'hanky',\n 'haphazard',\n 'happening',\n 'happier',\n 'happiest',\n 'happily',\n 'happiness',\n 'happy',\n 'harbor',\n 'hardcopy',\n 'hardcore',\n 'hardcover',\n 'harddisk',\n 'hardened',\n 'hardener',\n 'hardening',\n 'hardhat',\n 'hardhead',\n 'hardiness',\n 'hardly',\n 'hardness',\n 'hardship',\n 'hardware',\n 'hardwired',\n 'hardwood',\n 'hardy',\n 'harmful',\n 'harmless',\n 'harmonica',\n 'harmonics',\n 'harmonize',\n 'harmony',\n 'harness',\n 'harpist',\n 'harsh',\n 'harvest',\n 'hash',\n 'hassle',\n 'haste',\n 'hastily',\n 'hastiness',\n 'hasty',\n 'hatbox',\n 'hatchback',\n 'hatchery',\n 'hatchet',\n 'hatching',\n 'hatchling',\n 'hate',\n 'hatless',\n 'hatred',\n 'haunt',\n 'haven',\n 'hazard',\n 'hazelnut',\n 'hazily',\n 'haziness',\n 'hazing',\n 'hazy',\n 'headache',\n 'headband',\n 'headboard',\n 'headcount',\n 'headdress',\n 'headed',\n 'header',\n 'headfirst',\n 'headgear',\n 'heading',\n 'headlamp',\n 'headless',\n 'headlock',\n 'headphone',\n 'headpiece',\n 'headrest',\n 'headroom',\n 'headscarf',\n 'headset',\n 'headsman',\n 'headstand',\n 'headstone',\n 'headway',\n 'headwear',\n 'heap',\n 'heat',\n 'heave',\n 'heavily',\n 'heaviness',\n 'heaving',\n 'hedge',\n 'hedging',\n 'heftiness',\n 'hefty',\n 'helium',\n 'helmet',\n 'helper',\n 'helpful',\n 'helping',\n 'helpless',\n 'helpline',\n 'hemlock',\n 'hemstitch',\n 'hence',\n 'henchman',\n 'henna',\n 'herald',\n 'herbal',\n 'herbicide',\n 'herbs',\n 'heritage',\n 'hermit',\n 'heroics',\n 'heroism',\n 'herring',\n 'herself',\n 'hertz',\n 'hesitancy',\n 'hesitant',\n 'hesitate',\n 'hexagon',\n 'hexagram',\n 'hubcap',\n 'huddle',\n 'huddling',\n 'huff',\n 'hug',\n 'hula',\n 'hulk',\n 'hull',\n 'human',\n 'humble',\n 'humbling',\n 'humbly',\n 'humid',\n 'humiliate',\n 'humility',\n 'humming',\n 'hummus',\n 'humongous',\n 'humorist',\n 'humorless',\n 'humorous',\n 'humpback',\n 'humped',\n 'humvee',\n 'hunchback',\n 'hundredth',\n 'hunger',\n 'hungrily',\n 'hungry',\n 'hunk',\n 'hunter',\n 'hunting',\n 'huntress',\n 'huntsman',\n 'hurdle',\n 'hurled',\n 'hurler',\n 'hurling',\n 'hurray',\n 'hurricane',\n 'hurried',\n 'hurry',\n 'hurt',\n 'husband',\n 'hush',\n 'husked',\n 'huskiness',\n 'hut',\n 'hybrid',\n 'hydrant',\n 'hydrated',\n 'hydration',\n 'hydrogen',\n 'hydroxide',\n 'hyperlink',\n 'hypertext',\n 'hyphen',\n 'hypnoses',\n 'hypnosis',\n 'hypnotic',\n 'hypnotism',\n 'hypnotist',\n 'hypnotize',\n 'hypocrisy',\n 'hypocrite',\n 'ibuprofen',\n 'ice',\n 'iciness',\n 'icing',\n 'icky',\n 'icon',\n 'icy',\n 'idealism',\n 'idealist',\n 'idealize',\n 'ideally',\n 'idealness',\n 'identical',\n 'identify',\n 'identity',\n 'ideology',\n 'idiocy',\n 'idiom',\n 'idly',\n 'igloo',\n 'ignition',\n 'ignore',\n 'iguana',\n 'illicitly',\n 'illusion',\n 'illusive',\n 'image',\n 'imaginary',\n 'imagines',\n 'imaging',\n 'imbecile',\n 'imitate',\n 'imitation',\n 'immature',\n 'immerse',\n 'immersion',\n 'imminent',\n 'immobile',\n 'immodest',\n 'immorally',\n 'immortal',\n 'immovable',\n 'immovably',\n 'immunity',\n 'immunize',\n 'impaired',\n 'impale',\n 'impart',\n 'impatient',\n 'impeach',\n 'impeding',\n 'impending',\n 'imperfect',\n 'imperial',\n 'impish',\n 'implant',\n 'implement',\n 'implicate',\n 'implicit',\n 'implode',\n 'implosion',\n 'implosive',\n 'imply',\n 'impolite',\n 'important',\n 'importer',\n 'impose',\n 'imposing',\n 'impotence',\n 'impotency',\n 'impotent',\n 'impound',\n 'imprecise',\n 'imprint',\n 'imprison',\n 'impromptu',\n 'improper',\n 'improve',\n 'improving',\n 'improvise',\n 'imprudent',\n 'impulse',\n 'impulsive',\n 'impure',\n 'impurity',\n 'iodine',\n 'iodize',\n 'ion',\n 'ipad',\n 'iphone',\n 'ipod',\n 'irate',\n 'irk',\n 'iron',\n 'irregular',\n 'irrigate',\n 'irritable',\n 'irritably',\n 'irritant',\n 'irritate',\n 'islamic',\n 'islamist',\n 'isolated',\n 'isolating',\n 'isolation',\n 'isotope',\n 'issue',\n 'issuing',\n 'italicize',\n 'italics',\n 'item',\n 'itinerary',\n 'itunes',\n 'ivory',\n 'ivy',\n 'jab',\n 'jackal',\n 'jacket',\n 'jackknife',\n 'jackpot',\n 'jailbird',\n 'jailbreak',\n 'jailer',\n 'jailhouse',\n 'jalapeno',\n 'jam',\n 'janitor',\n 'january',\n 'jargon',\n 'jarring',\n 'jasmine',\n 'jaundice',\n 'jaunt',\n 'java',\n 'jawed',\n 'jawless',\n 'jawline',\n 'jaws',\n 'jaybird',\n 'jaywalker',\n 'jazz',\n 'jeep',\n 'jeeringly',\n 'jellied',\n 'jelly',\n 'jersey',\n 'jester',\n 'jet',\n 'jiffy',\n 'jigsaw',\n 'jimmy',\n 'jingle',\n 'jingling',\n 'jinx',\n 'jitters',\n 'jittery',\n 'job',\n 'jockey',\n 'jockstrap',\n 'jogger',\n 'jogging',\n 'john',\n 'joining',\n 'jokester',\n 'jokingly',\n 'jolliness',\n 'jolly',\n 'jolt',\n 'jot',\n 'jovial',\n 'joyfully',\n 'joylessly',\n 'joyous',\n 'joyride',\n 'joystick',\n 'jubilance',\n 'jubilant',\n 'judge',\n 'judgingly',\n 'judicial',\n 'judiciary',\n 'judo',\n 'juggle',\n 'juggling',\n 'jugular',\n 'juice',\n 'juiciness',\n 'juicy',\n 'jujitsu',\n 'jukebox',\n 'july',\n 'jumble',\n 'jumbo',\n 'jump',\n 'junction',\n 'juncture',\n 'june',\n 'junior',\n 'juniper',\n 'junkie',\n 'junkman',\n 'junkyard',\n 'jurist',\n 'juror',\n 'jury',\n 'justice',\n 'justifier',\n 'justify',\n 'justly',\n 'justness',\n 'juvenile',\n 'kabob',\n 'kangaroo',\n 'karaoke',\n 'karate',\n 'karma',\n 'kebab',\n 'keenly',\n 'keenness',\n 'keep',\n 'keg',\n 'kelp',\n 'kennel',\n 'kept',\n 'kerchief',\n 'kerosene',\n 'kettle',\n 'kick',\n 'kiln',\n 'kilobyte',\n 'kilogram',\n 'kilometer',\n 'kilowatt',\n 'kilt',\n 'kimono',\n 'kindle',\n 'kindling',\n 'kindly',\n 'kindness',\n 'kindred',\n 'kinetic',\n 'kinfolk',\n 'king',\n 'kinship',\n 'kinsman',\n 'kinswoman',\n 'kissable',\n 'kisser',\n 'kissing',\n 'kitchen',\n 'kite',\n 'kitten',\n 'kitty',\n 'kiwi',\n 'kleenex',\n 'knapsack',\n 'knee',\n 'knelt',\n 'knickers',\n 'knoll',\n 'koala',\n 'kooky',\n 'kosher',\n 'krypton',\n 'kudos',\n 'kung',\n 'labored',\n 'laborer',\n 'laboring',\n 'laborious',\n 'labrador',\n 'ladder',\n 'ladies',\n 'ladle',\n 'ladybug',\n 'ladylike',\n 'lagged',\n 'lagging',\n 'lagoon',\n 'lair',\n 'lake',\n 'lance',\n 'landed',\n 'landfall',\n 'landfill',\n 'landing',\n 'landlady',\n 'landless',\n 'landline',\n 'landlord',\n 'landmark',\n 'landmass',\n 'landmine',\n 'landowner',\n 'landscape',\n 'landside',\n 'landslide',\n 'language',\n 'lankiness',\n 'lanky',\n 'lantern',\n 'lapdog',\n 'lapel',\n 'lapped',\n 'lapping',\n 'laptop',\n 'lard',\n 'large',\n 'lark',\n 'lash',\n 'lasso',\n 'last',\n 'latch',\n 'late',\n 'lather',\n 'latitude',\n 'latrine',\n 'latter',\n 'latticed',\n 'launch',\n 'launder',\n 'laundry',\n 'laurel',\n 'lavender',\n 'lavish',\n 'laxative',\n 'lazily',\n 'laziness',\n 'lazy',\n 'lecturer',\n 'left',\n 'legacy',\n 'legal',\n 'legend',\n 'legged',\n 'leggings',\n 'legible',\n 'legibly',\n 'legislate',\n 'lego',\n 'legroom',\n 'legume',\n 'legwarmer',\n 'legwork',\n 'lemon',\n 'lend',\n 'length',\n 'lens',\n 'lent',\n 'leotard',\n 'lesser',\n 'letdown',\n 'lethargic',\n 'lethargy',\n 'letter',\n 'lettuce',\n 'level',\n 'leverage',\n 'levers',\n 'levitate',\n 'levitator',\n 'liability',\n 'liable',\n 'liberty',\n 'librarian',\n 'library',\n 'licking',\n 'licorice',\n 'lid',\n 'life',\n 'lifter',\n 'lifting',\n 'liftoff',\n 'ligament',\n 'likely',\n 'likeness',\n 'likewise',\n 'liking',\n 'lilac',\n 'lilly',\n 'lily',\n 'limb',\n 'limeade',\n 'limelight',\n 'limes',\n 'limit',\n 'limping',\n 'limpness',\n 'line',\n 'lingo',\n 'linguini',\n 'linguist',\n 'lining',\n 'linked',\n 'linoleum',\n 'linseed',\n 'lint',\n 'lion',\n 'lip',\n 'liquefy',\n 'liqueur',\n 'liquid',\n 'lisp',\n 'list',\n 'litigate',\n 'litigator',\n 'litmus',\n 'litter',\n 'little',\n 'livable',\n 'lived',\n 'lively',\n 'liver',\n 'livestock',\n 'lividly',\n 'living',\n 'lizard',\n 'lubricant',\n 'lubricate',\n 'lucid',\n 'luckily',\n 'luckiness',\n 'luckless',\n 'lucrative',\n 'ludicrous',\n 'lugged',\n 'lukewarm',\n 'lullaby',\n 'lumber',\n 'luminance',\n 'luminous',\n 'lumpiness',\n 'lumping',\n 'lumpish',\n 'lunacy',\n 'lunar',\n 'lunchbox',\n 'luncheon',\n 'lunchroom',\n 'lunchtime',\n 'lung',\n 'lurch',\n 'lure',\n 'luridness',\n 'lurk',\n 'lushly',\n 'lushness',\n 'luster',\n 'lustfully',\n 'lustily',\n 'lustiness',\n 'lustrous',\n 'lusty',\n 'luxurious',\n 'luxury',\n 'lying',\n 'lyrically',\n 'lyricism',\n 'lyricist',\n 'lyrics',\n 'macarena',\n 'macaroni',\n 'macaw',\n 'mace',\n 'machine',\n 'machinist',\n 'magazine',\n 'magenta',\n 'maggot',\n 'magical',\n 'magician',\n 'magma',\n 'magnesium',\n 'magnetic',\n 'magnetism',\n 'magnetize',\n 'magnifier',\n 'magnify',\n 'magnitude',\n 'magnolia',\n 'mahogany',\n 'maimed',\n 'majestic',\n 'majesty',\n 'majorette',\n 'majority',\n 'makeover',\n 'maker',\n 'makeshift',\n 'making',\n 'malformed',\n 'malt',\n 'mama',\n 'mammal',\n 'mammary',\n 'mammogram',\n 'manager',\n 'managing',\n 'manatee',\n 'mandarin',\n 'mandate',\n 'mandatory',\n 'mandolin',\n 'manger',\n 'mangle',\n 'mango',\n 'mangy',\n 'manhandle',\n 'manhole',\n 'manhood',\n 'manhunt',\n 'manicotti',\n 'manicure',\n 'manifesto',\n 'manila',\n 'mankind',\n 'manlike',\n 'manliness',\n 'manly',\n 'manmade',\n 'manned',\n 'mannish',\n 'manor',\n 'manpower',\n 'mantis',\n 'mantra',\n 'manual',\n 'many',\n 'map',\n 'marathon',\n 'marauding',\n 'marbled',\n 'marbles',\n 'marbling',\n 'march',\n 'mardi',\n 'margarine',\n 'margarita',\n 'margin',\n 'marigold',\n 'marina',\n 'marine',\n 'marital',\n 'maritime',\n 'marlin',\n 'marmalade',\n 'maroon',\n 'married',\n 'marrow',\n 'marry',\n 'marshland',\n 'marshy',\n 'marsupial',\n 'marvelous',\n 'marxism',\n 'mascot',\n 'masculine',\n 'mashed',\n 'mashing',\n 'massager',\n 'masses',\n 'massive',\n 'mastiff',\n 'matador',\n 'matchbook',\n 'matchbox',\n 'matcher',\n 'matching',\n 'matchless',\n 'material',\n 'maternal',\n 'maternity',\n 'math',\n 'mating',\n 'matriarch',\n 'matrimony',\n 'matrix',\n 'matron',\n 'matted',\n 'matter',\n 'maturely',\n 'maturing',\n 'maturity',\n 'mauve',\n 'maverick',\n 'maximize',\n 'maximum',\n 'maybe',\n 'mayday',\n 'mayflower',\n 'moaner',\n 'moaning',\n 'mobile',\n 'mobility',\n 'mobilize',\n 'mobster',\n 'mocha',\n 'mocker',\n 'mockup',\n 'modified',\n 'modify',\n 'modular',\n 'modulator',\n 'module',\n 'moisten',\n 'moistness',\n 'moisture',\n 'molar',\n 'molasses',\n 'mold',\n 'molecular',\n 'molecule',\n 'molehill',\n 'mollusk',\n 'mom',\n 'monastery',\n 'monday',\n 'monetary',\n 'monetize',\n 'moneybags',\n 'moneyless',\n 'moneywise',\n 'mongoose',\n 'mongrel',\n 'monitor',\n 'monkhood',\n 'monogamy',\n 'monogram',\n 'monologue',\n 'monopoly',\n 'monorail',\n 'monotone',\n 'monotype',\n 'monoxide',\n 'monsieur',\n 'monsoon',\n 'monstrous',\n 'monthly',\n 'monument',\n 'moocher',\n 'moodiness',\n 'moody',\n 'mooing',\n 'moonbeam',\n 'mooned',\n 'moonlight',\n 'moonlike',\n 'moonlit',\n 'moonrise',\n 'moonscape',\n 'moonshine',\n 'moonstone',\n 'moonwalk',\n 'mop',\n 'morale',\n 'morality',\n 'morally',\n 'morbidity',\n 'morbidly',\n 'morphine',\n 'morphing',\n 'morse',\n 'mortality',\n 'mortally',\n 'mortician',\n 'mortified',\n 'mortify',\n 'mortuary',\n 'mosaic',\n 'mossy',\n 'most',\n 'mothball',\n 'mothproof',\n 'motion',\n 'motivate',\n 'motivator',\n 'motive',\n 'motocross',\n 'motor',\n 'motto',\n 'mountable',\n 'mountain',\n 'mounted',\n 'mounting',\n 'mourner',\n 'mournful',\n 'mouse',\n 'mousiness',\n 'moustache',\n 'mousy',\n 'mouth',\n 'movable',\n 'move',\n 'movie',\n 'moving',\n 'mower',\n 'mowing',\n 'much',\n 'muck',\n 'mud',\n 'mug',\n 'mulberry',\n 'mulch',\n 'mule',\n 'mulled',\n 'mullets',\n 'multiple',\n 'multiply',\n 'multitask',\n 'multitude',\n 'mumble',\n 'mumbling',\n 'mumbo',\n 'mummified',\n 'mummify',\n 'mummy',\n 'mumps',\n 'munchkin',\n 'mundane',\n 'municipal',\n 'muppet',\n 'mural',\n 'murkiness',\n 'murky',\n 'murmuring',\n 'muscular',\n 'museum',\n 'mushily',\n 'mushiness',\n 'mushroom',\n 'mushy',\n 'music',\n 'musket',\n 'muskiness',\n 'musky',\n 'mustang',\n 'mustard',\n 'muster',\n 'mustiness',\n 'musty',\n 'mutable',\n 'mutate',\n 'mutation',\n 'mute',\n 'mutilated',\n 'mutilator',\n 'mutiny',\n 'mutt',\n 'mutual',\n 'muzzle',\n 'myself',\n 'myspace',\n 'mystified',\n 'mystify',\n 'myth',\n 'nacho',\n 'nag',\n 'nail',\n 'name',\n 'naming',\n 'nanny',\n 'nanometer',\n 'nape',\n 'napkin',\n 'napped',\n 'napping',\n 'nappy',\n 'narrow',\n 'nastily',\n 'nastiness',\n 'national',\n 'native',\n 'nativity',\n 'natural',\n 'nature',\n 'naturist',\n 'nautical',\n 'navigate',\n 'navigator',\n 'navy',\n 'nearby',\n 'nearest',\n 'nearly',\n 'nearness',\n 'neatly',\n 'neatness',\n 'nebula',\n 'nebulizer',\n 'nectar',\n 'negate',\n 'negation',\n 'negative',\n 'neglector',\n 'negligee',\n 'negligent',\n 'negotiate',\n 'nemeses',\n 'nemesis',\n 'neon',\n 'nephew',\n 'nerd',\n 'nervous',\n 'nervy',\n 'nest',\n 'net',\n 'neurology',\n 'neuron',\n 'neurosis',\n 'neurotic',\n 'neuter',\n 'neutron',\n 'never',\n 'next',\n 'nibble',\n 'nickname',\n 'nicotine',\n 'niece',\n 'nifty',\n 'nimble',\n 'nimbly',\n 'nineteen',\n 'ninetieth',\n 'ninja',\n 'nintendo',\n 'ninth',\n 'nuclear',\n 'nuclei',\n 'nucleus',\n 'nugget',\n 'nullify',\n 'number',\n 'numbing',\n 'numbly',\n 'numbness',\n 'numeral',\n 'numerate',\n 'numerator',\n 'numeric',\n 'numerous',\n 'nuptials',\n 'nursery',\n 'nursing',\n 'nurture',\n 'nutcase',\n 'nutlike',\n 'nutmeg',\n 'nutrient',\n 'nutshell',\n 'nuttiness',\n 'nutty',\n 'nuzzle',\n 'nylon',\n 'oaf',\n 'oak',\n 'oasis',\n 'oat',\n 'obedience',\n 'obedient',\n 'obituary',\n 'object',\n 'obligate',\n 'obliged',\n 'oblivion',\n 'oblivious',\n 'oblong',\n 'obnoxious',\n 'oboe',\n 'obscure',\n 'obscurity',\n 'observant',\n 'observer',\n 'observing',\n 'obsessed',\n 'obsession',\n 'obsessive',\n 'obsolete',\n 'obstacle',\n 'obstinate',\n 'obstruct',\n 'obtain',\n 'obtrusive',\n 'obtuse',\n 'obvious',\n 'occultist',\n 'occupancy',\n 'occupant',\n 'occupier',\n 'occupy',\n 'ocean',\n 'ocelot',\n 'octagon',\n 'octane',\n 'october',\n 'octopus',\n 'ogle',\n 'oil',\n 'oink',\n 'ointment',\n 'okay',\n 'old',\n 'olive',\n 'olympics',\n 'omega',\n 'omen',\n 'ominous',\n 'omission',\n 'omit',\n 'omnivore',\n 'onboard',\n 'oncoming',\n 'ongoing',\n 'onion',\n 'online',\n 'onlooker',\n 'only',\n 'onscreen',\n 'onset',\n 'onshore',\n 'onslaught',\n 'onstage',\n 'onto',\n 'onward',\n 'onyx',\n 'oops',\n 'ooze',\n 'oozy',\n 'opacity',\n 'opal',\n 'open',\n 'operable',\n 'operate',\n 'operating',\n 'operation',\n 'operative',\n 'operator',\n 'opium',\n 'opossum',\n 'opponent',\n 'oppose',\n 'opposing',\n 'opposite',\n 'oppressed',\n 'oppressor',\n 'opt',\n 'opulently',\n 'osmosis',\n 'other',\n 'otter',\n 'ouch',\n 'ought',\n 'ounce',\n 'outage',\n 'outback',\n 'outbid',\n 'outboard',\n 'outbound',\n 'outbreak',\n 'outburst',\n 'outcast',\n 'outclass',\n 'outcome',\n 'outdated',\n 'outdoors',\n 'outer',\n 'outfield',\n 'outfit',\n 'outflank',\n 'outgoing',\n 'outgrow',\n 'outhouse',\n 'outing',\n 'outlast',\n 'outlet',\n 'outline',\n 'outlook',\n 'outlying',\n 'outmatch',\n 'outmost',\n 'outnumber',\n 'outplayed',\n 'outpost',\n 'outpour',\n 'output',\n 'outrage',\n 'outrank',\n 'outreach',\n 'outright',\n 'outscore',\n 'outsell',\n 'outshine',\n 'outshoot',\n 'outsider',\n 'outskirts',\n 'outsmart',\n 'outsource',\n 'outspoken',\n 'outtakes',\n 'outthink',\n 'outward',\n 'outweigh',\n 'outwit',\n 'oval',\n 'ovary',\n 'oven',\n 'overact',\n 'overall',\n 'overarch',\n 'overbid',\n 'overbill',\n 'overbite',\n 'overblown',\n 'overboard',\n 'overbook',\n 'overbuilt',\n 'overcast',\n 'overcoat',\n 'overcome',\n 'overcook',\n 'overcrowd',\n 'overdraft',\n 'overdrawn',\n 'overdress',\n 'overdrive',\n 'overdue',\n 'overeager',\n 'overeater',\n 'overexert',\n 'overfed',\n 'overfeed',\n 'overfill',\n 'overflow',\n 'overfull',\n 'overgrown',\n 'overhand',\n 'overhang',\n 'overhaul',\n 'overhead',\n 'overhear',\n 'overheat',\n 'overhung',\n 'overjoyed',\n 'overkill',\n 'overlabor',\n 'overlaid',\n 'overlap',\n 'overlay',\n 'overload',\n 'overlook',\n 'overlord',\n 'overlying',\n 'overnight',\n 'overpass',\n 'overpay',\n 'overplant',\n 'overplay',\n 'overpower',\n 'overprice',\n 'overrate',\n 'overreach',\n 'overreact',\n 'override',\n 'overripe',\n 'overrule',\n 'overrun',\n 'overshoot',\n 'overshot',\n 'oversight',\n 'oversized',\n 'oversleep',\n 'oversold',\n 'overspend',\n 'overstate',\n 'overstay',\n 'overstep',\n 'overstock',\n 'overstuff',\n 'oversweet',\n 'overtake',\n 'overthrow',\n 'overtime',\n 'overtly',\n 'overtone',\n 'overture',\n 'overturn',\n 'overuse',\n 'overvalue',\n 'overview',\n 'overwrite',\n 'owl',\n 'oxford',\n 'oxidant',\n 'oxidation',\n 'oxidize',\n 'oxidizing',\n 'oxygen',\n 'oxymoron',\n 'oyster',\n 'ozone',\n 'paced',\n 'pacemaker',\n 'pacific',\n 'pacifier',\n 'pacifism',\n 'pacifist',\n 'pacify',\n 'padded',\n 'padding',\n 'paddle',\n 'paddling',\n 'padlock',\n 'pagan',\n 'pager',\n 'paging',\n 'pajamas',\n 'palace',\n 'palatable',\n 'palm',\n 'palpable',\n 'palpitate',\n 'paltry',\n 'pampered',\n 'pamperer',\n 'pampers',\n 'pamphlet',\n 'panama',\n 'pancake',\n 'pancreas',\n 'panda',\n 'pandemic',\n 'pang',\n 'panhandle',\n 'panic',\n 'panning',\n 'panorama',\n 'panoramic',\n 'panther',\n 'pantomime',\n 'pantry',\n 'pants',\n 'pantyhose',\n 'paparazzi',\n 'papaya',\n 'paper',\n 'paprika',\n 'papyrus',\n 'parabola',\n 'parachute',\n 'parade',\n 'paradox',\n 'paragraph',\n 'parakeet',\n 'paralegal',\n 'paralyses',\n 'paralysis',\n 'paralyze',\n 'paramedic',\n 'parameter',\n 'paramount',\n 'parasail',\n 'parasite',\n 'parasitic',\n 'parcel',\n 'parched',\n 'parchment',\n 'pardon',\n 'parish',\n 'parka',\n 'parking',\n 'parkway',\n 'parlor',\n 'parmesan',\n 'parole',\n 'parrot',\n 'parsley',\n 'parsnip',\n 'partake',\n 'parted',\n 'parting',\n 'partition',\n 'partly',\n 'partner',\n 'partridge',\n 'party',\n 'passable',\n 'passably',\n 'passage',\n 'passcode',\n 'passenger',\n 'passerby',\n 'passing',\n 'passion',\n 'passive',\n 'passivism',\n 'passover',\n 'passport',\n 'password',\n 'pasta',\n 'pasted',\n 'pastel',\n 'pastime',\n 'pastor',\n 'pastrami',\n 'pasture',\n 'pasty',\n 'patchwork',\n 'patchy',\n 'paternal',\n 'paternity',\n 'path',\n 'patience',\n 'patient',\n 'patio',\n 'patriarch',\n 'patriot',\n 'patrol',\n 'patronage',\n 'patronize',\n 'pauper',\n 'pavement',\n 'paver',\n 'pavestone',\n 'pavilion',\n 'paving',\n 'pawing',\n 'payable',\n 'payback',\n 'paycheck',\n 'payday',\n 'payee',\n 'payer',\n 'paying',\n 'payment',\n 'payphone',\n 'payroll',\n 'pebble',\n 'pebbly',\n 'pecan',\n 'pectin',\n 'peculiar',\n 'peddling',\n 'pediatric',\n 'pedicure',\n 'pedigree',\n 'pedometer',\n 'pegboard',\n 'pelican',\n 'pellet',\n 'pelt',\n 'pelvis',\n 'penalize',\n 'penalty',\n 'pencil',\n 'pendant',\n 'pending',\n 'penholder',\n 'penknife',\n 'pennant',\n 'penniless',\n 'penny',\n 'penpal',\n 'pension',\n 'pentagon',\n 'pentagram',\n 'pep',\n 'perceive',\n 'percent',\n 'perch',\n 'percolate',\n 'perennial',\n 'perfected',\n 'perfectly',\n 'perfume',\n 'periscope',\n 'perish',\n 'perjurer',\n 'perjury',\n 'perkiness',\n 'perky',\n 'perm',\n 'peroxide',\n 'perpetual',\n 'perplexed',\n 'persecute',\n 'persevere',\n 'persuaded',\n 'persuader',\n 'pesky',\n 'peso',\n 'pessimism',\n 'pessimist',\n 'pester',\n 'pesticide',\n 'petal',\n 'petite',\n 'petition',\n 'petri',\n 'petroleum',\n 'petted',\n 'petticoat',\n 'pettiness',\n 'petty',\n 'petunia',\n 'phantom',\n 'phobia',\n 'phoenix',\n 'phonebook',\n 'phoney',\n 'phonics',\n 'phoniness',\n 'phony',\n 'phosphate',\n 'photo',\n 'phrase',\n 'phrasing',\n 'placard',\n 'placate',\n 'placidly',\n 'plank',\n 'planner',\n 'plant',\n 'plasma',\n 'plaster',\n 'plastic',\n 'plated',\n 'platform',\n 'plating',\n 'platinum',\n 'platonic',\n 'platter',\n 'platypus',\n 'plausible',\n 'plausibly',\n 'playable',\n 'playback',\n 'player',\n 'playful',\n 'playgroup',\n 'playhouse',\n 'playing',\n 'playlist',\n 'playmaker',\n 'playmate',\n 'playoff',\n 'playpen',\n 'playroom',\n 'playset',\n 'plaything',\n 'playtime',\n 'plaza',\n 'pleading',\n 'pleat',\n 'pledge',\n 'plentiful',\n 'plenty',\n 'plethora',\n 'plexiglas',\n 'pliable',\n 'plod',\n 'plop',\n 'plot',\n 'plow',\n 'ploy',\n 'pluck',\n 'plug',\n 'plunder',\n 'plunging',\n 'plural',\n 'plus',\n 'plutonium',\n 'plywood',\n 'poach',\n 'pod',\n 'poem',\n 'poet',\n 'pogo',\n 'pointed',\n 'pointer',\n 'pointing',\n 'pointless',\n 'pointy',\n 'poise',\n 'poison',\n 'poker',\n 'poking',\n 'polar',\n 'police',\n 'policy',\n 'polio',\n 'polish',\n 'politely',\n 'polka',\n 'polo',\n 'polyester',\n 'polygon',\n 'polygraph',\n 'polymer',\n 'poncho',\n 'pond',\n 'pony',\n 'popcorn',\n 'pope',\n 'poplar',\n 'popper',\n 'poppy',\n 'popsicle',\n 'populace',\n 'popular',\n 'populate',\n 'porcupine',\n 'pork',\n 'porous',\n 'porridge',\n 'portable',\n 'portal',\n 'portfolio',\n 'porthole',\n 'portion',\n 'portly',\n 'portside',\n 'poser',\n 'posh',\n 'posing',\n 'possible',\n 'possibly',\n 'possum',\n 'postage',\n 'postal',\n 'postbox',\n 'postcard',\n 'posted',\n 'poster',\n 'posting',\n 'postnasal',\n 'posture',\n 'postwar',\n 'pouch',\n 'pounce',\n 'pouncing',\n 'pound',\n 'pouring',\n 'pout',\n 'powdered',\n 'powdering',\n 'powdery',\n 'power',\n 'powwow',\n 'pox',\n 'praising',\n 'prance',\n 'prancing',\n 'pranker',\n 'prankish',\n 'prankster',\n 'prayer',\n 'praying',\n 'preacher',\n 'preaching',\n 'preachy',\n 'preamble',\n 'precinct',\n 'precise',\n 'precision',\n 'precook',\n 'precut',\n 'predator',\n 'predefine',\n 'predict',\n 'preface',\n 'prefix',\n 'preflight',\n 'preformed',\n 'pregame',\n 'pregnancy',\n 'pregnant',\n 'preheated',\n 'prelaunch',\n 'prelaw',\n 'prelude',\n 'premiere',\n 'premises',\n 'premium',\n 'prenatal',\n 'preoccupy',\n 'preorder',\n 'prepaid',\n 'prepay',\n 'preplan',\n 'preppy',\n 'preschool',\n 'prescribe',\n 'preseason',\n 'preset',\n 'preshow',\n 'president',\n 'presoak',\n 'press',\n 'presume',\n 'presuming',\n 'preteen',\n 'pretended',\n 'pretender',\n 'pretense',\n 'pretext',\n 'pretty',\n 'pretzel',\n 'prevail',\n 'prevalent',\n 'prevent',\n 'preview',\n 'previous',\n 'prewar',\n 'prewashed',\n 'prideful',\n 'pried',\n 'primal',\n 'primarily',\n 'primary',\n 'primate',\n 'primer',\n 'primp',\n 'princess',\n 'print',\n 'prior',\n 'prism',\n 'prison',\n 'prissy',\n 'pristine',\n 'privacy',\n 'private',\n 'privatize',\n 'prize',\n 'proactive',\n 'probable',\n 'probably',\n 'probation',\n 'probe',\n 'probing',\n 'probiotic',\n 'problem',\n 'procedure',\n 'process',\n 'proclaim',\n 'procreate',\n 'procurer',\n 'prodigal',\n 'prodigy',\n 'produce',\n 'product',\n 'profane',\n 'profanity',\n 'professed',\n 'professor',\n 'profile',\n 'profound',\n 'profusely',\n 'progeny',\n 'prognosis',\n 'program',\n 'progress',\n 'projector',\n 'prologue',\n 'prolonged',\n 'promenade',\n 'prominent',\n 'promoter',\n 'promotion',\n 'prompter',\n 'promptly',\n 'prone',\n 'prong',\n 'pronounce',\n 'pronto',\n 'proofing',\n 'proofread',\n 'proofs',\n 'propeller',\n 'properly',\n 'property',\n 'proponent',\n 'proposal',\n 'propose',\n 'props',\n 'prorate',\n 'protector',\n 'protegee',\n 'proton',\n 'prototype',\n 'protozoan',\n 'protract',\n 'protrude',\n 'proud',\n 'provable',\n 'proved',\n 'proven',\n 'provided',\n 'provider',\n 'providing',\n 'province',\n 'proving',\n 'provoke',\n 'provoking',\n 'provolone',\n 'prowess',\n 'prowler',\n 'prowling',\n 'proximity',\n 'proxy',\n 'prozac',\n 'prude',\n 'prudishly',\n 'prune',\n 'pruning',\n 'pry',\n 'psychic',\n 'public',\n 'publisher',\n 'pucker',\n 'pueblo',\n 'pug',\n 'pull',\n 'pulmonary',\n 'pulp',\n 'pulsate',\n 'pulse',\n 'pulverize',\n 'puma',\n 'pumice',\n 'pummel',\n 'punch',\n 'punctual',\n 'punctuate',\n 'punctured',\n 'pungent',\n 'punisher',\n 'punk',\n 'pupil',\n 'puppet',\n 'puppy',\n 'purchase',\n 'pureblood',\n 'purebred',\n 'purely',\n 'pureness',\n 'purgatory',\n 'purge',\n 'purging',\n 'purifier',\n 'purify',\n 'purist',\n 'puritan',\n 'purity',\n 'purple',\n 'purplish',\n 'purposely',\n 'purr',\n 'purse',\n 'pursuable',\n 'pursuant',\n 'pursuit',\n 'purveyor',\n 'pushcart',\n 'pushchair',\n 'pusher',\n 'pushiness',\n 'pushing',\n 'pushover',\n 'pushpin',\n 'pushup',\n 'pushy',\n 'putdown',\n 'putt',\n 'puzzle',\n 'puzzling',\n 'pyramid',\n 'pyromania',\n 'python',\n 'quack',\n 'quadrant',\n 'quail',\n 'quaintly',\n 'quake',\n 'quaking',\n 'qualified',\n 'qualifier',\n 'qualify',\n 'quality',\n 'qualm',\n 'quantum',\n 'quarrel',\n 'quarry',\n 'quartered',\n 'quarterly',\n 'quarters',\n 'quartet',\n 'quench',\n 'query',\n 'quicken',\n 'quickly',\n 'quickness',\n 'quicksand',\n 'quickstep',\n 'quiet',\n 'quill',\n 'quilt',\n 'quintet',\n 'quintuple',\n 'quirk',\n 'quit',\n 'quiver',\n 'quizzical',\n 'quotable',\n 'quotation',\n 'quote',\n 'rabid',\n 'race',\n 'racing',\n 'racism',\n 'rack',\n 'racoon',\n 'radar',\n 'radial',\n 'radiance',\n 'radiantly',\n 'radiated',\n 'radiation',\n 'radiator',\n 'radio',\n 'radish',\n 'raffle',\n 'raft',\n 'rage',\n 'ragged',\n 'raging',\n 'ragweed',\n 'raider',\n 'railcar',\n 'railing',\n 'railroad',\n 'railway',\n 'raisin',\n 'rake',\n 'raking',\n 'rally',\n 'ramble',\n 'rambling',\n 'ramp',\n 'ramrod',\n 'ranch',\n 'rancidity',\n 'random',\n 'ranged',\n 'ranger',\n 'ranging',\n 'ranked',\n 'ranking',\n 'ransack',\n 'ranting',\n 'rants',\n 'rare',\n 'rarity',\n 'rascal',\n 'rash',\n 'rasping',\n 'ravage',\n 'raven',\n 'ravine',\n 'raving',\n 'ravioli',\n 'ravishing',\n 'reabsorb',\n 'reach',\n 'reacquire',\n 'reaction',\n 'reactive',\n 'reactor',\n 'reaffirm',\n 'ream',\n 'reanalyze',\n 'reappear',\n 'reapply',\n 'reappoint',\n 'reapprove',\n 'rearrange',\n 'rearview',\n 'reason',\n 'reassign',\n 'reassure',\n 'reattach',\n 'reawake',\n 'rebalance',\n 'rebate',\n 'rebel',\n 'rebirth',\n 'reboot',\n 'reborn',\n 'rebound',\n 'rebuff',\n 'rebuild',\n 'rebuilt',\n 'reburial',\n 'rebuttal',\n 'recall',\n 'recant',\n 'recapture',\n 'recast',\n 'recede',\n 'recent',\n 'recess',\n 'recharger',\n 'recipient',\n 'recital',\n 'recite',\n 'reckless',\n 'reclaim',\n 'recliner',\n 'reclining',\n 'recluse',\n 'reclusive',\n 'recognize',\n 'recoil',\n 'recollect',\n 'recolor',\n 'reconcile',\n 'reconfirm',\n 'reconvene',\n 'recopy',\n 'record',\n 'recount',\n 'recoup',\n 'recovery',\n 'recreate',\n 'rectal',\n 'rectangle',\n 'rectified',\n 'rectify',\n 'recycled',\n 'recycler',\n 'recycling',\n 'reemerge',\n 'reenact',\n 'reenter',\n 'reentry',\n 'reexamine',\n 'referable',\n 'referee',\n 'reference',\n 'refill',\n 'refinance',\n 'refined',\n 'refinery',\n 'refining',\n 'refinish',\n 'reflected',\n 'reflector',\n 'reflex',\n 'reflux',\n 'refocus',\n 'refold',\n 'reforest',\n 'reformat',\n 'reformed',\n 'reformer',\n 'reformist',\n 'refract',\n 'refrain',\n 'refreeze',\n 'refresh',\n 'refried',\n 'refueling',\n 'refund',\n 'refurbish',\n 'refurnish',\n 'refusal',\n 'refuse',\n 'refusing',\n 'refutable',\n 'refute',\n 'regain',\n 'regalia',\n 'regally',\n 'reggae',\n 'regime',\n 'region',\n 'register',\n 'registrar',\n 'registry',\n 'regress',\n 'regretful',\n 'regroup',\n 'regular',\n 'regulate',\n 'regulator',\n 'rehab',\n 'reheat',\n 'rehire',\n 'rehydrate',\n 'reimburse',\n 'reissue',\n 'reiterate',\n 'rejoice',\n 'rejoicing',\n 'rejoin',\n 'rekindle',\n 'relapse',\n 'relapsing',\n 'relatable',\n 'related',\n 'relation',\n 'relative',\n 'relax',\n 'relay',\n 'relearn',\n 'release',\n 'relenting',\n 'reliable',\n 'reliably',\n 'reliance',\n 'reliant',\n 'relic',\n 'relieve',\n 'relieving',\n 'relight',\n 'relish',\n 'relive',\n 'reload',\n 'relocate',\n 'relock',\n 'reluctant',\n 'rely',\n 'remake',\n 'remark',\n 'remarry',\n 'rematch',\n 'remedial',\n 'remedy',\n 'remember',\n 'reminder',\n 'remindful',\n 'remission',\n 'remix',\n 'remnant',\n 'remodeler',\n 'remold',\n 'remorse',\n 'remote',\n 'removable',\n 'removal',\n 'removed',\n 'remover',\n 'removing',\n 'rename',\n 'renderer',\n 'rendering',\n 'rendition',\n 'renegade',\n 'renewable',\n 'renewably',\n 'renewal',\n 'renewed',\n 'renounce',\n 'renovate',\n 'renovator',\n 'rentable',\n 'rental',\n 'rented',\n 'renter',\n 'reoccupy',\n 'reoccur',\n 'reopen',\n 'reorder',\n 'repackage',\n 'repacking',\n 'repaint',\n 'repair',\n 'repave',\n 'repaying',\n 'repayment',\n 'repeal',\n 'repeated',\n 'repeater',\n 'repent',\n 'rephrase',\n 'replace',\n 'replay',\n 'replica',\n 'reply',\n 'reporter',\n 'repose',\n 'repossess',\n 'repost',\n 'repressed',\n 'reprimand',\n 'reprint',\n 'reprise',\n 'reproach',\n 'reprocess',\n 'reproduce',\n 'reprogram',\n 'reps',\n 'reptile',\n 'reptilian',\n 'repugnant',\n 'repulsion',\n 'repulsive',\n 'repurpose',\n 'reputable',\n 'reputably',\n 'request',\n 'require',\n 'requisite',\n 'reroute',\n 'rerun',\n 'resale',\n 'resample',\n 'rescuer',\n 'reseal',\n 'research',\n 'reselect',\n 'reseller',\n 'resemble',\n 'resend',\n 'resent',\n 'reset',\n 'reshape',\n 'reshoot',\n 'reshuffle',\n 'residence',\n 'residency',\n 'resident',\n 'residual',\n 'residue',\n 'resigned',\n 'resilient',\n 'resistant',\n 'resisting',\n 'resize',\n 'resolute',\n 'resolved',\n 'resonant',\n 'resonate',\n 'resort',\n 'resource',\n 'respect',\n 'resubmit',\n 'result',\n 'resume',\n 'resupply',\n 'resurface',\n 'resurrect',\n 'retail',\n 'retainer',\n 'retaining',\n 'retake',\n 'retaliate',\n 'retention',\n 'rethink',\n 'retinal',\n 'retired',\n 'retiree',\n 'retiring',\n 'retold',\n 'retool',\n 'retorted',\n 'retouch',\n 'retrace',\n 'retract',\n 'retrain',\n 'retread',\n 'retreat',\n 'retrial',\n 'retrieval',\n 'retriever',\n 'retry',\n 'return',\n 'retying',\n 'retype',\n 'reunion',\n 'reunite',\n 'reusable',\n 'reuse',\n 'reveal',\n 'reveler',\n 'revenge',\n 'revenue',\n 'reverb',\n 'revered',\n 'reverence',\n 'reverend',\n 'reversal',\n 'reverse',\n 'reversing',\n 'reversion',\n 'revert',\n 'revisable',\n 'revise',\n 'revision',\n 'revisit',\n 'revivable',\n 'revival',\n 'reviver',\n 'reviving',\n 'revocable',\n 'revoke',\n 'revolt',\n 'revolver',\n 'revolving',\n 'reward',\n 'rewash',\n 'rewind',\n 'rewire',\n 'reword',\n 'rework',\n 'rewrap',\n 'rewrite',\n 'rhyme',\n 'ribbon',\n 'ribcage',\n 'rice',\n 'riches',\n 'richly',\n 'richness',\n 'rickety',\n 'ricotta',\n 'riddance',\n 'ridden',\n 'ride',\n 'riding',\n 'rifling',\n 'rift',\n 'rigging',\n 'rigid',\n 'rigor',\n 'rimless',\n 'rimmed',\n 'rind',\n 'rink',\n 'rinse',\n 'rinsing',\n 'riot',\n 'ripcord',\n 'ripeness',\n 'ripening',\n 'ripping',\n 'ripple',\n 'rippling',\n 'riptide',\n 'rise',\n 'rising',\n 'risk',\n 'risotto',\n 'ritalin',\n 'ritzy',\n 'rival',\n 'riverbank',\n 'riverbed',\n 'riverboat',\n 'riverside',\n 'riveter',\n 'riveting',\n 'roamer',\n 'roaming',\n 'roast',\n 'robbing',\n 'robe',\n 'robin',\n 'robotics',\n 'robust',\n 'rockband',\n 'rocker',\n 'rocket',\n 'rockfish',\n 'rockiness',\n 'rocking',\n 'rocklike',\n 'rockslide',\n 'rockstar',\n 'rocky',\n 'rogue',\n 'roman',\n 'romp',\n 'rope',\n 'roping',\n 'roster',\n 'rosy',\n 'rotten',\n 'rotting',\n 'rotunda',\n 'roulette',\n 'rounding',\n 'roundish',\n 'roundness',\n 'roundup',\n 'roundworm',\n 'routine',\n 'routing',\n 'rover',\n 'roving',\n 'royal',\n 'rubbed',\n 'rubber',\n 'rubbing',\n 'rubble',\n 'rubdown',\n 'ruby',\n 'ruckus',\n 'rudder',\n 'rug',\n 'ruined',\n 'rule',\n 'rumble',\n 'rumbling',\n 'rummage',\n 'rumor',\n 'runaround',\n 'rundown',\n 'runner',\n 'running',\n 'runny',\n 'runt',\n 'runway',\n 'rupture',\n 'rural',\n 'ruse',\n 'rush',\n 'rust',\n 'rut',\n 'sabbath',\n 'sabotage',\n 'sacrament',\n 'sacred',\n 'sacrifice',\n 'sadden',\n 'saddlebag',\n 'saddled',\n 'saddling',\n 'sadly',\n 'sadness',\n 'safari',\n 'safeguard',\n 'safehouse',\n 'safely',\n 'safeness',\n 'saffron',\n 'saga',\n 'sage',\n 'sagging',\n 'saggy',\n 'said',\n 'saint',\n 'sake',\n 'salad',\n 'salami',\n 'salaried',\n 'salary',\n 'saline',\n 'salon',\n 'saloon',\n 'salsa',\n 'salt',\n 'salutary',\n 'salute',\n 'salvage',\n 'salvaging',\n 'salvation',\n 'same',\n 'sample',\n 'sampling',\n 'sanction',\n 'sanctity',\n 'sanctuary',\n 'sandal',\n 'sandbag',\n 'sandbank',\n 'sandbar',\n 'sandblast',\n 'sandbox',\n 'sanded',\n 'sandfish',\n 'sanding',\n 'sandlot',\n 'sandpaper',\n 'sandpit',\n 'sandstone',\n 'sandstorm',\n 'sandworm',\n 'sandy',\n 'sanitary',\n 'sanitizer',\n 'sank',\n 'santa',\n 'sapling',\n 'sappiness',\n 'sappy',\n 'sarcasm',\n 'sarcastic',\n 'sardine',\n 'sash',\n 'sasquatch',\n 'sassy',\n 'satchel',\n 'satiable',\n 'satin',\n 'satirical',\n 'satisfied',\n 'satisfy',\n 'saturate',\n 'saturday',\n 'sauciness',\n 'saucy',\n 'sauna',\n 'savage',\n 'savanna',\n 'saved',\n 'savings',\n 'savior',\n 'savor',\n 'saxophone',\n 'say',\n 'scabbed',\n 'scabby',\n 'scalded',\n 'scalding',\n 'scale',\n 'scaling',\n 'scallion',\n 'scallop',\n 'scalping',\n 'scam',\n 'scandal',\n 'scanner',\n 'scanning',\n 'scant',\n 'scapegoat',\n 'scarce',\n 'scarcity',\n 'scarecrow',\n 'scared',\n 'scarf',\n 'scarily',\n 'scariness',\n 'scarring',\n 'scary',\n 'scavenger',\n 'scenic',\n 'schedule',\n 'schematic',\n 'scheme',\n 'scheming',\n 'schilling',\n 'schnapps',\n 'scholar',\n 'science',\n 'scientist',\n 'scion',\n 'scoff',\n 'scolding',\n 'scone',\n 'scoop',\n 'scooter',\n 'scope',\n 'scorch',\n 'scorebook',\n 'scorecard',\n 'scored',\n 'scoreless',\n 'scorer',\n 'scoring',\n 'scorn',\n 'scorpion',\n 'scotch',\n 'scoundrel',\n 'scoured',\n 'scouring',\n 'scouting',\n 'scouts',\n 'scowling',\n 'scrabble',\n 'scraggly',\n 'scrambled',\n 'scrambler',\n 'scrap',\n 'scratch',\n 'scrawny',\n 'screen',\n 'scribble',\n 'scribe',\n 'scribing',\n 'scrimmage',\n 'script',\n 'scroll',\n 'scrooge',\n 'scrounger',\n 'scrubbed',\n 'scrubber',\n 'scruffy',\n 'scrunch',\n 'scrutiny',\n 'scuba',\n 'scuff',\n 'sculptor',\n 'sculpture',\n 'scurvy',\n 'scuttle',\n 'secluded',\n 'secluding',\n 'seclusion',\n 'second',\n 'secrecy',\n 'secret',\n 'sectional',\n 'sector',\n 'secular',\n 'securely',\n 'security',\n 'sedan',\n 'sedate',\n 'sedation',\n 'sedative',\n 'sediment',\n 'seduce',\n 'seducing',\n 'segment',\n 'seismic',\n 'seizing',\n 'seldom',\n 'selected',\n 'selection',\n 'selective',\n 'selector',\n 'self',\n 'seltzer',\n 'semantic',\n 'semester',\n 'semicolon',\n 'semifinal',\n 'seminar',\n 'semisoft',\n 'semisweet',\n 'senate',\n 'senator',\n 'send',\n 'senior',\n 'senorita',\n 'sensation',\n 'sensitive',\n 'sensitize',\n 'sensually',\n 'sensuous',\n 'sepia',\n 'september',\n 'septic',\n 'septum',\n 'sequel',\n 'sequence',\n 'sequester',\n 'series',\n 'sermon',\n 'serotonin',\n 'serpent',\n 'serrated',\n 'serve',\n 'service',\n 'serving',\n 'sesame',\n 'sessions',\n 'setback',\n 'setting',\n 'settle',\n 'settling',\n 'setup',\n 'sevenfold',\n 'seventeen',\n 'seventh',\n 'seventy',\n 'severity',\n 'shabby',\n 'shack',\n 'shaded',\n 'shadily',\n 'shadiness',\n 'shading',\n 'shadow',\n 'shady',\n 'shaft',\n 'shakable',\n 'shakily',\n 'shakiness',\n 'shaking',\n 'shaky',\n 'shale',\n 'shallot',\n 'shallow',\n 'shame',\n 'shampoo',\n 'shamrock',\n 'shank',\n 'shanty',\n 'shape',\n 'shaping',\n 'share',\n 'sharpener',\n 'sharper',\n 'sharpie',\n 'sharply',\n 'sharpness',\n 'shawl',\n 'sheath',\n 'shed',\n 'sheep',\n 'sheet',\n 'shelf',\n 'shell',\n 'shelter',\n 'shelve',\n 'shelving',\n 'sherry',\n 'shield',\n 'shifter',\n 'shifting',\n 'shiftless',\n 'shifty',\n 'shimmer',\n 'shimmy',\n 'shindig',\n 'shine',\n 'shingle',\n 'shininess',\n 'shining',\n 'shiny',\n 'ship',\n 'shirt',\n 'shivering',\n 'shock',\n 'shone',\n 'shoplift',\n 'shopper',\n 'shopping',\n 'shoptalk',\n 'shore',\n 'shortage',\n 'shortcake',\n 'shortcut',\n 'shorten',\n 'shorter',\n 'shorthand',\n 'shortlist',\n 'shortly',\n 'shortness',\n 'shorts',\n 'shortwave',\n 'shorty',\n 'shout',\n 'shove',\n 'showbiz',\n 'showcase',\n 'showdown',\n 'shower',\n 'showgirl',\n 'showing',\n 'showman',\n 'shown',\n 'showoff',\n 'showpiece',\n 'showplace',\n 'showroom',\n 'showy',\n 'shrank',\n 'shrapnel',\n 'shredder',\n 'shredding',\n 'shrewdly',\n 'shriek',\n 'shrill',\n 'shrimp',\n 'shrine',\n 'shrink',\n 'shrivel',\n 'shrouded',\n 'shrubbery',\n 'shrubs',\n 'shrug',\n 'shrunk',\n 'shucking',\n 'shudder',\n 'shuffle',\n 'shuffling',\n 'shun',\n 'shush',\n 'shut',\n 'shy',\n 'siamese',\n 'siberian',\n 'sibling',\n 'siding',\n 'sierra',\n 'siesta',\n 'sift',\n 'sighing',\n 'silenced',\n 'silencer',\n 'silent',\n 'silica',\n 'silicon',\n 'silk',\n 'silliness',\n 'silly',\n 'silo',\n 'silt',\n 'silver',\n 'similarly',\n 'simile',\n 'simmering',\n 'simple',\n 'simplify',\n 'simply',\n 'sincere',\n 'sincerity',\n 'singer',\n 'singing',\n 'single',\n 'singular',\n 'sinister',\n 'sinless',\n 'sinner',\n 'sinuous',\n 'sip',\n 'siren',\n 'sister',\n 'sitcom',\n 'sitter',\n 'sitting',\n 'situated',\n 'situation',\n 'sixfold',\n 'sixteen',\n 'sixth',\n 'sixties',\n 'sixtieth',\n 'sixtyfold',\n 'sizable',\n 'sizably',\n 'size',\n 'sizing',\n 'sizzle',\n 'sizzling',\n 'skater',\n 'skating',\n 'skedaddle',\n 'skeletal',\n 'skeleton',\n 'skeptic',\n 'sketch',\n 'skewed',\n 'skewer',\n 'skid',\n 'skied',\n 'skier',\n 'skies',\n 'skiing',\n 'skilled',\n 'skillet',\n 'skillful',\n 'skimmed',\n 'skimmer',\n 'skimming',\n 'skimpily',\n 'skincare',\n 'skinhead',\n 'skinless',\n 'skinning',\n 'skinny',\n 'skintight',\n 'skipper',\n 'skipping',\n 'skirmish',\n 'skirt',\n 'skittle',\n 'skydiver',\n 'skylight',\n 'skyline',\n 'skype',\n 'skyrocket',\n 'skyward',\n 'slab',\n 'slacked',\n 'slacker',\n 'slacking',\n 'slackness',\n 'slacks',\n 'slain',\n 'slam',\n 'slander',\n 'slang',\n 'slapping',\n 'slapstick',\n 'slashed',\n 'slashing',\n 'slate',\n 'slather',\n 'slaw',\n 'sled',\n 'sleek',\n 'sleep',\n 'sleet',\n 'sleeve',\n 'slept',\n 'sliceable',\n 'sliced',\n 'slicer',\n 'slicing',\n 'slick',\n 'slider',\n 'slideshow',\n 'sliding',\n 'slighted',\n 'slighting',\n 'slightly',\n 'slimness',\n 'slimy',\n 'slinging',\n 'slingshot',\n 'slinky',\n 'slip',\n 'slit',\n 'sliver',\n 'slobbery',\n 'slogan',\n 'sloped',\n 'sloping',\n 'sloppily',\n 'sloppy',\n 'slot',\n 'slouching',\n 'slouchy',\n 'sludge',\n 'slug',\n 'slum',\n 'slurp',\n 'slush',\n 'sly',\n 'small',\n 'smartly',\n 'smartness',\n 'smasher',\n 'smashing',\n 'smashup',\n 'smell',\n 'smelting',\n 'smile',\n 'smilingly',\n 'smirk',\n 'smite',\n 'smith',\n 'smitten',\n 'smock',\n 'smog',\n 'smoked',\n 'smokeless',\n 'smokiness',\n 'smoking',\n 'smoky',\n 'smolder',\n 'smooth',\n 'smother',\n 'smudge',\n 'smudgy',\n 'smuggler',\n 'smuggling',\n 'smugly',\n 'smugness',\n 'snack',\n 'snagged',\n 'snaking',\n 'snap',\n 'snare',\n 'snarl',\n 'snazzy',\n 'sneak',\n 'sneer',\n 'sneeze',\n 'sneezing',\n 'snide',\n 'sniff',\n 'snippet',\n 'snipping',\n 'snitch',\n 'snooper',\n 'snooze',\n 'snore',\n 'snoring',\n 'snorkel',\n 'snort',\n 'snout',\n 'snowbird',\n 'snowboard',\n 'snowbound',\n 'snowcap',\n 'snowdrift',\n 'snowdrop',\n 'snowfall',\n 'snowfield',\n 'snowflake',\n 'snowiness',\n 'snowless',\n 'snowman',\n 'snowplow',\n 'snowshoe',\n 'snowstorm',\n 'snowsuit',\n 'snowy',\n 'snub',\n 'snuff',\n 'snuggle',\n 'snugly',\n 'snugness',\n 'speak',\n 'spearfish',\n 'spearhead',\n 'spearman',\n 'spearmint',\n 'species',\n 'specimen',\n 'specked',\n 'speckled',\n 'specks',\n 'spectacle',\n 'spectator',\n 'spectrum',\n 'speculate',\n 'speech',\n 'speed',\n 'spellbind',\n 'speller',\n 'spelling',\n 'spendable',\n 'spender',\n 'spending',\n 'spent',\n 'spew',\n 'sphere',\n 'spherical',\n 'sphinx',\n 'spider',\n 'spied',\n 'spiffy',\n 'spill',\n 'spilt',\n 'spinach',\n 'spinal',\n 'spindle',\n 'spinner',\n 'spinning',\n 'spinout',\n 'spinster',\n 'spiny',\n 'spiral',\n 'spirited',\n 'spiritism',\n 'spirits',\n 'spiritual',\n 'splashed',\n 'splashing',\n 'splashy',\n 'splatter',\n 'spleen',\n 'splendid',\n 'splendor',\n 'splice',\n 'splicing',\n 'splinter',\n 'splotchy',\n 'splurge',\n 'spoilage',\n 'spoiled',\n 'spoiler',\n 'spoiling',\n 'spoils',\n 'spoken',\n 'spokesman',\n 'sponge',\n 'spongy',\n 'sponsor',\n 'spoof',\n 'spookily',\n 'spooky',\n 'spool',\n 'spoon',\n 'spore',\n 'sporting',\n 'sports',\n 'sporty',\n 'spotless',\n 'spotlight',\n 'spotted',\n 'spotter',\n 'spotting',\n 'spotty',\n 'spousal',\n 'spouse',\n 'spout',\n 'sprain',\n 'sprang',\n 'sprawl',\n 'spray',\n 'spree',\n 'sprig',\n 'spring',\n 'sprinkled',\n 'sprinkler',\n 'sprint',\n 'sprite',\n 'sprout',\n 'spruce',\n 'sprung',\n 'spry',\n 'spud',\n 'spur',\n 'sputter',\n 'spyglass',\n 'squabble',\n 'squad',\n 'squall',\n 'squander',\n 'squash',\n 'squatted',\n 'squatter',\n 'squatting',\n 'squeak',\n 'squealer',\n 'squealing',\n 'squeamish',\n 'squeegee',\n 'squeeze',\n 'squeezing',\n 'squid',\n 'squiggle',\n 'squiggly',\n 'squint',\n 'squire',\n 'squirt',\n 'squishier',\n 'squishy',\n 'stability',\n 'stabilize',\n 'stable',\n 'stack',\n 'stadium',\n 'staff',\n 'stage',\n 'staging',\n 'stagnant',\n 'stagnate',\n 'stainable',\n 'stained',\n 'staining',\n 'stainless',\n 'stalemate',\n 'staleness',\n 'stalling',\n 'stallion',\n 'stamina',\n 'stammer',\n 'stamp',\n 'stand',\n 'stank',\n 'staple',\n 'stapling',\n 'starboard',\n 'starch',\n 'stardom',\n 'stardust',\n 'starfish',\n 'stargazer',\n 'staring',\n 'stark',\n 'starless',\n 'starlet',\n 'starlight',\n 'starlit',\n 'starring',\n 'starry',\n 'starship',\n 'starter',\n 'starting',\n 'startle',\n 'startling',\n 'startup',\n 'starved',\n 'starving',\n 'stash',\n 'state',\n 'static',\n 'statistic',\n 'statue',\n 'stature',\n 'status',\n 'statute',\n 'statutory',\n 'staunch',\n 'stays',\n 'steadfast',\n 'steadier',\n 'steadily',\n 'steadying',\n 'steam',\n 'steed',\n 'steep',\n 'steerable',\n 'steering',\n 'steersman',\n 'stegosaur',\n 'stellar',\n 'stem',\n 'stench',\n 'stencil',\n 'step',\n 'stereo',\n 'sterile',\n 'sterility',\n 'sterilize',\n 'sterling',\n 'sternness',\n 'sternum',\n 'stew',\n 'stick',\n 'stiffen',\n 'stiffly',\n 'stiffness',\n 'stifle',\n 'stifling',\n 'stillness',\n 'stilt',\n 'stimulant',\n 'stimulate',\n 'stimuli',\n 'stimulus',\n 'stinger',\n 'stingily',\n 'stinging',\n 'stingray',\n 'stingy',\n 'stinking',\n 'stinky',\n 'stipend',\n 'stipulate',\n 'stir',\n 'stitch',\n 'stock',\n 'stoic',\n 'stoke',\n 'stole',\n 'stomp',\n 'stonewall',\n 'stoneware',\n 'stonework',\n 'stoning',\n 'stony',\n 'stood',\n 'stooge',\n 'stool',\n 'stoop',\n 'stoplight',\n 'stoppable',\n 'stoppage',\n 'stopped',\n 'stopper',\n 'stopping',\n 'stopwatch',\n 'storable',\n 'storage',\n 'storeroom',\n 'storewide',\n 'storm',\n 'stout',\n 'stove',\n 'stowaway',\n 'stowing',\n 'straddle',\n 'straggler',\n 'strained',\n 'strainer',\n 'straining',\n 'strangely',\n 'stranger',\n 'strangle',\n 'strategic',\n 'strategy',\n 'stratus',\n 'straw',\n 'stray',\n 'streak',\n 'stream',\n 'street',\n 'strength',\n 'strenuous',\n 'strep',\n 'stress',\n 'stretch',\n 'strewn',\n 'stricken',\n 'strict',\n 'stride',\n 'strife',\n 'strike',\n 'striking',\n 'strive',\n 'striving',\n 'strobe',\n 'strode',\n 'stroller',\n 'strongbox',\n 'strongly',\n 'strongman',\n 'struck',\n 'structure',\n 'strudel',\n 'struggle',\n 'strum',\n 'strung',\n 'strut',\n 'stubbed',\n 'stubble',\n 'stubbly',\n 'stubborn',\n 'stucco',\n 'stuck',\n 'student',\n 'studied',\n 'studio',\n 'study',\n 'stuffed',\n 'stuffing',\n 'stuffy',\n 'stumble',\n 'stumbling',\n 'stump',\n 'stung',\n 'stunned',\n 'stunner',\n 'stunning',\n 'stunt',\n 'stupor',\n 'sturdily',\n 'sturdy',\n 'styling',\n 'stylishly',\n 'stylist',\n 'stylized',\n 'stylus',\n 'suave',\n 'subarctic',\n 'subatomic',\n 'subdivide',\n 'subdued',\n 'subduing',\n 'subfloor',\n 'subgroup',\n 'subheader',\n 'subject',\n 'sublease',\n 'sublet',\n 'sublevel',\n 'sublime',\n 'submarine',\n 'submerge',\n 'submersed',\n 'submitter',\n 'subpanel',\n 'subpar',\n 'subplot',\n 'subprime',\n 'subscribe',\n 'subscript',\n 'subsector',\n 'subside',\n 'subsiding',\n 'subsidize',\n 'subsidy',\n 'subsoil',\n 'subsonic',\n 'substance',\n 'subsystem',\n 'subtext',\n 'subtitle',\n 'subtly',\n 'subtotal',\n 'subtract',\n 'subtype',\n 'suburb',\n 'subway',\n 'subwoofer',\n 'subzero',\n 'succulent',\n 'such',\n 'suction',\n 'sudden',\n 'sudoku',\n 'suds',\n 'sufferer',\n 'suffering',\n 'suffice',\n 'suffix',\n 'suffocate',\n 'suffrage',\n 'sugar',\n 'suggest',\n 'suing',\n 'suitable',\n 'suitably',\n 'suitcase',\n 'suitor',\n 'sulfate',\n 'sulfide',\n 'sulfite',\n 'sulfur',\n 'sulk',\n 'sullen',\n 'sulphate',\n 'sulphuric',\n 'sultry',\n 'superbowl',\n 'superglue',\n 'superhero',\n 'superior',\n 'superjet',\n 'superman',\n 'supermom',\n 'supernova',\n 'supervise',\n 'supper',\n 'supplier',\n 'supply',\n 'support',\n 'supremacy',\n 'supreme',\n 'surcharge',\n 'surely',\n 'sureness',\n 'surface',\n 'surfacing',\n 'surfboard',\n 'surfer',\n 'surgery',\n 'surgical',\n 'surging',\n 'surname',\n 'surpass',\n 'surplus',\n 'surprise',\n 'surreal',\n 'surrender',\n 'surrogate',\n 'surround',\n 'survey',\n 'survival',\n 'survive',\n 'surviving',\n 'survivor',\n 'sushi',\n 'suspect',\n 'suspend',\n 'suspense',\n 'sustained',\n 'sustainer',\n 'swab',\n 'swaddling',\n 'swagger',\n 'swampland',\n 'swan',\n 'swapping',\n 'swarm',\n 'sway',\n 'swear',\n 'sweat',\n 'sweep',\n 'swell',\n 'swept',\n 'swerve',\n 'swifter',\n 'swiftly',\n 'swiftness',\n 'swimmable',\n 'swimmer',\n 'swimming',\n 'swimsuit',\n 'swimwear',\n 'swinger',\n 'swinging',\n 'swipe',\n 'swirl',\n 'switch',\n 'swivel',\n 'swizzle',\n 'swooned',\n 'swoop',\n 'swoosh',\n 'swore',\n 'sworn',\n 'swung',\n 'sycamore',\n 'sympathy',\n 'symphonic',\n 'symphony',\n 'symptom',\n 'synapse',\n 'syndrome',\n 'synergy',\n 'synopses',\n 'synopsis',\n 'synthesis',\n 'synthetic',\n 'syrup',\n 'system',\n 't-shirt',\n 'tabasco',\n 'tabby',\n 'tableful',\n 'tables',\n 'tablet',\n 'tableware',\n 'tabloid',\n 'tackiness',\n 'tacking',\n 'tackle',\n 'tackling',\n 'tacky',\n 'taco',\n 'tactful',\n 'tactical',\n 'tactics',\n 'tactile',\n 'tactless',\n 'tadpole',\n 'taekwondo',\n 'tag',\n 'tainted',\n 'take',\n 'taking',\n 'talcum',\n 'talisman',\n 'tall',\n 'talon',\n 'tamale',\n 'tameness',\n 'tamer',\n 'tamper',\n 'tank',\n 'tanned',\n 'tannery',\n 'tanning',\n 'tantrum',\n 'tapeless',\n 'tapered',\n 'tapering',\n 'tapestry',\n 'tapioca',\n 'tapping',\n 'taps',\n 'tarantula',\n 'target',\n 'tarmac',\n 'tarnish',\n 'tarot',\n 'tartar',\n 'tartly',\n 'tartness',\n 'task',\n 'tassel',\n 'taste',\n 'tastiness',\n 'tasting',\n 'tasty',\n 'tattered',\n 'tattle',\n 'tattling',\n 'tattoo',\n 'taunt',\n 'tavern',\n 'thank',\n 'that',\n 'thaw',\n 'theater',\n 'theatrics',\n 'thee',\n 'theft',\n 'theme',\n 'theology',\n 'theorize',\n 'thermal',\n 'thermos',\n 'thesaurus',\n 'these',\n 'thesis',\n 'thespian',\n 'thicken',\n 'thicket',\n 'thickness',\n 'thieving',\n 'thievish',\n 'thigh',\n 'thimble',\n 'thing',\n 'think',\n 'thinly',\n 'thinner',\n 'thinness',\n 'thinning',\n 'thirstily',\n 'thirsting',\n 'thirsty',\n 'thirteen',\n 'thirty',\n 'thong',\n 'thorn',\n 'those',\n 'thousand',\n 'thrash',\n 'thread',\n 'threaten',\n 'threefold',\n 'thrift',\n 'thrill',\n 'thrive',\n 'thriving',\n 'throat',\n 'throbbing',\n 'throng',\n 'throttle',\n 'throwaway',\n 'throwback',\n 'thrower',\n 'throwing',\n 'thud',\n 'thumb',\n 'thumping',\n 'thursday',\n 'thus',\n 'thwarting',\n 'thyself',\n 'tiara',\n 'tibia',\n 'tidal',\n 'tidbit',\n 'tidiness',\n 'tidings',\n 'tidy',\n 'tiger',\n 'tighten',\n 'tightly',\n 'tightness',\n 'tightrope',\n 'tightwad',\n 'tigress',\n 'tile',\n 'tiling',\n 'till',\n 'tilt',\n 'timid',\n 'timing',\n 'timothy',\n 'tinderbox',\n 'tinfoil',\n 'tingle',\n 'tingling',\n 'tingly',\n 'tinker',\n 'tinkling',\n 'tinsel',\n 'tinsmith',\n 'tint',\n 'tinwork',\n 'tiny',\n 'tipoff',\n 'tipped',\n 'tipper',\n 'tipping',\n 'tiptoeing',\n 'tiptop',\n 'tiring',\n 'tissue',\n 'trace',\n 'tracing',\n 'track',\n 'traction',\n 'tractor',\n 'trade',\n 'trading',\n 'tradition',\n 'traffic',\n 'tragedy',\n 'trailing',\n 'trailside',\n 'train',\n 'traitor',\n 'trance',\n 'tranquil',\n 'transfer',\n 'transform',\n 'translate',\n 'transpire',\n 'transport',\n 'transpose',\n 'trapdoor',\n 'trapeze',\n 'trapezoid',\n 'trapped',\n 'trapper',\n 'trapping',\n 'traps',\n 'trash',\n 'travel',\n 'traverse',\n 'travesty',\n 'tray',\n 'treachery',\n 'treading',\n 'treadmill',\n 'treason',\n 'treat',\n 'treble',\n 'tree',\n 'trekker',\n 'tremble',\n 'trembling',\n 'tremor',\n 'trench',\n 'trend',\n 'trespass',\n 'triage',\n 'trial',\n 'triangle',\n 'tribesman',\n 'tribunal',\n 'tribune',\n 'tributary',\n 'tribute',\n 'triceps',\n 'trickery',\n 'trickily',\n 'tricking',\n 'trickle',\n 'trickster',\n 'tricky',\n 'tricolor',\n 'tricycle',\n 'trident',\n 'tried',\n 'trifle',\n 'trifocals',\n 'trillion',\n 'trilogy',\n 'trimester',\n 'trimmer',\n 'trimming',\n 'trimness',\n 'trinity',\n 'trio',\n 'tripod',\n 'tripping',\n 'triumph',\n 'trivial',\n 'trodden',\n 'trolling',\n 'trombone',\n 'trophy',\n 'tropical',\n 'tropics',\n 'trouble',\n 'troubling',\n 'trough',\n 'trousers',\n 'trout',\n 'trowel',\n 'truce',\n 'truck',\n 'truffle',\n 'trump',\n 'trunks',\n 'trustable',\n 'trustee',\n 'trustful',\n 'trusting',\n 'trustless',\n 'truth',\n 'try',\n 'tubby',\n 'tubeless',\n 'tubular',\n 'tucking',\n 'tuesday',\n 'tug',\n 'tuition',\n 'tulip',\n 'tumble',\n 'tumbling',\n 'tummy',\n 'turban',\n 'turbine',\n 'turbofan',\n 'turbojet',\n 'turbulent',\n 'turf',\n 'turkey',\n 'turmoil',\n 'turret',\n 'turtle',\n 'tusk',\n 'tutor',\n 'tutu',\n 'tux',\n 'tweak',\n 'tweed',\n 'tweet',\n 'tweezers',\n 'twelve',\n 'twentieth',\n 'twenty',\n 'twerp',\n 'twice',\n 'twiddle',\n 'twiddling',\n 'twig',\n 'twilight',\n 'twine',\n 'twins',\n 'twirl',\n 'twistable',\n 'twisted',\n 'twister',\n 'twisting',\n 'twisty',\n 'twitch',\n 'twitter',\n 'tycoon',\n 'tying',\n 'tyke',\n 'udder',\n 'ultimate',\n 'ultimatum',\n 'ultra',\n 'umbilical',\n 'umbrella',\n 'umpire',\n 'unabashed',\n 'unable',\n 'unadorned',\n 'unadvised',\n 'unafraid',\n 'unaired',\n 'unaligned',\n 'unaltered',\n 'unarmored',\n 'unashamed',\n 'unaudited',\n 'unawake',\n 'unaware',\n 'unbaked',\n 'unbalance',\n 'unbeaten',\n 'unbend',\n 'unbent',\n 'unbiased',\n 'unbitten',\n 'unblended',\n 'unblessed',\n 'unblock',\n 'unbolted',\n 'unbounded',\n 'unboxed',\n 'unbraided',\n 'unbridle',\n 'unbroken',\n 'unbuckled',\n 'unbundle',\n 'unburned',\n 'unbutton',\n 'uncanny',\n 'uncapped',\n 'uncaring',\n 'uncertain',\n 'unchain',\n 'unchanged',\n 'uncharted',\n 'uncheck',\n 'uncivil',\n 'unclad',\n 'unclaimed',\n 'unclamped',\n 'unclasp',\n 'uncle',\n 'unclip',\n 'uncloak',\n 'unclog',\n 'unclothed',\n 'uncoated',\n 'uncoiled',\n 'uncolored',\n 'uncombed',\n 'uncommon',\n 'uncooked',\n 'uncork',\n 'uncorrupt',\n 'uncounted',\n 'uncouple',\n 'uncouth',\n 'uncover',\n 'uncross',\n 'uncrown',\n 'uncrushed',\n 'uncured',\n 'uncurious',\n 'uncurled',\n 'uncut',\n 'undamaged',\n 'undated',\n 'undaunted',\n 'undead',\n 'undecided',\n 'undefined',\n 'underage',\n 'underarm',\n 'undercoat',\n 'undercook',\n 'undercut',\n 'underdog',\n 'underdone',\n 'underfed',\n 'underfeed',\n 'underfoot',\n 'undergo',\n 'undergrad',\n 'underhand',\n 'underline',\n 'underling',\n 'undermine',\n 'undermost',\n 'underpaid',\n 'underpass',\n 'underpay',\n 'underrate',\n 'undertake',\n 'undertone',\n 'undertook',\n 'undertow',\n 'underuse',\n 'underwear',\n 'underwent',\n 'underwire',\n 'undesired',\n 'undiluted',\n 'undivided',\n 'undocked',\n 'undoing',\n 'undone',\n 'undrafted',\n 'undress',\n 'undrilled',\n 'undusted',\n 'undying',\n 'unearned',\n 'unearth',\n 'unease',\n 'uneasily',\n 'uneasy',\n 'uneatable',\n 'uneaten',\n 'unedited',\n 'unelected',\n 'unending',\n 'unengaged',\n 'unenvied',\n 'unequal',\n 'unethical',\n 'uneven',\n 'unexpired',\n 'unexposed',\n 'unfailing',\n 'unfair',\n 'unfasten',\n 'unfazed',\n 'unfeeling',\n 'unfiled',\n 'unfilled',\n 'unfitted',\n 'unfitting',\n 'unfixable',\n 'unfixed',\n 'unflawed',\n 'unfocused',\n 'unfold',\n 'unfounded',\n 'unframed',\n 'unfreeze',\n 'unfrosted',\n 'unfrozen',\n 'unfunded',\n 'unglazed',\n 'ungloved',\n 'unglue',\n 'ungodly',\n 'ungraded',\n 'ungreased',\n 'unguarded',\n 'unguided',\n 'unhappily',\n 'unhappy',\n 'unharmed',\n 'unhealthy',\n 'unheard',\n 'unhearing',\n 'unheated',\n 'unhelpful',\n 'unhidden',\n 'unhinge',\n 'unhitched',\n 'unholy',\n 'unhook',\n 'unicorn',\n 'unicycle',\n 'unified',\n 'unifier',\n 'uniformed',\n 'uniformly',\n 'unify',\n 'unimpeded',\n 'uninjured',\n 'uninstall',\n 'uninsured',\n 'uninvited',\n 'union',\n 'uniquely',\n 'unisexual',\n 'unison',\n 'unissued',\n 'unit',\n 'universal',\n 'universe',\n 'unjustly',\n 'unkempt',\n 'unkind',\n 'unknotted',\n 'unknowing',\n 'unknown',\n 'unlaced',\n 'unlatch',\n 'unlawful',\n 'unleaded',\n 'unlearned',\n 'unleash',\n 'unless',\n 'unleveled',\n 'unlighted',\n 'unlikable',\n 'unlimited',\n 'unlined',\n 'unlinked',\n 'unlisted',\n 'unlit',\n 'unlivable',\n 'unloaded',\n 'unloader',\n 'unlocked',\n 'unlocking',\n 'unlovable',\n 'unloved',\n 'unlovely',\n 'unloving',\n 'unluckily',\n 'unlucky',\n 'unmade',\n 'unmanaged',\n 'unmanned',\n 'unmapped',\n 'unmarked',\n 'unmasked',\n 'unmasking',\n 'unmatched',\n 'unmindful',\n 'unmixable',\n 'unmixed',\n 'unmolded',\n 'unmoral',\n 'unmovable',\n 'unmoved',\n 'unmoving',\n 'unnamable',\n 'unnamed',\n 'unnatural',\n 'unneeded',\n 'unnerve',\n 'unnerving',\n 'unnoticed',\n 'unopened',\n 'unopposed',\n 'unpack',\n 'unpadded',\n 'unpaid',\n 'unpainted',\n 'unpaired',\n 'unpaved',\n 'unpeeled',\n 'unpicked',\n 'unpiloted',\n 'unpinned',\n 'unplanned',\n 'unplanted',\n 'unpleased',\n 'unpledged',\n 'unplowed',\n 'unplug',\n 'unpopular',\n 'unproven',\n 'unquote',\n 'unranked',\n 'unrated',\n 'unraveled',\n 'unreached',\n 'unread',\n 'unreal',\n 'unreeling',\n 'unrefined',\n 'unrelated',\n 'unrented',\n 'unrest',\n 'unretired',\n 'unrevised',\n 'unrigged',\n 'unripe',\n 'unrivaled',\n 'unroasted',\n 'unrobed',\n 'unroll',\n 'unruffled',\n 'unruly',\n 'unrushed',\n 'unsaddle',\n 'unsafe',\n 'unsaid',\n 'unsalted',\n 'unsaved',\n 'unsavory',\n 'unscathed',\n 'unscented',\n 'unscrew',\n 'unsealed',\n 'unseated',\n 'unsecured',\n 'unseeing',\n 'unseemly',\n 'unseen',\n 'unselect',\n 'unselfish',\n 'unsent',\n 'unsettled',\n 'unshackle',\n 'unshaken',\n 'unshaved',\n 'unshaven',\n 'unsheathe',\n 'unshipped',\n 'unsightly',\n 'unsigned',\n 'unskilled',\n 'unsliced',\n 'unsmooth',\n 'unsnap',\n 'unsocial',\n 'unsoiled',\n 'unsold',\n 'unsolved',\n 'unsorted',\n 'unspoiled',\n 'unspoken',\n 'unstable',\n 'unstaffed',\n 'unstamped',\n 'unsteady',\n 'unsterile',\n 'unstirred',\n 'unstitch',\n 'unstopped',\n 'unstuck',\n 'unstuffed',\n 'unstylish',\n 'unsubtle',\n 'unsubtly',\n 'unsuited',\n 'unsure',\n 'unsworn',\n 'untagged',\n 'untainted',\n 'untaken',\n 'untamed',\n 'untangled',\n 'untapped',\n 'untaxed',\n 'unthawed',\n 'unthread',\n 'untidy',\n 'untie',\n 'until',\n 'untimed',\n 'untimely',\n 'untitled',\n 'untoasted',\n 'untold',\n 'untouched',\n 'untracked',\n 'untrained',\n 'untreated',\n 'untried',\n 'untrimmed',\n 'untrue',\n 'untruth',\n 'unturned',\n 'untwist',\n 'untying',\n 'unusable',\n 'unused',\n 'unusual',\n 'unvalued',\n 'unvaried',\n 'unvarying',\n 'unveiled',\n 'unveiling',\n 'unvented',\n 'unviable',\n 'unvisited',\n 'unvocal',\n 'unwanted',\n 'unwarlike',\n 'unwary',\n 'unwashed',\n 'unwatched',\n 'unweave',\n 'unwed',\n 'unwelcome',\n 'unwell',\n 'unwieldy',\n 'unwilling',\n 'unwind',\n 'unwired',\n 'unwitting',\n 'unwomanly',\n 'unworldly',\n 'unworn',\n 'unworried',\n 'unworthy',\n 'unwound',\n 'unwoven',\n 'unwrapped',\n 'unwritten',\n 'unzip',\n 'upbeat',\n 'upchuck',\n 'upcoming',\n 'upcountry',\n 'update',\n 'upfront',\n 'upgrade',\n 'upheaval',\n 'upheld',\n 'uphill',\n 'uphold',\n 'uplifted',\n 'uplifting',\n 'upload',\n 'upon',\n 'upper',\n 'upright',\n 'uprising',\n 'upriver',\n 'uproar',\n 'uproot',\n 'upscale',\n 'upside',\n 'upstage',\n 'upstairs',\n 'upstart',\n 'upstate',\n 'upstream',\n 'upstroke',\n 'upswing',\n 'uptake',\n 'uptight',\n 'uptown',\n 'upturned',\n 'upward',\n 'upwind',\n 'uranium',\n 'urban',\n 'urchin',\n 'urethane',\n 'urgency',\n 'urgent',\n 'urging',\n 'urologist',\n 'urology',\n 'usable',\n 'usage',\n 'useable',\n 'used',\n 'uselessly',\n 'user',\n 'usher',\n 'usual',\n 'utensil',\n 'utility',\n 'utilize',\n 'utmost',\n 'utopia',\n 'utter',\n 'vacancy',\n 'vacant',\n 'vacate',\n 'vacation',\n 'vagabond',\n 'vagrancy',\n 'vagrantly',\n 'vaguely',\n 'vagueness',\n 'valiant',\n 'valid',\n 'valium',\n 'valley',\n 'valuables',\n 'value',\n 'vanilla',\n 'vanish',\n 'vanity',\n 'vanquish',\n 'vantage',\n 'vaporizer',\n 'variable',\n 'variably',\n 'varied',\n 'variety',\n 'various',\n 'varmint',\n 'varnish',\n 'varsity',\n 'varying',\n 'vascular',\n 'vaseline',\n 'vastly',\n 'vastness',\n 'veal',\n 'vegan',\n 'veggie',\n 'vehicular',\n 'velcro',\n 'velocity',\n 'velvet',\n 'vendetta',\n 'vending',\n 'vendor',\n 'veneering',\n 'vengeful',\n 'venomous',\n 'ventricle',\n 'venture',\n 'venue',\n 'venus',\n 'verbalize',\n 'verbally',\n 'verbose',\n 'verdict',\n 'verify',\n 'verse',\n 'version',\n 'versus',\n 'vertebrae',\n 'vertical',\n 'vertigo',\n 'very',\n 'vessel',\n 'vest',\n 'veteran',\n 'veto',\n 'vexingly',\n 'viability',\n 'viable',\n 'vibes',\n 'vice',\n 'vicinity',\n 'victory',\n 'video',\n 'viewable',\n 'viewer',\n 'viewing',\n 'viewless',\n 'viewpoint',\n 'vigorous',\n 'village',\n 'villain',\n 'vindicate',\n 'vineyard',\n 'vintage',\n 'violate',\n 'violation',\n 'violator',\n 'violet',\n 'violin',\n 'viper',\n 'viral',\n 'virtual',\n 'virtuous',\n 'virus',\n 'visa',\n 'viscosity',\n 'viscous',\n 'viselike',\n 'visible',\n 'visibly',\n 'vision',\n 'visiting',\n 'visitor',\n 'visor',\n 'vista',\n 'vitality',\n 'vitalize',\n 'vitally',\n 'vitamins',\n 'vivacious',\n 'vividly',\n 'vividness',\n 'vixen',\n 'vocalist',\n 'vocalize',\n 'vocally',\n 'vocation',\n 'voice',\n 'voicing',\n 'void',\n 'volatile',\n 'volley',\n 'voltage',\n 'volumes',\n 'voter',\n 'voting',\n 'voucher',\n 'vowed',\n 'vowel',\n 'voyage',\n 'wackiness',\n 'wad',\n 'wafer',\n 'waffle',\n 'waged',\n 'wager',\n 'wages',\n 'waggle',\n 'wagon',\n 'wake',\n 'waking',\n 'walk',\n 'walmart',\n 'walnut',\n 'walrus',\n 'waltz',\n 'wand',\n 'wannabe',\n 'wanted',\n 'wanting',\n 'wasabi',\n 'washable',\n 'washbasin',\n 'washboard',\n 'washbowl',\n 'washcloth',\n 'washday',\n 'washed',\n 'washer',\n 'washhouse',\n 'washing',\n 'washout',\n 'washroom',\n 'washstand',\n 'washtub',\n 'wasp',\n 'wasting',\n 'watch',\n 'water',\n 'waviness',\n 'waving',\n 'wavy',\n 'whacking',\n 'whacky',\n 'wham',\n 'wharf',\n 'wheat',\n 'whenever',\n 'whiff',\n 'whimsical',\n 'whinny',\n 'whiny',\n 'whisking',\n 'whoever',\n 'whole',\n 'whomever',\n 'whoopee',\n 'whooping',\n 'whoops',\n 'why',\n 'wick',\n 'widely',\n 'widen',\n 'widget',\n 'widow',\n 'width',\n 'wieldable',\n 'wielder',\n 'wife',\n 'wifi',\n 'wikipedia',\n 'wildcard',\n 'wildcat',\n 'wilder',\n 'wildfire',\n 'wildfowl',\n 'wildland',\n 'wildlife',\n 'wildly',\n 'wildness',\n 'willed',\n 'willfully',\n 'willing',\n 'willow',\n 'willpower',\n 'wilt',\n 'wimp',\n 'wince',\n 'wincing',\n 'wind',\n 'wing',\n 'winking',\n 'winner',\n 'winnings',\n 'winter',\n 'wipe',\n 'wired',\n 'wireless',\n 'wiring',\n 'wiry',\n 'wisdom',\n 'wise',\n 'wish',\n 'wisplike',\n 'wispy',\n 'wistful',\n 'wizard',\n 'wobble',\n 'wobbling',\n 'wobbly',\n 'wok',\n 'wolf',\n 'wolverine',\n 'womanhood',\n 'womankind',\n 'womanless',\n 'womanlike',\n 'womanly',\n 'womb',\n 'woof',\n 'wooing',\n 'wool',\n 'woozy',\n 'word',\n 'work',\n 'worried',\n 'worrier',\n 'worrisome',\n 'worry',\n 'worsening',\n 'worshiper',\n 'worst',\n 'wound',\n 'woven',\n 'wow',\n 'wrangle',\n 'wrath',\n 'wreath',\n 'wreckage',\n 'wrecker',\n 'wrecking',\n 'wrench',\n 'wriggle',\n 'wriggly',\n 'wrinkle',\n 'wrinkly',\n 'wrist',\n 'writing',\n 'written',\n 'wrongdoer',\n 'wronged',\n 'wrongful',\n 'wrongly',\n 'wrongness',\n 'wrought',\n 'xbox',\n 'xerox',\n 'yahoo',\n 'yam',\n 'yanking',\n 'yapping',\n 'yard',\n 'yarn',\n 'yeah',\n 'yearbook',\n 'yearling',\n 'yearly',\n 'yearning',\n 'yeast',\n 'yelling',\n 'yelp',\n 'yen',\n 'yesterday',\n 'yiddish',\n 'yield',\n 'yin',\n 'yippee',\n 'yo-yo',\n 'yodel',\n 'yoga',\n 'yogurt',\n 'yonder',\n 'yoyo',\n 'yummy',\n 'zap',\n 'zealous',\n 'zebra',\n 'zen',\n 'zeppelin',\n 'zero',\n 'zestfully',\n 'zesty',\n 'zigzagged',\n 'zipfile',\n 'zipping',\n 'zippy',\n 'zips',\n 'zit',\n 'zodiac',\n 'zombie',\n 'zone',\n 'zoning',\n 'zookeeper',\n 'zoologist',\n 'zoology',\n 'zoom',\n];\n","import { EnvironmentUrls } from '../models/domain/environmentUrls';\n\nimport { ConstantsService } from './constants.service';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { EnvironmentService as EnvironmentServiceAbstraction } from '../abstractions/environment.service';\nimport { NotificationsService } from '../abstractions/notifications.service';\nimport { StorageService } from '../abstractions/storage.service';\n\nexport class EnvironmentService implements EnvironmentServiceAbstraction {\n baseUrl: string;\n webVaultUrl: string;\n apiUrl: string;\n identityUrl: string;\n iconsUrl: string;\n notificationsUrl: string;\n eventsUrl: string;\n enterpriseUrl: string;\n\n constructor(private apiService: ApiService, private storageService: StorageService,\n private notificationsService: NotificationsService) { }\n\n getWebVaultUrl(): string {\n if (this.webVaultUrl != null) {\n return this.webVaultUrl;\n } else if (this.baseUrl) {\n return this.baseUrl;\n }\n return null;\n }\n\n async setUrlsFromStorage(): Promise {\n const urlsObj: any = await this.storageService.get(ConstantsService.environmentUrlsKey);\n const urls = urlsObj || {\n base: null,\n api: null,\n identity: null,\n icons: null,\n notifications: null,\n events: null,\n webVault: null,\n enterprise: null,\n };\n\n const envUrls = new EnvironmentUrls();\n\n if (urls.base) {\n this.baseUrl = envUrls.base = urls.base;\n this.apiService.setUrls(envUrls);\n return;\n }\n\n this.webVaultUrl = urls.webVault;\n this.apiUrl = envUrls.api = urls.api;\n this.identityUrl = envUrls.identity = urls.identity;\n this.iconsUrl = urls.icons;\n this.notificationsUrl = urls.notifications;\n this.eventsUrl = envUrls.events = urls.events;\n this.enterpriseUrl = urls.enterprise;\n this.apiService.setUrls(envUrls);\n }\n\n async setUrls(urls: any): Promise {\n urls.base = this.formatUrl(urls.base);\n urls.webVault = this.formatUrl(urls.webVault);\n urls.api = this.formatUrl(urls.api);\n urls.identity = this.formatUrl(urls.identity);\n urls.icons = this.formatUrl(urls.icons);\n urls.notifications = this.formatUrl(urls.notifications);\n urls.events = this.formatUrl(urls.events);\n urls.enterprise = this.formatUrl(urls.enterprise);\n\n await this.storageService.save(ConstantsService.environmentUrlsKey, {\n base: urls.base,\n api: urls.api,\n identity: urls.identity,\n webVault: urls.webVault,\n icons: urls.icons,\n notifications: urls.notifications,\n events: urls.events,\n enterprise: urls.enterprise,\n });\n\n this.baseUrl = urls.base;\n this.webVaultUrl = urls.webVault;\n this.apiUrl = urls.api;\n this.identityUrl = urls.identity;\n this.iconsUrl = urls.icons;\n this.notificationsUrl = urls.notifications;\n this.eventsUrl = urls.events;\n this.enterpriseUrl = urls.enterprise;\n\n const envUrls = new EnvironmentUrls();\n if (this.baseUrl) {\n envUrls.base = this.baseUrl;\n } else {\n envUrls.api = this.apiUrl;\n envUrls.identity = this.identityUrl;\n envUrls.events = this.eventsUrl;\n }\n\n this.apiService.setUrls(envUrls);\n if (this.notificationsService != null) {\n this.notificationsService.init(this);\n }\n return urls;\n }\n\n private formatUrl(url: string): string {\n if (url == null || url === '') {\n return null;\n }\n\n url = url.replace(/\\/+$/g, '');\n if (!url.startsWith('http://') && !url.startsWith('https://')) {\n url = 'https://' + url;\n }\n\n return url.trim();\n }\n}\n","import { FolderData } from '../models/data/folderData';\n\nimport { Folder } from '../models/domain/folder';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\nimport { TreeNode } from '../models/domain/treeNode';\n\nimport { FolderRequest } from '../models/request/folderRequest';\n\nimport { FolderResponse } from '../models/response/folderResponse';\n\nimport { FolderView } from '../models/view/folderView';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { CipherService } from '../abstractions/cipher.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { FolderService as FolderServiceAbstraction } from '../abstractions/folder.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\nimport { CipherData } from '../models/data/cipherData';\n\nimport { ServiceUtils } from '../misc/serviceUtils';\nimport { Utils } from '../misc/utils';\n\nconst Keys = {\n foldersPrefix: 'folders_',\n ciphersPrefix: 'ciphers_',\n};\nconst NestingDelimiter = '/';\n\nexport class FolderService implements FolderServiceAbstraction {\n decryptedFolderCache: FolderView[];\n\n constructor(private cryptoService: CryptoService, private userService: UserService,\n private apiService: ApiService, private storageService: StorageService,\n private i18nService: I18nService, private cipherService: CipherService) { }\n\n clearCache(): void {\n this.decryptedFolderCache = null;\n }\n\n async encrypt(model: FolderView, key?: SymmetricCryptoKey): Promise {\n const folder = new Folder();\n folder.id = model.id;\n folder.name = await this.cryptoService.encrypt(model.name, key);\n return folder;\n }\n\n async get(id: string): Promise {\n const userId = await this.userService.getUserId();\n const folders = await this.storageService.get<{ [id: string]: FolderData; }>(\n Keys.foldersPrefix + userId);\n if (folders == null || !folders.hasOwnProperty(id)) {\n return null;\n }\n\n return new Folder(folders[id]);\n }\n\n async getAll(): Promise {\n const userId = await this.userService.getUserId();\n const folders = await this.storageService.get<{ [id: string]: FolderData; }>(\n Keys.foldersPrefix + userId);\n const response: Folder[] = [];\n for (const id in folders) {\n if (folders.hasOwnProperty(id)) {\n response.push(new Folder(folders[id]));\n }\n }\n return response;\n }\n\n async getAllDecrypted(): Promise {\n if (this.decryptedFolderCache != null) {\n return this.decryptedFolderCache;\n }\n\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error('No key.');\n }\n\n const decFolders: FolderView[] = [];\n const promises: Promise[] = [];\n const folders = await this.getAll();\n folders.forEach(folder => {\n promises.push(folder.decrypt().then(f => decFolders.push(f)));\n });\n\n await Promise.all(promises);\n decFolders.sort(Utils.getSortFunction(this.i18nService, 'name'));\n\n const noneFolder = new FolderView();\n noneFolder.name = this.i18nService.t('noneFolder');\n decFolders.push(noneFolder);\n\n this.decryptedFolderCache = decFolders;\n return this.decryptedFolderCache;\n }\n\n async getAllNested(): Promise[]> {\n const folders = await this.getAllDecrypted();\n const nodes: TreeNode[] = [];\n folders.forEach(f => {\n const folderCopy = new FolderView();\n folderCopy.id = f.id;\n folderCopy.revisionDate = f.revisionDate;\n const parts = f.name != null ? f.name.replace(/^\\/+|\\/+$/g, '').split(NestingDelimiter) : [];\n ServiceUtils.nestedTraverse(nodes, 0, parts, folderCopy, null, NestingDelimiter);\n });\n return nodes;\n }\n\n async getNested(id: string): Promise> {\n const folders = await this.getAllNested();\n return ServiceUtils.getTreeNodeObject(folders, id) as TreeNode;\n }\n\n async saveWithServer(folder: Folder): Promise {\n const request = new FolderRequest(folder);\n\n let response: FolderResponse;\n if (folder.id == null) {\n response = await this.apiService.postFolder(request);\n folder.id = response.id;\n } else {\n response = await this.apiService.putFolder(folder.id, request);\n }\n\n const userId = await this.userService.getUserId();\n const data = new FolderData(response, userId);\n await this.upsert(data);\n }\n\n async upsert(folder: FolderData | FolderData[]): Promise {\n const userId = await this.userService.getUserId();\n let folders = await this.storageService.get<{ [id: string]: FolderData; }>(\n Keys.foldersPrefix + userId);\n if (folders == null) {\n folders = {};\n }\n\n if (folder instanceof FolderData) {\n const f = folder as FolderData;\n folders[f.id] = f;\n } else {\n (folder as FolderData[]).forEach(f => {\n folders[f.id] = f;\n });\n }\n\n await this.storageService.save(Keys.foldersPrefix + userId, folders);\n this.decryptedFolderCache = null;\n }\n\n async replace(folders: { [id: string]: FolderData; }): Promise {\n const userId = await this.userService.getUserId();\n await this.storageService.save(Keys.foldersPrefix + userId, folders);\n this.decryptedFolderCache = null;\n }\n\n async clear(userId: string): Promise {\n await this.storageService.remove(Keys.foldersPrefix + userId);\n this.decryptedFolderCache = null;\n }\n\n async delete(id: string | string[]): Promise {\n const userId = await this.userService.getUserId();\n const folders = await this.storageService.get<{ [id: string]: FolderData; }>(\n Keys.foldersPrefix + userId);\n if (folders == null) {\n return;\n }\n\n if (typeof id === 'string') {\n if (folders[id] == null) {\n return;\n }\n delete folders[id];\n } else {\n (id as string[]).forEach(i => {\n delete folders[i];\n });\n }\n\n await this.storageService.save(Keys.foldersPrefix + userId, folders);\n this.decryptedFolderCache = null;\n\n // Items in a deleted folder are re-assigned to \"No Folder\"\n const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(Keys.ciphersPrefix + userId);\n if (ciphers != null) {\n const updates: CipherData[] = [];\n for (const cId in ciphers) {\n if (ciphers[cId].folderId === id) {\n ciphers[cId].folderId = null;\n updates.push(ciphers[cId]);\n }\n }\n if (updates.length > 0) {\n this.cipherService.upsert(updates);\n }\n }\n }\n\n async deleteWithServer(id: string): Promise {\n await this.apiService.deleteFolder(id);\n await this.delete(id);\n }\n}\n","import { I18nService as I18nServiceAbstraction } from '../abstractions/i18n.service';\n\nexport class I18nService implements I18nServiceAbstraction {\n locale: string;\n // First locale is the default (English)\n supportedTranslationLocales: string[] = ['en'];\n translationLocale: string;\n collator: Intl.Collator;\n localeNames = new Map([\n ['af', 'Afrikaans'],\n ['be', 'Беларуская'],\n ['bg', 'български'],\n ['ca', 'català'],\n ['cs', 'čeština'],\n ['da', 'dansk'],\n ['de', 'Deutsch'],\n ['el', 'Ελληνικά'],\n ['en', 'English'],\n ['en-GB', 'English (British)'],\n ['eo', 'Esperanto'],\n ['es', 'español'],\n ['et', 'eesti'],\n ['fa', 'فارسی'],\n ['fi', 'suomi'],\n ['fr', 'français'],\n ['he', 'עברית'],\n ['hi', 'हिन्दी'],\n ['hr', 'hrvatski'],\n ['hu', 'magyar'],\n ['id', 'Bahasa Indonesia'],\n ['it', 'italiano'],\n ['ja', '日本語'],\n ['ko', '한국어'],\n ['lv', 'Latvietis'],\n ['ml', 'മലയാളം'],\n ['nb', 'norsk (bokmål)'],\n ['nl', 'Nederlands'],\n ['pl', 'polski'],\n ['pt-BR', 'português do Brasil'],\n ['pt-PT', 'português'],\n ['ro', 'română'],\n ['ru', 'русский'],\n ['sk', 'slovenčina'],\n ['sr', 'Српски'],\n ['sv', 'svenska'],\n ['th', 'ไทย'],\n ['tr', 'Türkçe'],\n ['uk', 'українська'],\n ['vi', 'Tiếng Việt'],\n ['zh-CN', '中文(中国大陆)'],\n ['zh-TW', '中文(台灣)'],\n ]);\n\n protected inited: boolean;\n protected defaultMessages: any = {};\n protected localeMessages: any = {};\n\n constructor(protected systemLanguage: string, protected localesDirectory: string,\n protected getLocalesJson: (formattedLocale: string) => Promise) {\n this.systemLanguage = systemLanguage.replace('_', '-');\n }\n\n async init(locale?: string) {\n if (this.inited) {\n throw new Error('i18n already initialized.');\n }\n if (this.supportedTranslationLocales == null || this.supportedTranslationLocales.length === 0) {\n throw new Error('supportedTranslationLocales not set.');\n }\n\n this.inited = true;\n this.locale = this.translationLocale = locale != null ? locale : this.systemLanguage;\n\n try {\n this.collator = new Intl.Collator(this.locale, { numeric: true, sensitivity: 'base' });\n } catch {\n this.collator = null;\n }\n\n if (this.supportedTranslationLocales.indexOf(this.translationLocale) === -1) {\n this.translationLocale = this.translationLocale.slice(0, 2);\n\n if (this.supportedTranslationLocales.indexOf(this.translationLocale) === -1) {\n this.translationLocale = this.supportedTranslationLocales[0];\n }\n }\n\n if (this.localesDirectory != null) {\n await this.loadMessages(this.translationLocale, this.localeMessages);\n if (this.translationLocale !== this.supportedTranslationLocales[0]) {\n await this.loadMessages(this.supportedTranslationLocales[0], this.defaultMessages);\n }\n }\n }\n\n t(id: string, p1?: string, p2?: string, p3?: string): string {\n return this.translate(id, p1, p2, p3);\n }\n\n translate(id: string, p1?: string, p2?: string, p3?: string): string {\n let result: string;\n if (this.localeMessages.hasOwnProperty(id) && this.localeMessages[id]) {\n result = this.localeMessages[id];\n } else if (this.defaultMessages.hasOwnProperty(id) && this.defaultMessages[id]) {\n result = this.defaultMessages[id];\n } else {\n result = '';\n }\n\n if (result !== '') {\n if (p1 != null) {\n result = result.split('__$1__').join(p1);\n }\n if (p2 != null) {\n result = result.split('__$2__').join(p2);\n }\n if (p3 != null) {\n result = result.split('__$3__').join(p3);\n }\n }\n\n return result;\n }\n\n private async loadMessages(locale: string, messagesObj: any): Promise {\n const formattedLocale = locale.replace('-', '_');\n const locales = await this.getLocalesJson(formattedLocale);\n for (const prop in locales) {\n if (!locales.hasOwnProperty(prop)) {\n continue;\n }\n messagesObj[prop] = locales[prop].message;\n\n if (locales[prop].placeholders) {\n for (const placeProp in locales[prop].placeholders) {\n if (!locales[prop].placeholders.hasOwnProperty(placeProp) ||\n !locales[prop].placeholders[placeProp].content) {\n continue;\n }\n\n const replaceToken = '\\\\$' + placeProp.toUpperCase() + '\\\\$';\n let replaceContent = locales[prop].placeholders[placeProp].content;\n if (replaceContent === '$1' || replaceContent === '$2' || replaceContent === '$3') {\n replaceContent = '__$' + replaceContent + '__';\n }\n messagesObj[prop] = messagesObj[prop].replace(new RegExp(replaceToken, 'g'), replaceContent);\n }\n }\n }\n }\n\n}\n","import * as zxcvbn from 'zxcvbn';\n\nimport { EncString } from '../models/domain/encString';\nimport { GeneratedPasswordHistory } from '../models/domain/generatedPasswordHistory';\nimport { PasswordGeneratorPolicyOptions } from '../models/domain/passwordGeneratorPolicyOptions';\nimport { Policy } from '../models/domain/policy';\n\nimport { CryptoService } from '../abstractions/crypto.service';\nimport {\n PasswordGenerationService as PasswordGenerationServiceAbstraction,\n} from '../abstractions/passwordGeneration.service';\nimport { PolicyService } from '../abstractions/policy.service';\nimport { StorageService } from '../abstractions/storage.service';\n\nimport { EEFLongWordList } from '../misc/wordlist';\n\nimport { PolicyType } from '../enums/policyType';\n\nconst DefaultOptions = {\n length: 14,\n ambiguous: false,\n number: true,\n minNumber: 1,\n uppercase: true,\n minUppercase: 0,\n lowercase: true,\n minLowercase: 0,\n special: false,\n minSpecial: 1,\n type: 'password',\n numWords: 3,\n wordSeparator: '-',\n capitalize: false,\n includeNumber: false,\n};\n\nconst Keys = {\n options: 'passwordGenerationOptions',\n history: 'generatedPasswordHistory',\n};\n\nconst MaxPasswordsInHistory = 100;\n\nexport class PasswordGenerationService implements PasswordGenerationServiceAbstraction {\n private optionsCache: any;\n private history: GeneratedPasswordHistory[];\n\n constructor(private cryptoService: CryptoService, private storageService: StorageService,\n private policyService: PolicyService) { }\n\n async generatePassword(options: any): Promise {\n // overload defaults with given options\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.type === 'passphrase') {\n return this.generatePassphrase(options);\n }\n\n // sanitize\n this.sanitizePasswordLength(o, true);\n\n const minLength: number = o.minUppercase + o.minLowercase + o.minNumber + o.minSpecial;\n if (o.length < minLength) {\n o.length = minLength;\n }\n\n const positions: string[] = [];\n if (o.lowercase && o.minLowercase > 0) {\n for (let i = 0; i < o.minLowercase; i++) {\n positions.push('l');\n }\n }\n if (o.uppercase && o.minUppercase > 0) {\n for (let i = 0; i < o.minUppercase; i++) {\n positions.push('u');\n }\n }\n if (o.number && o.minNumber > 0) {\n for (let i = 0; i < o.minNumber; i++) {\n positions.push('n');\n }\n }\n if (o.special && o.minSpecial > 0) {\n for (let i = 0; i < o.minSpecial; i++) {\n positions.push('s');\n }\n }\n while (positions.length < o.length) {\n positions.push('a');\n }\n\n // shuffle\n await this.shuffleArray(positions);\n\n // build out the char sets\n let allCharSet = '';\n\n let lowercaseCharSet = 'abcdefghijkmnopqrstuvwxyz';\n if (o.ambiguous) {\n lowercaseCharSet += 'l';\n }\n if (o.lowercase) {\n allCharSet += lowercaseCharSet;\n }\n\n let uppercaseCharSet = 'ABCDEFGHJKLMNPQRSTUVWXYZ';\n if (o.ambiguous) {\n uppercaseCharSet += 'IO';\n }\n if (o.uppercase) {\n allCharSet += uppercaseCharSet;\n }\n\n let numberCharSet = '23456789';\n if (o.ambiguous) {\n numberCharSet += '01';\n }\n if (o.number) {\n allCharSet += numberCharSet;\n }\n\n const specialCharSet = '!@#$%^&*';\n if (o.special) {\n allCharSet += specialCharSet;\n }\n\n let password = '';\n for (let i = 0; i < o.length; i++) {\n let positionChars: string;\n switch (positions[i]) {\n case 'l':\n positionChars = lowercaseCharSet;\n break;\n case 'u':\n positionChars = uppercaseCharSet;\n break;\n case 'n':\n positionChars = numberCharSet;\n break;\n case 's':\n positionChars = specialCharSet;\n break;\n case 'a':\n positionChars = allCharSet;\n break;\n default:\n break;\n }\n\n const randomCharIndex = await this.cryptoService.randomNumber(0, positionChars.length - 1);\n password += positionChars.charAt(randomCharIndex);\n }\n\n return password;\n }\n\n async generatePassphrase(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.numWords == null || o.numWords <= 2) {\n o.numWords = DefaultOptions.numWords;\n }\n if (o.wordSeparator == null || o.wordSeparator.length === 0 || o.wordSeparator.length > 1) {\n o.wordSeparator = ' ';\n }\n if (o.capitalize == null) {\n o.capitalize = false;\n }\n if (o.includeNumber == null) {\n o.includeNumber = false;\n }\n\n const listLength = EEFLongWordList.length - 1;\n const wordList = new Array(o.numWords);\n for (let i = 0; i < o.numWords; i++) {\n const wordIndex = await this.cryptoService.randomNumber(0, listLength);\n if (o.capitalize) {\n wordList[i] = this.capitalize(EEFLongWordList[wordIndex]);\n } else {\n wordList[i] = EEFLongWordList[wordIndex];\n }\n }\n\n if (o.includeNumber) {\n await this.appendRandomNumberToRandomWord(wordList);\n }\n return wordList.join(o.wordSeparator);\n }\n\n async getOptions(): Promise<[any, PasswordGeneratorPolicyOptions]> {\n if (this.optionsCache == null) {\n const options = await this.storageService.get(Keys.options);\n if (options == null) {\n this.optionsCache = DefaultOptions;\n } else {\n this.optionsCache = Object.assign({}, DefaultOptions, options);\n }\n }\n const enforcedOptions = await this.enforcePasswordGeneratorPoliciesOnOptions(this.optionsCache);\n this.optionsCache = enforcedOptions[0];\n return [this.optionsCache, enforcedOptions[1]];\n }\n\n async enforcePasswordGeneratorPoliciesOnOptions(options: any): Promise<[any, PasswordGeneratorPolicyOptions]> {\n let enforcedPolicyOptions = await this.getPasswordGeneratorPolicyOptions();\n if (enforcedPolicyOptions != null) {\n if (options.length < enforcedPolicyOptions.minLength) {\n options.length = enforcedPolicyOptions.minLength;\n }\n\n if (enforcedPolicyOptions.useUppercase) {\n options.uppercase = true;\n }\n\n if (enforcedPolicyOptions.useLowercase) {\n options.lowercase = true;\n }\n\n if (enforcedPolicyOptions.useNumbers) {\n options.number = true;\n }\n\n if (options.minNumber < enforcedPolicyOptions.numberCount) {\n options.minNumber = enforcedPolicyOptions.numberCount;\n }\n\n if (enforcedPolicyOptions.useSpecial) {\n options.special = true;\n }\n\n if (options.minSpecial < enforcedPolicyOptions.specialCount) {\n options.minSpecial = enforcedPolicyOptions.specialCount;\n }\n\n // Must normalize these fields because the receiving call expects all options to pass the current rules\n if (options.minSpecial + options.minNumber > options.length) {\n options.minSpecial = options.length - options.minNumber;\n }\n\n if (options.numWords < enforcedPolicyOptions.minNumberWords) {\n options.numWords = enforcedPolicyOptions.minNumberWords;\n }\n\n if (enforcedPolicyOptions.capitalize) {\n options.capitalize = true;\n }\n\n if (enforcedPolicyOptions.includeNumber) {\n options.includeNumber = true;\n }\n\n // Force default type if password/passphrase selected via policy\n if (enforcedPolicyOptions.defaultType === 'password' ||\n enforcedPolicyOptions.defaultType === 'passphrase') {\n options.type = enforcedPolicyOptions.defaultType;\n }\n } else { // UI layer expects an instantiated object to prevent more explicit null checks\n enforcedPolicyOptions = new PasswordGeneratorPolicyOptions();\n }\n return [options, enforcedPolicyOptions];\n }\n\n async getPasswordGeneratorPolicyOptions(): Promise {\n const policies: Policy[] = this.policyService == null ? null :\n await this.policyService.getAll(PolicyType.PasswordGenerator);\n let enforcedOptions: PasswordGeneratorPolicyOptions = null;\n\n if (policies == null || policies.length === 0) {\n return enforcedOptions;\n }\n\n policies.forEach(currentPolicy => {\n if (!currentPolicy.enabled || currentPolicy.data == null) {\n return;\n }\n\n if (enforcedOptions == null) {\n enforcedOptions = new PasswordGeneratorPolicyOptions();\n }\n\n // Password wins in multi-org collisions\n if (currentPolicy.data.defaultType != null && enforcedOptions.defaultType !== 'password') {\n enforcedOptions.defaultType = currentPolicy.data.defaultType;\n }\n\n if (currentPolicy.data.minLength != null\n && currentPolicy.data.minLength > enforcedOptions.minLength) {\n enforcedOptions.minLength = currentPolicy.data.minLength;\n }\n\n if (currentPolicy.data.useUpper) {\n enforcedOptions.useUppercase = true;\n }\n\n if (currentPolicy.data.useLower) {\n enforcedOptions.useLowercase = true;\n }\n\n if (currentPolicy.data.useNumbers) {\n enforcedOptions.useNumbers = true;\n }\n\n if (currentPolicy.data.minNumbers != null\n && currentPolicy.data.minNumbers > enforcedOptions.numberCount) {\n enforcedOptions.numberCount = currentPolicy.data.minNumbers;\n }\n\n if (currentPolicy.data.useSpecial) {\n enforcedOptions.useSpecial = true;\n }\n\n if (currentPolicy.data.minSpecial != null\n && currentPolicy.data.minSpecial > enforcedOptions.specialCount) {\n enforcedOptions.specialCount = currentPolicy.data.minSpecial;\n }\n\n if (currentPolicy.data.minNumberWords != null\n && currentPolicy.data.minNumberWords > enforcedOptions.minNumberWords) {\n enforcedOptions.minNumberWords = currentPolicy.data.minNumberWords;\n }\n\n if (currentPolicy.data.capitalize) {\n enforcedOptions.capitalize = true;\n }\n\n if (currentPolicy.data.includeNumber) {\n enforcedOptions.includeNumber = true;\n }\n });\n\n return enforcedOptions;\n }\n\n async saveOptions(options: any) {\n await this.storageService.save(Keys.options, options);\n this.optionsCache = options;\n }\n\n async getHistory(): Promise {\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n return new Array();\n }\n\n if (!this.history) {\n const encrypted = await this.storageService.get(Keys.history);\n this.history = await this.decryptHistory(encrypted);\n }\n\n return this.history || new Array();\n }\n\n async addHistory(password: string): Promise {\n // Cannot add new history if no key is available\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n return;\n }\n\n const currentHistory = await this.getHistory();\n\n // Prevent duplicates\n if (this.matchesPrevious(password, currentHistory)) {\n return;\n }\n\n currentHistory.unshift(new GeneratedPasswordHistory(password, Date.now()));\n\n // Remove old items.\n if (currentHistory.length > MaxPasswordsInHistory) {\n currentHistory.pop();\n }\n\n const newHistory = await this.encryptHistory(currentHistory);\n return await this.storageService.save(Keys.history, newHistory);\n }\n\n async clear(): Promise {\n this.history = [];\n return await this.storageService.remove(Keys.history);\n }\n\n passwordStrength(password: string, userInputs: string[] = null): zxcvbn.ZXCVBNResult {\n if (password == null || password.length === 0) {\n return null;\n }\n let globalUserInputs = ['bitwarden', 'bit', 'warden'];\n if (userInputs != null && userInputs.length > 0) {\n globalUserInputs = globalUserInputs.concat(userInputs);\n }\n // Use a hash set to get rid of any duplicate user inputs\n const finalUserInputs = Array.from(new Set(globalUserInputs));\n const result = zxcvbn(password, finalUserInputs);\n return result;\n }\n\n normalizeOptions(options: any, enforcedPolicyOptions: PasswordGeneratorPolicyOptions) {\n options.minLowercase = 0;\n options.minUppercase = 0;\n\n if (!options.length || options.length < 5) {\n options.length = 5;\n } else if (options.length > 128) {\n options.length = 128;\n }\n\n if (options.length < enforcedPolicyOptions.minLength) {\n options.length = enforcedPolicyOptions.minLength;\n }\n\n if (!options.minNumber) {\n options.minNumber = 0;\n } else if (options.minNumber > options.length) {\n options.minNumber = options.length;\n } else if (options.minNumber > 9) {\n options.minNumber = 9;\n }\n\n if (options.minNumber < enforcedPolicyOptions.numberCount) {\n options.minNumber = enforcedPolicyOptions.numberCount;\n }\n\n if (!options.minSpecial) {\n options.minSpecial = 0;\n } else if (options.minSpecial > options.length) {\n options.minSpecial = options.length;\n } else if (options.minSpecial > 9) {\n options.minSpecial = 9;\n }\n\n if (options.minSpecial < enforcedPolicyOptions.specialCount) {\n options.minSpecial = enforcedPolicyOptions.specialCount;\n }\n\n if (options.minSpecial + options.minNumber > options.length) {\n options.minSpecial = options.length - options.minNumber;\n }\n\n if (options.numWords == null || options.length < 3) {\n options.numWords = 3;\n } else if (options.numWords > 20) {\n options.numWords = 20;\n }\n\n if (options.numWords < enforcedPolicyOptions.minNumberWords) {\n options.numWords = enforcedPolicyOptions.minNumberWords;\n }\n\n if (options.wordSeparator != null && options.wordSeparator.length > 1) {\n options.wordSeparator = options.wordSeparator[0];\n }\n\n this.sanitizePasswordLength(options, false);\n }\n\n private capitalize(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n\n private async appendRandomNumberToRandomWord(wordList: string[]) {\n if (wordList == null || wordList.length <= 0) {\n return;\n }\n const index = await this.cryptoService.randomNumber(0, wordList.length - 1);\n const num = await this.cryptoService.randomNumber(0, 9);\n wordList[index] = wordList[index] + num;\n }\n\n private async encryptHistory(history: GeneratedPasswordHistory[]): Promise {\n if (history == null || history.length === 0) {\n return Promise.resolve([]);\n }\n\n const promises = history.map(async item => {\n const encrypted = await this.cryptoService.encrypt(item.password);\n return new GeneratedPasswordHistory(encrypted.encryptedString, item.date);\n });\n\n return await Promise.all(promises);\n }\n\n private async decryptHistory(history: GeneratedPasswordHistory[]): Promise {\n if (history == null || history.length === 0) {\n return Promise.resolve([]);\n }\n\n const promises = history.map(async item => {\n const decrypted = await this.cryptoService.decryptToUtf8(new EncString(item.password));\n return new GeneratedPasswordHistory(decrypted, item.date);\n });\n\n return await Promise.all(promises);\n }\n\n private matchesPrevious(password: string, history: GeneratedPasswordHistory[]): boolean {\n if (history == null || history.length === 0) {\n return false;\n }\n\n return history[history.length - 1].password === password;\n }\n\n // ref: https://stackoverflow.com/a/12646864/1090359\n private async shuffleArray(array: string[]) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = await this.cryptoService.randomNumber(0, i);\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n\n private sanitizePasswordLength(options: any, forGeneration: boolean) {\n let minUppercaseCalc = 0;\n let minLowercaseCalc = 0;\n let minNumberCalc: number = options.minNumber;\n let minSpecialCalc: number = options.minSpecial;\n\n if (options.uppercase && options.minUppercase <= 0) {\n minUppercaseCalc = 1;\n } else if (!options.uppercase) {\n minUppercaseCalc = 0;\n }\n\n if (options.lowercase && options.minLowercase <= 0) {\n minLowercaseCalc = 1;\n } else if (!options.lowercase) {\n minLowercaseCalc = 0;\n }\n\n if (options.number && options.minNumber <= 0) {\n minNumberCalc = 1;\n } else if (!options.number) {\n minNumberCalc = 0;\n }\n\n if (options.special && options.minSpecial <= 0) {\n minSpecialCalc = 1;\n } else if (!options.special) {\n minSpecialCalc = 0;\n }\n\n // This should never happen but is a final safety net\n if (!options.length || options.length < 1) {\n options.length = 10;\n }\n\n const minLength: number = minUppercaseCalc + minLowercaseCalc + minNumberCalc + minSpecialCalc;\n // Normalize and Generation both require this modification\n if (options.length < minLength) {\n options.length = minLength;\n }\n\n // Apply other changes if the options object passed in is for generation\n if (forGeneration) {\n options.minUppercase = minUppercaseCalc;\n options.minLowercase = minLowercaseCalc;\n options.minNumber = minNumberCalc;\n options.minSpecial = minSpecialCalc;\n }\n }\n}\n","import { SettingsService as SettingsServiceAbstraction } from '../abstractions/settings.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\n\nconst Keys = {\n settingsPrefix: 'settings_',\n equivalentDomains: 'equivalentDomains',\n};\n\nexport class SettingsService implements SettingsServiceAbstraction {\n private settingsCache: any;\n\n constructor(private userService: UserService, private storageService: StorageService) {\n }\n\n clearCache(): void {\n this.settingsCache = null;\n }\n\n getEquivalentDomains(): Promise {\n return this.getSettingsKey(Keys.equivalentDomains);\n }\n\n async setEquivalentDomains(equivalentDomains: string[][]): Promise {\n await this.setSettingsKey(Keys.equivalentDomains, equivalentDomains);\n }\n\n async clear(userId: string): Promise {\n await this.storageService.remove(Keys.settingsPrefix + userId);\n this.clearCache();\n }\n\n // Helpers\n\n private async getSettings(): Promise {\n if (this.settingsCache == null) {\n const userId = await this.userService.getUserId();\n this.settingsCache = this.storageService.get(Keys.settingsPrefix + userId);\n }\n return this.settingsCache;\n }\n\n private async getSettingsKey(key: string): Promise {\n const settings = await this.getSettings();\n if (settings != null && settings[key]) {\n return settings[key];\n }\n return null;\n }\n\n private async setSettingsKey(key: string, value: any): Promise {\n const userId = await this.userService.getUserId();\n let settings = await this.getSettings();\n if (!settings) {\n settings = {};\n }\n\n settings[key] = value;\n await this.storageService.save(Keys.settingsPrefix + userId, settings);\n this.settingsCache = settings;\n }\n}\n","import { StateService as StateServiceAbstraction } from '../abstractions/state.service';\n\nexport class StateService implements StateServiceAbstraction {\n private state: any = {};\n\n get(key: string): Promise {\n if (this.state.hasOwnProperty(key)) {\n return Promise.resolve(this.state[key]);\n }\n return Promise.resolve(null);\n }\n\n save(key: string, obj: any): Promise {\n this.state[key] = obj;\n return Promise.resolve();\n }\n\n remove(key: string): Promise {\n delete this.state[key];\n return Promise.resolve();\n }\n\n purge(): Promise {\n this.state = {};\n return Promise.resolve();\n }\n}\n","import { ApiService } from '../abstractions/api.service';\nimport { CipherService } from '../abstractions/cipher.service';\nimport { CollectionService } from '../abstractions/collection.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { FolderService } from '../abstractions/folder.service';\nimport { MessagingService } from '../abstractions/messaging.service';\nimport { PolicyService } from '../abstractions/policy.service';\nimport { SendService } from '../abstractions/send.service';\nimport { SettingsService } from '../abstractions/settings.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { SyncService as SyncServiceAbstraction } from '../abstractions/sync.service';\nimport { UserService } from '../abstractions/user.service';\n\nimport { CipherData } from '../models/data/cipherData';\nimport { CollectionData } from '../models/data/collectionData';\nimport { FolderData } from '../models/data/folderData';\nimport { OrganizationData } from '../models/data/organizationData';\nimport { PolicyData } from '../models/data/policyData';\nimport { SendData } from '../models/data/sendData';\n\nimport { CipherResponse } from '../models/response/cipherResponse';\nimport { CollectionDetailsResponse } from '../models/response/collectionResponse';\nimport { DomainsResponse } from '../models/response/domainsResponse';\nimport { FolderResponse } from '../models/response/folderResponse';\nimport {\n SyncCipherNotification,\n SyncFolderNotification,\n SyncSendNotification,\n} from '../models/response/notificationResponse';\nimport { PolicyResponse } from '../models/response/policyResponse';\nimport { ProfileResponse } from '../models/response/profileResponse';\nimport { SendResponse } from '../models/response/sendResponse';\n\nconst Keys = {\n lastSyncPrefix: 'lastSync_',\n};\n\nexport class SyncService implements SyncServiceAbstraction {\n syncInProgress: boolean = false;\n\n constructor(private userService: UserService, private apiService: ApiService,\n private settingsService: SettingsService, private folderService: FolderService,\n private cipherService: CipherService, private cryptoService: CryptoService,\n private collectionService: CollectionService, private storageService: StorageService,\n private messagingService: MessagingService, private policyService: PolicyService,\n private sendService: SendService, private logoutCallback: (expired: boolean) => Promise) {\n }\n\n async getLastSync(): Promise {\n const userId = await this.userService.getUserId();\n if (userId == null) {\n return null;\n }\n\n const lastSync = await this.storageService.get(Keys.lastSyncPrefix + userId);\n if (lastSync) {\n return new Date(lastSync);\n }\n\n return null;\n }\n\n async setLastSync(date: Date): Promise {\n const userId = await this.userService.getUserId();\n if (userId == null) {\n return;\n }\n\n await this.storageService.save(Keys.lastSyncPrefix + userId, date.toJSON());\n }\n\n async fullSync(forceSync: boolean, allowThrowOnError = false): Promise {\n this.syncStarted();\n const isAuthenticated = await this.userService.isAuthenticated();\n if (!isAuthenticated) {\n return this.syncCompleted(false);\n }\n\n const now = new Date();\n let needsSync = false;\n try {\n needsSync = await this.needsSyncing(forceSync);\n } catch (e) {\n if (allowThrowOnError) {\n throw e;\n }\n }\n\n if (!needsSync) {\n await this.setLastSync(now);\n return this.syncCompleted(false);\n }\n\n const userId = await this.userService.getUserId();\n try {\n const response = await this.apiService.getSync();\n\n await this.syncProfile(response.profile);\n await this.syncFolders(userId, response.folders);\n await this.syncCollections(response.collections);\n await this.syncCiphers(userId, response.ciphers);\n await this.syncSends(userId, response.sends);\n await this.syncSettings(userId, response.domains);\n await this.syncPolicies(response.policies);\n\n await this.setLastSync(now);\n return this.syncCompleted(true);\n } catch (e) {\n if (allowThrowOnError) {\n throw e;\n } else {\n return this.syncCompleted(false);\n }\n }\n }\n\n async syncUpsertFolder(notification: SyncFolderNotification, isEdit: boolean): Promise {\n this.syncStarted();\n if (await this.userService.isAuthenticated()) {\n try {\n const localFolder = await this.folderService.get(notification.id);\n if ((!isEdit && localFolder == null) ||\n (isEdit && localFolder != null && localFolder.revisionDate < notification.revisionDate)) {\n const remoteFolder = await this.apiService.getFolder(notification.id);\n if (remoteFolder != null) {\n const userId = await this.userService.getUserId();\n await this.folderService.upsert(new FolderData(remoteFolder, userId));\n this.messagingService.send('syncedUpsertedFolder', { folderId: notification.id });\n return this.syncCompleted(true);\n }\n }\n } catch { }\n }\n return this.syncCompleted(false);\n }\n\n async syncDeleteFolder(notification: SyncFolderNotification): Promise {\n this.syncStarted();\n if (await this.userService.isAuthenticated()) {\n await this.folderService.delete(notification.id);\n this.messagingService.send('syncedDeletedFolder', { folderId: notification.id });\n this.syncCompleted(true);\n return true;\n }\n return this.syncCompleted(false);\n }\n\n async syncUpsertCipher(notification: SyncCipherNotification, isEdit: boolean): Promise {\n this.syncStarted();\n if (await this.userService.isAuthenticated()) {\n try {\n let shouldUpdate = true;\n const localCipher = await this.cipherService.get(notification.id);\n if (localCipher != null && localCipher.revisionDate >= notification.revisionDate) {\n shouldUpdate = false;\n }\n\n let checkCollections = false;\n if (shouldUpdate) {\n if (isEdit) {\n shouldUpdate = localCipher != null;\n checkCollections = true;\n } else {\n if (notification.collectionIds == null || notification.organizationId == null) {\n shouldUpdate = localCipher == null;\n } else {\n shouldUpdate = false;\n checkCollections = true;\n }\n }\n }\n\n if (!shouldUpdate && checkCollections && notification.organizationId != null &&\n notification.collectionIds != null && notification.collectionIds.length > 0) {\n const collections = await this.collectionService.getAll();\n if (collections != null) {\n for (let i = 0; i < collections.length; i++) {\n if (notification.collectionIds.indexOf(collections[i].id) > -1) {\n shouldUpdate = true;\n break;\n }\n }\n }\n }\n\n if (shouldUpdate) {\n const remoteCipher = await this.apiService.getCipher(notification.id);\n if (remoteCipher != null) {\n const userId = await this.userService.getUserId();\n await this.cipherService.upsert(new CipherData(remoteCipher, userId));\n this.messagingService.send('syncedUpsertedCipher', { cipherId: notification.id });\n return this.syncCompleted(true);\n }\n }\n } catch (e) {\n if (e != null && e.statusCode === 404 && isEdit) {\n await this.cipherService.delete(notification.id);\n this.messagingService.send('syncedDeletedCipher', { cipherId: notification.id });\n return this.syncCompleted(true);\n }\n }\n }\n return this.syncCompleted(false);\n }\n\n async syncDeleteCipher(notification: SyncCipherNotification): Promise {\n this.syncStarted();\n if (await this.userService.isAuthenticated()) {\n await this.cipherService.delete(notification.id);\n this.messagingService.send('syncedDeletedCipher', { cipherId: notification.id });\n return this.syncCompleted(true);\n }\n return this.syncCompleted(false);\n }\n\n async syncUpsertSend(notification: SyncSendNotification, isEdit: boolean): Promise {\n this.syncStarted();\n if (await this.userService.isAuthenticated()) {\n try {\n const localSend = await this.sendService.get(notification.id);\n if ((!isEdit && localSend == null) ||\n (isEdit && localSend != null && localSend.revisionDate < notification.revisionDate)) {\n const remoteSend = await this.apiService.getSend(notification.id);\n if (remoteSend != null) {\n const userId = await this.userService.getUserId();\n await this.sendService.upsert(new SendData(remoteSend, userId));\n this.messagingService.send('syncedUpsertedSend', { sendId: notification.id });\n return this.syncCompleted(true);\n }\n }\n } catch { }\n }\n return this.syncCompleted(false);\n }\n\n async syncDeleteSend(notification: SyncSendNotification): Promise {\n this.syncStarted();\n if (await this.userService.isAuthenticated()) {\n await this.sendService.delete(notification.id);\n this.messagingService.send('syncedDeletedSend', { sendId: notification.id });\n this.syncCompleted(true);\n return true;\n }\n return this.syncCompleted(false);\n }\n\n // Helpers\n\n private syncStarted() {\n this.syncInProgress = true;\n this.messagingService.send('syncStarted');\n }\n\n private syncCompleted(successfully: boolean): boolean {\n this.syncInProgress = false;\n this.messagingService.send('syncCompleted', { successfully: successfully });\n return successfully;\n }\n\n private async needsSyncing(forceSync: boolean) {\n if (forceSync) {\n return true;\n }\n\n const lastSync = await this.getLastSync();\n if (lastSync == null || lastSync.getTime() === 0) {\n return true;\n }\n\n const response = await this.apiService.getAccountRevisionDate();\n if (new Date(response) <= lastSync) {\n return false;\n }\n return true;\n }\n\n private async syncProfile(response: ProfileResponse) {\n const stamp = await this.userService.getSecurityStamp();\n if (stamp != null && stamp !== response.securityStamp) {\n if (this.logoutCallback != null) {\n await this.logoutCallback(true);\n }\n\n throw new Error('Stamp has changed');\n }\n\n await this.cryptoService.setEncKey(response.key);\n await this.cryptoService.setEncPrivateKey(response.privateKey);\n await this.cryptoService.setOrgKeys(response.organizations);\n await this.userService.setSecurityStamp(response.securityStamp);\n await this.userService.setEmailVerified(response.emailVerified);\n\n const organizations: { [id: string]: OrganizationData; } = {};\n response.organizations.forEach(o => {\n organizations[o.id] = new OrganizationData(o);\n });\n return await this.userService.replaceOrganizations(organizations);\n }\n\n private async syncFolders(userId: string, response: FolderResponse[]) {\n const folders: { [id: string]: FolderData; } = {};\n response.forEach(f => {\n folders[f.id] = new FolderData(f, userId);\n });\n return await this.folderService.replace(folders);\n }\n\n private async syncCollections(response: CollectionDetailsResponse[]) {\n const collections: { [id: string]: CollectionData; } = {};\n response.forEach(c => {\n collections[c.id] = new CollectionData(c);\n });\n return await this.collectionService.replace(collections);\n }\n\n private async syncCiphers(userId: string, response: CipherResponse[]) {\n const ciphers: { [id: string]: CipherData; } = {};\n response.forEach(c => {\n ciphers[c.id] = new CipherData(c, userId);\n });\n return await this.cipherService.replace(ciphers);\n }\n\n private async syncSends(userId: string, response: SendResponse[]) {\n const sends: { [id: string]: SendData; } = {};\n response.forEach(s => {\n sends[s.id] = new SendData(s, userId);\n });\n return await this.sendService.replace(sends);\n }\n\n private async syncSettings(userId: string, response: DomainsResponse) {\n let eqDomains: string[][] = [];\n if (response != null && response.equivalentDomains != null) {\n eqDomains = eqDomains.concat(response.equivalentDomains);\n }\n\n if (response != null && response.globalEquivalentDomains != null) {\n response.globalEquivalentDomains.forEach(global => {\n if (global.domains.length > 0) {\n eqDomains.push(global.domains);\n }\n });\n }\n\n return this.settingsService.setEquivalentDomains(eqDomains);\n }\n\n private async syncPolicies(response: PolicyResponse[]) {\n const policies: { [id: string]: PolicyData; } = {};\n if (response != null) {\n response.forEach(p => {\n policies[p.id] = new PolicyData(p);\n });\n }\n return await this.policyService.replace(policies);\n }\n}\n","import { SendType } from '../../enums/sendType';\n\nimport { SendFileData } from './sendFileData';\nimport { SendTextData } from './sendTextData';\n\nimport { SendResponse } from '../response/sendResponse';\n\nexport class SendData {\n id: string;\n accessId: string;\n userId: string;\n type: SendType;\n name: string;\n notes: string;\n file: SendFileData;\n text: SendTextData;\n key: string;\n maxAccessCount?: number;\n accessCount: number;\n revisionDate: string;\n expirationDate: string;\n deletionDate: string;\n password: string;\n disabled: boolean;\n hideEmail: boolean;\n\n constructor(response?: SendResponse, userId?: string) {\n if (response == null) {\n return;\n }\n\n this.id = response.id;\n this.accessId = response.accessId;\n this.userId = userId;\n this.type = response.type;\n this.name = response.name;\n this.notes = response.notes;\n this.key = response.key;\n this.maxAccessCount = response.maxAccessCount;\n this.accessCount = response.accessCount;\n this.revisionDate = response.revisionDate;\n this.expirationDate = response.expirationDate;\n this.deletionDate = response.deletionDate;\n this.password = response.password;\n this.disabled = response.disable;\n this.hideEmail = response.hideEmail;\n\n switch (this.type) {\n case SendType.Text:\n this.text = new SendTextData(response.text);\n break;\n case SendType.File:\n this.file = new SendFileData(response.file);\n break;\n default:\n break;\n }\n }\n}\n","import { ConstantsService } from './constants.service';\n\nimport { StorageService } from '../abstractions/storage.service';\nimport { TokenService as TokenServiceAbstraction } from '../abstractions/token.service';\n\nimport { Utils } from '../misc/utils';\n\nconst Keys = {\n accessToken: 'accessToken',\n refreshToken: 'refreshToken',\n twoFactorTokenPrefix: 'twoFactorToken_',\n};\n\nexport class TokenService implements TokenServiceAbstraction {\n token: string;\n decodedToken: any;\n refreshToken: string;\n\n constructor(private storageService: StorageService) {\n }\n\n setTokens(accessToken: string, refreshToken: string): Promise {\n return Promise.all([\n this.setToken(accessToken),\n this.setRefreshToken(refreshToken),\n ]);\n }\n\n async setToken(token: string): Promise {\n this.token = token;\n this.decodedToken = null;\n\n if (await this.skipTokenStorage()) {\n // if we have a vault timeout and the action is log out, don't store token\n return;\n }\n\n return this.storageService.save(Keys.accessToken, token);\n }\n\n async getToken(): Promise {\n if (this.token != null) {\n return this.token;\n }\n\n this.token = await this.storageService.get(Keys.accessToken);\n return this.token;\n }\n\n async setRefreshToken(refreshToken: string): Promise {\n this.refreshToken = refreshToken;\n\n if (await this.skipTokenStorage()) {\n // if we have a vault timeout and the action is log out, don't store token\n return;\n }\n\n return this.storageService.save(Keys.refreshToken, refreshToken);\n }\n\n async getRefreshToken(): Promise {\n if (this.refreshToken != null) {\n return this.refreshToken;\n }\n\n this.refreshToken = await this.storageService.get(Keys.refreshToken);\n return this.refreshToken;\n }\n\n async toggleTokens(): Promise {\n const token = await this.getToken();\n const refreshToken = await this.getRefreshToken();\n const timeout = await this.storageService.get(ConstantsService.vaultTimeoutKey);\n const action = await this.storageService.get(ConstantsService.vaultTimeoutActionKey);\n if ((timeout != null || timeout === 0) && action === 'logOut') {\n // if we have a vault timeout and the action is log out, reset tokens\n await this.clearToken();\n this.token = token;\n this.refreshToken = refreshToken;\n return;\n }\n\n await this.setToken(token);\n await this.setRefreshToken(refreshToken);\n }\n\n setTwoFactorToken(token: string, email: string): Promise {\n return this.storageService.save(Keys.twoFactorTokenPrefix + email, token);\n }\n\n getTwoFactorToken(email: string): Promise {\n return this.storageService.get(Keys.twoFactorTokenPrefix + email);\n }\n\n clearTwoFactorToken(email: string): Promise {\n return this.storageService.remove(Keys.twoFactorTokenPrefix + email);\n }\n\n clearToken(): Promise {\n this.token = null;\n this.decodedToken = null;\n this.refreshToken = null;\n\n return Promise.all([\n this.storageService.remove(Keys.accessToken),\n this.storageService.remove(Keys.refreshToken),\n ]);\n }\n\n // jwthelper methods\n // ref https://github.com/auth0/angular-jwt/blob/master/src/angularJwt/services/jwt.js\n\n decodeToken(): any {\n if (this.decodedToken) {\n return this.decodedToken;\n }\n\n if (this.token == null) {\n throw new Error('Token not found.');\n }\n\n const parts = this.token.split('.');\n if (parts.length !== 3) {\n throw new Error('JWT must have 3 parts');\n }\n\n const decoded = Utils.fromUrlB64ToUtf8(parts[1]);\n if (decoded == null) {\n throw new Error('Cannot decode the token');\n }\n\n this.decodedToken = JSON.parse(decoded);\n return this.decodedToken;\n }\n\n getTokenExpirationDate(): Date {\n const decoded = this.decodeToken();\n if (typeof decoded.exp === 'undefined') {\n return null;\n }\n\n const d = new Date(0); // The 0 here is the key, which sets the date to the epoch\n d.setUTCSeconds(decoded.exp);\n return d;\n }\n\n tokenSecondsRemaining(offsetSeconds: number = 0): number {\n const d = this.getTokenExpirationDate();\n if (d == null) {\n return 0;\n }\n\n const msRemaining = d.valueOf() - (new Date().valueOf() + (offsetSeconds * 1000));\n return Math.round(msRemaining / 1000);\n }\n\n tokenNeedsRefresh(minutes: number = 5): boolean {\n const sRemaining = this.tokenSecondsRemaining();\n return sRemaining < (60 * minutes);\n }\n\n getUserId(): string {\n const decoded = this.decodeToken();\n if (typeof decoded.sub === 'undefined') {\n throw new Error('No user id found');\n }\n\n return decoded.sub as string;\n }\n\n getEmail(): string {\n const decoded = this.decodeToken();\n if (typeof decoded.email === 'undefined') {\n throw new Error('No email found');\n }\n\n return decoded.email as string;\n }\n\n getEmailVerified(): boolean {\n const decoded = this.decodeToken();\n if (typeof decoded.email_verified === 'undefined') {\n throw new Error('No email verification found');\n }\n\n return decoded.email_verified as boolean;\n }\n\n getName(): string {\n const decoded = this.decodeToken();\n if (typeof decoded.name === 'undefined') {\n return null;\n }\n\n return decoded.name as string;\n }\n\n getPremium(): boolean {\n const decoded = this.decodeToken();\n if (typeof decoded.premium === 'undefined') {\n return false;\n }\n\n return decoded.premium as boolean;\n }\n\n getIssuer(): string {\n const decoded = this.decodeToken();\n if (typeof decoded.iss === 'undefined') {\n throw new Error('No issuer found');\n }\n\n return decoded.iss as string;\n }\n\n private async skipTokenStorage(): Promise {\n const timeout = await this.storageService.get(ConstantsService.vaultTimeoutKey);\n const action = await this.storageService.get(ConstantsService.vaultTimeoutActionKey);\n return timeout != null && action === 'logOut';\n }\n}\n","import { ConstantsService } from './constants.service';\n\nimport { CryptoFunctionService } from '../abstractions/cryptoFunction.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { TotpService as TotpServiceAbstraction } from '../abstractions/totp.service';\n\nimport { Utils } from '../misc/utils';\n\nconst B32Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';\nconst SteamChars = '23456789BCDFGHJKMNPQRTVWXY';\n\nexport class TotpService implements TotpServiceAbstraction {\n constructor(private storageService: StorageService, private cryptoFunctionService: CryptoFunctionService) { }\n\n async getCode(key: string): Promise {\n if (key == null) {\n return null;\n }\n let period = 30;\n let alg: 'sha1' | 'sha256' | 'sha512' = 'sha1';\n let digits = 6;\n let keyB32 = key;\n const isOtpAuth = key.toLowerCase().indexOf('otpauth://') === 0;\n const isSteamAuth = !isOtpAuth && key.toLowerCase().indexOf('steam://') === 0;\n if (isOtpAuth) {\n const params = Utils.getQueryParams(key);\n if (params.has('digits') && params.get('digits') != null) {\n try {\n const digitParams = parseInt(params.get('digits').trim(), null);\n if (digitParams > 10) {\n digits = 10;\n } else if (digitParams > 0) {\n digits = digitParams;\n }\n } catch { }\n }\n if (params.has('period') && params.get('period') != null) {\n try {\n const periodParam = parseInt(params.get('period').trim(), null);\n if (periodParam > 0) {\n period = periodParam;\n }\n } catch { }\n }\n if (params.has('secret') && params.get('secret') != null) {\n keyB32 = params.get('secret');\n }\n if (params.has('algorithm') && params.get('algorithm') != null) {\n const algParam = params.get('algorithm').toLowerCase();\n if (algParam === 'sha1' || algParam === 'sha256' || algParam === 'sha512') {\n alg = algParam;\n }\n }\n } else if (isSteamAuth) {\n keyB32 = key.substr('steam://'.length);\n digits = 5;\n }\n\n const epoch = Math.round(new Date().getTime() / 1000.0);\n const timeHex = this.leftPad(this.decToHex(Math.floor(epoch / period)), 16, '0');\n const timeBytes = Utils.fromHexToArray(timeHex);\n const keyBytes = this.b32ToBytes(keyB32);\n\n if (!keyBytes.length || !timeBytes.length) {\n return null;\n }\n\n const hash = await this.sign(keyBytes, timeBytes, alg);\n if (hash.length === 0) {\n return null;\n }\n\n /* tslint:disable */\n const offset = (hash[hash.length - 1] & 0xf);\n const binary = ((hash[offset] & 0x7f) << 24) | ((hash[offset + 1] & 0xff) << 16) |\n ((hash[offset + 2] & 0xff) << 8) | (hash[offset + 3] & 0xff);\n /* tslint:enable */\n\n let otp = '';\n if (isSteamAuth) {\n // tslint:disable-next-line\n let fullCode = binary & 0x7fffffff;\n for (let i = 0; i < digits; i++) {\n otp += SteamChars[fullCode % SteamChars.length];\n fullCode = Math.trunc(fullCode / SteamChars.length);\n }\n } else {\n otp = (binary % Math.pow(10, digits)).toString();\n otp = this.leftPad(otp, digits, '0');\n }\n\n return otp;\n }\n\n getTimeInterval(key: string): number {\n let period = 30;\n if (key != null && key.toLowerCase().indexOf('otpauth://') === 0) {\n const params = Utils.getQueryParams(key);\n if (params.has('period') && params.get('period') != null) {\n try {\n period = parseInt(params.get('period').trim(), null);\n } catch { }\n }\n }\n return period;\n }\n\n async isAutoCopyEnabled(): Promise {\n return !(await this.storageService.get(ConstantsService.disableAutoTotpCopyKey));\n }\n\n // Helpers\n\n private leftPad(s: string, l: number, p: string): string {\n if (l + 1 >= s.length) {\n s = Array(l + 1 - s.length).join(p) + s;\n }\n return s;\n }\n\n private decToHex(d: number): string {\n return (d < 15.5 ? '0' : '') + Math.round(d).toString(16);\n }\n\n private b32ToHex(s: string): string {\n s = s.toUpperCase();\n let cleanedInput = '';\n\n for (let i = 0; i < s.length; i++) {\n if (B32Chars.indexOf(s[i]) < 0) {\n continue;\n }\n\n cleanedInput += s[i];\n }\n s = cleanedInput;\n\n let bits = '';\n let hex = '';\n for (let i = 0; i < s.length; i++) {\n const byteIndex = B32Chars.indexOf(s.charAt(i));\n if (byteIndex < 0) {\n continue;\n }\n bits += this.leftPad(byteIndex.toString(2), 5, '0');\n }\n for (let i = 0; i + 4 <= bits.length; i += 4) {\n const chunk = bits.substr(i, 4);\n hex = hex + parseInt(chunk, 2).toString(16);\n }\n return hex;\n }\n\n private b32ToBytes(s: string): Uint8Array {\n return Utils.fromHexToArray(this.b32ToHex(s));\n }\n\n private async sign(keyBytes: Uint8Array, timeBytes: Uint8Array, alg: 'sha1' | 'sha256' | 'sha512') {\n const signature = await this.cryptoFunctionService.hmac(timeBytes.buffer, keyBytes.buffer, alg);\n return new Uint8Array(signature);\n }\n}\n","import { StorageService } from '../abstractions/storage.service';\nimport { TokenService } from '../abstractions/token.service';\nimport { UserService as UserServiceAbstraction } from '../abstractions/user.service';\n\nimport { OrganizationData } from '../models/data/organizationData';\nimport { Organization } from '../models/domain/organization';\n\nimport { KdfType } from '../enums/kdfType';\n\nconst Keys = {\n userId: 'userId',\n userEmail: 'userEmail',\n stamp: 'securityStamp',\n kdf: 'kdf',\n kdfIterations: 'kdfIterations',\n organizationsPrefix: 'organizations_',\n emailVerified: 'emailVerified',\n};\n\nexport class UserService implements UserServiceAbstraction {\n private userId: string;\n private email: string;\n private stamp: string;\n private kdf: KdfType;\n private kdfIterations: number;\n private emailVerified: boolean;\n\n constructor(private tokenService: TokenService, private storageService: StorageService) { }\n\n setInformation(userId: string, email: string, kdf: KdfType, kdfIterations: number): Promise {\n this.email = email;\n this.userId = userId;\n this.kdf = kdf;\n this.kdfIterations = kdfIterations;\n\n return Promise.all([\n this.storageService.save(Keys.userEmail, email),\n this.storageService.save(Keys.userId, userId),\n this.storageService.save(Keys.kdf, kdf),\n this.storageService.save(Keys.kdfIterations, kdfIterations),\n ]);\n }\n\n setSecurityStamp(stamp: string): Promise {\n this.stamp = stamp;\n return this.storageService.save(Keys.stamp, stamp);\n }\n\n setEmailVerified(emailVerified: boolean) {\n this.emailVerified = emailVerified;\n return this.storageService.save(Keys.emailVerified, emailVerified);\n }\n\n async getUserId(): Promise {\n if (this.userId == null) {\n this.userId = await this.storageService.get(Keys.userId);\n }\n return this.userId;\n }\n\n async getEmail(): Promise {\n if (this.email == null) {\n this.email = await this.storageService.get(Keys.userEmail);\n }\n return this.email;\n }\n\n async getSecurityStamp(): Promise {\n if (this.stamp == null) {\n this.stamp = await this.storageService.get(Keys.stamp);\n }\n return this.stamp;\n }\n\n async getKdf(): Promise {\n if (this.kdf == null) {\n this.kdf = await this.storageService.get(Keys.kdf);\n }\n return this.kdf;\n }\n\n async getKdfIterations(): Promise {\n if (this.kdfIterations == null) {\n this.kdfIterations = await this.storageService.get(Keys.kdfIterations);\n }\n return this.kdfIterations;\n }\n\n async getEmailVerified(): Promise {\n if (this.emailVerified == null) {\n this.emailVerified = await this.storageService.get(Keys.emailVerified);\n }\n return this.emailVerified;\n }\n\n async clear(): Promise {\n const userId = await this.getUserId();\n\n await Promise.all([\n this.storageService.remove(Keys.userId),\n this.storageService.remove(Keys.userEmail),\n this.storageService.remove(Keys.stamp),\n this.storageService.remove(Keys.kdf),\n this.storageService.remove(Keys.kdfIterations),\n this.clearOrganizations(userId),\n ]);\n\n this.userId = this.email = this.stamp = null;\n this.kdf = null;\n this.kdfIterations = null;\n }\n\n async isAuthenticated(): Promise {\n const token = await this.tokenService.getToken();\n if (token == null) {\n return false;\n }\n\n const userId = await this.getUserId();\n return userId != null;\n }\n\n async canAccessPremium(): Promise {\n const authed = await this.isAuthenticated();\n if (!authed) {\n return false;\n }\n\n const tokenPremium = this.tokenService.getPremium();\n if (tokenPremium) {\n return true;\n }\n\n const orgs = await this.getAllOrganizations();\n for (let i = 0; i < orgs.length; i++) {\n if (orgs[i].usersGetPremium && orgs[i].enabled) {\n return true;\n }\n }\n return false;\n }\n\n async getOrganization(id: string): Promise {\n const userId = await this.getUserId();\n const organizations = await this.storageService.get<{ [id: string]: OrganizationData; }>(\n Keys.organizationsPrefix + userId);\n if (organizations == null || !organizations.hasOwnProperty(id)) {\n return null;\n }\n\n return new Organization(organizations[id]);\n }\n\n async getAllOrganizations(): Promise {\n const userId = await this.getUserId();\n const organizations = await this.storageService.get<{ [id: string]: OrganizationData; }>(\n Keys.organizationsPrefix + userId);\n const response: Organization[] = [];\n for (const id in organizations) {\n if (organizations.hasOwnProperty(id)) {\n response.push(new Organization(organizations[id]));\n }\n }\n return response;\n }\n\n async replaceOrganizations(organizations: { [id: string]: OrganizationData; }): Promise {\n const userId = await this.getUserId();\n await this.storageService.save(Keys.organizationsPrefix + userId, organizations);\n }\n\n async clearOrganizations(userId: string): Promise {\n await this.storageService.remove(Keys.organizationsPrefix + userId);\n }\n}\n","import { ConstantsService } from './constants.service';\n\nimport { CipherService } from '../abstractions/cipher.service';\nimport { CollectionService } from '../abstractions/collection.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { FolderService } from '../abstractions/folder.service';\nimport { MessagingService } from '../abstractions/messaging.service';\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\nimport { SearchService } from '../abstractions/search.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { TokenService } from '../abstractions/token.service';\nimport { UserService } from '../abstractions/user.service';\nimport { VaultTimeoutService as VaultTimeoutServiceAbstraction } from '../abstractions/vaultTimeout.service';\n\nimport { EncString } from '../models/domain/encString';\n\nexport class VaultTimeoutService implements VaultTimeoutServiceAbstraction {\n pinProtectedKey: EncString = null;\n biometricLocked: boolean = true;\n\n private inited = false;\n\n constructor(private cipherService: CipherService, private folderService: FolderService,\n private collectionService: CollectionService, private cryptoService: CryptoService,\n protected platformUtilsService: PlatformUtilsService, private storageService: StorageService,\n private messagingService: MessagingService, private searchService: SearchService,\n private userService: UserService, private tokenService: TokenService,\n private lockedCallback: () => Promise = null, private loggedOutCallback: () => Promise = null) {\n }\n\n init(checkOnInterval: boolean) {\n if (this.inited) {\n return;\n }\n\n this.inited = true;\n if (checkOnInterval) {\n this.startCheck();\n }\n }\n\n startCheck() {\n this.checkVaultTimeout();\n setInterval(() => this.checkVaultTimeout(), 10 * 1000); // check every 10 seconds\n }\n\n // Keys aren't stored for a device that is locked or logged out.\n async isLocked(): Promise {\n const hasKey = await this.cryptoService.hasKey();\n if (hasKey) {\n if (await this.isBiometricLockSet() && this.biometricLocked) {\n return true;\n }\n }\n return !hasKey;\n }\n\n async checkVaultTimeout(): Promise {\n if (await this.platformUtilsService.isViewOpen()) {\n // Do not lock\n return;\n }\n\n // \"is logged out check\" - similar to isLocked, below\n const authed = await this.userService.isAuthenticated();\n if (!authed) {\n return;\n }\n\n if (await this.isLocked()) {\n return;\n }\n\n // This has the potential to be removed. Evaluate after all platforms complete with auto-logout\n let vaultTimeout = this.platformUtilsService.lockTimeout();\n if (vaultTimeout == null) {\n vaultTimeout = await this.storageService.get(ConstantsService.vaultTimeoutKey);\n }\n\n if (vaultTimeout == null || vaultTimeout < 0) {\n return;\n }\n\n const lastActive = await this.storageService.get(ConstantsService.lastActiveKey);\n if (lastActive == null) {\n return;\n }\n\n const vaultTimeoutSeconds = vaultTimeout * 60;\n const diffSeconds = ((new Date()).getTime() - lastActive) / 1000;\n if (diffSeconds >= vaultTimeoutSeconds) {\n // Pivot based on the saved vault timeout action\n const timeoutAction = await this.storageService.get(ConstantsService.vaultTimeoutActionKey);\n timeoutAction === 'logOut' ? await this.logOut() : await this.lock(true);\n }\n }\n\n async lock(allowSoftLock = false): Promise {\n const authed = await this.userService.isAuthenticated();\n if (!authed) {\n return;\n }\n\n this.biometricLocked = true;\n if (allowSoftLock) {\n const biometricLocked = await this.isBiometricLockSet();\n if (biometricLocked && this.platformUtilsService.supportsSecureStorage()) {\n this.messagingService.send('locked');\n if (this.lockedCallback != null) {\n await this.lockedCallback();\n }\n return;\n }\n }\n\n await Promise.all([\n this.cryptoService.clearKey(),\n this.cryptoService.clearOrgKeys(true),\n this.cryptoService.clearKeyPair(true),\n this.cryptoService.clearEncKey(true),\n ]);\n\n this.folderService.clearCache();\n this.cipherService.clearCache();\n this.collectionService.clearCache();\n this.searchService.clearIndex();\n this.messagingService.send('locked');\n if (this.lockedCallback != null) {\n await this.lockedCallback();\n }\n }\n\n async logOut(): Promise {\n if (this.loggedOutCallback != null) {\n await this.loggedOutCallback();\n }\n }\n\n async setVaultTimeoutOptions(timeout: number, action: string): Promise {\n await this.storageService.save(ConstantsService.vaultTimeoutKey, timeout);\n await this.storageService.save(ConstantsService.vaultTimeoutActionKey, action);\n await this.cryptoService.toggleKey();\n await this.tokenService.toggleTokens();\n }\n\n async isPinLockSet(): Promise<[boolean, boolean]> {\n const protectedPin = await this.storageService.get(ConstantsService.protectedPin);\n const pinProtectedKey = await this.storageService.get(ConstantsService.pinProtectedKey);\n return [protectedPin != null, pinProtectedKey != null];\n }\n\n async isBiometricLockSet(): Promise {\n return await this.storageService.get(ConstantsService.biometricUnlockKey);\n }\n\n clear(): Promise {\n this.pinProtectedKey = null;\n return this.storageService.remove(ConstantsService.protectedPin);\n }\n}\n","import { LogLevelType } from '../enums/logLevelType';\n\nimport { LogService as LogServiceAbstraction } from '../abstractions/log.service';\n\nimport * as hrtime from 'browser-hrtime';\n\nexport class ConsoleLogService implements LogServiceAbstraction {\n protected timersMap: Map = new Map();\n\n constructor(protected isDev: boolean, protected filter: (level: LogLevelType) => boolean = null) { }\n\n debug(message: string) {\n if (!this.isDev) {\n return;\n }\n this.write(LogLevelType.Debug, message);\n }\n\n info(message: string) {\n this.write(LogLevelType.Info, message);\n }\n\n warning(message: string) {\n this.write(LogLevelType.Warning, message);\n }\n\n error(message: string) {\n this.write(LogLevelType.Error, message);\n }\n\n write(level: LogLevelType, message: string) {\n if (this.filter != null && this.filter(level)) {\n return;\n }\n\n switch (level) {\n case LogLevelType.Debug:\n // tslint:disable-next-line\n console.log(message);\n break;\n case LogLevelType.Info:\n // tslint:disable-next-line\n console.log(message);\n break;\n case LogLevelType.Warning:\n // tslint:disable-next-line\n console.warn(message);\n break;\n case LogLevelType.Error:\n // tslint:disable-next-line\n console.error(message);\n break;\n default:\n break;\n }\n }\n\n time(label: string = 'default') {\n if (!this.timersMap.has(label)) {\n this.timersMap.set(label, hrtime());\n }\n }\n\n timeEnd(label: string = 'default'): [number, number] {\n const elapsed = hrtime(this.timersMap.get(label));\n this.timersMap.delete(label);\n this.write(LogLevelType.Info, `${label}: ${elapsed[0] * 1000 + elapsed[1] / 10e6}ms`);\n return elapsed;\n }\n}\n","export enum LogLevelType {\n Debug,\n Info,\n Warning,\n Error,\n}\n","import { Cipher } from './cipher';\n\nimport { CipherView } from '../view/cipherView';\n\nimport { Cipher as CipherDomain } from '../domain/cipher';\n\nexport class CipherWithIds extends Cipher {\n id: string;\n collectionIds: string[];\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CipherView | CipherDomain) {\n this.id = o.id;\n super.build(o);\n this.collectionIds = o.collectionIds;\n }\n}\n","import { Collection } from './collection';\n\nimport { CollectionView } from '../view/collectionView';\n\nimport { Collection as CollectionDomain } from '../domain/collection';\n\nexport class CollectionWithId extends Collection {\n id: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CollectionView | CollectionDomain) {\n this.id = o.id;\n super.build(o);\n }\n}\n","import { Folder } from './folder';\n\nimport { FolderView } from '../view/folderView';\n\nimport { Folder as FolderDomain } from '../domain/folder';\n\nexport class FolderWithId extends Folder {\n id: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: FolderView | FolderDomain) {\n this.id = o.id;\n super.build(o);\n }\n}\n","import { ImportResult } from '../../models/domain/importResult';\nimport { BaseImporter } from '../baseImporter';\nimport { Importer } from '../importer';\n\nimport { CipherType } from '../../enums/cipherType';\nimport { FieldType } from '../../enums/fieldType';\nimport { CipherView } from '../../models/view';\nimport { CipherImportContext } from './cipherImportContext';\n\nexport const IgnoredProperties = ['ainfo', 'autosubmit', 'notesplain', 'ps', 'scope', 'tags', 'title', 'uuid', 'notes'];\n\nexport abstract class OnePasswordCsvImporter extends BaseImporter implements Importer {\n protected loginPropertyParsers = [this.setLoginUsername, this.setLoginPassword, this.setLoginUris];\n protected creditCardPropertyParsers = [this.setCreditCardNumber, this.setCreditCardVerification, this.setCreditCardCardholderName, this.setCreditCardExpiry];\n protected identityPropertyParsers = [this.setIdentityFirstName, this.setIdentityInitial, this.setIdentityLastName, this.setIdentityUserName, this.setIdentityEmail, this.setIdentityPhone, this.setIdentityCompany];\n\n abstract setCipherType(value: any, cipher: CipherView): void;\n\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true, {\n quoteChar: '\"',\n escapeChar: '\\\\',\n });\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (this.isNullOrWhitespace(this.getProp(value, 'title'))) {\n return;\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(this.getProp(value, 'title'), '--');\n\n this.setNotes(value, cipher);\n\n this.setCipherType(value, cipher);\n\n let altUsername: string = null;\n for (const property in value) {\n if (!value.hasOwnProperty(property) || this.isNullOrWhitespace(value[property])) {\n continue;\n }\n\n const context = new CipherImportContext(value, property, cipher);\n if (cipher.type === CipherType.Login && this.setKnownLoginValue(context)) {\n continue;\n } else if (cipher.type === CipherType.Card && this.setKnownCreditCardValue(context)) {\n continue;\n } else if (cipher.type === CipherType.Identity && this.setKnownIdentityValue(context)) {\n continue;\n }\n\n altUsername = this.setUnknownValue(context, altUsername);\n }\n\n if (cipher.type === CipherType.Login && !this.isNullOrWhitespace(altUsername) &&\n this.isNullOrWhitespace(cipher.login.username) && altUsername.indexOf('://') === -1) {\n cipher.login.username = altUsername;\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n protected getProp(obj: any, name: string): any {\n const lowerObj = Object.entries(obj).reduce((agg: any, entry: [string, any]) => {\n agg[entry[0].toLowerCase()] = entry[1];\n return agg;\n }, {});\n return lowerObj[name.toLowerCase()];\n }\n\n protected getPropByRegexp(obj: any, regexp: RegExp): any {\n const matchingKeys = Object.keys(obj).reduce((agg: string[], key: string) => {\n if (key.match(regexp)) {\n agg.push(key);\n }\n return agg;\n }, []);\n if (matchingKeys.length === 0) {\n return null;\n } else {\n return obj[matchingKeys[0]];\n }\n }\n\n protected getPropIncluding(obj: any, name: string): any {\n const includesMap = Object.keys(obj).reduce((agg: string[], entry: string) => {\n if (entry.toLowerCase().includes(name.toLowerCase())) {\n agg.push(entry);\n }\n return agg;\n }, []);\n if (includesMap.length === 0) {\n return null;\n } else {\n return obj[includesMap[0]];\n }\n }\n\n protected setNotes(importRecord: any, cipher: CipherView) {\n cipher.notes = this.getValueOrDefault(this.getProp(importRecord, 'notesPlain'), '') + '\\n' +\n this.getValueOrDefault(this.getProp(importRecord, 'notes'), '') + '\\n';\n cipher.notes.trim();\n\n }\n\n protected setKnownLoginValue(context: CipherImportContext): boolean {\n return this.loginPropertyParsers.reduce((agg: boolean, func) => {\n if (!agg) {\n agg = func.bind(this)(context);\n }\n return agg;\n }, false);\n }\n\n protected setKnownCreditCardValue(context: CipherImportContext): boolean {\n return this.creditCardPropertyParsers.reduce((agg: boolean, func) => {\n if (!agg) {\n agg = func.bind(this)(context);\n }\n return agg;\n }, false);\n }\n\n protected setKnownIdentityValue(context: CipherImportContext): boolean {\n return this.identityPropertyParsers.reduce((agg: boolean, func) => {\n if (!agg) {\n agg = func.bind(this)(context);\n }\n return agg;\n }, false);\n }\n\n protected setUnknownValue(context: CipherImportContext, altUsername: string): string {\n if (IgnoredProperties.indexOf(context.lowerProperty) === -1 && !context.lowerProperty.startsWith('section:') &&\n !context.lowerProperty.startsWith('section ')) {\n if (altUsername == null && context.lowerProperty === 'email') {\n return context.importRecord[context.property];\n }\n else if (context.lowerProperty === 'created date' || context.lowerProperty === 'modified date') {\n const readableDate = new Date(parseInt(context.importRecord[context.property], 10) * 1000).toUTCString();\n this.processKvp(context.cipher, '1Password ' + context.property, readableDate);\n return null;\n }\n if (context.lowerProperty.includes('password') || context.lowerProperty.includes('key') || context.lowerProperty.includes('secret')) {\n this.processKvp(context.cipher, context.property, context.importRecord[context.property], FieldType.Hidden);\n } else {\n this.processKvp(context.cipher, context.property, context.importRecord[context.property]);\n }\n }\n return null;\n }\n\n protected setIdentityFirstName(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.identity.firstName) && context.lowerProperty.includes('first name')) {\n context.cipher.identity.firstName = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setIdentityInitial(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.identity.middleName) && context.lowerProperty.includes('initial')) {\n context.cipher.identity.middleName = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setIdentityLastName(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.identity.lastName) && context.lowerProperty.includes('last name')) {\n context.cipher.identity.lastName = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setIdentityUserName(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.identity.username) && context.lowerProperty.includes('username')) {\n context.cipher.identity.username = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setIdentityCompany(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.identity.company) && context.lowerProperty.includes('company')) {\n context.cipher.identity.company = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setIdentityPhone(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.identity.phone) && context.lowerProperty.includes('default phone')) {\n context.cipher.identity.phone = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setIdentityEmail(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.identity.email) && context.lowerProperty.includes('email')) {\n context.cipher.identity.email = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setCreditCardNumber(context: CipherImportContext): boolean {\n if (this.isNullOrWhitespace(context.cipher.card.number) && context.lowerProperty.includes('number')) {\n context.cipher.card.number = context.importRecord[context.property];\n context.cipher.card.brand = this.getCardBrand(context.cipher.card.number);\n return true;\n }\n return false;\n }\n\n protected setCreditCardVerification(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.card.code) && context.lowerProperty.includes('verification number')) {\n context.cipher.card.code = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setCreditCardCardholderName(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.card.cardholderName) && context.lowerProperty.includes('cardholder name')) {\n context.cipher.card.cardholderName = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setCreditCardExpiry(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.card.expiration) && context.lowerProperty.includes('expiry date') &&\n context.importRecord[context.property].length === 7) {\n context.cipher.card.expMonth = (context.importRecord[context.property] as string).substr(0, 2);\n if (context.cipher.card.expMonth[0] === '0') {\n context.cipher.card.expMonth = context.cipher.card.expMonth.substr(1, 1);\n }\n context.cipher.card.expYear = (context.importRecord[context.property] as string).substr(3, 4);\n return true;\n }\n return false;\n }\n\n protected setLoginPassword(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.login.password) && context.lowerProperty === 'password') {\n context.cipher.login.password = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setLoginUsername(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.login.username) && context.lowerProperty === 'username') {\n context.cipher.login.username = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setLoginUris(context: CipherImportContext) {\n if ((context.cipher.login.uris == null || context.cipher.login.uris.length === 0) && context.lowerProperty === 'urls') {\n const urls = context.importRecord[context.property].split(this.newLineRegex);\n context.cipher.login.uris = this.makeUriArray(urls);\n return true;\n } else if ((context.lowerProperty === 'url')) {\n if (context.cipher.login.uris == null) {\n context.cipher.login.uris = [];\n }\n context.cipher.login.uris.concat(this.makeUriArray(context.importRecord[context.property]));\n return true;\n }\n return false;\n }\n}\n","export { AttachmentView } from './attachmentView';\nexport { CardView } from './cardView';\nexport { CipherView } from './cipherView';\nexport { FieldView } from './fieldView';\nexport { IdentityView } from './identityView';\nexport { LoginUriView } from './loginUriView';\nexport { LoginView } from './loginView';\nexport { SecureNoteView } from './secureNoteView';\nexport { View } from './view';\n","export enum NotificationType {\n SyncCipherUpdate = 0,\n SyncCipherCreate = 1,\n SyncLoginDelete = 2,\n SyncFolderDelete = 3,\n SyncCiphers = 4,\n\n SyncVault = 5,\n SyncOrgKeys = 6,\n SyncFolderCreate = 7,\n SyncFolderUpdate = 8,\n SyncCipherDelete = 9,\n SyncSettings = 10,\n\n LogOut = 11,\n\n SyncSendCreate = 12,\n SyncSendUpdate = 13,\n SyncSendDelete = 14,\n}\n","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport 'bootstrap';\nimport 'jquery';\nimport 'popper.js';\n\n// tslint:disable-next-line\nrequire('../scss/styles.scss');\n\nimport { AppModule } from './app.module';\n\nif (process.env.ENV === 'production') {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule, { preserveWhitespaces: true });\n","import 'core-js';\n\nimport { ToasterModule } from 'angular2-toaster';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\n\nimport { AppRoutingModule } from './app-routing.module';\n\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\n\nimport { ServicesModule } from './services/services.module';\n\nimport { AppComponent } from './app.component';\nimport { ModalComponent } from './modal.component';\n\nimport { AvatarComponent } from './components/avatar.component';\nimport { PasswordStrengthComponent } from './components/password-strength.component';\n\nimport { FooterComponent } from './layouts/footer.component';\nimport { FrontendLayoutComponent } from './layouts/frontend-layout.component';\nimport { NavbarComponent } from './layouts/navbar.component';\nimport { OrganizationLayoutComponent } from './layouts/organization-layout.component';\nimport { UserLayoutComponent } from './layouts/user-layout.component';\n\nimport { AcceptEmergencyComponent } from './accounts/accept-emergency.component';\nimport { AcceptOrganizationComponent } from './accounts/accept-organization.component';\nimport { HintComponent } from './accounts/hint.component';\nimport { LockComponent } from './accounts/lock.component';\nimport { LoginComponent } from './accounts/login.component';\nimport { RecoverDeleteComponent } from './accounts/recover-delete.component';\nimport { RecoverTwoFactorComponent } from './accounts/recover-two-factor.component';\nimport { RegisterComponent } from './accounts/register.component';\nimport { SetPasswordComponent } from './accounts/set-password.component';\nimport { SsoComponent } from './accounts/sso.component';\nimport { TwoFactorOptionsComponent } from './accounts/two-factor-options.component';\nimport { TwoFactorComponent } from './accounts/two-factor.component';\nimport { VerifyEmailTokenComponent } from './accounts/verify-email-token.component';\nimport { VerifyRecoverDeleteComponent } from './accounts/verify-recover-delete.component';\n\nimport {\n CollectionAddEditComponent as OrgCollectionAddEditComponent,\n} from './organizations/manage/collection-add-edit.component';\nimport { CollectionsComponent as OrgManageCollectionsComponent } from './organizations/manage/collections.component';\nimport { EntityEventsComponent as OrgEntityEventsComponent } from './organizations/manage/entity-events.component';\nimport { EntityUsersComponent as OrgEntityUsersComponent } from './organizations/manage/entity-users.component';\nimport { EventsComponent as OrgEventsComponent } from './organizations/manage/events.component';\nimport { GroupAddEditComponent as OrgGroupAddEditComponent } from './organizations/manage/group-add-edit.component';\nimport { GroupsComponent as OrgGroupsComponent } from './organizations/manage/groups.component';\nimport { ManageComponent as OrgManageComponent } from './organizations/manage/manage.component';\nimport { PeopleComponent as OrgPeopleComponent } from './organizations/manage/people.component';\nimport { PoliciesComponent as OrgPoliciesComponent } from './organizations/manage/policies.component';\nimport { PolicyEditComponent as OrgPolicyEditComponent } from './organizations/manage/policy-edit.component';\nimport { UserAddEditComponent as OrgUserAddEditComponent } from './organizations/manage/user-add-edit.component';\nimport { UserConfirmComponent as OrgUserConfirmComponent } from './organizations/manage/user-confirm.component';\nimport { UserGroupsComponent as OrgUserGroupsComponent } from './organizations/manage/user-groups.component';\n\nimport { AccountComponent as OrgAccountComponent } from './organizations/settings/account.component';\nimport { AdjustSeatsComponent } from './organizations/settings/adjust-seats.component';\nimport { ChangePlanComponent } from './organizations/settings/change-plan.component';\nimport { DeleteOrganizationComponent } from './organizations/settings/delete-organization.component';\nimport { DownloadLicenseComponent } from './organizations/settings/download-license.component';\nimport { OrganizationBillingComponent } from './organizations/settings/organization-billing.component';\nimport { OrganizationSubscriptionComponent } from './organizations/settings/organization-subscription.component';\nimport { SettingsComponent as OrgSettingComponent } from './organizations/settings/settings.component';\nimport {\n TwoFactorSetupComponent as OrgTwoFactorSetupComponent,\n} from './organizations/settings/two-factor-setup.component';\n\nimport { ExportComponent as OrgExportComponent } from './organizations/tools/export.component';\nimport {\n ExposedPasswordsReportComponent as OrgExposedPasswordsReportComponent,\n} from './organizations/tools/exposed-passwords-report.component';\nimport { ImportComponent as OrgImportComponent } from './organizations/tools/import.component';\nimport {\n InactiveTwoFactorReportComponent as OrgInactiveTwoFactorReportComponent,\n} from './organizations/tools/inactive-two-factor-report.component';\nimport {\n ReusedPasswordsReportComponent as OrgReusedPasswordsReportComponent,\n} from './organizations/tools/reused-passwords-report.component';\nimport { ToolsComponent as OrgToolsComponent } from './organizations/tools/tools.component';\nimport {\n UnsecuredWebsitesReportComponent as OrgUnsecuredWebsitesReportComponent,\n} from './organizations/tools/unsecured-websites-report.component';\nimport {\n WeakPasswordsReportComponent as OrgWeakPasswordsReportComponent,\n} from './organizations/tools/weak-passwords-report.component';\n\nimport { AddEditComponent as OrgAddEditComponent } from './organizations/vault/add-edit.component';\nimport { AttachmentsComponent as OrgAttachmentsComponent } from './organizations/vault/attachments.component';\nimport { CiphersComponent as OrgCiphersComponent } from './organizations/vault/ciphers.component';\nimport { CollectionsComponent as OrgCollectionsComponent } from './organizations/vault/collections.component';\nimport { GroupingsComponent as OrgGroupingsComponent } from './organizations/vault/groupings.component';\nimport { VaultComponent as OrgVaultComponent } from './organizations/vault/vault.component';\n\nimport { AccessComponent } from './send/access.component';\nimport { AddEditComponent as SendAddEditComponent } from './send/add-edit.component';\nimport { SendComponent } from './send/send.component';\n\nimport { AccountComponent } from './settings/account.component';\nimport { AddCreditComponent } from './settings/add-credit.component';\nimport { AdjustPaymentComponent } from './settings/adjust-payment.component';\nimport { AdjustStorageComponent } from './settings/adjust-storage.component';\nimport { ApiKeyComponent } from './settings/api-key.component';\nimport { ChangeEmailComponent } from './settings/change-email.component';\nimport { ChangeKdfComponent } from './settings/change-kdf.component';\nimport { ChangePasswordComponent } from './settings/change-password.component';\nimport { CreateOrganizationComponent } from './settings/create-organization.component';\nimport { DeauthorizeSessionsComponent } from './settings/deauthorize-sessions.component';\nimport { DeleteAccountComponent } from './settings/delete-account.component';\nimport { DomainRulesComponent } from './settings/domain-rules.component';\nimport { EmergencyAccessAddEditComponent } from './settings/emergency-access-add-edit.component';\nimport { EmergencyAccessAttachmentsComponent } from './settings/emergency-access-attachments.component';\nimport { EmergencyAccessConfirmComponent } from './settings/emergency-access-confirm.component';\nimport { EmergencyAccessTakeoverComponent } from './settings/emergency-access-takeover.component';\nimport { EmergencyAccessViewComponent } from './settings/emergency-access-view.component';\nimport { EmergencyAccessComponent } from './settings/emergency-access.component';\nimport { EmergencyAddEditComponent } from './settings/emergency-add-edit.component';\nimport { LinkSsoComponent } from './settings/link-sso.component';\nimport { OptionsComponent } from './settings/options.component';\nimport { OrganizationPlansComponent } from './settings/organization-plans.component';\nimport { OrganizationsComponent } from './settings/organizations.component';\nimport { PaymentComponent } from './settings/payment.component';\nimport { PremiumComponent } from './settings/premium.component';\nimport { ProfileComponent } from './settings/profile.component';\nimport { PurgeVaultComponent } from './settings/purge-vault.component';\nimport { SettingsComponent } from './settings/settings.component';\nimport { TaxInfoComponent } from './settings/tax-info.component';\nimport { TwoFactorAuthenticatorComponent } from './settings/two-factor-authenticator.component';\nimport { TwoFactorDuoComponent } from './settings/two-factor-duo.component';\nimport { TwoFactorEmailComponent } from './settings/two-factor-email.component';\nimport { TwoFactorRecoveryComponent } from './settings/two-factor-recovery.component';\nimport { TwoFactorSetupComponent } from './settings/two-factor-setup.component';\nimport { TwoFactorVerifyComponent } from './settings/two-factor-verify.component';\nimport { TwoFactorWebAuthnComponent } from './settings/two-factor-webauthn.component';\nimport { TwoFactorYubiKeyComponent } from './settings/two-factor-yubikey.component';\nimport { UpdateKeyComponent } from './settings/update-key.component';\nimport { UpdateLicenseComponent } from './settings/update-license.component';\nimport { UserBillingComponent } from './settings/user-billing.component';\nimport { UserSubscriptionComponent } from './settings/user-subscription.component';\nimport { VerifyEmailComponent } from './settings/verify-email.component';\n\nimport { BreachReportComponent } from './tools/breach-report.component';\nimport { ExportComponent } from './tools/export.component';\nimport { ExposedPasswordsReportComponent } from './tools/exposed-passwords-report.component';\nimport { ImportComponent } from './tools/import.component';\nimport { InactiveTwoFactorReportComponent } from './tools/inactive-two-factor-report.component';\nimport { PasswordGeneratorHistoryComponent } from './tools/password-generator-history.component';\nimport { PasswordGeneratorComponent } from './tools/password-generator.component';\nimport { ReusedPasswordsReportComponent } from './tools/reused-passwords-report.component';\nimport { ToolsComponent } from './tools/tools.component';\nimport { UnsecuredWebsitesReportComponent } from './tools/unsecured-websites-report.component';\nimport { WeakPasswordsReportComponent } from './tools/weak-passwords-report.component';\n\nimport { AddEditComponent } from './vault/add-edit.component';\nimport { AttachmentsComponent } from './vault/attachments.component';\nimport { BulkActionsComponent } from './vault/bulk-actions.component';\nimport { BulkDeleteComponent } from './vault/bulk-delete.component';\nimport { BulkMoveComponent } from './vault/bulk-move.component';\nimport { BulkRestoreComponent } from './vault/bulk-restore.component';\nimport { BulkShareComponent } from './vault/bulk-share.component';\nimport { CiphersComponent } from './vault/ciphers.component';\nimport { CollectionsComponent } from './vault/collections.component';\nimport { FolderAddEditComponent } from './vault/folder-add-edit.component';\nimport { GroupingsComponent } from './vault/groupings.component';\nimport { SendInfoComponent } from './vault/send-info.component';\nimport { ShareComponent } from './vault/share.component';\nimport { VaultComponent } from './vault/vault.component';\n\nimport { CalloutComponent } from 'jslib/angular/components/callout.component';\nimport { IconComponent } from 'jslib/angular/components/icon.component';\n\nimport { A11yTitleDirective } from 'jslib/angular/directives/a11y-title.directive';\nimport { ApiActionDirective } from 'jslib/angular/directives/api-action.directive';\nimport { AutofocusDirective } from 'jslib/angular/directives/autofocus.directive';\nimport { BlurClickDirective } from 'jslib/angular/directives/blur-click.directive';\nimport { BoxRowDirective } from 'jslib/angular/directives/box-row.directive';\nimport { FallbackSrcDirective } from 'jslib/angular/directives/fallback-src.directive';\nimport { InputVerbatimDirective } from 'jslib/angular/directives/input-verbatim.directive';\nimport { SelectCopyDirective } from 'jslib/angular/directives/select-copy.directive';\nimport { StopClickDirective } from 'jslib/angular/directives/stop-click.directive';\nimport { StopPropDirective } from 'jslib/angular/directives/stop-prop.directive';\nimport { TrueFalseValueDirective } from 'jslib/angular/directives/true-false-value.directive';\n\nimport { ColorPasswordPipe } from 'jslib/angular/pipes/color-password.pipe';\nimport { I18nPipe } from 'jslib/angular/pipes/i18n.pipe';\nimport { SearchCiphersPipe } from 'jslib/angular/pipes/search-ciphers.pipe';\nimport { SearchPipe } from 'jslib/angular/pipes/search.pipe';\n\nimport {\n DatePipe,\n registerLocaleData,\n} from '@angular/common';\nimport localeCa from '@angular/common/locales/ca';\nimport localeCs from '@angular/common/locales/cs';\nimport localeDa from '@angular/common/locales/da';\nimport localeDe from '@angular/common/locales/de';\nimport localeEl from '@angular/common/locales/el';\nimport localeEnGb from '@angular/common/locales/en-GB';\nimport localeEs from '@angular/common/locales/es';\nimport localeEt from '@angular/common/locales/et';\nimport localeFr from '@angular/common/locales/fr';\nimport localeHe from '@angular/common/locales/he';\nimport localeIt from '@angular/common/locales/it';\nimport localeJa from '@angular/common/locales/ja';\nimport localeKo from '@angular/common/locales/ko';\nimport localeLv from '@angular/common/locales/lv';\nimport localeMl from '@angular/common/locales/ml';\nimport localeNb from '@angular/common/locales/nb';\nimport localeNl from '@angular/common/locales/nl';\nimport localePl from '@angular/common/locales/pl';\nimport localePtBr from '@angular/common/locales/pt';\nimport localePtPt from '@angular/common/locales/pt-PT';\nimport localeRu from '@angular/common/locales/ru';\nimport localeSk from '@angular/common/locales/sk';\nimport localeSv from '@angular/common/locales/sv';\nimport localeUk from '@angular/common/locales/uk';\nimport localeZhCn from '@angular/common/locales/zh-Hans';\nimport localeZhTw from '@angular/common/locales/zh-Hant';\n\nregisterLocaleData(localeCa, 'ca');\nregisterLocaleData(localeCs, 'cs');\nregisterLocaleData(localeDa, 'da');\nregisterLocaleData(localeDe, 'de');\nregisterLocaleData(localeEl, 'el');\nregisterLocaleData(localeEnGb, 'en-GB');\nregisterLocaleData(localeEs, 'es');\nregisterLocaleData(localeEt, 'et');\nregisterLocaleData(localeFr, 'fr');\nregisterLocaleData(localeHe, 'he');\nregisterLocaleData(localeIt, 'it');\nregisterLocaleData(localeJa, 'ja');\nregisterLocaleData(localeKo, 'ko');\nregisterLocaleData(localeLv, 'lv');\nregisterLocaleData(localeMl, 'ml');\nregisterLocaleData(localeNb, 'nb');\nregisterLocaleData(localeNl, 'nl');\nregisterLocaleData(localePl, 'pl');\nregisterLocaleData(localePtBr, 'pt-BR');\nregisterLocaleData(localePtPt, 'pt-PT');\nregisterLocaleData(localeRu, 'ru');\nregisterLocaleData(localeSk, 'sk');\nregisterLocaleData(localeSv, 'sv');\nregisterLocaleData(localeUk, 'uk');\nregisterLocaleData(localeZhCn, 'zh-CN');\nregisterLocaleData(localeZhTw, 'zh-TW');\n\n@NgModule({\n imports: [\n BrowserModule,\n BrowserAnimationsModule,\n FormsModule,\n AppRoutingModule,\n ServicesModule,\n ToasterModule.forRoot(),\n InfiniteScrollModule,\n DragDropModule,\n ],\n declarations: [\n A11yTitleDirective,\n AcceptEmergencyComponent,\n AccessComponent,\n AcceptOrganizationComponent,\n AccountComponent,\n SetPasswordComponent,\n AddCreditComponent,\n AddEditComponent,\n AdjustPaymentComponent,\n AdjustSeatsComponent,\n AdjustStorageComponent,\n ApiActionDirective,\n ApiKeyComponent,\n AppComponent,\n AttachmentsComponent,\n AutofocusDirective,\n AvatarComponent,\n BlurClickDirective,\n BoxRowDirective,\n BreachReportComponent,\n BulkActionsComponent,\n BulkDeleteComponent,\n BulkMoveComponent,\n BulkRestoreComponent,\n BulkShareComponent,\n CalloutComponent,\n ChangeEmailComponent,\n ChangeKdfComponent,\n ChangePasswordComponent,\n ChangePlanComponent,\n CiphersComponent,\n CollectionsComponent,\n ColorPasswordPipe,\n CreateOrganizationComponent,\n DeauthorizeSessionsComponent,\n DeleteAccountComponent,\n DeleteOrganizationComponent,\n DomainRulesComponent,\n DownloadLicenseComponent,\n EmergencyAccessAddEditComponent,\n EmergencyAccessAttachmentsComponent,\n EmergencyAccessComponent,\n EmergencyAccessConfirmComponent,\n EmergencyAccessTakeoverComponent,\n EmergencyAccessViewComponent,\n EmergencyAddEditComponent,\n ExportComponent,\n ExposedPasswordsReportComponent,\n FallbackSrcDirective,\n FolderAddEditComponent,\n FooterComponent,\n FrontendLayoutComponent,\n GroupingsComponent,\n HintComponent,\n I18nPipe,\n IconComponent,\n ImportComponent,\n InactiveTwoFactorReportComponent,\n InputVerbatimDirective,\n LinkSsoComponent,\n LockComponent,\n LoginComponent,\n ModalComponent,\n NavbarComponent,\n OptionsComponent,\n OrgAccountComponent,\n OrgAddEditComponent,\n OrganizationBillingComponent,\n OrganizationPlansComponent,\n OrganizationSubscriptionComponent,\n OrgAttachmentsComponent,\n OrgCiphersComponent,\n OrgCollectionAddEditComponent,\n OrgCollectionsComponent,\n OrgEntityEventsComponent,\n OrgEntityUsersComponent,\n OrgEventsComponent,\n OrgExportComponent,\n OrgExposedPasswordsReportComponent,\n OrgImportComponent,\n OrgInactiveTwoFactorReportComponent,\n OrgGroupAddEditComponent,\n OrgGroupingsComponent,\n OrgGroupsComponent,\n OrgManageCollectionsComponent,\n OrgManageComponent,\n OrgPeopleComponent,\n OrgPolicyEditComponent,\n OrgPoliciesComponent,\n OrgReusedPasswordsReportComponent,\n OrgSettingComponent,\n OrgToolsComponent,\n OrgTwoFactorSetupComponent,\n OrgUserAddEditComponent,\n OrgUserConfirmComponent,\n OrgUserGroupsComponent,\n OrganizationsComponent,\n OrganizationLayoutComponent,\n OrgUnsecuredWebsitesReportComponent,\n OrgVaultComponent,\n OrgWeakPasswordsReportComponent,\n PasswordGeneratorComponent,\n PasswordGeneratorHistoryComponent,\n PasswordStrengthComponent,\n PaymentComponent,\n PremiumComponent,\n ProfileComponent,\n PurgeVaultComponent,\n RecoverDeleteComponent,\n RecoverTwoFactorComponent,\n RegisterComponent,\n ReusedPasswordsReportComponent,\n SearchCiphersPipe,\n SearchPipe,\n SelectCopyDirective,\n SendAddEditComponent,\n SendComponent,\n SendInfoComponent,\n SettingsComponent,\n ShareComponent,\n SsoComponent,\n StopClickDirective,\n StopPropDirective,\n TaxInfoComponent,\n ToolsComponent,\n TrueFalseValueDirective,\n TwoFactorAuthenticatorComponent,\n TwoFactorComponent,\n TwoFactorDuoComponent,\n TwoFactorEmailComponent,\n TwoFactorOptionsComponent,\n TwoFactorRecoveryComponent,\n TwoFactorSetupComponent,\n TwoFactorVerifyComponent,\n TwoFactorWebAuthnComponent,\n TwoFactorYubiKeyComponent,\n UnsecuredWebsitesReportComponent,\n UpdateKeyComponent,\n UpdateLicenseComponent,\n UserBillingComponent,\n UserLayoutComponent,\n UserSubscriptionComponent,\n VaultComponent,\n VerifyEmailComponent,\n VerifyEmailTokenComponent,\n VerifyRecoverDeleteComponent,\n WeakPasswordsReportComponent,\n ],\n entryComponents: [\n AddEditComponent,\n ApiKeyComponent,\n AttachmentsComponent,\n BulkActionsComponent,\n BulkDeleteComponent,\n BulkMoveComponent,\n BulkRestoreComponent,\n BulkShareComponent,\n CollectionsComponent,\n DeauthorizeSessionsComponent,\n DeleteAccountComponent,\n DeleteOrganizationComponent,\n EmergencyAccessAddEditComponent,\n EmergencyAccessAttachmentsComponent,\n EmergencyAccessConfirmComponent,\n EmergencyAccessTakeoverComponent,\n EmergencyAddEditComponent,\n FolderAddEditComponent,\n ModalComponent,\n OrgAddEditComponent,\n OrgAttachmentsComponent,\n OrgCollectionAddEditComponent,\n OrgCollectionsComponent,\n OrgEntityEventsComponent,\n OrgEntityUsersComponent,\n OrgGroupAddEditComponent,\n OrgPolicyEditComponent,\n OrgUserAddEditComponent,\n OrgUserConfirmComponent,\n OrgUserGroupsComponent,\n PasswordGeneratorHistoryComponent,\n PurgeVaultComponent,\n SendAddEditComponent,\n ShareComponent,\n TwoFactorAuthenticatorComponent,\n TwoFactorDuoComponent,\n TwoFactorEmailComponent,\n TwoFactorOptionsComponent,\n TwoFactorRecoveryComponent,\n TwoFactorWebAuthnComponent,\n TwoFactorYubiKeyComponent,\n UpdateKeyComponent,\n ],\n providers: [DatePipe],\n bootstrap: [AppComponent],\n})\nexport class AppModule { }\n","import { NgModule } from '@angular/core';\nimport {\n RouterModule,\n Routes,\n} from '@angular/router';\n\nimport { FrontendLayoutComponent } from './layouts/frontend-layout.component';\nimport { OrganizationLayoutComponent } from './layouts/organization-layout.component';\nimport { UserLayoutComponent } from './layouts/user-layout.component';\n\nimport { AcceptEmergencyComponent } from './accounts/accept-emergency.component';\nimport { AcceptOrganizationComponent } from './accounts/accept-organization.component';\nimport { HintComponent } from './accounts/hint.component';\nimport { LockComponent } from './accounts/lock.component';\nimport { LoginComponent } from './accounts/login.component';\nimport { RecoverDeleteComponent } from './accounts/recover-delete.component';\nimport { RecoverTwoFactorComponent } from './accounts/recover-two-factor.component';\nimport { RegisterComponent } from './accounts/register.component';\nimport { SetPasswordComponent } from './accounts/set-password.component';\nimport { SsoComponent } from './accounts/sso.component';\nimport { TwoFactorComponent } from './accounts/two-factor.component';\nimport { VerifyEmailTokenComponent } from './accounts/verify-email-token.component';\nimport { VerifyRecoverDeleteComponent } from './accounts/verify-recover-delete.component';\n\nimport { CollectionsComponent as OrgManageCollectionsComponent } from './organizations/manage/collections.component';\nimport { EventsComponent as OrgEventsComponent } from './organizations/manage/events.component';\nimport { GroupsComponent as OrgGroupsComponent } from './organizations/manage/groups.component';\nimport { ManageComponent as OrgManageComponent } from './organizations/manage/manage.component';\nimport { PeopleComponent as OrgPeopleComponent } from './organizations/manage/people.component';\nimport { PoliciesComponent as OrgPoliciesComponent } from './organizations/manage/policies.component';\n\nimport { AccountComponent as OrgAccountComponent } from './organizations/settings/account.component';\nimport { OrganizationBillingComponent } from './organizations/settings/organization-billing.component';\nimport { OrganizationSubscriptionComponent } from './organizations/settings/organization-subscription.component';\nimport { SettingsComponent as OrgSettingsComponent } from './organizations/settings/settings.component';\nimport {\n TwoFactorSetupComponent as OrgTwoFactorSetupComponent,\n} from './organizations/settings/two-factor-setup.component';\n\nimport { ExportComponent as OrgExportComponent } from './organizations/tools/export.component';\nimport {\n ExposedPasswordsReportComponent as OrgExposedPasswordsReportComponent,\n} from './organizations/tools/exposed-passwords-report.component';\nimport { ImportComponent as OrgImportComponent } from './organizations/tools/import.component';\nimport {\n InactiveTwoFactorReportComponent as OrgInactiveTwoFactorReportComponent,\n} from './organizations/tools/inactive-two-factor-report.component';\nimport {\n ReusedPasswordsReportComponent as OrgReusedPasswordsReportComponent,\n} from './organizations/tools/reused-passwords-report.component';\nimport { ToolsComponent as OrgToolsComponent } from './organizations/tools/tools.component';\nimport {\n UnsecuredWebsitesReportComponent as OrgUnsecuredWebsitesReportComponent,\n} from './organizations/tools/unsecured-websites-report.component';\nimport {\n WeakPasswordsReportComponent as OrgWeakPasswordsReportComponent,\n} from './organizations/tools/weak-passwords-report.component';\n\nimport { VaultComponent as OrgVaultComponent } from './organizations/vault/vault.component';\n\nimport { AccessComponent } from './send/access.component';\nimport { SendComponent } from './send/send.component';\n\nimport { AccountComponent } from './settings/account.component';\nimport { CreateOrganizationComponent } from './settings/create-organization.component';\nimport { DomainRulesComponent } from './settings/domain-rules.component';\nimport { OptionsComponent } from './settings/options.component';\nimport { OrganizationsComponent } from './settings/organizations.component';\nimport { PremiumComponent } from './settings/premium.component';\nimport { SettingsComponent } from './settings/settings.component';\nimport { TwoFactorSetupComponent } from './settings/two-factor-setup.component';\nimport { UserBillingComponent } from './settings/user-billing.component';\nimport { UserSubscriptionComponent } from './settings/user-subscription.component';\n\nimport { BreachReportComponent } from './tools/breach-report.component';\nimport { ExportComponent } from './tools/export.component';\nimport { ExposedPasswordsReportComponent } from './tools/exposed-passwords-report.component';\nimport { ImportComponent } from './tools/import.component';\nimport { InactiveTwoFactorReportComponent } from './tools/inactive-two-factor-report.component';\nimport { PasswordGeneratorComponent } from './tools/password-generator.component';\nimport { ReusedPasswordsReportComponent } from './tools/reused-passwords-report.component';\nimport { ToolsComponent } from './tools/tools.component';\nimport { UnsecuredWebsitesReportComponent } from './tools/unsecured-websites-report.component';\nimport { WeakPasswordsReportComponent } from './tools/weak-passwords-report.component';\n\nimport { VaultComponent } from './vault/vault.component';\n\nimport { OrganizationGuardService } from './services/organization-guard.service';\nimport { OrganizationTypeGuardService } from './services/organization-type-guard.service';\n\nimport { AuthGuardService } from 'jslib/angular/services/auth-guard.service';\nimport { LockGuardService } from 'jslib/angular/services/lock-guard.service';\nimport { UnauthGuardService } from 'jslib/angular/services/unauth-guard.service';\n\nimport { Permissions } from 'jslib/enums/permissions';\n\nimport { EmergencyAccessViewComponent } from './settings/emergency-access-view.component';\nimport { EmergencyAccessComponent } from './settings/emergency-access.component';\n\nconst routes: Routes = [\n {\n path: '',\n component: FrontendLayoutComponent,\n children: [\n { path: '', pathMatch: 'full', component: LoginComponent, canActivate: [UnauthGuardService] },\n { path: '2fa', component: TwoFactorComponent, canActivate: [UnauthGuardService] },\n {\n path: 'register', component: RegisterComponent,\n canActivate: [UnauthGuardService],\n data: { titleId: 'createAccount' },\n },\n {\n path: 'sso', component: SsoComponent,\n canActivate: [UnauthGuardService],\n data: { titleId: 'enterpriseSingleSignOn' },\n },\n {\n path: 'set-password', component: SetPasswordComponent,\n data: { titleId: 'setMasterPassword' },\n },\n {\n path: 'hint', component: HintComponent,\n canActivate: [UnauthGuardService],\n data: { titleId: 'passwordHint' },\n },\n {\n path: 'lock',\n component: LockComponent,\n canActivate: [LockGuardService],\n },\n { path: 'verify-email', component: VerifyEmailTokenComponent },\n {\n path: 'accept-organization',\n component: AcceptOrganizationComponent,\n data: { titleId: 'joinOrganization' },\n },\n {\n path: 'accept-emergency',\n component: AcceptEmergencyComponent,\n data: { titleId: 'acceptEmergency' },\n },\n { path: 'recover', pathMatch: 'full', redirectTo: 'recover-2fa' },\n {\n path: 'recover-2fa',\n component: RecoverTwoFactorComponent,\n canActivate: [UnauthGuardService],\n data: { titleId: 'recoverAccountTwoStep' },\n },\n {\n path: 'recover-delete',\n component: RecoverDeleteComponent,\n canActivate: [UnauthGuardService],\n data: { titleId: 'deleteAccount' },\n },\n {\n path: 'verify-recover-delete',\n component: VerifyRecoverDeleteComponent,\n canActivate: [UnauthGuardService],\n data: { titleId: 'deleteAccount' },\n },\n {\n path: 'send/:sendId/:key',\n component: AccessComponent,\n data: { title: 'Bitwarden Send' },\n },\n ],\n },\n {\n path: '',\n component: UserLayoutComponent,\n canActivate: [AuthGuardService],\n children: [\n { path: 'vault', component: VaultComponent, data: { titleId: 'myVault' } },\n { path: 'sends', component: SendComponent, data: { title: 'Send' } },\n {\n path: 'settings',\n component: SettingsComponent,\n children: [\n { path: '', pathMatch: 'full', redirectTo: 'account' },\n { path: 'account', component: AccountComponent, data: { titleId: 'myAccount' } },\n { path: 'options', component: OptionsComponent, data: { titleId: 'options' } },\n { path: 'domain-rules', component: DomainRulesComponent, data: { titleId: 'domainRules' } },\n { path: 'two-factor', component: TwoFactorSetupComponent, data: { titleId: 'twoStepLogin' } },\n { path: 'premium', component: PremiumComponent, data: { titleId: 'goPremium' } },\n { path: 'billing', component: UserBillingComponent, data: { titleId: 'billing' } },\n {\n path: 'subscription',\n component: UserSubscriptionComponent,\n data: { titleId: 'premiumMembership' },\n },\n { path: 'organizations', component: OrganizationsComponent, data: { titleId: 'organizations' } },\n {\n path: 'create-organization',\n component: CreateOrganizationComponent,\n data: { titleId: 'newOrganization' },\n },\n {\n path: 'emergency-access',\n children: [\n {\n path: '',\n component: EmergencyAccessComponent,\n data: { titleId: 'emergencyAccess'},\n },\n {\n path: ':id',\n component: EmergencyAccessViewComponent,\n data: { titleId: 'emergencyAccess'},\n },\n ],\n },\n ],\n },\n {\n path: 'tools',\n component: ToolsComponent,\n canActivate: [AuthGuardService],\n children: [\n { path: '', pathMatch: 'full', redirectTo: 'generator' },\n { path: 'import', component: ImportComponent, data: { titleId: 'importData' } },\n { path: 'export', component: ExportComponent, data: { titleId: 'exportVault' } },\n {\n path: 'generator',\n component: PasswordGeneratorComponent,\n data: { titleId: 'passwordGenerator' },\n },\n { path: 'breach-report', component: BreachReportComponent, data: { titleId: 'dataBreachReport' } },\n {\n path: 'reused-passwords-report',\n component: ReusedPasswordsReportComponent,\n data: { titleId: 'reusedPasswordsReport' },\n },\n {\n path: 'unsecured-websites-report',\n component: UnsecuredWebsitesReportComponent,\n data: { titleId: 'unsecuredWebsitesReport' },\n },\n {\n path: 'weak-passwords-report',\n component: WeakPasswordsReportComponent,\n data: { titleId: 'weakPasswordsReport' },\n },\n {\n path: 'exposed-passwords-report',\n component: ExposedPasswordsReportComponent,\n data: { titleId: 'exposedPasswordsReport' },\n },\n {\n path: 'inactive-two-factor-report',\n component: InactiveTwoFactorReportComponent,\n data: { titleId: 'inactive2faReport' },\n },\n ],\n },\n ],\n },\n {\n path: 'organizations/:organizationId',\n component: OrganizationLayoutComponent,\n canActivate: [AuthGuardService, OrganizationGuardService],\n children: [\n { path: '', pathMatch: 'full', redirectTo: 'vault' },\n { path: 'vault', component: OrgVaultComponent, data: { titleId: 'vault' } },\n {\n path: 'tools',\n component: OrgToolsComponent,\n canActivate: [OrganizationTypeGuardService],\n data: { permissions: [Permissions.AccessImportExport, Permissions.AccessReports] },\n children: [\n {\n path: '',\n pathMatch: 'full',\n redirectTo: 'import',\n },\n {\n path: 'import',\n component: OrgImportComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: 'importData',\n permissions: [Permissions.AccessImportExport],\n },\n },\n {\n path: 'export',\n component: OrgExportComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: 'exportVault',\n permissions: [Permissions.AccessImportExport],\n },\n },\n {\n path: 'exposed-passwords-report',\n component: OrgExposedPasswordsReportComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: 'exposedPasswordsReport',\n permissions: [Permissions.AccessReports],\n },\n },\n {\n path: 'inactive-two-factor-report',\n component: OrgInactiveTwoFactorReportComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: 'inactive2faReport',\n permissions: [Permissions.AccessReports],\n },\n },\n {\n path: 'reused-passwords-report',\n component: OrgReusedPasswordsReportComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: 'reusedPasswordsReport',\n permissions: [Permissions.AccessReports],\n },\n },\n {\n path: 'unsecured-websites-report',\n component: OrgUnsecuredWebsitesReportComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: 'unsecuredWebsitesReport',\n permissions: [Permissions.AccessReports],\n },\n },\n {\n path: 'weak-passwords-report',\n component: OrgWeakPasswordsReportComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: 'weakPasswordsReport',\n permissions: [Permissions.AccessReports],\n },\n },\n ],\n },\n {\n path: 'manage',\n component: OrgManageComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n permissions: [\n Permissions.ManageAssignedCollections,\n Permissions.ManageAllCollections,\n Permissions.AccessEventLogs,\n Permissions.ManageGroups,\n Permissions.ManageUsers,\n Permissions.ManagePolicies,\n ],\n },\n children: [\n {\n path: '',\n pathMatch: 'full',\n redirectTo: 'people',\n },\n {\n path: 'collections',\n component: OrgManageCollectionsComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: 'collections',\n permissions: [Permissions.ManageAssignedCollections, Permissions.ManageAllCollections],\n },\n },\n {\n path: 'events',\n component: OrgEventsComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: 'eventLogs',\n permissions: [Permissions.AccessEventLogs],\n },\n },\n {\n path: 'groups',\n component: OrgGroupsComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: 'groups',\n permissions: [Permissions.ManageGroups],\n },\n },\n {\n path: 'people',\n component: OrgPeopleComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: 'people',\n permissions: [Permissions.ManageUsers],\n },\n },\n {\n path: 'policies',\n component: OrgPoliciesComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: 'policies',\n permissions: [Permissions.ManagePolicies],\n },\n },\n ],\n },\n {\n path: 'settings',\n component: OrgSettingsComponent,\n canActivate: [OrganizationTypeGuardService],\n data: { permissions: [Permissions.ManageOrganization] },\n children: [\n { path: '', pathMatch: 'full', redirectTo: 'account' },\n { path: 'account', component: OrgAccountComponent, data: { titleId: 'myOrganization' } },\n { path: 'two-factor', component: OrgTwoFactorSetupComponent, data: { titleId: 'twoStepLogin' } },\n {\n path: 'billing',\n component: OrganizationBillingComponent,\n data: { titleId: 'billing' },\n },\n {\n path: 'subscription',\n component: OrganizationSubscriptionComponent,\n data: { titleId: 'subscription' },\n },\n ],\n },\n ],\n },\n { path: '**', redirectTo: '' },\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes, {\n useHash: true,\n paramsInheritanceStrategy: 'always',\n /*enableTracing: true,*/\n })],\n exports: [RouterModule],\n})\nexport class AppRoutingModule { }\n","import { BroadcasterService as BroadcasterServiceAbstraction } from '../abstractions/broadcaster.service';\n\nexport class BroadcasterService implements BroadcasterServiceAbstraction {\n subscribers: Map any> = new Map any>();\n\n send(message: any, id?: string) {\n if (id != null) {\n if (this.subscribers.has(id)) {\n this.subscribers.get(id)(message);\n }\n return;\n }\n\n this.subscribers.forEach(value => {\n value(message);\n });\n }\n\n subscribe(id: string, messageCallback: (message: any) => any) {\n this.subscribers.set(id, messageCallback);\n }\n\n unsubscribe(id: string) {\n if (this.subscribers.has(id)) {\n this.subscribers.delete(id);\n }\n }\n}\n","export function getDomain(host: string): string | null {\n return null;\n}\n","export class EmergencyAccessAcceptRequest {\n token: string;\n}\n","export class OrganizationUserAcceptRequest {\n token: string;\n}\n","import { Router } from '@angular/router';\n\nimport { PasswordHintRequest } from '../../models/request/passwordHintRequest';\n\nimport { ApiService } from '../../abstractions/api.service';\nimport { I18nService } from '../../abstractions/i18n.service';\nimport { PlatformUtilsService } from '../../abstractions/platformUtils.service';\n\nexport class HintComponent {\n email: string = '';\n formPromise: Promise;\n\n protected successRoute = 'login';\n protected onSuccessfulSubmit: () => void;\n\n constructor(protected router: Router, protected i18nService: I18nService,\n protected apiService: ApiService, protected platformUtilsService: PlatformUtilsService) { }\n\n async submit() {\n if (this.email == null || this.email === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('emailRequired'));\n return;\n }\n if (this.email.indexOf('@') === -1) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('invalidEmail'));\n return;\n }\n\n try {\n this.formPromise = this.apiService.postPasswordHint(new PasswordHintRequest(this.email));\n await this.formPromise;\n this.platformUtilsService.showToast('success', null, this.i18nService.t('masterPassSent'));\n if (this.onSuccessfulSubmit != null) {\n this.onSuccessfulSubmit();\n } else if (this.router != null) {\n this.router.navigate([this.successRoute]);\n }\n } catch { }\n }\n}\n","export class PasswordHintRequest {\n email: string;\n\n constructor(email: string) {\n this.email = email;\n }\n}\n","import { OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ApiService } from '../../abstractions/api.service';\nimport { CryptoService } from '../../abstractions/crypto.service';\nimport { EnvironmentService } from '../../abstractions/environment.service';\nimport { I18nService } from '../../abstractions/i18n.service';\nimport { MessagingService } from '../../abstractions/messaging.service';\nimport { PlatformUtilsService } from '../../abstractions/platformUtils.service';\nimport { StateService } from '../../abstractions/state.service';\nimport { StorageService } from '../../abstractions/storage.service';\nimport { UserService } from '../../abstractions/user.service';\nimport { VaultTimeoutService } from '../../abstractions/vaultTimeout.service';\n\nimport { ConstantsService } from '../../services/constants.service';\n\nimport { EncString } from '../../models/domain/encString';\nimport { SymmetricCryptoKey } from '../../models/domain/symmetricCryptoKey';\n\nimport { PasswordVerificationRequest } from '../../models/request/passwordVerificationRequest';\n\nimport { Utils } from '../../misc/utils';\n\nexport class LockComponent implements OnInit {\n masterPassword: string = '';\n pin: string = '';\n showPassword: boolean = false;\n email: string;\n pinLock: boolean = false;\n webVaultHostname: string = '';\n formPromise: Promise;\n supportsBiometric: boolean;\n biometricLock: boolean;\n biometricText: string;\n\n protected successRoute: string = 'vault';\n protected onSuccessfulSubmit: () => void;\n\n private invalidPinAttempts = 0;\n private pinSet: [boolean, boolean];\n\n constructor(protected router: Router, protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService, protected messagingService: MessagingService,\n protected userService: UserService, protected cryptoService: CryptoService,\n protected storageService: StorageService, protected vaultTimeoutService: VaultTimeoutService,\n protected environmentService: EnvironmentService, protected stateService: StateService,\n protected apiService: ApiService) { }\n\n async ngOnInit() {\n this.pinSet = await this.vaultTimeoutService.isPinLockSet();\n this.pinLock = (this.pinSet[0] && this.vaultTimeoutService.pinProtectedKey != null) || this.pinSet[1];\n this.supportsBiometric = await this.platformUtilsService.supportsBiometric();\n this.biometricLock = await this.vaultTimeoutService.isBiometricLockSet() && (await this.cryptoService.hasKey() || !this.platformUtilsService.supportsSecureStorage());\n this.biometricText = await this.storageService.get(ConstantsService.biometricText);\n this.email = await this.userService.getEmail();\n let vaultUrl = this.environmentService.getWebVaultUrl();\n if (vaultUrl == null) {\n vaultUrl = 'https://bitwarden.com';\n }\n this.webVaultHostname = Utils.getHostname(vaultUrl);\n }\n\n async submit() {\n if (this.pinLock && (this.pin == null || this.pin === '')) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('pinRequired'));\n return;\n }\n if (!this.pinLock && (this.masterPassword == null || this.masterPassword === '')) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassRequired'));\n return;\n }\n\n const kdf = await this.userService.getKdf();\n const kdfIterations = await this.userService.getKdfIterations();\n\n if (this.pinLock) {\n let failed = true;\n try {\n if (this.pinSet[0]) {\n const key = await this.cryptoService.makeKeyFromPin(this.pin, this.email, kdf, kdfIterations,\n this.vaultTimeoutService.pinProtectedKey);\n const encKey = await this.cryptoService.getEncKey(key);\n const protectedPin = await this.storageService.get(ConstantsService.protectedPin);\n const decPin = await this.cryptoService.decryptToUtf8(new EncString(protectedPin), encKey);\n failed = decPin !== this.pin;\n if (!failed) {\n await this.setKeyAndContinue(key);\n }\n } else {\n const key = await this.cryptoService.makeKeyFromPin(this.pin, this.email, kdf, kdfIterations);\n failed = false;\n await this.setKeyAndContinue(key);\n }\n } catch {\n failed = true;\n }\n\n if (failed) {\n this.invalidPinAttempts++;\n if (this.invalidPinAttempts >= 5) {\n this.messagingService.send('logout');\n return;\n }\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('invalidPin'));\n }\n } else {\n const key = await this.cryptoService.makeKey(this.masterPassword, this.email, kdf, kdfIterations);\n const keyHash = await this.cryptoService.hashPassword(this.masterPassword, key);\n\n let passwordValid = false;\n\n if (keyHash != null) {\n const storedKeyHash = await this.cryptoService.getKeyHash();\n if (storedKeyHash != null) {\n passwordValid = storedKeyHash === keyHash;\n } else {\n const request = new PasswordVerificationRequest();\n request.masterPasswordHash = keyHash;\n try {\n this.formPromise = this.apiService.postAccountVerifyPassword(request);\n await this.formPromise;\n passwordValid = true;\n await this.cryptoService.setKeyHash(keyHash);\n } catch { }\n }\n }\n\n if (passwordValid) {\n if (this.pinSet[0]) {\n const protectedPin = await this.storageService.get(ConstantsService.protectedPin);\n const encKey = await this.cryptoService.getEncKey(key);\n const decPin = await this.cryptoService.decryptToUtf8(new EncString(protectedPin), encKey);\n const pinKey = await this.cryptoService.makePinKey(decPin, this.email, kdf, kdfIterations);\n this.vaultTimeoutService.pinProtectedKey = await this.cryptoService.encrypt(key.key, pinKey);\n }\n this.setKeyAndContinue(key);\n } else {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('invalidMasterPassword'));\n }\n }\n }\n\n async logOut() {\n const confirmed = await this.platformUtilsService.showDialog(this.i18nService.t('logOutConfirmation'),\n this.i18nService.t('logOut'), this.i18nService.t('logOut'), this.i18nService.t('cancel'));\n if (confirmed) {\n this.messagingService.send('logout');\n }\n }\n\n async unlockBiometric() {\n if (!this.biometricLock) {\n return;\n }\n const success = await this.platformUtilsService.authenticateBiometric();\n\n if (success) {\n await this.doContinue();\n }\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n document.getElementById(this.pinLock ? 'pin' : 'masterPassword').focus();\n }\n\n private async setKeyAndContinue(key: SymmetricCryptoKey) {\n await this.cryptoService.setKey(key);\n this.doContinue();\n }\n\n private async doContinue() {\n this.vaultTimeoutService.biometricLocked = false;\n const disableFavicon = await this.storageService.get(ConstantsService.disableFaviconKey);\n await this.stateService.save(ConstantsService.disableFaviconKey, !!disableFavicon);\n this.messagingService.send('unlocked');\n if (this.onSuccessfulSubmit != null) {\n this.onSuccessfulSubmit();\n } else if (this.router != null) {\n this.router.navigate([this.successRoute]);\n }\n }\n}\n","import {\n Directive,\n Input,\n OnInit,\n} from '@angular/core';\n\nimport { Router } from '@angular/router';\n\nimport { AuthResult } from '../../models/domain/authResult';\n\nimport { AuthService } from '../../abstractions/auth.service';\nimport { CryptoFunctionService } from '../../abstractions/cryptoFunction.service';\nimport { EnvironmentService } from '../../abstractions/environment.service';\nimport { I18nService } from '../../abstractions/i18n.service';\nimport { PasswordGenerationService } from '../../abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from '../../abstractions/platformUtils.service';\nimport { StateService } from '../../abstractions/state.service';\nimport { StorageService } from '../../abstractions/storage.service';\n\nimport { ConstantsService } from '../../services/constants.service';\n\nimport { Utils } from '../../misc/utils';\n\nconst Keys = {\n rememberedEmail: 'rememberedEmail',\n rememberEmail: 'rememberEmail',\n};\n\n@Directive()\nexport class LoginComponent implements OnInit {\n @Input() email: string = '';\n @Input() rememberEmail = true;\n\n masterPassword: string = '';\n showPassword: boolean = false;\n formPromise: Promise;\n onSuccessfulLogin: () => Promise;\n onSuccessfulLoginNavigate: () => Promise;\n onSuccessfulLoginTwoFactorNavigate: () => Promise;\n\n protected twoFactorRoute = '2fa';\n protected successRoute = 'vault';\n\n constructor(protected authService: AuthService, protected router: Router,\n protected platformUtilsService: PlatformUtilsService, protected i18nService: I18nService,\n protected stateService: StateService, protected environmentService: EnvironmentService,\n protected passwordGenerationService: PasswordGenerationService,\n protected cryptoFunctionService: CryptoFunctionService, private storageService: StorageService) { }\n\n async ngOnInit() {\n if (this.email == null || this.email === '') {\n this.email = await this.storageService.get(Keys.rememberedEmail);\n if (this.email == null) {\n this.email = '';\n }\n }\n this.rememberEmail = await this.storageService.get(Keys.rememberEmail);\n if (this.rememberEmail == null) {\n this.rememberEmail = true;\n }\n if (Utils.isBrowser) {\n document.getElementById(this.email == null || this.email === '' ? 'email' : 'masterPassword').focus();\n }\n }\n\n async submit() {\n if (this.email == null || this.email === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('emailRequired'));\n return;\n }\n if (this.email.indexOf('@') === -1) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('invalidEmail'));\n return;\n }\n if (this.masterPassword == null || this.masterPassword === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassRequired'));\n return;\n }\n\n try {\n this.formPromise = this.authService.logIn(this.email, this.masterPassword);\n const response = await this.formPromise;\n await this.storageService.save(Keys.rememberEmail, this.rememberEmail);\n if (this.rememberEmail) {\n await this.storageService.save(Keys.rememberedEmail, this.email);\n } else {\n await this.storageService.remove(Keys.rememberedEmail);\n }\n if (response.twoFactor) {\n if (this.onSuccessfulLoginTwoFactorNavigate != null) {\n this.onSuccessfulLoginTwoFactorNavigate();\n } else {\n this.router.navigate([this.twoFactorRoute]);\n }\n } else {\n const disableFavicon = await this.storageService.get(ConstantsService.disableFaviconKey);\n await this.stateService.save(ConstantsService.disableFaviconKey, !!disableFavicon);\n if (this.onSuccessfulLogin != null) {\n this.onSuccessfulLogin();\n }\n if (this.onSuccessfulLoginNavigate != null) {\n this.onSuccessfulLoginNavigate();\n } else {\n this.router.navigate([this.successRoute]);\n }\n }\n } catch { }\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n document.getElementById('masterPassword').focus();\n }\n\n async launchSsoBrowser(clientId: string, ssoRedirectUri: string) {\n // Generate necessary sso params\n const passwordOptions: any = {\n type: 'password',\n length: 64,\n uppercase: true,\n lowercase: true,\n numbers: true,\n special: false,\n };\n const state = await this.passwordGenerationService.generatePassword(passwordOptions);\n const ssoCodeVerifier = await this.passwordGenerationService.generatePassword(passwordOptions);\n const codeVerifierHash = await this.cryptoFunctionService.hash(ssoCodeVerifier, 'sha256');\n const codeChallenge = Utils.fromBufferToUrlB64(codeVerifierHash);\n\n // Save sso params\n await this.storageService.save(ConstantsService.ssoStateKey, state);\n await this.storageService.save(ConstantsService.ssoCodeVerifierKey, ssoCodeVerifier);\n\n // Build URI\n const webUrl = this.environmentService.getWebVaultUrl() == null ? 'https://vault.bitwarden.com' :\n this.environmentService.getWebVaultUrl();\n\n // Launch browser\n this.platformUtilsService.launchUri(webUrl + '/#/sso?clientId=' + clientId +\n '&redirectUri=' + encodeURIComponent(ssoRedirectUri) +\n '&state=' + state + '&codeChallenge=' + codeChallenge);\n }\n}\n","export class DeleteRecoverRequest {\n email: string;\n}\n","import { PasswordVerificationRequest } from './passwordVerificationRequest';\n\nexport class TwoFactorRecoveryRequest extends PasswordVerificationRequest {\n recoveryCode: string;\n email: string;\n}\n","import { Router } from '@angular/router';\n\nimport { KeysRequest } from '../../models/request/keysRequest';\nimport { ReferenceEventRequest } from '../../models/request/referenceEventRequest';\nimport { RegisterRequest } from '../../models/request/registerRequest';\n\nimport { ApiService } from '../../abstractions/api.service';\nimport { AuthService } from '../../abstractions/auth.service';\nimport { CryptoService } from '../../abstractions/crypto.service';\nimport { I18nService } from '../../abstractions/i18n.service';\nimport { PasswordGenerationService } from '../../abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from '../../abstractions/platformUtils.service';\nimport { StateService } from '../../abstractions/state.service';\n\nimport { KdfType } from '../../enums/kdfType';\n\nexport class RegisterComponent {\n name: string = '';\n email: string = '';\n masterPassword: string = '';\n confirmMasterPassword: string = '';\n hint: string = '';\n showPassword: boolean = false;\n formPromise: Promise;\n masterPasswordScore: number;\n referenceData: ReferenceEventRequest;\n showTerms = true;\n acceptPolicies: boolean = false;\n\n protected successRoute = 'login';\n private masterPasswordStrengthTimeout: any;\n\n constructor(protected authService: AuthService, protected router: Router,\n protected i18nService: I18nService, protected cryptoService: CryptoService,\n protected apiService: ApiService, protected stateService: StateService,\n protected platformUtilsService: PlatformUtilsService,\n protected passwordGenerationService: PasswordGenerationService) {\n this.showTerms = !platformUtilsService.isSelfHost();\n }\n\n get masterPasswordScoreWidth() {\n return this.masterPasswordScore == null ? 0 : (this.masterPasswordScore + 1) * 20;\n }\n\n get masterPasswordScoreColor() {\n switch (this.masterPasswordScore) {\n case 4:\n return 'success';\n case 3:\n return 'primary';\n case 2:\n return 'warning';\n default:\n return 'danger';\n }\n }\n\n get masterPasswordScoreText() {\n switch (this.masterPasswordScore) {\n case 4:\n return this.i18nService.t('strong');\n case 3:\n return this.i18nService.t('good');\n case 2:\n return this.i18nService.t('weak');\n default:\n return this.masterPasswordScore != null ? this.i18nService.t('weak') : null;\n }\n }\n\n async submit() {\n if (!this.acceptPolicies && this.showTerms) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('acceptPoliciesError'));\n return;\n }\n\n if (this.email == null || this.email === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('emailRequired'));\n return;\n }\n if (this.email.indexOf('@') === -1) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('invalidEmail'));\n return;\n }\n if (this.masterPassword == null || this.masterPassword === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassRequired'));\n return;\n }\n if (this.masterPassword.length < 8) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassLength'));\n return;\n }\n if (this.masterPassword !== this.confirmMasterPassword) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassDoesntMatch'));\n return;\n }\n\n const strengthResult = this.passwordGenerationService.passwordStrength(this.masterPassword,\n this.getPasswordStrengthUserInput());\n if (strengthResult != null && strengthResult.score < 3) {\n const result = await this.platformUtilsService.showDialog(this.i18nService.t('weakMasterPasswordDesc'),\n this.i18nService.t('weakMasterPassword'), this.i18nService.t('yes'), this.i18nService.t('no'),\n 'warning');\n if (!result) {\n return;\n }\n }\n\n if (this.hint === this.masterPassword) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), this.i18nService.t('hintEqualsPassword'));\n return;\n }\n\n this.name = this.name === '' ? null : this.name;\n this.email = this.email.trim().toLowerCase();\n const kdf = KdfType.PBKDF2_SHA256;\n const useLowerKdf = this.platformUtilsService.isIE();\n const kdfIterations = useLowerKdf ? 10000 : 100000;\n const key = await this.cryptoService.makeKey(this.masterPassword, this.email, kdf, kdfIterations);\n const encKey = await this.cryptoService.makeEncKey(key);\n const hashedPassword = await this.cryptoService.hashPassword(this.masterPassword, key);\n const keys = await this.cryptoService.makeKeyPair(encKey[0]);\n const request = new RegisterRequest(this.email, this.name, hashedPassword,\n this.hint, encKey[1].encryptedString, kdf, kdfIterations, this.referenceData);\n request.keys = new KeysRequest(keys[0], keys[1].encryptedString);\n const orgInvite = await this.stateService.get('orgInvitation');\n if (orgInvite != null && orgInvite.token != null && orgInvite.organizationUserId != null) {\n request.token = orgInvite.token;\n request.organizationUserId = orgInvite.organizationUserId;\n }\n\n try {\n this.formPromise = this.apiService.postRegister(request);\n await this.formPromise;\n this.platformUtilsService.showToast('success', null, this.i18nService.t('newAccountCreated'));\n this.router.navigate([this.successRoute], { queryParams: { email: this.email } });\n } catch { }\n }\n\n togglePassword(confirmField: boolean) {\n this.showPassword = !this.showPassword;\n document.getElementById(confirmField ? 'masterPasswordRetype' : 'masterPassword').focus();\n }\n\n updatePasswordStrength() {\n if (this.masterPasswordStrengthTimeout != null) {\n clearTimeout(this.masterPasswordStrengthTimeout);\n }\n this.masterPasswordStrengthTimeout = setTimeout(() => {\n const strengthResult = this.passwordGenerationService.passwordStrength(this.masterPassword,\n this.getPasswordStrengthUserInput());\n this.masterPasswordScore = strengthResult == null ? null : strengthResult.score;\n }, 300);\n }\n\n private getPasswordStrengthUserInput() {\n let userInput: string[] = [];\n const atPosition = this.email.indexOf('@');\n if (atPosition > -1) {\n userInput = userInput.concat(this.email.substr(0, atPosition).trim().toLowerCase().split(/[^A-Za-z0-9]/));\n }\n if (this.name != null && this.name !== '') {\n userInput = userInput.concat(this.name.trim().toLowerCase().split(' '));\n }\n return userInput;\n }\n}\n","import { KeysRequest } from './keysRequest';\nimport { ReferenceEventRequest } from './referenceEventRequest';\n\nimport { KdfType } from '../../enums/kdfType';\n\nexport class RegisterRequest {\n name: string;\n email: string;\n masterPasswordHash: string;\n masterPasswordHint: string;\n key: string;\n keys: KeysRequest;\n token: string;\n organizationUserId: string;\n kdf: KdfType;\n kdfIterations: number;\n referenceData: ReferenceEventRequest;\n\n constructor(email: string, name: string, masterPasswordHash: string, masterPasswordHint: string, key: string,\n kdf: KdfType, kdfIterations: number, referenceData: ReferenceEventRequest) {\n this.name = name;\n this.email = email;\n this.masterPasswordHash = masterPasswordHash;\n this.masterPasswordHint = masterPasswordHint ? masterPasswordHint : null;\n this.key = key;\n this.kdf = kdf;\n this.kdfIterations = kdfIterations;\n this.referenceData = referenceData;\n }\n}\n","export class ReferenceEventRequest {\n id: string;\n layout: string;\n flow: string;\n}\n","import {\n ActivatedRoute,\n Router\n} from '@angular/router';\n\nimport { ApiService } from '../../abstractions/api.service';\nimport { CryptoService } from '../../abstractions/crypto.service';\nimport { I18nService } from '../../abstractions/i18n.service';\nimport { MessagingService } from '../../abstractions/messaging.service';\nimport { PasswordGenerationService } from '../../abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from '../../abstractions/platformUtils.service';\nimport { PolicyService } from '../../abstractions/policy.service';\nimport { SyncService } from '../../abstractions/sync.service';\nimport { UserService } from '../../abstractions/user.service';\n\nimport { EncString } from '../../models/domain/encString';\nimport { SymmetricCryptoKey } from '../../models/domain/symmetricCryptoKey';\n\nimport { KeysRequest } from '../../models/request/keysRequest';\nimport { SetPasswordRequest } from '../../models/request/setPasswordRequest';\n\nimport { ChangePasswordComponent as BaseChangePasswordComponent } from './change-password.component';\n\nimport { KdfType } from '../../enums/kdfType';\n\nexport class SetPasswordComponent extends BaseChangePasswordComponent {\n syncLoading: boolean = true;\n showPassword: boolean = false;\n hint: string = '';\n identifier: string = null;\n\n onSuccessfulChangePassword: () => Promise;\n successRoute = 'vault';\n\n constructor(i18nService: I18nService, cryptoService: CryptoService, messagingService: MessagingService,\n userService: UserService, passwordGenerationService: PasswordGenerationService,\n platformUtilsService: PlatformUtilsService, policyService: PolicyService, private router: Router,\n private apiService: ApiService, private syncService: SyncService, private route: ActivatedRoute) {\n super(i18nService, cryptoService, messagingService, userService, passwordGenerationService,\n platformUtilsService, policyService);\n }\n\n async ngOnInit() {\n await this.syncService.fullSync(true);\n this.syncLoading = false;\n\n const queryParamsSub = this.route.queryParams.subscribe(async qParams => {\n if (qParams.identifier != null) {\n this.identifier = qParams.identifier;\n }\n\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n\n super.ngOnInit();\n }\n\n async setupSubmitActions() {\n this.kdf = KdfType.PBKDF2_SHA256;\n const useLowerKdf = this.platformUtilsService.isIE();\n this.kdfIterations = useLowerKdf ? 10000 : 100000;\n return true;\n }\n\n async performSubmitActions(masterPasswordHash: string, key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString]) {\n const request = new SetPasswordRequest();\n request.masterPasswordHash = masterPasswordHash;\n request.key = encKey[1].encryptedString;\n request.masterPasswordHint = this.hint;\n request.kdf = this.kdf;\n request.kdfIterations = this.kdfIterations;\n request.orgIdentifier = this.identifier;\n\n const keys = await this.cryptoService.makeKeyPair(encKey[0]);\n request.keys = new KeysRequest(keys[0], keys[1].encryptedString);\n\n try {\n this.formPromise = this.apiService.setPassword(request);\n await this.formPromise;\n\n await this.userService.setInformation(await this.userService.getUserId(), await this.userService.getEmail(),\n this.kdf, this.kdfIterations);\n await this.cryptoService.setKey(key);\n await this.cryptoService.setKeyHash(masterPasswordHash);\n await this.cryptoService.setEncKey(encKey[1].encryptedString);\n await this.cryptoService.setEncPrivateKey(keys[1].encryptedString);\n\n if (this.onSuccessfulChangePassword != null) {\n this.onSuccessfulChangePassword();\n } else {\n this.router.navigate([this.successRoute]);\n }\n } catch {\n this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred'));\n }\n }\n\n togglePassword(confirmField: boolean) {\n this.showPassword = !this.showPassword;\n document.getElementById(confirmField ? 'masterPasswordRetype' : 'masterPassword').focus();\n }\n}\n","import { KeysRequest } from './keysRequest';\n\nimport { KdfType } from '../../enums/kdfType';\n\nexport class SetPasswordRequest {\n masterPasswordHash: string;\n key: string;\n masterPasswordHint: string;\n keys: KeysRequest;\n kdf: KdfType;\n kdfIterations: number;\n orgIdentifier: string;\n}\n","import {\n Directive,\n EventEmitter,\n OnInit,\n Output,\n} from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { TwoFactorProviderType } from '../../enums/twoFactorProviderType';\n\nimport { AuthService } from '../../abstractions/auth.service';\nimport { I18nService } from '../../abstractions/i18n.service';\nimport { PlatformUtilsService } from '../../abstractions/platformUtils.service';\n\n@Directive()\nexport class TwoFactorOptionsComponent implements OnInit {\n @Output() onProviderSelected = new EventEmitter();\n @Output() onRecoverSelected = new EventEmitter();\n\n providers: any[] = [];\n\n constructor(protected authService: AuthService, protected router: Router,\n protected i18nService: I18nService, protected platformUtilsService: PlatformUtilsService,\n protected win: Window) { }\n\n ngOnInit() {\n this.providers = this.authService.getSupportedTwoFactorProviders(this.win);\n }\n\n choose(p: any) {\n this.onProviderSelected.emit(p.type);\n }\n\n recover() {\n this.platformUtilsService.launchUri('https://help.bitwarden.com/article/lost-two-step-device/');\n this.onRecoverSelected.emit();\n }\n}\n","import {\n Component,\n ComponentFactoryResolver,\n EventEmitter,\n OnDestroy,\n Output,\n Type,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { MessagingService } from '../../abstractions/messaging.service';\n\n@Component({\n selector: 'app-modal',\n template: ``,\n})\nexport class ModalComponent implements OnDestroy {\n @Output() onClose = new EventEmitter();\n @Output() onClosed = new EventEmitter();\n @Output() onShow = new EventEmitter();\n @Output() onShown = new EventEmitter();\n @ViewChild('container', { read: ViewContainerRef, static: true }) container: ViewContainerRef;\n parentContainer: ViewContainerRef = null;\n fade: boolean = true;\n\n constructor(protected componentFactoryResolver: ComponentFactoryResolver,\n protected messagingService: MessagingService) { }\n\n ngOnDestroy() {\n document.body.classList.remove('modal-open');\n document.body.removeChild(document.querySelector('.modal-backdrop'));\n }\n\n show(type: Type, parentContainer: ViewContainerRef, fade: boolean = true,\n setComponentParameters: (component: T) => void = null): T {\n this.onShow.emit();\n this.messagingService.send('modalShow');\n this.parentContainer = parentContainer;\n this.fade = fade;\n\n document.body.classList.add('modal-open');\n const backdrop = document.createElement('div');\n backdrop.className = 'modal-backdrop' + (this.fade ? ' fade' : '');\n document.body.appendChild(backdrop);\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(type);\n const componentRef = this.container.createComponent(factory);\n if (setComponentParameters != null) {\n setComponentParameters(componentRef.instance);\n }\n\n document.querySelector('.modal-dialog').addEventListener('click', (e: Event) => {\n e.stopPropagation();\n });\n\n const modals = Array.from(document.querySelectorAll('.modal, .modal *[data-dismiss=\"modal\"]'));\n for (const closeElement of modals) {\n closeElement.addEventListener('click', event => {\n this.close();\n });\n }\n\n this.onShown.emit();\n this.messagingService.send('modalShown');\n return componentRef.instance;\n }\n\n close() {\n this.onClose.emit();\n this.messagingService.send('modalClose');\n this.onClosed.emit();\n this.messagingService.send('modalClosed');\n if (this.parentContainer != null) {\n this.parentContainer.clear();\n }\n }\n}\n","import {\n OnDestroy,\n OnInit,\n} from '@angular/core';\n\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { TwoFactorProviderType } from '../../enums/twoFactorProviderType';\n\nimport { TwoFactorEmailRequest } from '../../models/request/twoFactorEmailRequest';\n\nimport { AuthResult } from '../../models/domain';\n\nimport { ApiService } from '../../abstractions/api.service';\nimport { AuthService } from '../../abstractions/auth.service';\nimport { EnvironmentService } from '../../abstractions/environment.service';\nimport { I18nService } from '../../abstractions/i18n.service';\nimport { PlatformUtilsService } from '../../abstractions/platformUtils.service';\nimport { StateService } from '../../abstractions/state.service';\nimport { StorageService } from '../../abstractions/storage.service';\n\nimport { TwoFactorProviders } from '../../services/auth.service';\nimport { ConstantsService } from '../../services/constants.service';\n\nimport * as DuoWebSDK from 'duo_web_sdk';\nimport { WebAuthn } from '../../misc/webauthn';\n\nexport class TwoFactorComponent implements OnInit, OnDestroy {\n token: string = '';\n remember: boolean = false;\n webAuthnReady: boolean = false;\n webAuthnNewTab: boolean = false;\n providers = TwoFactorProviders;\n providerType = TwoFactorProviderType;\n selectedProviderType: TwoFactorProviderType = TwoFactorProviderType.Authenticator;\n webAuthnSupported: boolean = false;\n webAuthn: WebAuthn = null;\n title: string = '';\n twoFactorEmail: string = null;\n formPromise: Promise;\n emailPromise: Promise;\n identifier: string = null;\n onSuccessfulLogin: () => Promise;\n onSuccessfulLoginNavigate: () => Promise;\n\n protected loginRoute = 'login';\n protected successRoute = 'vault';\n\n constructor(protected authService: AuthService, protected router: Router,\n protected i18nService: I18nService, protected apiService: ApiService,\n protected platformUtilsService: PlatformUtilsService, protected win: Window,\n protected environmentService: EnvironmentService, protected stateService: StateService,\n protected storageService: StorageService, protected route: ActivatedRoute) {\n this.webAuthnSupported = this.platformUtilsService.supportsWebAuthn(win);\n }\n\n async ngOnInit() {\n if (!this.authing || this.authService.twoFactorProvidersData == null) {\n this.router.navigate([this.loginRoute]);\n return;\n }\n\n const queryParamsSub = this.route.queryParams.subscribe(async qParams => {\n if (qParams.identifier != null) {\n this.identifier = qParams.identifier;\n }\n\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n\n if (this.needsLock) {\n this.successRoute = 'lock';\n }\n\n if (this.win != null && this.webAuthnSupported) {\n let webVaultUrl = this.environmentService.getWebVaultUrl();\n if (webVaultUrl == null) {\n webVaultUrl = 'https://vault.bitwarden.com';\n }\n this.webAuthn = new WebAuthn(this.win, webVaultUrl, this.webAuthnNewTab, this.platformUtilsService,\n this.i18nService, (token: string) => {\n this.token = token;\n this.submit();\n }, (error: string) => {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), error);\n }, (info: string) => {\n if (info === 'ready') {\n this.webAuthnReady = true;\n }\n }\n );\n }\n\n this.selectedProviderType = this.authService.getDefaultTwoFactorProvider(this.webAuthnSupported);\n await this.init();\n }\n\n ngOnDestroy(): void {\n this.cleanupWebAuthn();\n this.webAuthn = null;\n }\n\n async init() {\n if (this.selectedProviderType == null) {\n this.title = this.i18nService.t('loginUnavailable');\n return;\n }\n\n this.cleanupWebAuthn();\n this.title = (TwoFactorProviders as any)[this.selectedProviderType].name;\n const providerData = this.authService.twoFactorProvidersData.get(this.selectedProviderType);\n switch (this.selectedProviderType) {\n case TwoFactorProviderType.WebAuthn:\n if (!this.webAuthnSupported || this.webAuthn == null) {\n break;\n }\n\n setTimeout(() => {\n this.webAuthn.init(providerData);\n }, 500);\n break;\n case TwoFactorProviderType.Duo:\n case TwoFactorProviderType.OrganizationDuo:\n setTimeout(() => {\n DuoWebSDK.init({\n iframe: undefined,\n host: providerData.Host,\n sig_request: providerData.Signature,\n submit_callback: async (f: HTMLFormElement) => {\n const sig = f.querySelector('input[name=\"sig_response\"]') as HTMLInputElement;\n if (sig != null) {\n this.token = sig.value;\n await this.submit();\n }\n },\n });\n }, 0);\n break;\n case TwoFactorProviderType.Email:\n this.twoFactorEmail = providerData.Email;\n if (this.authService.twoFactorProvidersData.size > 1) {\n await this.sendEmail(false);\n }\n break;\n default:\n break;\n }\n }\n\n async submit() {\n if (this.token == null || this.token === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('verificationCodeRequired'));\n return;\n }\n\n if (this.selectedProviderType === TwoFactorProviderType.WebAuthn) {\n if (this.webAuthn != null) {\n this.webAuthn.stop();\n } else {\n return;\n }\n } else if (this.selectedProviderType === TwoFactorProviderType.Email ||\n this.selectedProviderType === TwoFactorProviderType.Authenticator) {\n this.token = this.token.replace(' ', '').trim();\n }\n\n try {\n await this.doSubmit();\n } catch {\n if (this.selectedProviderType === TwoFactorProviderType.WebAuthn && this.webAuthn != null) {\n this.webAuthn.start();\n }\n }\n }\n\n async doSubmit() {\n this.formPromise = this.authService.logInTwoFactor(this.selectedProviderType, this.token, this.remember);\n const response: AuthResult = await this.formPromise;\n const disableFavicon = await this.storageService.get(ConstantsService.disableFaviconKey);\n await this.stateService.save(ConstantsService.disableFaviconKey, !!disableFavicon);\n if (this.onSuccessfulLogin != null) {\n this.onSuccessfulLogin();\n }\n if (response.resetMasterPassword) {\n this.successRoute = 'set-password';\n }\n if (this.onSuccessfulLoginNavigate != null) {\n this.onSuccessfulLoginNavigate();\n } else {\n this.router.navigate([this.successRoute], {\n queryParams: {\n identifier: this.identifier,\n },\n });\n }\n }\n\n async sendEmail(doToast: boolean) {\n if (this.selectedProviderType !== TwoFactorProviderType.Email) {\n return;\n }\n\n if (this.emailPromise != null) {\n return;\n }\n\n try {\n const request = new TwoFactorEmailRequest(this.authService.email, this.authService.masterPasswordHash);\n this.emailPromise = this.apiService.postTwoFactorEmail(request);\n await this.emailPromise;\n if (doToast) {\n this.platformUtilsService.showToast('success', null,\n this.i18nService.t('verificationCodeEmailSent', this.twoFactorEmail));\n }\n } catch { }\n\n this.emailPromise = null;\n }\n\n private cleanupWebAuthn() {\n if (this.webAuthn != null) {\n this.webAuthn.stop();\n this.webAuthn.cleanup();\n }\n }\n\n get authing(): boolean {\n return this.authService.authingWithPassword() || this.authService.authingWithSso() || this.authService.authingWithApiKey();\n }\n\n get needsLock(): boolean {\n return this.authService.authingWithSso() || this.authService.authingWithApiKey();\n }\n}\n","import { DeviceType } from '../../enums/deviceType';\n\nimport { PlatformUtilsService } from '../../abstractions/platformUtils.service';\n\nexport class DeviceRequest {\n type: DeviceType;\n name: string;\n identifier: string;\n pushToken?: string;\n\n constructor(appId: string, platformUtilsService: PlatformUtilsService) {\n this.type = platformUtilsService.getDevice();\n this.name = platformUtilsService.getDeviceString();\n this.identifier = appId;\n this.pushToken = null;\n }\n}\n","export class PreloginRequest {\n email: string;\n\n constructor(email: string) {\n this.email = email;\n }\n}\n","import { TwoFactorProviderType } from '../../enums/twoFactorProviderType';\n\nimport { DeviceRequest } from './deviceRequest';\n\nexport class TokenRequest {\n email: string;\n masterPasswordHash: string;\n code: string;\n codeVerifier: string;\n redirectUri: string;\n clientId: string;\n clientSecret: string;\n token: string;\n provider: TwoFactorProviderType;\n remember: boolean;\n device?: DeviceRequest;\n\n constructor(credentials: string[], codes: string[], clientIdClientSecret: string[], provider: TwoFactorProviderType,\n token: string, remember: boolean, device?: DeviceRequest) {\n if (credentials != null && credentials.length > 1) {\n this.email = credentials[0];\n this.masterPasswordHash = credentials[1];\n } else if (codes != null && codes.length > 2) {\n this.code = codes[0];\n this.codeVerifier = codes[1];\n this.redirectUri = codes[2];\n } else if (clientIdClientSecret != null && clientIdClientSecret.length > 1) {\n this.clientId = clientIdClientSecret[0];\n this.clientSecret = clientIdClientSecret[1];\n }\n this.token = token;\n this.provider = provider;\n this.remember = remember;\n this.device = device != null ? device : null;\n }\n\n toIdentityToken(clientId: string) {\n const obj: any = {\n scope: 'api offline_access',\n client_id: clientId,\n };\n\n if (this.clientSecret != null) {\n obj.scope = 'api';\n obj.grant_type = 'client_credentials';\n obj.client_secret = this.clientSecret;\n } else if (this.masterPasswordHash != null && this.email != null) {\n obj.grant_type = 'password';\n obj.username = this.email;\n obj.password = this.masterPasswordHash;\n } else if (this.code != null && this.codeVerifier != null && this.redirectUri != null) {\n obj.grant_type = 'authorization_code';\n obj.code = this.code;\n obj.code_verifier = this.codeVerifier;\n obj.redirect_uri = this.redirectUri;\n } else {\n throw new Error('must provide credentials or codes');\n }\n\n if (this.device) {\n obj.deviceType = this.device.type;\n obj.deviceIdentifier = this.device.identifier;\n obj.deviceName = this.device.name;\n // no push tokens for browser apps yet\n // obj.devicePushToken = this.device.pushToken;\n }\n\n if (this.token && this.provider != null) {\n obj.twoFactorToken = this.token;\n obj.twoFactorProvider = this.provider;\n obj.twoFactorRemember = this.remember ? '1' : '0';\n }\n\n return obj;\n }\n}\n","import { I18nService } from '../abstractions/i18n.service';\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\n\nexport class WebAuthn {\n private iframe: HTMLIFrameElement = null;\n private connectorLink: HTMLAnchorElement;\n private parseFunction = this.parseMessage.bind(this);\n\n constructor(private win: Window, private webVaultUrl: string, private webAuthnNewTab: boolean,\n private platformUtilsService: PlatformUtilsService, private i18nService: I18nService,\n private successCallback: Function, private errorCallback: Function, private infoCallback: Function) {\n this.connectorLink = win.document.createElement('a');\n }\n\n init(data: any): void {\n const params = new URLSearchParams({\n data: this.base64Encode(JSON.stringify(data)),\n parent: encodeURIComponent(this.win.document.location.href),\n btnText: encodeURIComponent(this.i18nService.t('webAuthnAuthenticate')),\n v: '1',\n });\n\n if (this.webAuthnNewTab) {\n // Firefox fallback which opens the webauthn page in a new tab\n params.append('locale', this.i18nService.translationLocale);\n this.platformUtilsService.launchUri(`${this.webVaultUrl}/webauthn-fallback-connector.html?${params}`);\n } else {\n this.connectorLink.href = `${this.webVaultUrl}/webauthn-connector.html?${params}`;\n this.iframe = this.win.document.getElementById('webauthn_iframe') as HTMLIFrameElement;\n this.iframe.allow = 'publickey-credentials-get ' + new URL(this.webVaultUrl).origin;\n this.iframe.src = this.connectorLink.href;\n\n this.win.addEventListener('message', this.parseFunction, false);\n }\n }\n\n stop() {\n this.sendMessage('stop');\n }\n\n start() {\n this.sendMessage('start');\n }\n\n sendMessage(message: any) {\n if (!this.iframe || !this.iframe.src || !this.iframe.contentWindow) {\n return;\n }\n\n this.iframe.contentWindow.postMessage(message, this.iframe.src);\n }\n\n base64Encode(str: string): string {\n return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) => {\n return String.fromCharCode(('0x' + p1) as any);\n }));\n }\n\n cleanup() {\n this.win.removeEventListener('message', this.parseFunction, false);\n }\n\n private parseMessage(event: MessageEvent) {\n if (!this.validMessage(event)) {\n return;\n }\n\n const parts: string[] = event.data.split('|');\n if (parts[0] === 'success' && this.successCallback) {\n this.successCallback(parts[1]);\n } else if (parts[0] === 'error' && this.errorCallback) {\n this.errorCallback(parts[1]);\n } else if (parts[0] === 'info' && this.infoCallback) {\n this.infoCallback(parts[1]);\n }\n }\n\n private validMessage(event: MessageEvent) {\n if (event.origin == null || event.origin === '' || event.origin !== (this.connectorLink as any).origin ||\n event.data == null || typeof (event.data) !== 'string') {\n return false;\n }\n\n return event.data.indexOf('success|') === 0 || event.data.indexOf('error|') === 0 ||\n event.data.indexOf('info|') === 0;\n }\n}\n","export class VerifyEmailRequest {\n userId: string;\n token: string;\n\n constructor(userId: string, token: string) {\n this.userId = userId;\n this.token = token;\n }\n}\n","export class VerifyDeleteRecoverRequest {\n userId: string;\n token: string;\n\n constructor(userId: string, token: string) {\n this.userId = userId;\n this.token = token;\n }\n}\n","import { SelectionReadOnlyRequest } from './selectionReadOnlyRequest';\n\nexport class GroupRequest {\n name: string;\n accessAll: boolean;\n externalId: string;\n collections: SelectionReadOnlyRequest[] = [];\n}\n","export class OrganizationUserConfirmRequest {\n key: string;\n}\n","import { SelectionReadOnlyRequest } from './selectionReadOnlyRequest';\n\nimport { OrganizationUserType } from '../../enums/organizationUserType';\nimport { PermissionsApi } from '../api/permissionsApi';\n\nexport class OrganizationUserInviteRequest {\n emails: string[] = [];\n type: OrganizationUserType;\n accessAll: boolean;\n collections: SelectionReadOnlyRequest[] = [];\n permissions: PermissionsApi;\n}\n","import { SelectionReadOnlyRequest } from './selectionReadOnlyRequest';\n\nimport { OrganizationUserType } from '../../enums/organizationUserType';\nimport { PermissionsApi } from '../api/permissionsApi';\n\nexport class OrganizationUserUpdateRequest {\n type: OrganizationUserType;\n accessAll: boolean;\n collections: SelectionReadOnlyRequest[] = [];\n permissions: PermissionsApi;\n}\n","export class OrganizationUserUpdateGroupsRequest {\n groupIds: string[] = [];\n}\n","export abstract class AppIdService {\n getAppId: () => Promise;\n getAnonymousAppId: () => Promise;\n}\n","import { LogLevelType } from '../enums/logLevelType';\n\nexport abstract class LogService {\n debug: (message: string) => void;\n info: (message: string) => void;\n warning: (message: string) => void;\n error: (message: string) => void;\n write: (level: LogLevelType, message: string) => void;\n time: (label: string) => void;\n timeEnd: (label: string) => [number, number];\n}\n","import { PolicyType } from '../../enums/policyType';\n\nexport class PolicyRequest {\n type: PolicyType;\n enabled: boolean;\n data: any;\n}\n","export class OrganizationUpdateRequest {\n name: string;\n identifier: string;\n businessName: string;\n billingEmail: string;\n}\n","export enum TransactionType {\n Charge = 0,\n Credit = 1,\n PromotionalCredit = 2,\n ReferralCredit = 3,\n Refund = 4,\n}\n","export class VerifyBankRequest {\n amount1: number;\n amount2: number;\n}\n","export class BitPayInvoiceRequest {\n userId: string;\n organizationId: string;\n credit: boolean;\n amount: number;\n returnUrl: string;\n name: string;\n email: string;\n}\n","import { PaymentMethodType } from '../../enums/paymentMethodType';\nimport { OrganizationTaxInfoUpdateRequest } from '../request/organizationTaxInfoUpdateRequest';\n\nexport class PaymentRequest extends OrganizationTaxInfoUpdateRequest {\n paymentMethodType: PaymentMethodType;\n paymentToken: string;\n}\n","import { PaymentMethodType } from '../../enums/paymentMethodType';\nimport { PlanType } from '../../enums/planType';\n\nexport class OrganizationCreateRequest {\n name: string;\n businessName: string;\n billingEmail: string;\n planType: PlanType;\n key: string;\n paymentMethodType: PaymentMethodType;\n paymentToken: string;\n additionalSeats: number;\n additionalStorageGb: number;\n premiumAccessAddon: boolean;\n collectionName: string;\n taxIdNumber: string;\n billingAddressLine1: string;\n billingAddressLine2: string;\n billingAddressCity: string;\n billingAddressState: string;\n billingAddressPostalCode: string;\n billingAddressCountry: string;\n}\n","import { PlanType } from '../../enums/planType';\n\nexport class OrganizationUpgradeRequest {\n businessName: string;\n planType: PlanType;\n additionalSeats: number;\n additionalStorageGb: number;\n premiumAccessAddon: boolean;\n billingAddressCountry: string;\n billingAddressPostalCode: string;\n}\n","export class SeatRequest {\n seatAdjustment: number;\n}\n","export class StorageRequest {\n storageGbAdjustment: number;\n}\n","import { PasswordVerificationRequest } from './passwordVerificationRequest';\n\nexport class UpdateTwoFactorDuoRequest extends PasswordVerificationRequest {\n integrationKey: string;\n secretKey: string;\n host: string;\n}\n","import { PasswordVerificationRequest } from './passwordVerificationRequest';\n\nimport { TwoFactorProviderType } from '../../enums/twoFactorProviderType';\n\nexport class TwoFactorProviderRequest extends PasswordVerificationRequest {\n type: TwoFactorProviderType;\n}\n","import { PasswordVerificationRequest } from './passwordVerificationRequest';\n\nexport class UpdateTwoFactorAuthenticatorRequest extends PasswordVerificationRequest {\n token: string;\n key: string;\n}\n","import { PasswordVerificationRequest } from './passwordVerificationRequest';\n\nexport class UpdateTwoFactorEmailRequest extends PasswordVerificationRequest {\n token: string;\n email: string;\n}\n","import { PasswordVerificationRequest } from './passwordVerificationRequest';\n\nexport class UpdateTwoFactorWebAuthnDeleteRequest extends PasswordVerificationRequest {\n id: number;\n}\n","import { PasswordVerificationRequest } from './passwordVerificationRequest';\n\nexport class UpdateTwoFactorWebAuthnRequest extends PasswordVerificationRequest {\n deviceResponse: PublicKeyCredential;\n name: string;\n id: number;\n}\n","import { PasswordVerificationRequest } from './passwordVerificationRequest';\n\nexport class UpdateTwoFactorYubioOtpRequest extends PasswordVerificationRequest {\n key1: string;\n key2: string;\n key3: string;\n key4: string;\n key5: string;\n nfc: boolean;\n}\n","import {\n Directive,\n EventEmitter,\n Output,\n} from '@angular/core';\n\nimport { CryptoService } from '../../abstractions/crypto.service';\nimport { EventService } from '../../abstractions/event.service';\nimport { ExportService } from '../../abstractions/export.service';\nimport { I18nService } from '../../abstractions/i18n.service';\nimport { PlatformUtilsService } from '../../abstractions/platformUtils.service';\nimport { EventType } from '../../enums/eventType';\n\n@Directive()\nexport class ExportComponent {\n @Output() onSaved = new EventEmitter();\n\n formPromise: Promise;\n masterPassword: string;\n format: 'json' | 'encrypted_json' | 'csv' = 'json';\n showPassword = false;\n\n constructor(protected cryptoService: CryptoService, protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService, protected exportService: ExportService,\n protected eventService: EventService, protected win: Window) { }\n\n get encryptedFormat() {\n return this.format === 'encrypted_json';\n }\n\n async submit() {\n if (this.masterPassword == null || this.masterPassword === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('invalidMasterPassword'));\n return;\n }\n\n const acceptedWarning = await this.warningDialog();\n if (!acceptedWarning) {\n return;\n }\n\n const keyHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n const storedKeyHash = await this.cryptoService.getKeyHash();\n if (storedKeyHash != null && keyHash != null && storedKeyHash === keyHash) {\n try {\n this.formPromise = this.getExportData();\n const data = await this.formPromise;\n this.downloadFile(data);\n this.saved();\n await this.collectEvent();\n } catch { }\n } else {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('invalidMasterPassword'));\n }\n }\n\n async warningDialog() {\n if (this.encryptedFormat) {\n return await this.platformUtilsService.showDialog(\n '

' + this.i18nService.t('encExportKeyWarningDesc') +\n '

' + this.i18nService.t('encExportAccountWarningDesc'),\n this.i18nService.t('confirmVaultExport'), this.i18nService.t('exportVault'),\n this.i18nService.t('cancel'), 'warning',\n true);\n } else {\n return await this.platformUtilsService.showDialog(\n this.i18nService.t('exportWarningDesc'),\n this.i18nService.t('confirmVaultExport'), this.i18nService.t('exportVault'),\n this.i18nService.t('cancel'), 'warning');\n }\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n document.getElementById('masterPassword').focus();\n }\n\n protected saved() {\n this.onSaved.emit();\n }\n\n protected getExportData() {\n return this.exportService.getExport(this.format);\n }\n\n protected getFileName(prefix?: string) {\n let extension = this.format;\n if (this.format === 'encrypted_json') {\n if (prefix == null) {\n prefix = 'encrypted';\n } else {\n prefix = 'encrypted_' + prefix;\n }\n extension = 'json';\n }\n return this.exportService.getFileName(prefix, extension);\n }\n\n protected async collectEvent(): Promise {\n await this.eventService.collect(EventType.User_ClientExportedVault);\n }\n\n private downloadFile(csv: string): void {\n const fileName = this.getFileName();\n this.platformUtilsService.saveFile(this.win, csv, { type: 'text/plain' }, fileName);\n }\n}\n","export class AttachmentRequest {\n fileName: string;\n key: string;\n fileSize: number;\n adminRequest: boolean;\n}\n","import {\n CdkDragDrop,\n moveItemInArray,\n} from '@angular/cdk/drag-drop';\nimport {\n Directive,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { CipherType } from '../../enums/cipherType';\nimport { EventType } from '../../enums/eventType';\nimport { FieldType } from '../../enums/fieldType';\nimport { OrganizationUserStatusType } from '../../enums/organizationUserStatusType';\nimport { PolicyType } from '../../enums/policyType';\nimport { SecureNoteType } from '../../enums/secureNoteType';\nimport { UriMatchType } from '../../enums/uriMatchType';\n\nimport { AuditService } from '../../abstractions/audit.service';\nimport { CipherService } from '../../abstractions/cipher.service';\nimport { CollectionService } from '../../abstractions/collection.service';\nimport { EventService } from '../../abstractions/event.service';\nimport { FolderService } from '../../abstractions/folder.service';\nimport { I18nService } from '../../abstractions/i18n.service';\nimport { MessagingService } from '../../abstractions/messaging.service';\nimport { PlatformUtilsService } from '../../abstractions/platformUtils.service';\nimport { PolicyService } from '../../abstractions/policy.service';\nimport { StateService } from '../../abstractions/state.service';\nimport { UserService } from '../../abstractions/user.service';\n\nimport { Cipher } from '../../models/domain/cipher';\n\nimport { CardView } from '../../models/view/cardView';\nimport { CipherView } from '../../models/view/cipherView';\nimport { CollectionView } from '../../models/view/collectionView';\nimport { FieldView } from '../../models/view/fieldView';\nimport { FolderView } from '../../models/view/folderView';\nimport { IdentityView } from '../../models/view/identityView';\nimport { LoginUriView } from '../../models/view/loginUriView';\nimport { LoginView } from '../../models/view/loginView';\nimport { SecureNoteView } from '../../models/view/secureNoteView';\n\nimport { Utils } from '../../misc/utils';\n\n@Directive()\nexport class AddEditComponent implements OnInit {\n @Input() cloneMode: boolean = false;\n @Input() folderId: string = null;\n @Input() cipherId: string;\n @Input() type: CipherType;\n @Input() collectionIds: string[];\n @Input() organizationId: string = null;\n @Output() onSavedCipher = new EventEmitter();\n @Output() onDeletedCipher = new EventEmitter();\n @Output() onRestoredCipher = new EventEmitter();\n @Output() onCancelled = new EventEmitter();\n @Output() onEditAttachments = new EventEmitter();\n @Output() onShareCipher = new EventEmitter();\n @Output() onEditCollections = new EventEmitter();\n @Output() onGeneratePassword = new EventEmitter();\n\n editMode: boolean = false;\n cipher: CipherView;\n folders: FolderView[];\n collections: CollectionView[] = [];\n title: string;\n formPromise: Promise;\n deletePromise: Promise;\n restorePromise: Promise;\n checkPasswordPromise: Promise;\n showPassword: boolean = false;\n showCardCode: boolean = false;\n cipherType = CipherType;\n fieldType = FieldType;\n addFieldType: FieldType = FieldType.Text;\n typeOptions: any[];\n cardBrandOptions: any[];\n cardExpMonthOptions: any[];\n identityTitleOptions: any[];\n addFieldTypeOptions: any[];\n uriMatchOptions: any[];\n ownershipOptions: any[] = [];\n currentDate = new Date();\n allowPersonal = true;\n\n protected writeableCollections: CollectionView[];\n private previousCipherId: string;\n\n constructor(protected cipherService: CipherService, protected folderService: FolderService,\n protected i18nService: I18nService, protected platformUtilsService: PlatformUtilsService,\n protected auditService: AuditService, protected stateService: StateService,\n protected userService: UserService, protected collectionService: CollectionService,\n protected messagingService: MessagingService, protected eventService: EventService,\n protected policyService: PolicyService) {\n this.typeOptions = [\n { name: i18nService.t('typeLogin'), value: CipherType.Login },\n { name: i18nService.t('typeCard'), value: CipherType.Card },\n { name: i18nService.t('typeIdentity'), value: CipherType.Identity },\n { name: i18nService.t('typeSecureNote'), value: CipherType.SecureNote },\n ];\n this.cardBrandOptions = [\n { name: '-- ' + i18nService.t('select') + ' --', value: null },\n { name: 'Visa', value: 'Visa' },\n { name: 'Mastercard', value: 'Mastercard' },\n { name: 'American Express', value: 'Amex' },\n { name: 'Discover', value: 'Discover' },\n { name: 'Diners Club', value: 'Diners Club' },\n { name: 'JCB', value: 'JCB' },\n { name: 'Maestro', value: 'Maestro' },\n { name: 'UnionPay', value: 'UnionPay' },\n { name: i18nService.t('other'), value: 'Other' },\n ];\n this.cardExpMonthOptions = [\n { name: '-- ' + i18nService.t('select') + ' --', value: null },\n { name: '01 - ' + i18nService.t('january'), value: '1' },\n { name: '02 - ' + i18nService.t('february'), value: '2' },\n { name: '03 - ' + i18nService.t('march'), value: '3' },\n { name: '04 - ' + i18nService.t('april'), value: '4' },\n { name: '05 - ' + i18nService.t('may'), value: '5' },\n { name: '06 - ' + i18nService.t('june'), value: '6' },\n { name: '07 - ' + i18nService.t('july'), value: '7' },\n { name: '08 - ' + i18nService.t('august'), value: '8' },\n { name: '09 - ' + i18nService.t('september'), value: '9' },\n { name: '10 - ' + i18nService.t('october'), value: '10' },\n { name: '11 - ' + i18nService.t('november'), value: '11' },\n { name: '12 - ' + i18nService.t('december'), value: '12' },\n ];\n this.identityTitleOptions = [\n { name: '-- ' + i18nService.t('select') + ' --', value: null },\n { name: i18nService.t('mr'), value: i18nService.t('mr') },\n { name: i18nService.t('mrs'), value: i18nService.t('mrs') },\n { name: i18nService.t('ms'), value: i18nService.t('ms') },\n { name: i18nService.t('dr'), value: i18nService.t('dr') },\n ];\n this.addFieldTypeOptions = [\n { name: i18nService.t('cfTypeText'), value: FieldType.Text },\n { name: i18nService.t('cfTypeHidden'), value: FieldType.Hidden },\n { name: i18nService.t('cfTypeBoolean'), value: FieldType.Boolean },\n ];\n this.uriMatchOptions = [\n { name: i18nService.t('defaultMatchDetection'), value: null },\n { name: i18nService.t('baseDomain'), value: UriMatchType.Domain },\n { name: i18nService.t('host'), value: UriMatchType.Host },\n { name: i18nService.t('startsWith'), value: UriMatchType.StartsWith },\n { name: i18nService.t('regEx'), value: UriMatchType.RegularExpression },\n { name: i18nService.t('exact'), value: UriMatchType.Exact },\n { name: i18nService.t('never'), value: UriMatchType.Never },\n ];\n }\n\n async ngOnInit() {\n await this.init();\n }\n\n async init() {\n const policies = await this.policyService.getAll(PolicyType.PersonalOwnership);\n const myEmail = await this.userService.getEmail();\n this.ownershipOptions.push({ name: myEmail, value: null });\n const orgs = await this.userService.getAllOrganizations();\n orgs.sort(Utils.getSortFunction(this.i18nService, 'name')).forEach(o => {\n if (o.enabled && o.status === OrganizationUserStatusType.Confirmed) {\n this.ownershipOptions.push({ name: o.name, value: o.id });\n if (policies != null && o.usePolicies && !o.canManagePolicies && this.allowPersonal) {\n for (const policy of policies) {\n if (policy.organizationId === o.id && policy.enabled) {\n this.allowPersonal = false;\n this.ownershipOptions.splice(0, 1);\n // Default to the organization who owns this policy for now (if necessary)\n if (this.organizationId == null) {\n this.organizationId = o.id;\n }\n break;\n }\n }\n }\n }\n });\n this.writeableCollections = await this.loadCollections();\n }\n\n async load() {\n this.editMode = this.cipherId != null;\n if (this.editMode) {\n this.editMode = true;\n if (this.cloneMode) {\n this.cloneMode = true;\n this.title = this.i18nService.t('addItem');\n } else {\n this.title = this.i18nService.t('editItem');\n }\n } else {\n this.title = this.i18nService.t('addItem');\n }\n\n const addEditCipherInfo: any = await this.stateService.get('addEditCipherInfo');\n if (addEditCipherInfo != null) {\n this.cipher = addEditCipherInfo.cipher;\n this.collectionIds = addEditCipherInfo.collectionIds;\n }\n await this.stateService.remove('addEditCipherInfo');\n\n if (this.cipher == null) {\n if (this.editMode) {\n const cipher = await this.loadCipher();\n this.cipher = await cipher.decrypt();\n\n // Adjust Cipher Name if Cloning\n if (this.cloneMode) {\n this.cipher.name += ' - ' + this.i18nService.t('clone');\n // If not allowing personal ownership, update cipher's org Id to prompt downstream changes\n if (this.cipher.organizationId == null && !this.allowPersonal) {\n this.cipher.organizationId = this.organizationId;\n }\n }\n } else {\n this.cipher = new CipherView();\n this.cipher.organizationId = this.organizationId == null ? null : this.organizationId;\n this.cipher.folderId = this.folderId;\n this.cipher.type = this.type == null ? CipherType.Login : this.type;\n this.cipher.login = new LoginView();\n this.cipher.login.uris = [new LoginUriView()];\n this.cipher.card = new CardView();\n this.cipher.identity = new IdentityView();\n this.cipher.secureNote = new SecureNoteView();\n this.cipher.secureNote.type = SecureNoteType.Generic;\n }\n }\n\n if (this.cipher != null && (!this.editMode || addEditCipherInfo != null || this.cloneMode)) {\n await this.organizationChanged();\n if (this.collectionIds != null && this.collectionIds.length > 0 && this.collections.length > 0) {\n this.collections.forEach(c => {\n if (this.collectionIds.indexOf(c.id) > -1) {\n (c as any).checked = true;\n }\n });\n }\n }\n\n this.folders = await this.folderService.getAllDecrypted();\n\n if (this.editMode && this.previousCipherId !== this.cipherId) {\n this.eventService.collect(EventType.Cipher_ClientViewed, this.cipherId);\n }\n this.previousCipherId = this.cipherId;\n }\n\n async submit(): Promise {\n if (this.cipher.isDeleted) {\n return this.restore();\n }\n\n if (this.cipher.name == null || this.cipher.name === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('nameRequired'));\n return false;\n }\n\n if ((!this.editMode || this.cloneMode) && !this.allowPersonal && this.cipher.organizationId == null) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('personalOwnershipSubmitError'));\n return false;\n }\n\n if ((!this.editMode || this.cloneMode) && this.cipher.type === CipherType.Login &&\n this.cipher.login.uris != null && this.cipher.login.uris.length === 1 &&\n (this.cipher.login.uris[0].uri == null || this.cipher.login.uris[0].uri === '')) {\n this.cipher.login.uris = null;\n }\n\n // Allows saving of selected collections during \"Add\" and \"Clone\" flows\n if ((!this.editMode || this.cloneMode) && this.cipher.organizationId != null) {\n this.cipher.collectionIds = this.collections == null ? [] :\n this.collections.filter(c => (c as any).checked).map(c => c.id);\n }\n\n // Clear current Cipher Id to trigger \"Add\" cipher flow\n if (this.cloneMode) {\n this.cipher.id = null;\n }\n\n const cipher = await this.encryptCipher();\n try {\n this.formPromise = this.saveCipher(cipher);\n await this.formPromise;\n this.cipher.id = cipher.id;\n this.platformUtilsService.showToast('success', null,\n this.i18nService.t(this.editMode && !this.cloneMode ? 'editedItem' : 'addedItem'));\n this.onSavedCipher.emit(this.cipher);\n this.messagingService.send(this.editMode && !this.cloneMode ? 'editedCipher' : 'addedCipher');\n return true;\n } catch { }\n\n return false;\n }\n\n addUri() {\n if (this.cipher.type !== CipherType.Login) {\n return;\n }\n\n if (this.cipher.login.uris == null) {\n this.cipher.login.uris = [];\n }\n\n this.cipher.login.uris.push(new LoginUriView());\n }\n\n removeUri(uri: LoginUriView) {\n if (this.cipher.type !== CipherType.Login || this.cipher.login.uris == null) {\n return;\n }\n\n const i = this.cipher.login.uris.indexOf(uri);\n if (i > -1) {\n this.cipher.login.uris.splice(i, 1);\n }\n }\n\n addField() {\n if (this.cipher.fields == null) {\n this.cipher.fields = [];\n }\n\n const f = new FieldView();\n f.type = this.addFieldType;\n f.newField = true;\n this.cipher.fields.push(f);\n }\n\n removeField(field: FieldView) {\n const i = this.cipher.fields.indexOf(field);\n if (i > -1) {\n this.cipher.fields.splice(i, 1);\n }\n }\n\n trackByFunction(index: number, item: any) {\n return index;\n }\n\n cancel() {\n this.onCancelled.emit(this.cipher);\n }\n\n attachments() {\n this.onEditAttachments.emit(this.cipher);\n }\n\n share() {\n this.onShareCipher.emit(this.cipher);\n }\n\n editCollections() {\n this.onEditCollections.emit(this.cipher);\n }\n\n async delete(): Promise {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(this.cipher.isDeleted ? 'permanentlyDeleteItemConfirmation' : 'deleteItemConfirmation'),\n this.i18nService.t('deleteItem'), this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.deleteCipher();\n await this.deletePromise;\n this.platformUtilsService.showToast('success', null,\n this.i18nService.t(this.cipher.isDeleted ? 'permanentlyDeletedItem' : 'deletedItem'));\n this.onDeletedCipher.emit(this.cipher);\n this.messagingService.send(this.cipher.isDeleted ? 'permanentlyDeletedCipher' : 'deletedCipher');\n } catch { }\n\n return true;\n }\n\n async restore(): Promise {\n if (!this.cipher.isDeleted) {\n return false;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('restoreItemConfirmation'), this.i18nService.t('restoreItem'),\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.restorePromise = this.restoreCipher();\n await this.restorePromise;\n this.platformUtilsService.showToast('success', null, this.i18nService.t('restoredItem'));\n this.onRestoredCipher.emit(this.cipher);\n this.messagingService.send('restoredCipher');\n } catch { }\n\n return true;\n }\n\n async generatePassword(): Promise {\n if (this.cipher.login != null && this.cipher.login.password != null && this.cipher.login.password.length) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('overwritePasswordConfirmation'), this.i18nService.t('overwritePassword'),\n this.i18nService.t('yes'), this.i18nService.t('no'));\n if (!confirmed) {\n return false;\n }\n }\n\n this.onGeneratePassword.emit();\n return true;\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n document.getElementById('loginPassword').focus();\n if (this.editMode && this.showPassword) {\n this.eventService.collect(EventType.Cipher_ClientToggledPasswordVisible, this.cipherId);\n }\n }\n\n toggleCardCode() {\n this.showCardCode = !this.showCardCode;\n document.getElementById('cardCode').focus();\n if (this.editMode && this.showCardCode) {\n this.eventService.collect(EventType.Cipher_ClientToggledCardCodeVisible, this.cipherId);\n }\n }\n\n toggleFieldValue(field: FieldView) {\n const f = (field as any);\n f.showValue = !f.showValue;\n if (this.editMode && f.showValue) {\n this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, this.cipherId);\n }\n }\n\n toggleUriOptions(uri: LoginUriView) {\n const u = (uri as any);\n u.showOptions = u.showOptions == null && uri.match != null ? false : !u.showOptions;\n }\n\n loginUriMatchChanged(uri: LoginUriView) {\n const u = (uri as any);\n u.showOptions = u.showOptions == null ? true : u.showOptions;\n }\n\n drop(event: CdkDragDrop) {\n moveItemInArray(this.cipher.fields, event.previousIndex, event.currentIndex);\n }\n\n async organizationChanged() {\n if (this.writeableCollections != null) {\n this.writeableCollections.forEach(c => (c as any).checked = false);\n }\n if (this.cipher.organizationId != null) {\n this.collections = this.writeableCollections.filter(c => c.organizationId === this.cipher.organizationId);\n const org = await this.userService.getOrganization(this.cipher.organizationId);\n if (org != null) {\n this.cipher.organizationUseTotp = org.useTotp;\n }\n } else {\n this.collections = [];\n }\n }\n\n async checkPassword() {\n if (this.checkPasswordPromise != null) {\n return;\n }\n\n if (this.cipher.login == null || this.cipher.login.password == null || this.cipher.login.password === '') {\n return;\n }\n\n this.checkPasswordPromise = this.auditService.passwordLeaked(this.cipher.login.password);\n const matches = await this.checkPasswordPromise;\n this.checkPasswordPromise = null;\n\n if (matches > 0) {\n this.platformUtilsService.showToast('warning', null,\n this.i18nService.t('passwordExposed', matches.toString()));\n } else {\n this.platformUtilsService.showToast('success', null, this.i18nService.t('passwordSafe'));\n }\n }\n\n protected async loadCollections() {\n const allCollections = await this.collectionService.getAllDecrypted();\n return allCollections.filter(c => !c.readOnly);\n }\n\n protected loadCipher() {\n return this.cipherService.get(this.cipherId);\n }\n\n protected encryptCipher() {\n return this.cipherService.encrypt(this.cipher);\n }\n\n protected saveCipher(cipher: Cipher) {\n return this.cipherService.saveWithServer(cipher);\n }\n\n protected deleteCipher() {\n return this.cipher.isDeleted ? this.cipherService.deleteWithServer(this.cipher.id)\n : this.cipherService.softDeleteWithServer(this.cipher.id);\n }\n\n protected restoreCipher() {\n return this.cipherService.restoreWithServer(this.cipher.id);\n }\n}\n","export { AttachmentResponse } from './attachmentResponse';\nexport { CipherResponse } from './cipherResponse';\nexport { CollectionResponse } from './collectionResponse';\nexport { DeviceResponse } from './deviceResponse';\nexport { DomainsResponse } from './domainsResponse';\nexport { ErrorResponse } from './errorResponse';\nexport { FolderResponse } from './folderResponse';\nexport { GlobalDomainResponse } from './globalDomainResponse';\nexport { IdentityTokenResponse } from './identityTokenResponse';\nexport { IdentityTwoFactorResponse } from './identityTwoFactorResponse';\nexport { KeysResponse } from './keysResponse';\nexport { ListResponse } from './listResponse';\nexport { ProfileOrganizationResponse } from './profileOrganizationResponse';\nexport { ProfileResponse } from './profileResponse';\nexport { SyncResponse } from './syncResponse';\n","import { BaseResponse } from './baseResponse';\n\nexport class PasswordHistoryResponse extends BaseResponse {\n password: string;\n lastUsedDate: string;\n\n constructor(response: any) {\n super(response);\n this.password = this.getResponseProperty('Password');\n this.lastUsedDate = this.getResponseProperty('LastUsedDate');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { DeviceType } from '../../enums/deviceType';\n\nexport class DeviceResponse extends BaseResponse {\n id: string;\n name: number;\n identifier: string;\n type: DeviceType;\n creationDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.name = this.getResponseProperty('Name');\n this.identifier = this.getResponseProperty('Identifier');\n this.type = this.getResponseProperty('Type');\n this.creationDate = this.getResponseProperty('CreationDate');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class KeysResponse extends BaseResponse {\n privateKey: string;\n publicKey: string;\n\n constructor(response: any) {\n super(response);\n this.privateKey = this.getResponseProperty('PrivateKey');\n this.publicKey = this.getResponseProperty('PublicKey');\n }\n}\n","import {\n Directive,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\n\nimport { SearchService } from '../../abstractions/search.service';\n\nimport { CipherView } from '../../models/view/cipherView';\n\n@Directive()\nexport class CiphersComponent {\n @Input() activeCipherId: string = null;\n @Output() onCipherClicked = new EventEmitter();\n @Output() onCipherRightClicked = new EventEmitter();\n @Output() onAddCipher = new EventEmitter();\n @Output() onAddCipherOptions = new EventEmitter();\n\n loaded: boolean = false;\n ciphers: CipherView[] = [];\n pagedCiphers: CipherView[] = [];\n searchText: string;\n searchPlaceholder: string = null;\n filter: (cipher: CipherView) => boolean = null;\n deleted: boolean = false;\n\n protected searchPending = false;\n protected didScroll = false;\n protected pageSize = 100;\n\n private searchTimeout: any = null;\n private pagedCiphersCount = 0;\n private refreshing = false;\n\n constructor(protected searchService: SearchService) { }\n\n async load(filter: (cipher: CipherView) => boolean = null, deleted: boolean = false) {\n this.deleted = deleted || false;\n await this.applyFilter(filter);\n this.loaded = true;\n }\n\n loadMore() {\n if (this.ciphers.length <= this.pageSize) {\n return;\n }\n const pagedLength = this.pagedCiphers.length;\n let pagedSize = this.pageSize;\n if (this.refreshing && pagedLength === 0 && this.pagedCiphersCount > this.pageSize) {\n pagedSize = this.pagedCiphersCount;\n }\n if (this.ciphers.length > pagedLength) {\n this.pagedCiphers = this.pagedCiphers.concat(this.ciphers.slice(pagedLength, pagedLength + pagedSize));\n }\n this.pagedCiphersCount = this.pagedCiphers.length;\n this.didScroll = this.pagedCiphers.length > this.pageSize;\n }\n\n async reload(filter: (cipher: CipherView) => boolean = null, deleted: boolean = false) {\n this.loaded = false;\n this.ciphers = [];\n await this.load(filter, deleted);\n }\n\n async refresh() {\n try {\n this.refreshing = true;\n await this.reload(this.filter, this.deleted);\n } finally {\n this.refreshing = false;\n }\n }\n\n async applyFilter(filter: (cipher: CipherView) => boolean = null) {\n this.filter = filter;\n await this.search(null);\n }\n\n async search(timeout: number = null, indexedCiphers?: CipherView[]) {\n this.searchPending = false;\n if (this.searchTimeout != null) {\n clearTimeout(this.searchTimeout);\n }\n const deletedFilter: (cipher: CipherView) => boolean = c => c.isDeleted === this.deleted;\n if (timeout == null) {\n this.ciphers = await this.searchService.searchCiphers(this.searchText, [this.filter, deletedFilter], indexedCiphers);\n await this.resetPaging();\n return;\n }\n this.searchPending = true;\n this.searchTimeout = setTimeout(async () => {\n this.ciphers = await this.searchService.searchCiphers(this.searchText, [this.filter, deletedFilter], indexedCiphers);\n await this.resetPaging();\n this.searchPending = false;\n }, timeout);\n }\n\n selectCipher(cipher: CipherView) {\n this.onCipherClicked.emit(cipher);\n }\n\n rightClickCipher(cipher: CipherView) {\n this.onCipherRightClicked.emit(cipher);\n }\n\n addCipher() {\n this.onAddCipher.emit();\n }\n\n addCipherOptions() {\n this.onAddCipherOptions.emit();\n }\n\n isSearching() {\n return !this.searchPending && this.searchService.isSearchable(this.searchText);\n }\n\n isPaging() {\n const searching = this.isSearching();\n if (searching && this.didScroll) {\n this.resetPaging();\n }\n return !searching && this.ciphers.length > this.pageSize;\n }\n\n async resetPaging() {\n this.pagedCiphers = [];\n this.loadMore();\n }\n}\n","import {\n Directive,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { CipherService } from '../../abstractions/cipher.service';\nimport { CollectionService } from '../../abstractions/collection.service';\nimport { I18nService } from '../../abstractions/i18n.service';\nimport { PlatformUtilsService } from '../../abstractions/platformUtils.service';\n\nimport { CipherView } from '../../models/view/cipherView';\nimport { CollectionView } from '../../models/view/collectionView';\n\nimport { Cipher } from '../../models/domain/cipher';\n\n@Directive()\nexport class CollectionsComponent implements OnInit {\n @Input() cipherId: string;\n @Input() allowSelectNone = false;\n @Output() onSavedCollections = new EventEmitter();\n\n formPromise: Promise;\n cipher: CipherView;\n collectionIds: string[];\n collections: CollectionView[] = [];\n\n protected cipherDomain: Cipher;\n\n constructor(protected collectionService: CollectionService, protected platformUtilsService: PlatformUtilsService,\n protected i18nService: I18nService, protected cipherService: CipherService) { }\n\n async ngOnInit() {\n await this.load();\n }\n\n async load() {\n this.cipherDomain = await this.loadCipher();\n this.collectionIds = this.loadCipherCollections();\n this.cipher = await this.cipherDomain.decrypt();\n this.collections = await this.loadCollections();\n\n this.collections.forEach(c => (c as any).checked = false);\n if (this.collectionIds != null) {\n this.collections.forEach(c => {\n (c as any).checked = this.collectionIds != null && this.collectionIds.indexOf(c.id) > -1;\n });\n }\n }\n\n async submit() {\n const selectedCollectionIds = this.collections\n .filter(c => !!(c as any).checked)\n .map(c => c.id);\n if (!this.allowSelectNone && selectedCollectionIds.length === 0) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('selectOneCollection'));\n return;\n }\n this.cipherDomain.collectionIds = selectedCollectionIds;\n try {\n this.formPromise = this.saveCollections();\n await this.formPromise;\n this.onSavedCollections.emit();\n this.platformUtilsService.showToast('success', null, this.i18nService.t('editedItem'));\n } catch { }\n }\n\n protected loadCipher() {\n return this.cipherService.get(this.cipherId);\n }\n\n protected loadCipherCollections() {\n return this.cipherDomain.collectionIds;\n }\n\n protected async loadCollections() {\n const allCollections = await this.collectionService.getAllDecrypted();\n return allCollections.filter(c => !c.readOnly && c.organizationId === this.cipher.organizationId);\n }\n\n protected saveCollections() {\n return this.cipherService.saveCollectionsWithServer(this.cipherDomain);\n }\n}\n","import {\n Directive,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\n\nimport { CipherType } from '../../enums/cipherType';\n\nimport { CollectionView } from '../../models/view/collectionView';\nimport { FolderView } from '../../models/view/folderView';\n\nimport { TreeNode } from '../../models/domain/treeNode';\n\nimport { CollectionService } from '../../abstractions/collection.service';\nimport { FolderService } from '../../abstractions/folder.service';\nimport { StorageService } from '../../abstractions/storage.service';\nimport { UserService } from '../../abstractions/user.service';\n\nimport { ConstantsService } from '../../services/constants.service';\n\n@Directive()\nexport class GroupingsComponent {\n @Input() showFolders = true;\n @Input() showCollections = true;\n @Input() showFavorites = true;\n @Input() showTrash = true;\n\n @Output() onAllClicked = new EventEmitter();\n @Output() onFavoritesClicked = new EventEmitter();\n @Output() onTrashClicked = new EventEmitter();\n @Output() onCipherTypeClicked = new EventEmitter();\n @Output() onFolderClicked = new EventEmitter();\n @Output() onAddFolder = new EventEmitter();\n @Output() onEditFolder = new EventEmitter();\n @Output() onCollectionClicked = new EventEmitter();\n\n folders: FolderView[];\n nestedFolders: TreeNode[];\n collections: CollectionView[];\n nestedCollections: TreeNode[];\n loaded: boolean = false;\n cipherType = CipherType;\n selectedAll: boolean = false;\n selectedFavorites: boolean = false;\n selectedTrash: boolean = false;\n selectedType: CipherType = null;\n selectedFolder: boolean = false;\n selectedFolderId: string = null;\n selectedCollectionId: string = null;\n\n private collapsedGroupings: Set;\n private collapsedGroupingsKey: string;\n\n constructor(protected collectionService: CollectionService, protected folderService: FolderService,\n protected storageService: StorageService, protected userService: UserService) { }\n\n async load(setLoaded = true) {\n const userId = await this.userService.getUserId();\n this.collapsedGroupingsKey = ConstantsService.collapsedGroupingsKey + '_' + userId;\n const collapsedGroupings = await this.storageService.get(this.collapsedGroupingsKey);\n if (collapsedGroupings == null) {\n this.collapsedGroupings = new Set();\n } else {\n this.collapsedGroupings = new Set(collapsedGroupings);\n }\n\n await this.loadFolders();\n await this.loadCollections();\n\n if (setLoaded) {\n this.loaded = true;\n }\n }\n\n async loadCollections(organizationId?: string) {\n if (!this.showCollections) {\n return;\n }\n const collections = await this.collectionService.getAllDecrypted();\n if (organizationId != null) {\n this.collections = collections.filter(c => c.organizationId === organizationId);\n } else {\n this.collections = collections;\n }\n this.nestedCollections = await this.collectionService.getAllNested(this.collections);\n }\n\n async loadFolders() {\n if (!this.showFolders) {\n return;\n }\n this.folders = await this.folderService.getAllDecrypted();\n this.nestedFolders = await this.folderService.getAllNested();\n }\n\n selectAll() {\n this.clearSelections();\n this.selectedAll = true;\n this.onAllClicked.emit();\n }\n\n selectFavorites() {\n this.clearSelections();\n this.selectedFavorites = true;\n this.onFavoritesClicked.emit();\n }\n\n selectTrash() {\n this.clearSelections();\n this.selectedTrash = true;\n this.onTrashClicked.emit();\n }\n\n selectType(type: CipherType) {\n this.clearSelections();\n this.selectedType = type;\n this.onCipherTypeClicked.emit(type);\n }\n\n selectFolder(folder: FolderView) {\n this.clearSelections();\n this.selectedFolder = true;\n this.selectedFolderId = folder.id;\n this.onFolderClicked.emit(folder);\n }\n\n addFolder() {\n this.onAddFolder.emit();\n }\n\n editFolder(folder: FolderView) {\n this.onEditFolder.emit(folder);\n }\n\n selectCollection(collection: CollectionView) {\n this.clearSelections();\n this.selectedCollectionId = collection.id;\n this.onCollectionClicked.emit(collection);\n }\n\n clearSelections() {\n this.selectedAll = false;\n this.selectedFavorites = false;\n this.selectedTrash = false;\n this.selectedType = null;\n this.selectedFolder = false;\n this.selectedFolderId = null;\n this.selectedCollectionId = null;\n }\n\n collapse(grouping: FolderView | CollectionView, idPrefix = '') {\n if (grouping.id == null) {\n return;\n }\n const id = idPrefix + grouping.id;\n if (this.isCollapsed(grouping, idPrefix)) {\n this.collapsedGroupings.delete(id);\n } else {\n this.collapsedGroupings.add(id);\n }\n this.storageService.save(this.collapsedGroupingsKey, this.collapsedGroupings);\n }\n\n isCollapsed(grouping: FolderView | CollectionView, idPrefix = '') {\n return this.collapsedGroupings.has(idPrefix + grouping.id);\n }\n}\n","import { SendType } from '../../enums/sendType';\n\nimport { SendAccessResponse } from '../response/sendAccessResponse';\n\nimport { SendAccessView } from '../view/sendAccessView';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\nimport { SendFile } from './sendFile';\nimport { SendText } from './sendText';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class SendAccess extends Domain {\n id: string;\n type: SendType;\n name: EncString;\n file: SendFile;\n text: SendText;\n expirationDate: Date;\n creatorIdentifier: string;\n\n constructor(obj?: SendAccessResponse, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(this, obj, {\n id: null,\n name: null,\n expirationDate: null,\n creatorIdentifier: null,\n }, alreadyEncrypted, ['id', 'expirationDate', 'creatorIdentifier']);\n\n this.type = obj.type;\n\n switch (this.type) {\n case SendType.Text:\n this.text = new SendText(obj.text, alreadyEncrypted);\n break;\n case SendType.File:\n this.file = new SendFile(obj.file, alreadyEncrypted);\n break;\n default:\n break;\n }\n }\n\n async decrypt(key: SymmetricCryptoKey): Promise {\n const model = new SendAccessView(this);\n\n await this.decryptObj(model, {\n name: null,\n }, null, key);\n\n switch (this.type) {\n case SendType.File:\n model.file = await this.file.decrypt(key);\n break;\n case SendType.Text:\n model.text = await this.text.decrypt(key);\n break;\n default:\n break;\n }\n\n return model;\n }\n}\n","import { SendType } from '../../enums/sendType';\n\nimport { SendAccess } from '../domain/sendAccess';\n\nimport { SendFileView } from './sendFileView';\nimport { SendTextView } from './sendTextView';\nimport { View } from './view';\n\nexport class SendAccessView implements View {\n id: string = null;\n name: string = null;\n type: SendType = null;\n text = new SendTextView();\n file = new SendFileView();\n expirationDate: Date = null;\n creatorIdentifier: string = null;\n\n constructor(s?: SendAccess) {\n if (!s) {\n return;\n }\n\n this.id = s.id;\n this.type = s.type;\n this.expirationDate = s.expirationDate;\n this.creatorIdentifier = s.creatorIdentifier;\n }\n}\n","export class SendAccessRequest {\n password: string;\n}\n","import {\n NgZone,\n OnInit,\n} from '@angular/core';\n\nimport { OrganizationUserStatusType } from '../../../enums/organizationUserStatusType';\nimport { PolicyType } from '../../../enums/policyType';\nimport { SendType } from '../../../enums/sendType';\n\nimport { SendView } from '../../../models/view/sendView';\n\nimport { EnvironmentService } from '../../../abstractions/environment.service';\nimport { I18nService } from '../../../abstractions/i18n.service';\nimport { PlatformUtilsService } from '../../../abstractions/platformUtils.service';\nimport { PolicyService } from '../../../abstractions/policy.service';\nimport { SearchService } from '../../../abstractions/search.service';\nimport { SendService } from '../../../abstractions/send.service';\nimport { UserService } from '../../../abstractions/user.service';\n\nexport class SendComponent implements OnInit {\n\n disableSend = false;\n sendType = SendType;\n loaded = false;\n loading = true;\n refreshing = false;\n expired: boolean = false;\n type: SendType = null;\n sends: SendView[] = [];\n filteredSends: SendView[] = [];\n searchText: string;\n selectedType: SendType;\n selectedAll: boolean;\n searchPlaceholder: string;\n filter: (cipher: SendView) => boolean;\n searchPending = false;\n hasSearched = false; // search() function called - returns true if text qualifies for search\n\n actionPromise: any;\n onSuccessfulRemovePassword: () => Promise;\n onSuccessfulDelete: () => Promise;\n onSuccessfulLoad: () => Promise;\n\n private searchTimeout: any;\n\n constructor(protected sendService: SendService, protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService, protected environmentService: EnvironmentService,\n protected ngZone: NgZone, protected searchService: SearchService,\n protected policyService: PolicyService, protected userService: UserService) { }\n\n async ngOnInit() {\n const policies = await this.policyService.getAll(PolicyType.DisableSend);\n const organizations = await this.userService.getAllOrganizations();\n this.disableSend = organizations.some(o => {\n return o.enabled &&\n o.status === OrganizationUserStatusType.Confirmed &&\n o.usePolicies &&\n !o.canManagePolicies &&\n policies.some(p => p.organizationId === o.id && p.enabled);\n });\n }\n\n async load(filter: (send: SendView) => boolean = null) {\n this.loading = true;\n const sends = await this.sendService.getAllDecrypted();\n this.sends = sends;\n if (this.onSuccessfulLoad != null) {\n await this.onSuccessfulLoad();\n } else {\n // Default action\n this.selectAll();\n }\n this.loading = false;\n this.loaded = true;\n }\n\n async reload(filter: (send: SendView) => boolean = null) {\n this.loaded = false;\n this.sends = [];\n await this.load(filter);\n }\n\n async refresh() {\n try {\n this.refreshing = true;\n await this.reload(this.filter);\n } finally {\n this.refreshing = false;\n }\n }\n\n async applyFilter(filter: (send: SendView) => boolean = null) {\n this.filter = filter;\n await this.search(null);\n }\n\n async search(timeout: number = null) {\n this.searchPending = false;\n if (this.searchTimeout != null) {\n clearTimeout(this.searchTimeout);\n }\n if (timeout == null) {\n this.hasSearched = this.searchService.isSearchable(this.searchText);\n this.filteredSends = this.sends.filter(s => this.filter == null || this.filter(s));\n this.applyTextSearch();\n return;\n }\n this.searchPending = true;\n this.searchTimeout = setTimeout(async () => {\n this.hasSearched = this.searchService.isSearchable(this.searchText);\n this.filteredSends = this.sends.filter(s => this.filter == null || this.filter(s));\n this.applyTextSearch();\n this.searchPending = false;\n }, timeout);\n }\n\n async removePassword(s: SendView): Promise {\n if (this.actionPromise != null || s.password == null) {\n return;\n }\n const confirmed = await this.platformUtilsService.showDialog(this.i18nService.t('removePasswordConfirmation'),\n this.i18nService.t('removePassword'),\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.sendService.removePasswordWithServer(s.id);\n await this.actionPromise;\n if (this.onSuccessfulRemovePassword != null) {\n this.onSuccessfulRemovePassword();\n } else {\n // Default actions\n this.platformUtilsService.showToast('success', null, this.i18nService.t('removedPassword'));\n await this.load();\n }\n } catch { }\n this.actionPromise = null;\n }\n\n async delete(s: SendView): Promise {\n if (this.actionPromise != null) {\n return false;\n }\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('deleteSendConfirmation'),\n this.i18nService.t('deleteSend'),\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.sendService.deleteWithServer(s.id);\n await this.actionPromise;\n\n if (this.onSuccessfulDelete != null) {\n this.onSuccessfulDelete();\n } else {\n // Default actions\n this.platformUtilsService.showToast('success', null, this.i18nService.t('deletedSend'));\n await this.refresh();\n }\n } catch { }\n this.actionPromise = null;\n return true;\n }\n\n copy(s: SendView) {\n let sendLinkBaseUrl = 'https://send.bitwarden.com/#';\n const webVaultUrl = this.environmentService.getWebVaultUrl();\n if (webVaultUrl != null) {\n sendLinkBaseUrl = webVaultUrl + '/#/send/';\n }\n const link = sendLinkBaseUrl + s.accessId + '/' + s.urlB64Key;\n this.platformUtilsService.copyToClipboard(link);\n this.platformUtilsService.showToast('success', null,\n this.i18nService.t('valueCopied', this.i18nService.t('sendLink')));\n }\n\n searchTextChanged() {\n this.search(200);\n }\n\n selectAll() {\n this.clearSelections();\n this.selectedAll = true;\n this.applyFilter(null);\n }\n\n selectType(type: SendType) {\n this.clearSelections();\n this.selectedType = type;\n this.applyFilter(s => s.type === type);\n }\n\n clearSelections() {\n this.selectedAll = false;\n this.selectedType = null;\n }\n\n private applyTextSearch() {\n if (this.searchText != null) {\n this.filteredSends = this.searchService.searchSends(this.filteredSends, this.searchText);\n }\n }\n}\n","import { DatePipe } from '@angular/common';\n\nimport {\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { OrganizationUserStatusType } from '../../../enums/organizationUserStatusType';\nimport { PolicyType } from '../../../enums/policyType';\nimport { SendType } from '../../../enums/sendType';\n\nimport { EnvironmentService } from '../../../abstractions/environment.service';\nimport { I18nService } from '../../../abstractions/i18n.service';\nimport { MessagingService } from '../../../abstractions/messaging.service';\nimport { PlatformUtilsService } from '../../../abstractions/platformUtils.service';\nimport { PolicyService } from '../../../abstractions/policy.service';\nimport { SendService } from '../../../abstractions/send.service';\nimport { UserService } from '../../../abstractions/user.service';\n\nimport { SendFileView } from '../../../models/view/sendFileView';\nimport { SendTextView } from '../../../models/view/sendTextView';\nimport { SendView } from '../../../models/view/sendView';\n\nimport { EncArrayBuffer } from '../../../models/domain/encArrayBuffer';\nimport { Send } from '../../../models/domain/send';\n\n// TimeOption is used for the dropdown implementation of custom times\n// Standard = displayed time; Military = stored time\ninterface TimeOption {\n standard: string;\n military: string;\n}\n\nenum DateField {\n DeletionDate = 'deletion',\n ExpriationDate = 'expiration',\n}\n\nexport class AddEditComponent implements OnInit {\n @Input() sendId: string;\n @Input() type: SendType;\n\n @Output() onSavedSend = new EventEmitter();\n @Output() onDeletedSend = new EventEmitter();\n @Output() onCancelled = new EventEmitter();\n\n copyLink = false;\n disableSend = false;\n disableHideEmail = false;\n send: SendView;\n deletionDate: string;\n deletionDateFallback: string;\n deletionTimeFallback: string;\n expirationDate: string = null;\n expirationDateFallback: string;\n expirationTimeFallback: string;\n hasPassword: boolean;\n password: string;\n showPassword = false;\n formPromise: Promise;\n deletePromise: Promise;\n sendType = SendType;\n typeOptions: any[];\n deletionDateOptions: any[];\n expirationDateOptions: any[];\n deletionDateSelect = 168;\n expirationDateSelect: number = null;\n canAccessPremium = true;\n emailVerified = true;\n alertShown = false;\n showOptions = false;\n\n safariDeletionTime: string;\n safariExpirationTime: string;\n safariDeletionTimeOptions: TimeOption[];\n safariExpirationTimeOptions: TimeOption[];\n\n private sendLinkBaseUrl: string;\n\n constructor(protected i18nService: I18nService, protected platformUtilsService: PlatformUtilsService,\n protected environmentService: EnvironmentService, protected datePipe: DatePipe,\n protected sendService: SendService, protected userService: UserService,\n protected messagingService: MessagingService, protected policyService: PolicyService) {\n this.typeOptions = [\n { name: i18nService.t('sendTypeFile'), value: SendType.File },\n { name: i18nService.t('sendTypeText'), value: SendType.Text },\n ];\n this.deletionDateOptions = this.expirationDateOptions = [\n { name: i18nService.t('oneHour'), value: 1 },\n { name: i18nService.t('oneDay'), value: 24 },\n { name: i18nService.t('days', '2'), value: 48 },\n { name: i18nService.t('days', '3'), value: 72 },\n { name: i18nService.t('days', '7'), value: 168 },\n { name: i18nService.t('days', '30'), value: 720 },\n { name: i18nService.t('custom'), value: 0 },\n ];\n this.expirationDateOptions = [\n { name: i18nService.t('never'), value: null },\n ].concat([...this.deletionDateOptions]);\n\n const webVaultUrl = this.environmentService.getWebVaultUrl();\n if (webVaultUrl == null) {\n this.sendLinkBaseUrl = 'https://send.bitwarden.com/#';\n } else {\n this.sendLinkBaseUrl = webVaultUrl + '/#/send/';\n }\n }\n\n get link(): string {\n if (this.send.id != null && this.send.accessId != null) {\n return this.sendLinkBaseUrl + this.send.accessId + '/' + this.send.urlB64Key;\n }\n return null;\n }\n\n get isSafari() {\n return this.platformUtilsService.isSafari();\n }\n\n get isDateTimeLocalSupported(): boolean {\n return !(this.platformUtilsService.isFirefox() || this.platformUtilsService.isSafari());\n }\n\n async ngOnInit() {\n await this.load();\n }\n\n get editMode(): boolean {\n return this.sendId != null;\n }\n\n get title(): string {\n return this.i18nService.t(\n this.editMode ?\n 'editSend' :\n 'createSend'\n );\n }\n\n get expirationDateTimeFallback() {\n return this.nullOrWhiteSpaceCount([this.expirationDateFallback, this.expirationTimeFallback]) > 0 ?\n null :\n `${this.formatDateFallbacks(this.expirationDateFallback)}T${this.expirationTimeFallback}`;\n }\n\n get deletionDateTimeFallback() {\n return this.nullOrWhiteSpaceCount([this.deletionDateFallback, this.deletionTimeFallback]) > 0 ?\n null :\n `${this.formatDateFallbacks(this.deletionDateFallback)}T${this.deletionTimeFallback}`;\n }\n\n async load() {\n const disableSendPolicies = await this.policyService.getAll(PolicyType.DisableSend);\n const organizations = await this.userService.getAllOrganizations();\n this.disableSend = organizations.some(o => {\n return o.enabled &&\n o.status === OrganizationUserStatusType.Confirmed &&\n o.usePolicies &&\n !o.canManagePolicies &&\n disableSendPolicies.some(p => p.organizationId === o.id && p.enabled);\n });\n\n const sendOptionsPolicies = await this.policyService.getAll(PolicyType.SendOptions);\n this.disableHideEmail = await organizations.some(o => {\n return o.enabled &&\n o.status === OrganizationUserStatusType.Confirmed &&\n o.usePolicies &&\n !o.canManagePolicies &&\n sendOptionsPolicies.some(p => p.organizationId === o.id && p.enabled && p.data.disableHideEmail);\n });\n\n this.canAccessPremium = await this.userService.canAccessPremium();\n this.emailVerified = await this.userService.getEmailVerified();\n if (!this.canAccessPremium || !this.emailVerified) {\n this.type = SendType.Text;\n }\n\n if (this.send == null) {\n if (this.editMode) {\n const send = await this.loadSend();\n this.send = await send.decrypt();\n } else {\n this.send = new SendView();\n this.send.type = this.type == null ? SendType.File : this.type;\n this.send.file = new SendFileView();\n this.send.text = new SendTextView();\n this.send.deletionDate = new Date();\n this.send.deletionDate.setDate(this.send.deletionDate.getDate() + 7);\n }\n }\n\n this.hasPassword = this.send.password != null && this.send.password.trim() !== '';\n\n // Parse dates\n if (!this.isDateTimeLocalSupported) {\n const deletionDateParts = this.dateToSplitString(this.send.deletionDate);\n if (deletionDateParts !== undefined && deletionDateParts.length > 0) {\n this.deletionDateFallback = deletionDateParts[0];\n this.deletionTimeFallback = deletionDateParts[1];\n if (this.isSafari) {\n this.safariDeletionTime = this.deletionTimeFallback;\n }\n }\n\n const expirationDateParts = this.dateToSplitString(this.send.expirationDate);\n if (expirationDateParts !== undefined && expirationDateParts.length > 0) {\n this.expirationDateFallback = expirationDateParts[0];\n this.expirationTimeFallback = expirationDateParts[1];\n if (this.isSafari) {\n this.safariExpirationTime = this.expirationTimeFallback;\n }\n }\n } else {\n this.deletionDate = this.dateToString(this.send.deletionDate);\n this.expirationDate = this.dateToString(this.send.expirationDate);\n }\n\n if (this.isSafari) {\n this.safariDeletionTimeOptions = this.safariTimeOptions(DateField.DeletionDate);\n this.safariExpirationTimeOptions = this.safariTimeOptions(DateField.ExpriationDate);\n }\n }\n\n async submit(): Promise {\n if (!this.isDateTimeLocalSupported) {\n if (this.isSafari) {\n this.expirationTimeFallback = this.safariExpirationTime ?? this.expirationTimeFallback;\n this.deletionTimeFallback = this.safariDeletionTime ?? this.deletionTimeFallback;\n }\n this.deletionDate = this.deletionDateTimeFallback;\n if (this.expirationDateTimeFallback != null && isNaN(Date.parse(this.expirationDateTimeFallback))) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('expirationDateIsInvalid'));\n return;\n }\n if (isNaN(Date.parse(this.deletionDateTimeFallback))) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('deletionDateIsInvalid'));\n return;\n }\n if (this.nullOrWhiteSpaceCount([this.expirationDateFallback, this.expirationTimeFallback]) === 1) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('expirationDateAndTimeRequired'));\n return;\n }\n if (this.editMode || this.expirationDateSelect === 0) {\n this.expirationDate = this.expirationDateTimeFallback;\n }\n }\n\n if (this.disableSend) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('sendDisabledWarning'));\n return false;\n }\n\n if (this.send.name == null || this.send.name === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('nameRequired'));\n return false;\n }\n\n let file: File = null;\n if (this.send.type === SendType.File && !this.editMode) {\n const fileEl = document.getElementById('file') as HTMLInputElement;\n const files = fileEl.files;\n if (files == null || files.length === 0) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('selectFile'));\n return;\n }\n\n file = files[0];\n if (files[0].size > 524288000) { // 500 MB\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('maxFileSize'));\n return;\n }\n }\n\n if (!this.editMode) {\n const now = new Date();\n if (this.deletionDateSelect > 0) {\n const d = new Date();\n d.setHours(now.getHours() + this.deletionDateSelect);\n this.deletionDate = this.dateToString(d);\n }\n if (this.expirationDateSelect != null && this.expirationDateSelect > 0) {\n const d = new Date();\n d.setHours(now.getHours() + this.expirationDateSelect);\n this.expirationDate = this.dateToString(d);\n }\n }\n\n if (this.password != null && this.password.trim() === '') {\n this.password = null;\n }\n\n const encSend = await this.encryptSend(file);\n try {\n this.formPromise = this.sendService.saveWithServer(encSend);\n await this.formPromise;\n if (this.send.id == null) {\n this.send.id = encSend[0].id;\n }\n if (this.send.accessId == null) {\n this.send.accessId = encSend[0].accessId;\n }\n this.platformUtilsService.showToast('success', null,\n this.i18nService.t(this.editMode ? 'editedSend' : 'createdSend'));\n this.onSavedSend.emit(this.send);\n if (this.copyLink) {\n this.copyLinkToClipboard(this.link);\n }\n return true;\n } catch { }\n\n return false;\n }\n\n clearExpiration() {\n this.expirationDate = null;\n this.expirationDateFallback = null;\n this.expirationTimeFallback = null;\n this.safariExpirationTime = null;\n }\n\n copyLinkToClipboard(link: string) {\n if (link != null) {\n this.platformUtilsService.copyToClipboard(link);\n }\n }\n\n async delete(): Promise {\n if (this.deletePromise != null) {\n return false;\n }\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('deleteSendConfirmation'),\n this.i18nService.t('deleteSend'),\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.sendService.deleteWithServer(this.send.id);\n await this.deletePromise;\n this.platformUtilsService.showToast('success', null, this.i18nService.t('deletedSend'));\n await this.load();\n this.onDeletedSend.emit(this.send);\n return true;\n } catch { }\n\n return false;\n }\n\n typeChanged() {\n if (this.send.type === SendType.File && !this.alertShown)\n {\n if (!this.canAccessPremium) {\n this.alertShown = true;\n this.messagingService.send('premiumRequired');\n } else if (!this.emailVerified) {\n this.alertShown = true;\n this.messagingService.send('emailVerificationRequired');\n }\n }\n }\n\n toggleOptions() {\n this.showOptions = !this.showOptions;\n }\n\n expirationDateFallbackChanged() {\n this.isSafari ?\n this.safariExpirationTime = this.safariExpirationTime ?? '00:00' :\n this.expirationTimeFallback = this.expirationTimeFallback ?? this.datePipe.transform(new Date(), 'HH:mm');\n }\n\n protected async loadSend(): Promise {\n return this.sendService.get(this.sendId);\n }\n\n protected async encryptSend(file: File): Promise<[Send, EncArrayBuffer]> {\n const sendData = await this.sendService.encrypt(this.send, file, this.password, null);\n\n // Parse dates\n try {\n sendData[0].deletionDate = this.deletionDate == null ? null : new Date(this.deletionDate);\n } catch {\n sendData[0].deletionDate = null;\n }\n try {\n sendData[0].expirationDate = this.expirationDate == null ? null : new Date(this.expirationDate);\n } catch {\n sendData[0].expirationDate = null;\n }\n\n return sendData;\n }\n\n protected dateToString(d: Date) {\n return d == null ? null : this.datePipe.transform(d, 'yyyy-MM-ddTHH:mm');\n }\n\n protected formatDateFallbacks(dateString: string) {\n try {\n // The Firefox date picker doesn't supply a time, safari's polyfill does.\n // Unknown if Safari's native date picker will or not when it releases.\n if (!this.isSafari) {\n dateString += ' 00:00';\n }\n return this.datePipe.transform(new Date(dateString), 'yyyy-MM-dd');\n } catch {\n // this should never happen\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('dateParsingError'));\n }\n }\n\n protected dateToSplitString(d: Date) {\n if (d != null) {\n const date = !this.isSafari ?\n this.datePipe.transform(d, 'yyyy-MM-dd') :\n this.datePipe.transform(d, 'MM/dd/yyyy');\n const time = this.datePipe.transform(d, 'HH:mm');\n return [date, time];\n }\n }\n\n protected togglePasswordVisible() {\n this.showPassword = !this.showPassword;\n document.getElementById('password').focus();\n }\n\n protected nullOrWhiteSpaceCount(strarray: string[]): number {\n return strarray.filter(str => str == null || str.trim() === '').length;\n }\n\n protected safariTimeOptions(field: DateField): TimeOption[] {\n // init individual arrays for major sort groups\n const noon: TimeOption[] = [];\n const midnight: TimeOption[] = [];\n const ams: TimeOption[] = [];\n const pms: TimeOption[] = [];\n\n // determine minute skip (5 min, 10 min, 15 min, etc.)\n const minuteIncrementer = 15;\n\n // loop through each hour on a 12 hour system\n for (let h = 1; h <= 12; h++) {\n // loop through each minute in the hour using the skip to incriment\n for (let m = 0; m < 60; m += minuteIncrementer) {\n // init the final strings that will be added to the lists\n let hour = h.toString();\n let minutes = m.toString();\n\n // add prepending 0s to single digit hours/minutes\n if (h < 10) {\n hour = '0' + hour;\n }\n if (m < 10) {\n minutes = '0' + minutes;\n }\n\n // build time strings and push to relevant sort groups\n if (h === 12) {\n const midnightOption: TimeOption = {\n standard: `${hour}:${minutes} AM`,\n military: `00:${minutes}`,\n };\n midnight.push(midnightOption);\n\n const noonOption: TimeOption = {\n standard: `${hour}:${minutes} PM`,\n military: `${hour}:${minutes}`,\n };\n noon.push(noonOption);\n } else {\n const amOption: TimeOption = {\n standard: `${hour}:${minutes} AM`,\n military: `${hour}:${minutes}`,\n };\n ams.push(amOption);\n\n const pmOption: TimeOption = {\n standard: `${hour}:${minutes} PM`,\n military: `${h + 12}:${minutes}`,\n };\n pms.push(pmOption);\n }\n }\n }\n\n // bring all the arrays together in the right order\n const validTimes = [...midnight, ...ams, ...noon, ...pms];\n\n // determine if an unsupported value already exists on the send & add that to the top of the option list\n // example: if the Send was created with a different client\n if (field === DateField.ExpriationDate && this.expirationDateTimeFallback != null && this.editMode) {\n const previousValue: TimeOption = {\n standard: this.datePipe.transform(this.expirationDateTimeFallback, 'hh:mm a'),\n military: this.datePipe.transform(this.expirationDateTimeFallback, 'HH:mm'),\n };\n return [previousValue, { standard: null, military: null }, ...validTimes];\n } else if (field === DateField.DeletionDate && this.deletionDateTimeFallback != null && this.editMode) {\n const previousValue: TimeOption = {\n standard: this.datePipe.transform(this.deletionDateTimeFallback, 'hh:mm a'),\n military: this.datePipe.transform(this.deletionDateTimeFallback, 'HH:mm'),\n };\n return [previousValue, ...validTimes];\n } else {\n return [{ standard: null, military: null }, ...validTimes];\n }\n }\n}\n","export class UpdateProfileRequest {\n name: string;\n masterPasswordHint: string;\n culture = 'en-US'; // deprecated\n\n constructor(name: string, masterPasswordHint: string) {\n this.name = name;\n this.masterPasswordHint = masterPasswordHint ? masterPasswordHint : null;\n }\n}\n","import { EmailTokenRequest } from './emailTokenRequest';\n\nexport class EmailRequest extends EmailTokenRequest {\n newMasterPasswordHash: string;\n token: string;\n key: string;\n}\n","import { PasswordRequest } from './passwordRequest';\n\nimport { KdfType } from '../../enums/kdfType';\n\nexport class KdfRequest extends PasswordRequest {\n kdf: KdfType;\n kdfIterations: number;\n}\n","export class UpdateDomainsRequest {\n equivalentDomains: string[][];\n excludedGlobalEquivalentDomains: number[];\n}\n","import {\n Directive,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { I18nService } from '../../abstractions/i18n.service';\nimport { PasswordGenerationService } from '../../abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from '../../abstractions/platformUtils.service';\n\nimport { PasswordGeneratorPolicyOptions } from '../../models/domain/passwordGeneratorPolicyOptions';\n\n@Directive()\nexport class PasswordGeneratorComponent implements OnInit {\n @Input() showSelect: boolean = false;\n @Output() onSelected = new EventEmitter();\n\n options: any = {};\n password: string = '-';\n showOptions = false;\n avoidAmbiguous = false;\n enforcedPolicyOptions: PasswordGeneratorPolicyOptions;\n\n constructor(protected passwordGenerationService: PasswordGenerationService,\n protected platformUtilsService: PlatformUtilsService, protected i18nService: I18nService,\n private win: Window) { }\n\n async ngOnInit() {\n const optionsResponse = await this.passwordGenerationService.getOptions();\n this.options = optionsResponse[0];\n this.enforcedPolicyOptions = optionsResponse[1];\n this.avoidAmbiguous = !this.options.ambiguous;\n this.options.type = this.options.type === 'passphrase' ? 'passphrase' : 'password';\n this.password = await this.passwordGenerationService.generatePassword(this.options);\n await this.passwordGenerationService.addHistory(this.password);\n }\n\n async sliderChanged() {\n this.saveOptions(false);\n await this.passwordGenerationService.addHistory(this.password);\n }\n\n async sliderInput() {\n this.normalizeOptions();\n this.password = await this.passwordGenerationService.generatePassword(this.options);\n }\n\n async saveOptions(regenerate: boolean = true) {\n this.normalizeOptions();\n await this.passwordGenerationService.saveOptions(this.options);\n\n if (regenerate) {\n await this.regenerate();\n }\n }\n\n async regenerate() {\n this.password = await this.passwordGenerationService.generatePassword(this.options);\n await this.passwordGenerationService.addHistory(this.password);\n }\n\n copy() {\n const copyOptions = this.win != null ? { window: this.win } : null;\n this.platformUtilsService.copyToClipboard(this.password, copyOptions);\n this.platformUtilsService.showToast('info', null,\n this.i18nService.t('valueCopied', this.i18nService.t('password')));\n }\n\n select() {\n this.onSelected.emit(this.password);\n }\n\n toggleOptions() {\n this.showOptions = !this.showOptions;\n }\n\n private normalizeOptions() {\n // Application level normalize options depedent on class variables\n this.options.ambiguous = !this.avoidAmbiguous;\n\n if (!this.options.uppercase && !this.options.lowercase && !this.options.number && !this.options.special) {\n this.options.lowercase = true;\n if (this.win != null) {\n const lowercase = this.win.document.querySelector('#lowercase') as HTMLInputElement;\n if (lowercase) {\n lowercase.checked = true;\n }\n }\n }\n\n this.passwordGenerationService.normalizeOptions(this.options, this.enforcedPolicyOptions);\n }\n}\n","import { OnInit } from '@angular/core';\n\nimport { I18nService } from '../../abstractions/i18n.service';\nimport { PasswordGenerationService } from '../../abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from '../../abstractions/platformUtils.service';\n\nimport { GeneratedPasswordHistory } from '../../models/domain/generatedPasswordHistory';\n\nexport class PasswordGeneratorHistoryComponent implements OnInit {\n history: GeneratedPasswordHistory[] = [];\n\n constructor(protected passwordGenerationService: PasswordGenerationService,\n protected platformUtilsService: PlatformUtilsService, protected i18nService: I18nService,\n private win: Window) { }\n\n async ngOnInit() {\n this.history = await this.passwordGenerationService.getHistory();\n }\n\n clear() {\n this.history = [];\n this.passwordGenerationService.clear();\n }\n\n copy(password: string) {\n const copyOptions = this.win != null ? { window: this.win } : null;\n this.platformUtilsService.copyToClipboard(password, copyOptions);\n this.platformUtilsService.showToast('info', null,\n this.i18nService.t('valueCopied', this.i18nService.t('password')));\n }\n}\n","import {\n Directive,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { FolderService } from '../../abstractions/folder.service';\nimport { I18nService } from '../../abstractions/i18n.service';\nimport { PlatformUtilsService } from '../../abstractions/platformUtils.service';\n\nimport { FolderView } from '../../models/view/folderView';\n\n@Directive()\nexport class FolderAddEditComponent implements OnInit {\n @Input() folderId: string;\n @Output() onSavedFolder = new EventEmitter();\n @Output() onDeletedFolder = new EventEmitter();\n\n editMode: boolean = false;\n folder: FolderView = new FolderView();\n title: string;\n formPromise: Promise;\n deletePromise: Promise;\n\n constructor(protected folderService: FolderService, protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService) { }\n\n async ngOnInit() {\n await this.init();\n }\n\n async submit(): Promise {\n if (this.folder.name == null || this.folder.name === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('nameRequired'));\n return false;\n }\n\n try {\n const folder = await this.folderService.encrypt(this.folder);\n this.formPromise = this.folderService.saveWithServer(folder);\n await this.formPromise;\n this.platformUtilsService.showToast('success', null,\n this.i18nService.t(this.editMode ? 'editedFolder' : 'addedFolder'));\n this.onSavedFolder.emit(this.folder);\n return true;\n } catch { }\n\n return false;\n }\n\n async delete(): Promise {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('deleteFolderConfirmation'), this.i18nService.t('deleteFolder'),\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.folderService.deleteWithServer(this.folder.id);\n await this.deletePromise;\n this.platformUtilsService.showToast('success', null, this.i18nService.t('deletedFolder'));\n this.onDeletedFolder.emit(this.folder);\n } catch { }\n\n return true;\n }\n\n protected async init() {\n this.editMode = this.folderId != null;\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t('editFolder');\n const folder = await this.folderService.get(this.folderId);\n this.folder = await folder.decrypt();\n } else {\n this.title = this.i18nService.t('addFolder');\n }\n }\n}\n","import {\n Directive,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { OrganizationUserStatusType } from '../../enums/organizationUserStatusType';\n\nimport { CipherService } from '../../abstractions/cipher.service';\nimport { CollectionService } from '../../abstractions/collection.service';\nimport { I18nService } from '../../abstractions/i18n.service';\nimport { PlatformUtilsService } from '../../abstractions/platformUtils.service';\nimport { UserService } from '../../abstractions/user.service';\n\nimport { Organization } from '../../models/domain/organization';\nimport { CipherView } from '../../models/view/cipherView';\nimport { CollectionView } from '../../models/view/collectionView';\n\nimport { Utils } from '../../misc/utils';\n\n@Directive()\nexport class ShareComponent implements OnInit {\n @Input() cipherId: string;\n @Input() organizationId: string;\n @Output() onSharedCipher = new EventEmitter();\n\n formPromise: Promise;\n cipher: CipherView;\n collections: CollectionView[] = [];\n organizations: Organization[] = [];\n\n protected writeableCollections: CollectionView[] = [];\n\n constructor(protected collectionService: CollectionService, protected platformUtilsService: PlatformUtilsService,\n protected i18nService: I18nService, protected userService: UserService,\n protected cipherService: CipherService) { }\n\n async ngOnInit() {\n await this.load();\n }\n\n async load() {\n const allCollections = await this.collectionService.getAllDecrypted();\n this.writeableCollections = allCollections.map(c => c).filter(c => !c.readOnly);\n const orgs = await this.userService.getAllOrganizations();\n this.organizations = orgs.sort(Utils.getSortFunction(this.i18nService, 'name'))\n .filter(o => o.enabled && o.status === OrganizationUserStatusType.Confirmed);\n\n const cipherDomain = await this.cipherService.get(this.cipherId);\n this.cipher = await cipherDomain.decrypt();\n if (this.organizationId == null && this.organizations.length > 0) {\n this.organizationId = this.organizations[0].id;\n }\n this.filterCollections();\n }\n\n filterCollections() {\n this.writeableCollections.forEach(c => (c as any).checked = false);\n if (this.organizationId == null || this.writeableCollections.length === 0) {\n this.collections = [];\n } else {\n this.collections = this.writeableCollections.filter(c => c.organizationId === this.organizationId);\n }\n }\n\n async submit(): Promise {\n const selectedCollectionIds = this.collections\n .filter(c => !!(c as any).checked)\n .map(c => c.id);\n if (selectedCollectionIds.length === 0) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('selectOneCollection'));\n return;\n }\n\n const cipherDomain = await this.cipherService.get(this.cipherId);\n const cipherView = await cipherDomain.decrypt();\n\n try {\n this.formPromise = this.cipherService.shareWithServer(cipherView, this.organizationId,\n selectedCollectionIds).then(async () => {\n this.onSharedCipher.emit();\n this.platformUtilsService.showToast('success', null, this.i18nService.t('sharedItem'));\n });\n await this.formPromise;\n return true;\n } catch { }\n return false;\n }\n\n get canSave() {\n if (this.collections != null) {\n for (let i = 0; i < this.collections.length; i++) {\n if ((this.collections[i] as any).checked) {\n return true;\n }\n }\n }\n return false;\n }\n}\n","export { AttachmentData } from './attachmentData';\nexport { CardData } from './cardData';\nexport { CipherData } from './cipherData';\nexport { CollectionData } from './collectionData';\nexport { FieldData } from './fieldData';\nexport { FolderData } from './folderData';\nexport { IdentityData } from './identityData';\nexport { LoginData } from './loginData';\nexport { LoginUriData } from './loginUriData';\nexport { SecureNoteData } from './secureNoteData';\n","export { Attachment } from './attachment';\nexport { AuthResult } from './authResult';\nexport { Card } from './card';\nexport { Cipher } from './cipher';\nexport { EncString } from './encString';\nexport { Collection } from './collection';\nexport { EncryptedObject } from './encryptedObject';\nexport { EnvironmentUrls } from './environmentUrls';\nexport { Field } from './field';\nexport { Folder } from './folder';\nexport { Identity } from './identity';\nexport { Login } from './login';\nexport { LoginUri } from './loginUri';\nexport { GeneratedPasswordHistory } from './generatedPasswordHistory';\nexport { SecureNote } from './secureNote';\nexport { SymmetricCryptoKey } from './symmetricCryptoKey';\n","export class EmergencyAccessConfirmRequest {\n key: string;\n}\n","import { EmergencyAccessType } from '../../enums/emergencyAccessType';\n\nexport class EmergencyAccessInviteRequest {\n email: string;\n type: EmergencyAccessType;\n waitTimeDays: number;\n}\n","export class EmergencyAccessPasswordRequest {\n newMasterPasswordHash: string;\n key: string;\n}\n","import {\n APP_INITIALIZER,\n LOCALE_ID,\n NgModule,\n} from '@angular/core';\n\nimport { ToasterModule } from 'angular2-toaster';\n\nimport { BroadcasterMessagingService } from '../../services/broadcasterMessaging.service';\nimport { HtmlStorageService } from '../../services/htmlStorage.service';\nimport { I18nService } from '../../services/i18n.service';\nimport { MemoryStorageService } from '../../services/memoryStorage.service';\nimport { WebPlatformUtilsService } from '../../services/webPlatformUtils.service';\n\nimport { EventService } from './event.service';\nimport { OrganizationGuardService } from './organization-guard.service';\nimport { OrganizationTypeGuardService } from './organization-type-guard.service';\nimport { RouterService } from './router.service';\n\nimport { AuthGuardService } from 'jslib/angular/services/auth-guard.service';\nimport { BroadcasterService } from 'jslib/angular/services/broadcaster.service';\nimport { LockGuardService } from 'jslib/angular/services/lock-guard.service';\nimport { UnauthGuardService } from 'jslib/angular/services/unauth-guard.service';\nimport { ValidationService } from 'jslib/angular/services/validation.service';\n\nimport { ApiService } from 'jslib/services/api.service';\nimport { AppIdService } from 'jslib/services/appId.service';\nimport { AuditService } from 'jslib/services/audit.service';\nimport { AuthService } from 'jslib/services/auth.service';\nimport { CipherService } from 'jslib/services/cipher.service';\nimport { CollectionService } from 'jslib/services/collection.service';\nimport { ConsoleLogService } from 'jslib/services/consoleLog.service';\nimport { ConstantsService } from 'jslib/services/constants.service';\nimport { ContainerService } from 'jslib/services/container.service';\nimport { CryptoService } from 'jslib/services/crypto.service';\nimport { EnvironmentService } from 'jslib/services/environment.service';\nimport { EventService as EventLoggingService } from 'jslib/services/event.service';\nimport { ExportService } from 'jslib/services/export.service';\nimport { FileUploadService } from 'jslib/services/fileUpload.service';\nimport { FolderService } from 'jslib/services/folder.service';\nimport { ImportService } from 'jslib/services/import.service';\nimport { NotificationsService } from 'jslib/services/notifications.service';\nimport { PasswordGenerationService } from 'jslib/services/passwordGeneration.service';\nimport { PolicyService } from 'jslib/services/policy.service';\nimport { SearchService } from 'jslib/services/search.service';\nimport { SendService } from 'jslib/services/send.service';\nimport { SettingsService } from 'jslib/services/settings.service';\nimport { StateService } from 'jslib/services/state.service';\nimport { SyncService } from 'jslib/services/sync.service';\nimport { TokenService } from 'jslib/services/token.service';\nimport { TotpService } from 'jslib/services/totp.service';\nimport { UserService } from 'jslib/services/user.service';\nimport { VaultTimeoutService } from 'jslib/services/vaultTimeout.service';\nimport { WebCryptoFunctionService } from 'jslib/services/webCryptoFunction.service';\n\nimport { ApiService as ApiServiceAbstraction } from 'jslib/abstractions/api.service';\nimport { AppIdService as AppIdServiceAbstraction } from 'jslib/abstractions/appId.service';\nimport { AuditService as AuditServiceAbstraction } from 'jslib/abstractions/audit.service';\nimport { AuthService as AuthServiceAbstraction } from 'jslib/abstractions/auth.service';\nimport { CipherService as CipherServiceAbstraction } from 'jslib/abstractions/cipher.service';\nimport { CollectionService as CollectionServiceAbstraction } from 'jslib/abstractions/collection.service';\nimport { CryptoService as CryptoServiceAbstraction } from 'jslib/abstractions/crypto.service';\nimport { CryptoFunctionService as CryptoFunctionServiceAbstraction } from 'jslib/abstractions/cryptoFunction.service';\nimport { EnvironmentService as EnvironmentServiceAbstraction } from 'jslib/abstractions/environment.service';\nimport { EventService as EventLoggingServiceAbstraction } from 'jslib/abstractions/event.service';\nimport { ExportService as ExportServiceAbstraction } from 'jslib/abstractions/export.service';\nimport { FileUploadService as FileUploadServiceAbstraction } from 'jslib/abstractions/fileUpload.service';\nimport { FolderService as FolderServiceAbstraction } from 'jslib/abstractions/folder.service';\nimport { I18nService as I18nServiceAbstraction } from 'jslib/abstractions/i18n.service';\nimport { ImportService as ImportServiceAbstraction } from 'jslib/abstractions/import.service';\nimport { LogService as LogServiceAbstraction } from 'jslib/abstractions/log.service';\nimport { MessagingService as MessagingServiceAbstraction } from 'jslib/abstractions/messaging.service';\nimport { NotificationsService as NotificationsServiceAbstraction } from 'jslib/abstractions/notifications.service';\nimport {\n PasswordGenerationService as PasswordGenerationServiceAbstraction,\n} from 'jslib/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService as PlatformUtilsServiceAbstraction } from 'jslib/abstractions/platformUtils.service';\nimport { PolicyService as PolicyServiceAbstraction } from 'jslib/abstractions/policy.service';\nimport { SearchService as SearchServiceAbstraction } from 'jslib/abstractions/search.service';\nimport { SendService as SendServiceAbstraction } from 'jslib/abstractions/send.service';\nimport { SettingsService as SettingsServiceAbstraction } from 'jslib/abstractions/settings.service';\nimport { StateService as StateServiceAbstraction } from 'jslib/abstractions/state.service';\nimport { StorageService as StorageServiceAbstraction } from 'jslib/abstractions/storage.service';\nimport { SyncService as SyncServiceAbstraction } from 'jslib/abstractions/sync.service';\nimport { TokenService as TokenServiceAbstraction } from 'jslib/abstractions/token.service';\nimport { TotpService as TotpServiceAbstraction } from 'jslib/abstractions/totp.service';\nimport { UserService as UserServiceAbstraction } from 'jslib/abstractions/user.service';\nimport { VaultTimeoutService as VaultTimeoutServiceAbstraction } from 'jslib/abstractions/vaultTimeout.service';\n\nconst i18nService = new I18nService(window.navigator.language, 'locales');\nconst stateService = new StateService();\nconst broadcasterService = new BroadcasterService();\nconst messagingService = new BroadcasterMessagingService(broadcasterService);\nconst platformUtilsService = new WebPlatformUtilsService(i18nService, messagingService);\nconst storageService: StorageServiceAbstraction = new HtmlStorageService(platformUtilsService);\nconst secureStorageService: StorageServiceAbstraction = new MemoryStorageService();\nconst cryptoFunctionService: CryptoFunctionServiceAbstraction = new WebCryptoFunctionService(window,\n platformUtilsService);\nconst consoleLogService = new ConsoleLogService(false);\nconst cryptoService = new CryptoService(storageService,\n platformUtilsService.isDev() ? storageService : secureStorageService, cryptoFunctionService, platformUtilsService,\n consoleLogService);\nconst tokenService = new TokenService(storageService);\nconst appIdService = new AppIdService(storageService);\nconst apiService = new ApiService(tokenService, platformUtilsService,\n async (expired: boolean) => messagingService.send('logout', { expired: expired }));\nconst userService = new UserService(tokenService, storageService);\nconst settingsService = new SettingsService(userService, storageService);\nexport let searchService: SearchService = null;\nconst fileUploadService = new FileUploadService(consoleLogService, apiService);\nconst cipherService = new CipherService(cryptoService, userService, settingsService,\n apiService, fileUploadService, storageService, i18nService, () => searchService);\nconst folderService = new FolderService(cryptoService, userService, apiService, storageService,\n i18nService, cipherService);\nconst collectionService = new CollectionService(cryptoService, userService, storageService, i18nService);\nsearchService = new SearchService(cipherService, consoleLogService, i18nService);\nconst policyService = new PolicyService(userService, storageService);\nconst sendService = new SendService(cryptoService, userService, apiService, fileUploadService, storageService,\n i18nService, cryptoFunctionService);\nconst vaultTimeoutService = new VaultTimeoutService(cipherService, folderService, collectionService,\n cryptoService, platformUtilsService, storageService, messagingService, searchService, userService, tokenService,\n null, async () => messagingService.send('logout', { expired: false }));\nconst syncService = new SyncService(userService, apiService, settingsService,\n folderService, cipherService, cryptoService, collectionService, storageService, messagingService, policyService,\n sendService, async (expired: boolean) => messagingService.send('logout', { expired: expired }));\nconst passwordGenerationService = new PasswordGenerationService(cryptoService, storageService, policyService);\nconst totpService = new TotpService(storageService, cryptoFunctionService);\nconst containerService = new ContainerService(cryptoService);\nconst authService = new AuthService(cryptoService, apiService,\n userService, tokenService, appIdService, i18nService, platformUtilsService, messagingService, vaultTimeoutService,\n consoleLogService);\nconst exportService = new ExportService(folderService, cipherService, apiService);\nconst importService = new ImportService(cipherService, folderService, apiService, i18nService, collectionService,\n platformUtilsService);\nconst notificationsService = new NotificationsService(userService, syncService, appIdService,\n apiService, vaultTimeoutService, async () => messagingService.send('logout', { expired: true }), consoleLogService);\nconst environmentService = new EnvironmentService(apiService, storageService, notificationsService);\nconst auditService = new AuditService(cryptoFunctionService, apiService);\nconst eventLoggingService = new EventLoggingService(storageService, apiService, userService, cipherService);\n\ncontainerService.attachToWindow(window);\n\nexport function initFactory(): Function {\n return async () => {\n await (storageService as HtmlStorageService).init();\n const isDev = platformUtilsService.isDev();\n\n if (isDev || platformUtilsService.isSelfHost()) {\n environmentService.baseUrl = window.location.origin;\n } else {\n environmentService.notificationsUrl = 'https://notifications.bitwarden.com';\n environmentService.enterpriseUrl = 'https://portal.bitwarden.com';\n }\n\n apiService.setUrls({\n base: window.location.origin,\n api: null,\n identity: null,\n events: null,\n });\n setTimeout(() => notificationsService.init(environmentService), 3000);\n\n vaultTimeoutService.init(true);\n const locale = await storageService.get(ConstantsService.localeKey);\n await i18nService.init(locale);\n eventLoggingService.init(true);\n authService.init();\n const htmlEl = window.document.documentElement;\n htmlEl.classList.add('locale_' + i18nService.translationLocale);\n let theme = await storageService.get(ConstantsService.themeKey);\n if (theme == null) {\n theme = 'light';\n }\n htmlEl.classList.add('theme_' + theme);\n stateService.save(ConstantsService.disableFaviconKey,\n await storageService.get(ConstantsService.disableFaviconKey));\n stateService.save('enableGravatars', await storageService.get('enableGravatars'));\n };\n}\n\n@NgModule({\n imports: [\n ToasterModule,\n ],\n declarations: [],\n providers: [\n ValidationService,\n AuthGuardService,\n OrganizationGuardService,\n OrganizationTypeGuardService,\n UnauthGuardService,\n RouterService,\n EventService,\n LockGuardService,\n { provide: AuditServiceAbstraction, useValue: auditService },\n { provide: AuthServiceAbstraction, useValue: authService },\n { provide: CipherServiceAbstraction, useValue: cipherService },\n { provide: FolderServiceAbstraction, useValue: folderService },\n { provide: CollectionServiceAbstraction, useValue: collectionService },\n { provide: EnvironmentServiceAbstraction, useValue: environmentService },\n { provide: TotpServiceAbstraction, useValue: totpService },\n { provide: TokenServiceAbstraction, useValue: tokenService },\n { provide: I18nServiceAbstraction, useValue: i18nService },\n { provide: CryptoServiceAbstraction, useValue: cryptoService },\n { provide: PlatformUtilsServiceAbstraction, useValue: platformUtilsService },\n { provide: PasswordGenerationServiceAbstraction, useValue: passwordGenerationService },\n { provide: ApiServiceAbstraction, useValue: apiService },\n { provide: FileUploadServiceAbstraction, useValue: fileUploadService },\n { provide: SyncServiceAbstraction, useValue: syncService },\n { provide: UserServiceAbstraction, useValue: userService },\n { provide: MessagingServiceAbstraction, useValue: messagingService },\n { provide: BroadcasterService, useValue: broadcasterService },\n { provide: SettingsServiceAbstraction, useValue: settingsService },\n { provide: VaultTimeoutServiceAbstraction, useValue: vaultTimeoutService },\n { provide: StorageServiceAbstraction, useValue: storageService },\n { provide: StateServiceAbstraction, useValue: stateService },\n { provide: ExportServiceAbstraction, useValue: exportService },\n { provide: SearchServiceAbstraction, useValue: searchService },\n { provide: ImportServiceAbstraction, useValue: importService },\n { provide: NotificationsServiceAbstraction, useValue: notificationsService },\n { provide: CryptoFunctionServiceAbstraction, useValue: cryptoFunctionService },\n { provide: EventLoggingServiceAbstraction, useValue: eventLoggingService },\n { provide: PolicyServiceAbstraction, useValue: policyService },\n { provide: SendServiceAbstraction, useValue: sendService },\n {\n provide: APP_INITIALIZER,\n useFactory: initFactory,\n deps: [],\n multi: true,\n },\n {\n provide: LOCALE_ID,\n useFactory: () => i18nService.translationLocale,\n deps: [],\n },\n ],\n})\nexport class ServicesModule {\n}\n","import { MessagingService } from 'jslib/abstractions/messaging.service';\n\nimport { BroadcasterService } from 'jslib/angular/services/broadcaster.service';\n\nexport class BroadcasterMessagingService implements MessagingService {\n constructor(private broadcasterService: BroadcasterService) { }\n\n send(subscriber: string, arg: any = {}) {\n const message = Object.assign({}, { command: subscriber }, arg);\n this.broadcasterService.send(message);\n }\n}\n","import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { StorageService } from 'jslib/abstractions/storage.service';\nimport { ConstantsService } from 'jslib/services';\n\nexport class HtmlStorageService implements StorageService {\n private localStorageKeys = new Set(['appId', 'anonymousAppId', 'rememberedEmail', 'passwordGenerationOptions',\n ConstantsService.disableFaviconKey, 'rememberEmail', 'enableGravatars', 'enableFullWidth',\n ConstantsService.localeKey, ConstantsService.autoConfirmFingerprints,\n ConstantsService.vaultTimeoutKey, ConstantsService.vaultTimeoutActionKey, ConstantsService.ssoCodeVerifierKey,\n ConstantsService.ssoStateKey, 'ssoOrgIdentifier']);\n private localStorageStartsWithKeys = ['twoFactorToken_', ConstantsService.collapsedGroupingsKey + '_'];\n private memoryStorageStartsWithKeys = ['ciphers_', 'folders_', 'collections_', 'settings_', 'lastSync_'];\n private memoryStorage = new Map();\n\n constructor(private platformUtilsService: PlatformUtilsService) { }\n\n async init() {\n // LockOption -> VaultTimeout (uses the same legacy string value for backwards compat)\n const vaultTimeout = await this.get(ConstantsService.vaultTimeoutKey);\n if (vaultTimeout == null && !this.platformUtilsService.isDev()) {\n await this.save(ConstantsService.vaultTimeoutKey, 15);\n }\n\n // Default Action to lock\n const vaultTimeoutAction = await this.get(ConstantsService.vaultTimeoutActionKey);\n if (vaultTimeoutAction == null) {\n await this.save(ConstantsService.vaultTimeoutActionKey, 'lock');\n }\n }\n\n get(key: string): Promise {\n let json: string = null;\n if (this.isLocalStorage(key)) {\n json = window.localStorage.getItem(key);\n } else if (this.isMemoryStorage(key)) {\n json = this.memoryStorage.get(key);\n } else {\n json = window.sessionStorage.getItem(key);\n }\n if (json != null) {\n const obj = JSON.parse(json);\n return Promise.resolve(obj as T);\n }\n return Promise.resolve(null);\n }\n\n save(key: string, obj: any): Promise {\n if (obj == null) {\n return this.remove(key);\n }\n\n const json = JSON.stringify(obj);\n if (this.isLocalStorage(key)) {\n window.localStorage.setItem(key, json);\n } else if (this.isMemoryStorage(key)) {\n this.memoryStorage.set(key, json);\n } else {\n window.sessionStorage.setItem(key, json);\n }\n return Promise.resolve();\n }\n\n remove(key: string): Promise {\n if (this.isLocalStorage(key)) {\n window.localStorage.removeItem(key);\n } else if (this.isMemoryStorage(key)) {\n this.memoryStorage.delete(key);\n } else {\n window.sessionStorage.removeItem(key);\n }\n return Promise.resolve();\n }\n\n private isLocalStorage(key: string): boolean {\n if (this.localStorageKeys.has(key)) {\n return true;\n }\n for (const swKey of this.localStorageStartsWithKeys) {\n if (key.startsWith(swKey)) {\n return true;\n }\n }\n return false;\n }\n\n private isMemoryStorage(key: string): boolean {\n for (const swKey of this.memoryStorageStartsWithKeys) {\n if (key.startsWith(swKey)) {\n return true;\n }\n }\n return false;\n }\n}\n","export { ApiService } from './api.service';\nexport { AppIdService } from './appId.service';\nexport { AuditService } from './audit.service';\nexport { AuthService } from './auth.service';\nexport { CipherService } from './cipher.service';\nexport { CollectionService } from './collection.service';\nexport { ConstantsService } from './constants.service';\nexport { ContainerService } from './container.service';\nexport { CryptoService } from './crypto.service';\nexport { EnvironmentService } from './environment.service';\nexport { FolderService } from './folder.service';\nexport { I18nService } from './i18n.service';\nexport { PasswordGenerationService } from './passwordGeneration.service';\nexport { SettingsService } from './settings.service';\nexport { StateService } from './state.service';\nexport { SyncService } from './sync.service';\nexport { TokenService } from './token.service';\nexport { TotpService } from './totp.service';\nexport { UserService } from './user.service';\nexport { VaultTimeoutService } from './vaultTimeout.service';\n","import { BaseResponse } from './baseResponse';\n\nexport class ApiKeyResponse extends BaseResponse {\n apiKey: string;\n\n constructor(response: any) {\n super(response);\n this.apiKey = this.getResponseProperty('ApiKey');\n }\n}\n","import { FileUploadType } from '../../enums/fileUploadType';\nimport { BaseResponse } from './baseResponse';\nimport { CipherResponse } from './cipherResponse';\n\nexport class AttachmentUploadDataResponse extends BaseResponse {\n attachmentId: string;\n fileUploadType: FileUploadType;\n cipherResponse: CipherResponse;\n cipherMiniResponse: CipherResponse;\n url: string = null;\n constructor(response: any) {\n super(response);\n this.attachmentId = this.getResponseProperty('AttachmentId');\n this.fileUploadType = this.getResponseProperty('FileUploadType');\n const cipherResponse = this.getResponseProperty('CipherResponse');\n const cipherMiniResponse = this.getResponseProperty('CipherMiniResponse');\n this.cipherResponse = cipherResponse == null ? null : new CipherResponse(cipherResponse);\n this.cipherMiniResponse = cipherMiniResponse == null ? null : new CipherResponse(cipherMiniResponse);\n this.url = this.getResponseProperty('Url');\n }\n\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { PaymentMethodType } from '../../enums/paymentMethodType';\nimport { TransactionType } from '../../enums/transactionType';\n\nexport class BillingResponse extends BaseResponse {\n balance: number;\n paymentSource: BillingSourceResponse;\n invoices: BillingInvoiceResponse[] = [];\n transactions: BillingTransactionResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.balance = this.getResponseProperty('Balance');\n const paymentSource = this.getResponseProperty('PaymentSource');\n const transactions = this.getResponseProperty('Transactions');\n const invoices = this.getResponseProperty('Invoices');\n this.paymentSource = paymentSource == null ? null : new BillingSourceResponse(paymentSource);\n if (transactions != null) {\n this.transactions = transactions.map((t: any) => new BillingTransactionResponse(t));\n }\n if (invoices != null) {\n this.invoices = invoices.map((i: any) => new BillingInvoiceResponse(i));\n }\n }\n}\n\nexport class BillingSourceResponse extends BaseResponse {\n type: PaymentMethodType;\n cardBrand: string;\n description: string;\n needsVerification: boolean;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty('Type');\n this.cardBrand = this.getResponseProperty('CardBrand');\n this.description = this.getResponseProperty('Description');\n this.needsVerification = this.getResponseProperty('NeedsVerification');\n }\n}\n\nexport class BillingInvoiceResponse extends BaseResponse {\n url: string;\n pdfUrl: string;\n number: string;\n paid: boolean;\n date: string;\n amount: number;\n\n constructor(response: any) {\n super(response);\n this.url = this.getResponseProperty('Url');\n this.pdfUrl = this.getResponseProperty('PdfUrl');\n this.number = this.getResponseProperty('Number');\n this.paid = this.getResponseProperty('Paid');\n this.date = this.getResponseProperty('Date');\n this.amount = this.getResponseProperty('Amount');\n }\n}\n\nexport class BillingTransactionResponse extends BaseResponse {\n createdDate: string;\n amount: number;\n refunded: boolean;\n partiallyRefunded: boolean;\n refundedAmount: number;\n type: TransactionType;\n paymentMethodType: PaymentMethodType;\n details: string;\n\n constructor(response: any) {\n super(response);\n this.createdDate = this.getResponseProperty('CreatedDate');\n this.amount = this.getResponseProperty('Amount');\n this.refunded = this.getResponseProperty('Refunded');\n this.partiallyRefunded = this.getResponseProperty('PartiallyRefunded');\n this.refundedAmount = this.getResponseProperty('RefundedAmount');\n this.type = this.getResponseProperty('Type');\n this.paymentMethodType = this.getResponseProperty('PaymentMethodType');\n this.details = this.getResponseProperty('Details');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class BreachAccountResponse extends BaseResponse {\n addedDate: string;\n breachDate: string;\n dataClasses: string[];\n description: string;\n domain: string;\n isActive: boolean;\n isVerified: boolean;\n logoPath: string;\n modifiedDate: string;\n name: string;\n pwnCount: number;\n title: string;\n\n constructor(response: any) {\n super(response);\n this.addedDate = this.getResponseProperty('AddedDate');\n this.breachDate = this.getResponseProperty('BreachDate');\n this.dataClasses = this.getResponseProperty('DataClasses');\n this.description = this.getResponseProperty('Description');\n this.domain = this.getResponseProperty('Domain');\n this.isActive = this.getResponseProperty('IsActive');\n this.isVerified = this.getResponseProperty('IsVerified');\n this.logoPath = this.getResponseProperty('LogoPath');\n this.modifiedDate = this.getResponseProperty('ModifiedDate');\n this.name = this.getResponseProperty('Name');\n this.pwnCount = this.getResponseProperty('PwnCount');\n this.title = this.getResponseProperty('Title');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { DeviceType } from '../../enums/deviceType';\nimport { EventType } from '../../enums/eventType';\n\nexport class EventResponse extends BaseResponse {\n type: EventType;\n userId: string;\n organizationId: string;\n cipherId: string;\n collectionId: string;\n groupId: string;\n policyId: string;\n organizationUserId: string;\n actingUserId: string;\n date: string;\n deviceType: DeviceType;\n ipAddress: string;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty('Type');\n this.userId = this.getResponseProperty('UserId');\n this.organizationId = this.getResponseProperty('OrganizationId');\n this.cipherId = this.getResponseProperty('CipherId');\n this.collectionId = this.getResponseProperty('CollectionId');\n this.groupId = this.getResponseProperty('GroupId');\n this.policyId = this.getResponseProperty('PolicyId');\n this.organizationUserId = this.getResponseProperty('OrganizationUserId');\n this.actingUserId = this.getResponseProperty('ActingUserId');\n this.date = this.getResponseProperty('Date');\n this.deviceType = this.getResponseProperty('DeviceType');\n this.ipAddress = this.getResponseProperty('IpAddress');\n }\n}\n","import { BaseResponse } from './baseResponse';\nimport { SelectionReadOnlyResponse } from './selectionReadOnlyResponse';\n\nexport class GroupResponse extends BaseResponse {\n id: string;\n organizationId: string;\n name: string;\n accessAll: boolean;\n externalId: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.organizationId = this.getResponseProperty('OrganizationId');\n this.name = this.getResponseProperty('Name');\n this.accessAll = this.getResponseProperty('AccessAll');\n this.externalId = this.getResponseProperty('ExternalId');\n }\n}\n\nexport class GroupDetailsResponse extends GroupResponse {\n collections: SelectionReadOnlyResponse[] = [];\n\n constructor(response: any) {\n super(response);\n const collections = this.getResponseProperty('Collections');\n if (collections != null) {\n this.collections = collections.map((c: any) => new SelectionReadOnlyResponse(c));\n }\n }\n}\n","import { OrganizationResponse } from './organizationResponse';\nimport {\n BillingSubscriptionResponse,\n BillingSubscriptionUpcomingInvoiceResponse,\n} from './subscriptionResponse';\n\nexport class OrganizationSubscriptionResponse extends OrganizationResponse {\n storageName: string;\n storageGb: number;\n subscription: BillingSubscriptionResponse;\n upcomingInvoice: BillingSubscriptionUpcomingInvoiceResponse;\n expiration: string;\n\n constructor(response: any) {\n super(response);\n this.storageName = this.getResponseProperty('StorageName');\n this.storageGb = this.getResponseProperty('StorageGb');\n const subscription = this.getResponseProperty('Subscription');\n this.subscription = subscription == null ? null : new BillingSubscriptionResponse(subscription);\n const upcomingInvoice = this.getResponseProperty('UpcomingInvoice');\n this.upcomingInvoice = upcomingInvoice == null ? null :\n new BillingSubscriptionUpcomingInvoiceResponse(upcomingInvoice);\n this.expiration = this.getResponseProperty('Expiration');\n }\n}\n","import { BaseResponse } from './baseResponse';\nimport { SelectionReadOnlyResponse } from './selectionReadOnlyResponse';\n\nimport { PermissionsApi } from '../api/permissionsApi';\n\nimport { OrganizationUserStatusType } from '../../enums/organizationUserStatusType';\nimport { OrganizationUserType } from '../../enums/organizationUserType';\n\nexport class OrganizationUserResponse extends BaseResponse {\n id: string;\n userId: string;\n type: OrganizationUserType;\n status: OrganizationUserStatusType;\n accessAll: boolean;\n permissions: PermissionsApi;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.userId = this.getResponseProperty('UserId');\n this.type = this.getResponseProperty('Type');\n this.status = this.getResponseProperty('Status');\n this.permissions = new PermissionsApi(this.getResponseProperty('Permissions'));\n this.accessAll = this.getResponseProperty('AccessAll');\n }\n}\n\nexport class OrganizationUserUserDetailsResponse extends OrganizationUserResponse {\n name: string;\n email: string;\n twoFactorEnabled: boolean;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty('Name');\n this.email = this.getResponseProperty('Email');\n this.twoFactorEnabled = this.getResponseProperty('TwoFactorEnabled');\n }\n}\n\nexport class OrganizationUserDetailsResponse extends OrganizationUserResponse {\n collections: SelectionReadOnlyResponse[] = [];\n\n constructor(response: any) {\n super(response);\n const collections = this.getResponseProperty('Collections');\n if (collections != null) {\n this.collections = collections.map((c: any) => new SelectionReadOnlyResponse(c));\n }\n }\n}\n","import { BaseResponse } from './baseResponse';\nimport { ProfileResponse } from './profileResponse';\n\nexport class PaymentResponse extends BaseResponse {\n userProfile: ProfileResponse;\n paymentIntentClientSecret: string;\n success: boolean;\n\n constructor(response: any) {\n super(response);\n const userProfile = this.getResponseProperty('UserProfile');\n if (userProfile != null) {\n this.userProfile = new ProfileResponse(userProfile);\n }\n this.paymentIntentClientSecret = this.getResponseProperty('PaymentIntentClientSecret');\n this.success = this.getResponseProperty('Success');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { KdfType } from '../../enums/kdfType';\n\nexport class PreloginResponse extends BaseResponse {\n kdf: KdfType;\n kdfIterations: number;\n\n constructor(response: any) {\n super(response);\n this.kdf = this.getResponseProperty('Kdf');\n this.kdfIterations = this.getResponseProperty('KdfIterations');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { SendType } from '../../enums/sendType';\n\nimport { SendFileApi } from '../api/sendFileApi';\nimport { SendTextApi } from '../api/sendTextApi';\n\nexport class SendAccessResponse extends BaseResponse {\n id: string;\n type: SendType;\n name: string;\n file: SendFileApi;\n text: SendTextApi;\n expirationDate: Date;\n creatorIdentifier: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.type = this.getResponseProperty('Type');\n this.name = this.getResponseProperty('Name');\n\n const text = this.getResponseProperty('Text');\n if (text != null) {\n this.text = new SendTextApi(text);\n }\n\n const file = this.getResponseProperty('File');\n if (file != null) {\n this.file = new SendFileApi(file);\n }\n\n this.expirationDate = this.getResponseProperty('ExpirationDate');\n this.creatorIdentifier = this.getResponseProperty('CreatorIdentifier');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class SendFileDownloadDataResponse extends BaseResponse {\n\n id: string = null;\n url: string = null;\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.url = this.getResponseProperty('Url');\n }\n}\n","import { FileUploadType } from '../../enums/fileUploadType';\n\nimport { BaseResponse } from './baseResponse';\nimport { SendResponse } from './sendResponse';\n\nexport class SendFileUploadDataResponse extends BaseResponse {\n\n fileUploadType: FileUploadType;\n sendResponse: SendResponse;\n url: string = null;\n constructor(response: any) {\n super(response);\n this.fileUploadType = this.getResponseProperty('FileUploadType');\n const sendResponse = this.getResponseProperty('SendResponse');\n this.sendResponse = sendResponse == null ? null : new SendResponse(sendResponse);\n this.url = this.getResponseProperty('Url');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TaxInfoResponse extends BaseResponse {\n taxId: string;\n taxIdType: string;\n line1: string;\n line2: string;\n city: string;\n state: string;\n country: string;\n postalCode: string;\n\n constructor(response: any) {\n super(response);\n this.taxId = this.getResponseProperty('TaxIdNumber');\n this.taxIdType = this.getResponseProperty('TaxIdType');\n this.line1 = this.getResponseProperty('Line1');\n this.line2 = this.getResponseProperty('Line2');\n this.city = this.getResponseProperty('City');\n this.state = this.getResponseProperty('State');\n this.postalCode = this.getResponseProperty('PostalCode');\n this.country = this.getResponseProperty('Country');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TaxRateResponse extends BaseResponse {\n id: string;\n country: string;\n state: string;\n postalCode: string;\n rate: number;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.country = this.getResponseProperty('Country');\n this.state = this.getResponseProperty('State');\n this.postalCode = this.getResponseProperty('PostalCode');\n this.rate = this.getResponseProperty('Rate');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TwoFactorAuthenticatorResponse extends BaseResponse {\n enabled: boolean;\n key: string;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty('Enabled');\n this.key = this.getResponseProperty('Key');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TwoFactorDuoResponse extends BaseResponse {\n enabled: boolean;\n host: string;\n secretKey: string;\n integrationKey: string;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty('Enabled');\n this.host = this.getResponseProperty('Host');\n this.secretKey = this.getResponseProperty('SecretKey');\n this.integrationKey = this.getResponseProperty('IntegrationKey');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TwoFactorEmailResponse extends BaseResponse {\n enabled: boolean;\n email: string;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty('Enabled');\n this.email = this.getResponseProperty('Email');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { TwoFactorProviderType } from '../../enums/twoFactorProviderType';\n\nexport class TwoFactorProviderResponse extends BaseResponse {\n enabled: boolean;\n type: TwoFactorProviderType;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty('Enabled');\n this.type = this.getResponseProperty('Type');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TwoFactorRecoverResponse extends BaseResponse {\n code: string;\n\n constructor(response: any) {\n super(response);\n this.code = this.getResponseProperty('Code');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TwoFactorYubiKeyResponse extends BaseResponse {\n enabled: boolean;\n key1: string;\n key2: string;\n key3: string;\n key4: string;\n key5: string;\n nfc: boolean;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty('Enabled');\n this.key1 = this.getResponseProperty('Key1');\n this.key2 = this.getResponseProperty('Key2');\n this.key3 = this.getResponseProperty('Key3');\n this.key4 = this.getResponseProperty('Key4');\n this.key5 = this.getResponseProperty('Key5');\n this.nfc = this.getResponseProperty('Nfc');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class UserKeyResponse extends BaseResponse {\n userId: string;\n publicKey: string;\n\n constructor(response: any) {\n super(response);\n this.userId = this.getResponseProperty('UserId');\n this.publicKey = this.getResponseProperty('PublicKey');\n }\n}\n","/**\n * Use as a Decorator on async functions, it will limit how many times the function can be\n * in-flight at a time.\n *\n * Calls beyond the limit will be queued, and run when one of the active calls finishes\n */\nexport function throttle(limit: number, throttleKey: (args: any[]) => string) {\n return (target: any, propertyKey: string | symbol,\n descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise>) => {\n const originalMethod: () => Promise = descriptor.value;\n const allThrottles = new Map void)[]>>();\n\n const getThrottles = (obj: any) => {\n let throttles = allThrottles.get(obj);\n if (throttles != null) {\n return throttles;\n }\n throttles = new Map void)[]>();\n allThrottles.set(obj, throttles);\n return throttles;\n };\n\n return {\n value: function(...args: any[]) {\n const throttles = getThrottles(this);\n const argsThrottleKey = throttleKey(args);\n let queue = throttles.get(argsThrottleKey);\n if (queue == null) {\n queue = [];\n throttles.set(argsThrottleKey, queue);\n }\n\n return new Promise((resolve, reject) => {\n const exec = () => {\n const onFinally = () => {\n queue.splice(queue.indexOf(exec), 1);\n if (queue.length >= limit) {\n queue[limit - 1]();\n } else if (queue.length === 0) {\n throttles.delete(argsThrottleKey);\n if (throttles.size === 0) {\n allThrottles.delete(this);\n }\n }\n };\n originalMethod.apply(this, args).then((val: any) => {\n onFinally();\n return val;\n }).catch((err: any) => {\n onFinally();\n throw err;\n }).then(resolve, reject);\n };\n queue.push(exec);\n if (queue.length <= limit) {\n exec();\n }\n });\n },\n };\n };\n}\n","export class CipherBulkMoveRequest {\n ids: string[];\n folderId: string;\n\n constructor(ids: string[], folderId: string) {\n this.ids = ids == null ? [] : ids;\n this.folderId = folderId;\n }\n}\n","export class CipherBulkRestoreRequest {\n ids: string[];\n\n constructor(ids: string[]) {\n this.ids = ids == null ? [] : ids;\n }\n}\n","import { CipherWithIdRequest } from './cipherWithIdRequest';\n\nimport { Cipher } from '../domain/cipher';\n\nexport class CipherBulkShareRequest {\n ciphers: CipherWithIdRequest[];\n collectionIds: string[];\n\n constructor(ciphers: Cipher[], collectionIds: string[]) {\n if (ciphers != null) {\n this.ciphers = [];\n ciphers.forEach(c => {\n this.ciphers.push(new CipherWithIdRequest(c));\n });\n }\n this.collectionIds = collectionIds;\n }\n}\n","import { CipherRequest } from './cipherRequest';\n\nimport { Cipher } from '../domain/cipher';\n\nexport class CipherShareRequest {\n cipher: CipherRequest;\n collectionIds: string[];\n\n constructor(cipher: Cipher) {\n this.cipher = new CipherRequest(cipher);\n this.collectionIds = cipher.collectionIds;\n }\n}\n","import { CipherView } from '../view';\n\nconst CacheTTL = 3000;\n\nexport class SortedCiphersCache {\n private readonly sortedCiphersByUrl: Map = new Map();\n private readonly timeouts: Map = new Map();\n\n constructor(private readonly comparator: (a: CipherView, b: CipherView) => number) { }\n\n isCached(url: string) {\n return this.sortedCiphersByUrl.has(url);\n }\n\n addCiphers(url: string, ciphers: CipherView[]) {\n ciphers.sort(this.comparator);\n this.sortedCiphersByUrl.set(url, new Ciphers(ciphers));\n this.resetTimer(url);\n }\n\n getLastUsed(url: string) {\n this.resetTimer(url);\n return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getLastUsed() : null;\n }\n\n getLastLaunched(url: string) {\n return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getLastLaunched() : null;\n }\n\n getNext(url: string) {\n this.resetTimer(url);\n return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getNext() : null;\n }\n\n updateLastUsedIndex(url: string) {\n if (this.isCached(url)) {\n this.sortedCiphersByUrl.get(url).updateLastUsedIndex();\n }\n }\n\n clear() {\n this.sortedCiphersByUrl.clear();\n this.timeouts.clear();\n }\n\n private resetTimer(url: string) {\n clearTimeout(this.timeouts.get(url));\n this.timeouts.set(url, setTimeout(() => {\n this.sortedCiphersByUrl.delete(url);\n this.timeouts.delete(url);\n }, CacheTTL));\n }\n}\n\nclass Ciphers {\n lastUsedIndex = -1;\n\n constructor(private readonly ciphers: CipherView[]) { }\n\n getLastUsed() {\n this.lastUsedIndex = Math.max(this.lastUsedIndex, 0);\n return this.ciphers[this.lastUsedIndex];\n }\n\n getLastLaunched() {\n const usedCiphers = this.ciphers.filter(cipher => cipher.localData?.lastLaunched);\n const sortedCiphers = usedCiphers.sort((x, y) => y.localData.lastLaunched.valueOf() - x.localData.lastLaunched.valueOf());\n return sortedCiphers[0];\n }\n\n getNextIndex() {\n return (this.lastUsedIndex + 1) % this.ciphers.length;\n }\n\n getNext() {\n return this.ciphers[this.getNextIndex()];\n }\n\n updateLastUsedIndex() {\n this.lastUsedIndex = this.getNextIndex();\n }\n}\n","export class TreeNode {\n parent: T;\n node: T;\n children: TreeNode[] = [];\n\n constructor(node: T, name: string, parent: T) {\n this.parent = parent;\n this.node = node;\n this.node.name = name;\n }\n}\n\nexport interface ITreeNodeObject {\n id: string;\n name: string;\n}\n","export class EncArrayBuffer {\n constructor(public buffer: ArrayBuffer) { }\n}\n","import Domain from './domainBase';\n\nexport class PasswordGeneratorPolicyOptions extends Domain {\n defaultType: string = '';\n minLength: number = 0;\n useUppercase: boolean = false;\n useLowercase: boolean = false;\n useNumbers: boolean = false;\n numberCount: number = 0;\n useSpecial: boolean = false;\n specialCount: number = 0;\n minNumberWords: number = 0;\n capitalize: boolean = false;\n includeNumber: boolean = false;\n\n inEffect() {\n return this.defaultType !== '' ||\n this.minLength > 0 ||\n this.numberCount > 0 ||\n this.specialCount > 0 ||\n this.useUppercase ||\n this.useLowercase ||\n this.useNumbers ||\n this.useSpecial ||\n this.minNumberWords > 0 ||\n this.capitalize ||\n this.includeNumber;\n }\n}\n","import { ProfileOrganizationResponse } from '../response/profileOrganizationResponse';\n\nimport { OrganizationUserStatusType } from '../../enums/organizationUserStatusType';\nimport { OrganizationUserType } from '../../enums/organizationUserType';\nimport { PermissionsApi } from '../api/permissionsApi';\n\nexport class OrganizationData {\n id: string;\n name: string;\n status: OrganizationUserStatusType;\n type: OrganizationUserType;\n enabled: boolean;\n usePolicies: boolean;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useBusinessPortal: boolean;\n useSso: boolean;\n selfHost: boolean;\n usersGetPremium: boolean;\n seats: number;\n maxCollections: number;\n maxStorageGb?: number;\n ssoBound: boolean;\n identifier: string;\n permissions: PermissionsApi;\n resetPasswordKey: string;\n userId: string;\n\n constructor(response: ProfileOrganizationResponse) {\n this.id = response.id;\n this.name = response.name;\n this.status = response.status;\n this.type = response.type;\n this.enabled = response.enabled;\n this.usePolicies = response.usePolicies;\n this.useGroups = response.useGroups;\n this.useDirectory = response.useDirectory;\n this.useEvents = response.useEvents;\n this.useTotp = response.useTotp;\n this.use2fa = response.use2fa;\n this.useApi = response.useApi;\n this.useBusinessPortal = response.useBusinessPortal;\n this.useSso = response.useSso;\n this.selfHost = response.selfHost;\n this.usersGetPremium = response.usersGetPremium;\n this.seats = response.seats;\n this.maxCollections = response.maxCollections;\n this.maxStorageGb = response.maxStorageGb;\n this.ssoBound = response.ssoBound;\n this.identifier = response.identifier;\n this.permissions = response.permissions;\n this.resetPasswordKey = response.resetPasswordKey;\n this.userId = response.userId;\n }\n}\n","import { SendFileApi } from '../api/sendFileApi';\n\nexport class SendFileData {\n id: string;\n fileName: string;\n key: string;\n size: string;\n sizeName: string;\n\n constructor(data?: SendFileApi) {\n if (data == null) {\n return;\n }\n\n this.id = data.id;\n this.fileName = data.fileName;\n this.key = data.key;\n this.size = data.size;\n this.sizeName = data.sizeName;\n }\n}\n","import { SendTextApi } from '../api/sendTextApi';\n\nexport class SendTextData {\n text: string;\n hidden: boolean;\n\n constructor(data?: SendTextApi) {\n if (data == null) {\n return;\n }\n\n this.text = data.text;\n this.hidden = data.hidden;\n }\n}\n","import { I18nService as BaseI18nService } from 'jslib/services/i18n.service';\n\nexport class I18nService extends BaseI18nService {\n constructor(systemLanguage: string, localesDirectory: string) {\n super(systemLanguage || 'en-US', localesDirectory, async (formattedLocale: string) => {\n const filePath = this.localesDirectory + '/' + formattedLocale + '/messages.json?cache=' +\n process.env.CACHE_TAG;\n const localesResult = await fetch(filePath);\n const locales = await localesResult.json();\n return locales;\n });\n\n this.supportedTranslationLocales = [\n 'en', 'ca', 'cs', 'da', 'de', 'el', 'en-GB', 'es', 'et', 'fr', 'he', 'it', 'ja', 'ko', 'lv', 'ml', 'nb',\n 'nl', 'pl', 'pt-PT', 'pt-BR', 'ru', 'sk', 'sv', 'uk', 'zh-CN', 'zh-TW',\n ];\n }\n}\n","import { StorageService } from 'jslib/abstractions/storage.service';\n\nexport class MemoryStorageService implements StorageService {\n private store = new Map();\n\n get(key: string): Promise {\n if (this.store.has(key)) {\n const obj = this.store.get(key);\n return Promise.resolve(obj as T);\n }\n return Promise.resolve(null);\n }\n\n save(key: string, obj: any): Promise {\n if (obj == null) {\n return this.remove(key);\n }\n this.store.set(key, obj);\n return Promise.resolve();\n }\n\n remove(key: string): Promise {\n this.store.delete(key);\n return Promise.resolve();\n }\n}\n","import Swal, { SweetAlertIcon } from 'sweetalert2/dist/sweetalert2.js';\n\nimport { DeviceType } from 'jslib/enums/deviceType';\n\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { MessagingService } from 'jslib/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\n\nexport class WebPlatformUtilsService implements PlatformUtilsService {\n identityClientId: string = 'web';\n\n private browserCache: DeviceType = null;\n\n constructor(private i18nService: I18nService, private messagingService: MessagingService) { }\n\n getDevice(): DeviceType {\n if (this.browserCache != null) {\n return this.browserCache;\n }\n\n if (navigator.userAgent.indexOf(' Firefox/') !== -1 || navigator.userAgent.indexOf(' Gecko/') !== -1) {\n this.browserCache = DeviceType.FirefoxBrowser;\n } else if (navigator.userAgent.indexOf(' OPR/') >= 0) {\n this.browserCache = DeviceType.OperaBrowser;\n } else if (navigator.userAgent.indexOf(' Edg/') !== -1) {\n this.browserCache = DeviceType.EdgeBrowser;\n } else if (navigator.userAgent.indexOf(' Vivaldi/') !== -1) {\n this.browserCache = DeviceType.VivaldiBrowser;\n } else if (navigator.userAgent.indexOf(' Safari/') !== -1 && navigator.userAgent.indexOf('Chrome') === -1) {\n this.browserCache = DeviceType.SafariBrowser;\n } else if ((window as any).chrome && navigator.userAgent.indexOf(' Chrome/') !== -1) {\n this.browserCache = DeviceType.ChromeBrowser;\n } else if (navigator.userAgent.indexOf(' Trident/') !== -1) {\n this.browserCache = DeviceType.IEBrowser;\n } else {\n this.browserCache = DeviceType.UnknownBrowser;\n }\n\n return this.browserCache;\n }\n\n getDeviceString(): string {\n const device = DeviceType[this.getDevice()].toLowerCase();\n return device.replace('browser', '');\n }\n\n isFirefox(): boolean {\n return this.getDevice() === DeviceType.FirefoxBrowser;\n }\n\n isChrome(): boolean {\n return this.getDevice() === DeviceType.ChromeBrowser;\n }\n\n isEdge(): boolean {\n return this.getDevice() === DeviceType.EdgeBrowser;\n }\n\n isOpera(): boolean {\n return this.getDevice() === DeviceType.OperaBrowser;\n }\n\n isVivaldi(): boolean {\n return this.getDevice() === DeviceType.VivaldiBrowser;\n }\n\n isSafari(): boolean {\n return this.getDevice() === DeviceType.SafariBrowser;\n }\n\n isIE(): boolean {\n return this.getDevice() === DeviceType.IEBrowser;\n }\n\n isMacAppStore(): boolean {\n return false;\n }\n\n isViewOpen(): Promise {\n return Promise.resolve(false);\n }\n\n lockTimeout(): number {\n return null;\n }\n\n launchUri(uri: string, options?: any): void {\n const a = document.createElement('a');\n a.href = uri;\n if (options == null || !options.sameWindow) {\n a.target = '_blank';\n a.rel = 'noreferrer noopener';\n }\n a.classList.add('d-none');\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n }\n\n saveFile(win: Window, blobData: any, blobOptions: any, fileName: string): void {\n let blob: Blob = null;\n let type: string = null;\n const fileNameLower = fileName.toLowerCase();\n let doDownload = true;\n if (fileNameLower.endsWith('.pdf')) {\n type = 'application/pdf';\n doDownload = false;\n } else if (fileNameLower.endsWith('.xlsx')) {\n type = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n } else if (fileNameLower.endsWith('.docx')) {\n type = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n } else if (fileNameLower.endsWith('.pptx')) {\n type = 'application/vnd.openxmlformats-officedocument.presentationml.presentation';\n } else if (fileNameLower.endsWith('.csv')) {\n type = 'text/csv';\n } else if (fileNameLower.endsWith('.png')) {\n type = 'image/png';\n } else if (fileNameLower.endsWith('.jpg') || fileNameLower.endsWith('.jpeg')) {\n type = 'image/jpeg';\n } else if (fileNameLower.endsWith('.gif')) {\n type = 'image/gif';\n }\n if (type != null) {\n blobOptions = blobOptions || {};\n if (blobOptions.type == null) {\n blobOptions.type = type;\n }\n }\n if (blobOptions != null && !this.isIE()) {\n blob = new Blob([blobData], blobOptions);\n } else {\n blob = new Blob([blobData]);\n }\n if (navigator.msSaveOrOpenBlob) {\n navigator.msSaveBlob(blob, fileName);\n } else {\n const a = win.document.createElement('a');\n if (doDownload) {\n a.download = fileName;\n } else if (!this.isSafari()) {\n a.target = '_blank';\n }\n a.href = URL.createObjectURL(blob);\n a.style.position = 'fixed';\n win.document.body.appendChild(a);\n a.click();\n win.document.body.removeChild(a);\n }\n }\n\n getApplicationVersion(): Promise {\n return Promise.resolve(process.env.APPLICATION_VERSION || '-');\n }\n\n supportsWebAuthn(win: Window): boolean {\n return (typeof(PublicKeyCredential) !== 'undefined');\n }\n\n supportsDuo(): boolean {\n return true;\n }\n\n showToast(type: 'error' | 'success' | 'warning' | 'info', title: string, text: string | string[],\n options?: any): void {\n this.messagingService.send('showToast', {\n text: text,\n title: title,\n type: type,\n options: options,\n });\n }\n\n async showDialog(body: string, title?: string, confirmText?: string, cancelText?: string, type?: string,\n bodyIsHtml: boolean = false) {\n let iconClasses: string = null;\n if (type != null) {\n // If you add custom types to this part, the type to SweetAlertIcon cast below needs to be changed.\n switch (type) {\n case 'success':\n iconClasses = 'fa-check text-success';\n break;\n case 'warning':\n iconClasses = 'fa-warning text-warning';\n break;\n case 'error':\n iconClasses = 'fa-bolt text-danger';\n break;\n case 'info':\n iconClasses = 'fa-info-circle text-info';\n break;\n default:\n break;\n }\n }\n\n const iconHtmlStr = iconClasses != null ? `` : undefined;\n const confirmed = await Swal.fire({\n heightAuto: false,\n buttonsStyling: false,\n icon: type as SweetAlertIcon, // required to be any of the SweetAlertIcons to output the iconHtml.\n iconHtml: iconHtmlStr,\n text: bodyIsHtml ? null : body,\n html: bodyIsHtml ? body : null,\n title: title,\n showCancelButton: (cancelText != null),\n cancelButtonText: cancelText,\n showConfirmButton: true,\n confirmButtonText: confirmText == null ? this.i18nService.t('ok') : confirmText,\n });\n\n return confirmed.value;\n }\n\n isDev(): boolean {\n return process.env.ENV === 'development';\n }\n\n isSelfHost(): boolean {\n return process.env.SELF_HOST.toString() === 'true';\n }\n\n copyToClipboard(text: string, options?: any): void {\n let win = window;\n let doc = window.document;\n if (options && (options.window || options.win)) {\n win = options.window || options.win;\n doc = win.document;\n } else if (options && options.doc) {\n doc = options.doc;\n }\n if ((win as any).clipboardData && (win as any).clipboardData.setData) {\n // IE specific code path to prevent textarea being shown while dialog is visible.\n (win as any).clipboardData.setData('Text', text);\n } else if (doc.queryCommandSupported && doc.queryCommandSupported('copy')) {\n const textarea = doc.createElement('textarea');\n textarea.textContent = text;\n // Prevent scrolling to bottom of page in MS Edge.\n textarea.style.position = 'fixed';\n let copyEl = doc.body;\n // For some reason copy command won't work when modal is open if appending to body\n if (doc.body.classList.contains('modal-open')) {\n copyEl = doc.body.querySelector('.modal');\n }\n copyEl.appendChild(textarea);\n textarea.select();\n try {\n // Security exception may be thrown by some browsers.\n doc.execCommand('copy');\n } catch (e) {\n // tslint:disable-next-line\n console.warn('Copy to clipboard failed.', e);\n } finally {\n copyEl.removeChild(textarea);\n }\n }\n }\n\n readFromClipboard(options?: any): Promise {\n throw new Error('Cannot read from clipboard on web.');\n }\n\n supportsBiometric() {\n return Promise.resolve(false);\n }\n\n authenticateBiometric() {\n return Promise.resolve(false);\n }\n\n supportsSecureStorage() {\n return false;\n }\n\n getDefaultSystemTheme() {\n return Promise.resolve(null as 'light' | 'dark');\n }\n\n onDefaultSystemThemeChange() {\n /* noop */\n }\n}\n","import { EventType } from '../enums/eventType';\n\nimport { EventData } from '../models/data/eventData';\n\nimport { EventRequest } from '../models/request/eventRequest';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { CipherService } from '../abstractions/cipher.service';\nimport { EventService as EventServiceAbstraction } from '../abstractions/event.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\n\nimport { ConstantsService } from './constants.service';\n\nexport class EventService implements EventServiceAbstraction {\n private inited = false;\n\n constructor(private storageService: StorageService, private apiService: ApiService,\n private userService: UserService, private cipherService: CipherService) { }\n\n init(checkOnInterval: boolean) {\n if (this.inited) {\n return;\n }\n\n this.inited = true;\n if (checkOnInterval) {\n this.uploadEvents();\n setInterval(() => this.uploadEvents(), 60 * 1000); // check every 60 seconds\n }\n }\n\n async collect(eventType: EventType, cipherId: string = null, uploadImmediately = false): Promise {\n const authed = await this.userService.isAuthenticated();\n if (!authed) {\n return;\n }\n const organizations = await this.userService.getAllOrganizations();\n if (organizations == null) {\n return;\n }\n const orgIds = new Set(organizations.filter(o => o.useEvents).map(o => o.id));\n if (orgIds.size === 0) {\n return;\n }\n if (cipherId != null) {\n const cipher = await this.cipherService.get(cipherId);\n if (cipher == null || cipher.organizationId == null || !orgIds.has(cipher.organizationId)) {\n return;\n }\n }\n let eventCollection = await this.storageService.get(ConstantsService.eventCollectionKey);\n if (eventCollection == null) {\n eventCollection = [];\n }\n const event = new EventData();\n event.type = eventType;\n event.cipherId = cipherId;\n event.date = new Date().toISOString();\n eventCollection.push(event);\n await this.storageService.save(ConstantsService.eventCollectionKey, eventCollection);\n if (uploadImmediately) {\n await this.uploadEvents();\n }\n }\n\n async uploadEvents(): Promise {\n const authed = await this.userService.isAuthenticated();\n if (!authed) {\n return;\n }\n const eventCollection = await this.storageService.get(ConstantsService.eventCollectionKey);\n if (eventCollection == null || eventCollection.length === 0) {\n return;\n }\n const request = eventCollection.map(e => {\n const req = new EventRequest();\n req.type = e.type;\n req.cipherId = e.cipherId;\n req.date = e.date;\n return req;\n });\n try {\n await this.apiService.postEventsCollect(request);\n this.clearEvents();\n } catch { }\n }\n\n async clearEvents(): Promise {\n await this.storageService.remove(ConstantsService.eventCollectionKey);\n }\n}\n","import { EventType } from '../../enums/eventType';\n\nexport class EventData {\n type: EventType;\n cipherId: string;\n date: string;\n}\n","import { EventType } from '../../enums/eventType';\n\nexport class EventRequest {\n type: EventType;\n cipherId: string;\n date: string;\n}\n","import * as papa from 'papaparse';\n\nimport { CipherType } from '../enums/cipherType';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { CipherService } from '../abstractions/cipher.service';\nimport { ExportService as ExportServiceAbstraction } from '../abstractions/export.service';\nimport { FolderService } from '../abstractions/folder.service';\n\nimport { CipherView } from '../models/view/cipherView';\nimport { CollectionView } from '../models/view/collectionView';\nimport { FolderView } from '../models/view/folderView';\n\nimport { Cipher } from '../models/domain/cipher';\nimport { Collection } from '../models/domain/collection';\nimport { Folder } from '../models/domain/folder';\n\nimport { CipherData } from '../models/data/cipherData';\nimport { CollectionData } from '../models/data/collectionData';\nimport { CollectionDetailsResponse } from '../models/response/collectionResponse';\n\nimport { CipherWithIds as CipherExport } from '../models/export/cipherWithIds';\nimport { CollectionWithId as CollectionExport } from '../models/export/collectionWithId';\nimport { FolderWithId as FolderExport } from '../models/export/folderWithId';\n\nexport class ExportService implements ExportServiceAbstraction {\n constructor(private folderService: FolderService, private cipherService: CipherService,\n private apiService: ApiService) { }\n\n async getExport(format: 'csv' | 'json' | 'encrypted_json' = 'csv'): Promise {\n if (format === 'encrypted_json') {\n return this.getEncryptedExport();\n } else {\n return this.getDecryptedExport(format);\n }\n }\n\n async getOrganizationExport(organizationId: string,\n format: 'csv' | 'json' | 'encrypted_json' = 'csv'): Promise {\n if (format === 'encrypted_json') {\n return this.getOrganizationEncryptedExport(organizationId);\n } else {\n return this.getOrganizationDecryptedExport(organizationId, format);\n }\n }\n\n getFileName(prefix: string = null, extension: string = 'csv'): string {\n const now = new Date();\n const dateString =\n now.getFullYear() + '' + this.padNumber(now.getMonth() + 1, 2) + '' + this.padNumber(now.getDate(), 2) +\n this.padNumber(now.getHours(), 2) + '' + this.padNumber(now.getMinutes(), 2) +\n this.padNumber(now.getSeconds(), 2);\n\n return 'bitwarden' + (prefix ? ('_' + prefix) : '') + '_export_' + dateString + '.' + extension;\n }\n\n private async getDecryptedExport(format: 'json' | 'csv'): Promise {\n let decFolders: FolderView[] = [];\n let decCiphers: CipherView[] = [];\n const promises = [];\n\n promises.push(this.folderService.getAllDecrypted().then(folders => {\n decFolders = folders;\n }));\n\n promises.push(this.cipherService.getAllDecrypted().then(ciphers => {\n decCiphers = ciphers.filter(f => f.deletedDate == null);\n }));\n\n await Promise.all(promises);\n\n if (format === 'csv') {\n const foldersMap = new Map();\n decFolders.forEach(f => {\n if (f.id != null) {\n foldersMap.set(f.id, f);\n }\n });\n\n const exportCiphers: any[] = [];\n decCiphers.forEach(c => {\n // only export logins and secure notes\n if (c.type !== CipherType.Login && c.type !== CipherType.SecureNote) {\n return;\n }\n if (c.organizationId != null) {\n return;\n }\n\n const cipher: any = {};\n cipher.folder = c.folderId != null && foldersMap.has(c.folderId) ?\n foldersMap.get(c.folderId).name : null;\n cipher.favorite = c.favorite ? 1 : null;\n this.buildCommonCipher(cipher, c);\n exportCiphers.push(cipher);\n });\n\n return papa.unparse(exportCiphers);\n } else {\n const jsonDoc: any = {\n encrypted: false,\n folders: [],\n items: [],\n };\n\n decFolders.forEach(f => {\n if (f.id == null) {\n return;\n }\n const folder = new FolderExport();\n folder.build(f);\n jsonDoc.folders.push(folder);\n });\n\n decCiphers.forEach(c => {\n if (c.organizationId != null) {\n return;\n }\n const cipher = new CipherExport();\n cipher.build(c);\n cipher.collectionIds = null;\n jsonDoc.items.push(cipher);\n });\n\n return JSON.stringify(jsonDoc, null, ' ');\n }\n }\n\n private async getEncryptedExport(): Promise {\n let folders: Folder[] = [];\n let ciphers: Cipher[] = [];\n const promises = [];\n\n promises.push(this.folderService.getAll().then(f => {\n folders = f;\n }));\n\n promises.push(this.cipherService.getAll().then(c => {\n ciphers = c.filter(f => f.deletedDate == null);\n }));\n\n await Promise.all(promises);\n\n const jsonDoc: any = {\n encrypted: true,\n folders: [],\n items: [],\n };\n\n folders.forEach(f => {\n if (f.id == null) {\n return;\n }\n const folder = new FolderExport();\n folder.build(f);\n jsonDoc.folders.push(folder);\n });\n\n ciphers.forEach(c => {\n if (c.organizationId != null) {\n return;\n }\n const cipher = new CipherExport();\n cipher.build(c);\n cipher.collectionIds = null;\n jsonDoc.items.push(cipher);\n });\n\n return JSON.stringify(jsonDoc, null, ' ');\n }\n\n private async getOrganizationDecryptedExport(organizationId: string, format: 'json' | 'csv'): Promise {\n const decCollections: CollectionView[] = [];\n const decCiphers: CipherView[] = [];\n const promises = [];\n\n promises.push(this.apiService.getCollections(organizationId).then(collections => {\n const collectionPromises: any = [];\n if (collections != null && collections.data != null && collections.data.length > 0) {\n collections.data.forEach(c => {\n const collection = new Collection(new CollectionData(c as CollectionDetailsResponse));\n collectionPromises.push(collection.decrypt().then(decCol => {\n decCollections.push(decCol);\n }));\n });\n }\n return Promise.all(collectionPromises);\n }));\n\n promises.push(this.apiService.getCiphersOrganization(organizationId).then(ciphers => {\n const cipherPromises: any = [];\n if (ciphers != null && ciphers.data != null && ciphers.data.length > 0) {\n ciphers.data.filter(c => c.deletedDate === null).forEach(c => {\n const cipher = new Cipher(new CipherData(c));\n cipherPromises.push(cipher.decrypt().then(decCipher => {\n decCiphers.push(decCipher);\n }));\n });\n }\n return Promise.all(cipherPromises);\n }));\n\n await Promise.all(promises);\n\n if (format === 'csv') {\n const collectionsMap = new Map();\n decCollections.forEach(c => {\n collectionsMap.set(c.id, c);\n });\n\n const exportCiphers: any[] = [];\n decCiphers.forEach(c => {\n // only export logins and secure notes\n if (c.type !== CipherType.Login && c.type !== CipherType.SecureNote) {\n return;\n }\n\n const cipher: any = {};\n cipher.collections = [];\n if (c.collectionIds != null) {\n cipher.collections = c.collectionIds.filter(id => collectionsMap.has(id))\n .map(id => collectionsMap.get(id).name);\n }\n this.buildCommonCipher(cipher, c);\n exportCiphers.push(cipher);\n });\n\n return papa.unparse(exportCiphers);\n } else {\n const jsonDoc: any = {\n encrypted: false,\n collections: [],\n items: [],\n };\n\n decCollections.forEach(c => {\n const collection = new CollectionExport();\n collection.build(c);\n jsonDoc.collections.push(collection);\n });\n\n decCiphers.forEach(c => {\n const cipher = new CipherExport();\n cipher.build(c);\n jsonDoc.items.push(cipher);\n });\n return JSON.stringify(jsonDoc, null, ' ');\n }\n }\n\n private async getOrganizationEncryptedExport(organizationId: string): Promise {\n const collections: Collection[] = [];\n const ciphers: Cipher[] = [];\n const promises = [];\n\n promises.push(this.apiService.getCollections(organizationId).then(c => {\n const collectionPromises: any = [];\n if (c != null && c.data != null && c.data.length > 0) {\n c.data.forEach(r => {\n const collection = new Collection(new CollectionData(r as CollectionDetailsResponse));\n collections.push(collection);\n });\n }\n return Promise.all(collectionPromises);\n }));\n\n promises.push(this.apiService.getCiphersOrganization(organizationId).then(c => {\n const cipherPromises: any = [];\n if (c != null && c.data != null && c.data.length > 0) {\n c.data.filter(item => item.deletedDate === null).forEach(item => {\n const cipher = new Cipher(new CipherData(item));\n ciphers.push(cipher);\n });\n }\n return Promise.all(cipherPromises);\n }));\n\n await Promise.all(promises);\n\n const jsonDoc: any = {\n encrypted: true,\n collections: [],\n items: [],\n };\n\n collections.forEach(c => {\n const collection = new CollectionExport();\n collection.build(c);\n jsonDoc.collections.push(collection);\n });\n\n ciphers.forEach(c => {\n const cipher = new CipherExport();\n cipher.build(c);\n jsonDoc.items.push(cipher);\n });\n return JSON.stringify(jsonDoc, null, ' ');\n }\n\n private padNumber(num: number, width: number, padCharacter: string = '0'): string {\n const numString = num.toString();\n return numString.length >= width ? numString :\n new Array(width - numString.length + 1).join(padCharacter) + numString;\n }\n\n private buildCommonCipher(cipher: any, c: CipherView) {\n cipher.type = null;\n cipher.name = c.name;\n cipher.notes = c.notes;\n cipher.fields = null;\n // Login props\n cipher.login_uri = null;\n cipher.login_username = null;\n cipher.login_password = null;\n cipher.login_totp = null;\n\n if (c.fields) {\n c.fields.forEach((f: any) => {\n if (!cipher.fields) {\n cipher.fields = '';\n } else {\n cipher.fields += '\\n';\n }\n\n cipher.fields += ((f.name || '') + ': ' + f.value);\n });\n }\n\n switch (c.type) {\n case CipherType.Login:\n cipher.type = 'login';\n cipher.login_username = c.login.username;\n cipher.login_password = c.login.password;\n cipher.login_totp = c.login.totp;\n\n if (c.login.uris) {\n cipher.login_uri = [];\n c.login.uris.forEach(u => {\n cipher.login_uri.push(u.uri);\n });\n }\n break;\n case CipherType.SecureNote:\n cipher.type = 'note';\n break;\n default:\n return;\n }\n\n return cipher;\n }\n}\n","import { CipherType } from '../../enums/cipherType';\n\nimport { CipherView } from '../view/cipherView';\n\nimport { Cipher as CipherDomain } from '../domain/cipher';\nimport { EncString } from '../domain/encString';\n\nimport { Card } from './card';\nimport { Field } from './field';\nimport { Identity } from './identity';\nimport { Login } from './login';\nimport { SecureNote } from './secureNote';\n\nexport class Cipher {\n static template(): Cipher {\n const req = new Cipher();\n req.organizationId = null;\n req.collectionIds = null;\n req.folderId = null;\n req.type = CipherType.Login;\n req.name = 'Item name';\n req.notes = 'Some notes about this item.';\n req.favorite = false;\n req.fields = [];\n req.login = null;\n req.secureNote = null;\n req.card = null;\n req.identity = null;\n return req;\n }\n\n static toView(req: Cipher, view = new CipherView()) {\n view.type = req.type;\n view.folderId = req.folderId;\n if (view.organizationId == null) {\n view.organizationId = req.organizationId;\n }\n if (view.collectionIds || req.collectionIds) {\n const set = new Set((view.collectionIds ?? []).concat(req.collectionIds ?? []));\n view.collectionIds = Array.from(set.values());\n }\n view.name = req.name;\n view.notes = req.notes;\n view.favorite = req.favorite;\n\n if (req.fields != null) {\n view.fields = req.fields.map(f => Field.toView(f));\n }\n\n switch (req.type) {\n case CipherType.Login:\n view.login = Login.toView(req.login);\n break;\n case CipherType.SecureNote:\n view.secureNote = SecureNote.toView(req.secureNote);\n break;\n case CipherType.Card:\n view.card = Card.toView(req.card);\n break;\n case CipherType.Identity:\n view.identity = Identity.toView(req.identity);\n break;\n }\n\n return view;\n }\n\n static toDomain(req: Cipher, domain = new CipherDomain()) {\n domain.type = req.type;\n domain.folderId = req.folderId;\n if (domain.organizationId == null) {\n domain.organizationId = req.organizationId;\n }\n domain.name = req.name != null ? new EncString(req.name) : null;\n domain.notes = req.notes != null ? new EncString(req.notes) : null;\n domain.favorite = req.favorite;\n\n if (req.fields != null) {\n domain.fields = req.fields.map(f => Field.toDomain(f));\n }\n\n switch (req.type) {\n case CipherType.Login:\n domain.login = Login.toDomain(req.login);\n break;\n case CipherType.SecureNote:\n domain.secureNote = SecureNote.toDomain(req.secureNote);\n break;\n case CipherType.Card:\n domain.card = Card.toDomain(req.card);\n break;\n case CipherType.Identity:\n domain.identity = Identity.toDomain(req.identity);\n break;\n }\n\n return domain;\n }\n\n type: CipherType;\n folderId: string;\n organizationId: string;\n collectionIds: string[];\n name: string;\n notes: string;\n favorite: boolean;\n fields: Field[];\n login: Login;\n secureNote: SecureNote;\n card: Card;\n identity: Identity;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CipherView | CipherDomain) {\n this.organizationId = o.organizationId;\n this.folderId = o.folderId;\n this.type = o.type;\n\n if (o instanceof CipherView) {\n this.name = o.name;\n this.notes = o.notes;\n } else {\n this.name = o.name?.encryptedString;\n this.notes = o.notes?.encryptedString;\n }\n\n this.favorite = o.favorite;\n\n if (o.fields != null) {\n if (o instanceof CipherView) {\n this.fields = o.fields.map(f => new Field(f));\n } else {\n this.fields = o.fields.map(f => new Field(f));\n }\n }\n\n switch (o.type) {\n case CipherType.Login:\n this.login = new Login(o.login);\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNote(o.secureNote);\n break;\n case CipherType.Card:\n this.card = new Card(o.card);\n break;\n case CipherType.Identity:\n this.identity = new Identity(o.identity);\n break;\n }\n }\n}\n","import { CardView } from '../view/cardView';\n\nimport { Card as CardDomain } from '../domain/card';\nimport { EncString } from '../domain/encString';\n\nexport class Card {\n static template(): Card {\n const req = new Card();\n req.cardholderName = 'John Doe';\n req.brand = 'visa';\n req.number = '4242424242424242';\n req.expMonth = '04';\n req.expYear = '2023';\n req.code = '123';\n return req;\n }\n\n static toView(req: Card, view = new CardView()) {\n view.cardholderName = req.cardholderName;\n view.brand = req.brand;\n view.number = req.number;\n view.expMonth = req.expMonth;\n view.expYear = req.expYear;\n view.code = req.code;\n return view;\n }\n\n static toDomain(req: Card, domain = new CardDomain()) {\n domain.cardholderName = req.cardholderName != null ? new EncString(req.cardholderName) : null;\n domain.brand = req.brand != null ? new EncString(req.brand) : null;\n domain.number = req.number != null ? new EncString(req.number) : null;\n domain.expMonth = req.expMonth != null ? new EncString(req.expMonth) : null;\n domain.expYear = req.expYear != null ? new EncString(req.expYear) : null;\n domain.code = req.code != null ? new EncString(req.code) : null;\n return domain;\n }\n\n cardholderName: string;\n brand: string;\n number: string;\n expMonth: string;\n expYear: string;\n code: string;\n\n constructor(o?: CardView | CardDomain) {\n if (o == null) {\n return;\n }\n\n if (o instanceof CardView) {\n this.cardholderName = o.cardholderName;\n this.brand = o.brand;\n this.number = o.number;\n this.expMonth = o.expMonth;\n this.expYear = o.expYear;\n this.code = o.code;\n } else {\n this.cardholderName = o.cardholderName?.encryptedString;\n this.brand = o.brand?.encryptedString;\n this.number = o.number?.encryptedString;\n this.expMonth = o.expMonth?.encryptedString;\n this.expYear = o.expYear?.encryptedString;\n this.code = o.code?.encryptedString;\n }\n }\n}\n","import { FieldType } from '../../enums/fieldType';\n\nimport { FieldView } from '../view/fieldView';\n\nimport { EncString } from '../domain/encString';\nimport { Field as FieldDomain } from '../domain/field';\n\nexport class Field {\n static template(): Field {\n const req = new Field();\n req.name = 'Field name';\n req.value = 'Some value';\n req.type = FieldType.Text;\n return req;\n }\n\n static toView(req: Field, view = new FieldView()) {\n view.type = req.type;\n view.value = req.value;\n view.name = req.name;\n return view;\n }\n\n static toDomain(req: Field, domain = new FieldDomain()) {\n domain.type = req.type;\n domain.value = req.value != null ? new EncString(req.value) : null;\n domain.name = req.name != null ? new EncString(req.name) : null;\n return domain;\n }\n\n name: string;\n value: string;\n type: FieldType;\n\n constructor(o?: FieldView | FieldDomain) {\n if (o == null) {\n return;\n }\n\n if (o instanceof FieldView) {\n this.name = o.name;\n this.value = o.value;\n } else {\n this.name = o.name?.encryptedString;\n this.value = o.value?.encryptedString;\n }\n this.type = o.type;\n }\n}\n","import { IdentityView } from '../view/identityView';\n\nimport { EncString } from '../domain/encString';\nimport { Identity as IdentityDomain } from '../domain/identity';\n\nexport class Identity {\n static template(): Identity {\n const req = new Identity();\n req.title = 'Mr';\n req.firstName = 'John';\n req.middleName = 'William';\n req.lastName = 'Doe';\n req.address1 = '123 Any St';\n req.address2 = 'Apt #123';\n req.address3 = null;\n req.city = 'New York';\n req.state = 'NY';\n req.postalCode = '10001';\n req.country = 'US';\n req.company = 'Acme Inc.';\n req.email = 'john@company.com';\n req.phone = '5555551234';\n req.ssn = '000-123-4567';\n req.username = 'jdoe';\n req.passportNumber = 'US-123456789';\n req.licenseNumber = 'D123-12-123-12333';\n return req;\n }\n\n static toView(req: Identity, view = new IdentityView()) {\n view.title = req.title;\n view.firstName = req.firstName;\n view.middleName = req.middleName;\n view.lastName = req.lastName;\n view.address1 = req.address1;\n view.address2 = req.address2;\n view.address3 = req.address3;\n view.city = req.city;\n view.state = req.state;\n view.postalCode = req.postalCode;\n view.country = req.country;\n view.company = req.company;\n view.email = req.email;\n view.phone = req.phone;\n view.ssn = req.ssn;\n view.username = req.username;\n view.passportNumber = req.passportNumber;\n view.licenseNumber = req.licenseNumber;\n return view;\n }\n\n static toDomain(req: Identity, domain = new IdentityDomain()) {\n domain.title = req.title != null ? new EncString(req.title) : null;\n domain.firstName = req.firstName != null ? new EncString(req.firstName) : null;\n domain.middleName = req.middleName != null ? new EncString(req.middleName) : null;\n domain.lastName = req.lastName != null ? new EncString(req.lastName) : null;\n domain.address1 = req.address1 != null ? new EncString(req.address1) : null;\n domain.address2 = req.address2 != null ? new EncString(req.address2) : null;\n domain.address3 = req.address3 != null ? new EncString(req.address3) : null;\n domain.city = req.city != null ? new EncString(req.city) : null;\n domain.state = req.state != null ? new EncString(req.state) : null;\n domain.postalCode = req.postalCode != null ? new EncString(req.postalCode) : null;\n domain.country = req.country != null ? new EncString(req.country) : null;\n domain.company = req.company != null ? new EncString(req.company) : null;\n domain.email = req.email != null ? new EncString(req.email) : null;\n domain.phone = req.phone != null ? new EncString(req.phone) : null;\n domain.ssn = req.ssn != null ? new EncString(req.ssn) : null;\n domain.username = req.username != null ? new EncString(req.username) : null;\n domain.passportNumber = req.passportNumber != null ? new EncString(req.passportNumber) : null;\n domain.licenseNumber = req.licenseNumber != null ? new EncString(req.licenseNumber) : null;\n return domain;\n }\n\n title: string;\n firstName: string;\n middleName: string;\n lastName: string;\n address1: string;\n address2: string;\n address3: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n company: string;\n email: string;\n phone: string;\n ssn: string;\n username: string;\n passportNumber: string;\n licenseNumber: string;\n\n constructor(o?: IdentityView | IdentityDomain) {\n if (o == null) {\n return;\n }\n\n if (o instanceof IdentityView) {\n this.title = o.title;\n this.firstName = o.firstName;\n this.middleName = o.middleName;\n this.lastName = o.lastName;\n this.address1 = o.address1;\n this.address2 = o.address2;\n this.address3 = o.address3;\n this.city = o.city;\n this.state = o.state;\n this.postalCode = o.postalCode;\n this.country = o.country;\n this.company = o.company;\n this.email = o.email;\n this.phone = o.phone;\n this.ssn = o.ssn;\n this.username = o.username;\n this.passportNumber = o.passportNumber;\n this.licenseNumber = o.licenseNumber;\n } else {\n this.title = o.title?.encryptedString;\n this.firstName = o.firstName?.encryptedString;\n this.middleName = o.middleName?.encryptedString;\n this.lastName = o.lastName?.encryptedString;\n this.address1 = o.address1?.encryptedString;\n this.address2 = o.address2?.encryptedString;\n this.address3 = o.address3?.encryptedString;\n this.city = o.city?.encryptedString;\n this.state = o.state?.encryptedString;\n this.postalCode = o.postalCode?.encryptedString;\n this.country = o.country?.encryptedString;\n this.company = o.company?.encryptedString;\n this.email = o.email?.encryptedString;\n this.phone = o.phone?.encryptedString;\n this.ssn = o.ssn?.encryptedString;\n this.username = o.username?.encryptedString;\n this.passportNumber = o.passportNumber?.encryptedString;\n this.licenseNumber = o.licenseNumber?.encryptedString;\n }\n }\n}\n","import { LoginUri } from './loginUri';\n\nimport { LoginView } from '../view/loginView';\n\nimport { EncString } from '../domain/encString';\nimport { Login as LoginDomain } from '../domain/login';\n\nexport class Login {\n static template(): Login {\n const req = new Login();\n req.uris = [];\n req.username = 'jdoe';\n req.password = 'myp@ssword123';\n req.totp = 'JBSWY3DPEHPK3PXP';\n return req;\n }\n\n static toView(req: Login, view = new LoginView()) {\n if (req.uris != null) {\n view.uris = req.uris.map(u => LoginUri.toView(u));\n }\n view.username = req.username;\n view.password = req.password;\n view.totp = req.totp;\n return view;\n }\n\n static toDomain(req: Login, domain = new LoginDomain()) {\n if (req.uris != null) {\n domain.uris = req.uris.map(u => LoginUri.toDomain(u));\n }\n domain.username = req.username != null ? new EncString(req.username) : null;\n domain.password = req.password != null ? new EncString(req.password) : null;\n domain.totp = req.totp != null ? new EncString(req.totp) : null;\n return domain;\n }\n\n uris: LoginUri[];\n username: string;\n password: string;\n totp: string;\n\n constructor(o?: LoginView | LoginDomain) {\n if (o == null) {\n return;\n }\n\n if (o.uris != null) {\n if (o instanceof LoginView) {\n this.uris = o.uris.map(u => new LoginUri(u));\n } else {\n this.uris = o.uris.map(u => new LoginUri(u));\n }\n }\n\n if (o instanceof LoginView) {\n this.username = o.username;\n this.password = o.password;\n this.totp = o.totp;\n } else {\n this.username = o.username?.encryptedString;\n this.password = o.password?.encryptedString;\n this.totp = o.totp?.encryptedString;\n }\n }\n}\n","import { UriMatchType } from '../../enums/uriMatchType';\n\nimport { LoginUriView } from '../view/loginUriView';\n\nimport { EncString } from '../domain/encString';\nimport { LoginUri as LoginUriDomain } from '../domain/loginUri';\n\nexport class LoginUri {\n static template(): LoginUri {\n const req = new LoginUri();\n req.uri = 'https://google.com';\n req.match = null;\n return req;\n }\n\n static toView(req: LoginUri, view = new LoginUriView()) {\n view.uri = req.uri;\n view.match = req.match;\n return view;\n }\n\n static toDomain(req: LoginUri, domain = new LoginUriDomain()) {\n domain.uri = req.uri != null ? new EncString(req.uri) : null;\n domain.match = req.match;\n return domain;\n }\n\n uri: string;\n match: UriMatchType = null;\n\n constructor(o?: LoginUriView | LoginUriDomain) {\n if (o == null) {\n return;\n }\n\n if (o instanceof LoginUriView) {\n this.uri = o.uri;\n } else {\n this.uri = o.uri?.encryptedString;\n }\n this.match = o.match;\n }\n}\n","import { SecureNoteType } from '../../enums/secureNoteType';\n\nimport { SecureNoteView } from '../view/secureNoteView';\n\nimport { SecureNote as SecureNoteDomain } from '../domain/secureNote';\n\nexport class SecureNote {\n static template(): SecureNote {\n const req = new SecureNote();\n req.type = SecureNoteType.Generic;\n return req;\n }\n\n static toView(req: SecureNote, view = new SecureNoteView()) {\n view.type = req.type;\n return view;\n }\n\n static toDomain(req: SecureNote, view = new SecureNoteDomain()) {\n view.type = req.type;\n return view;\n }\n\n type: SecureNoteType;\n\n constructor(o?: SecureNoteView | SecureNoteDomain) {\n if (o == null) {\n return;\n }\n\n this.type = o.type;\n }\n}\n","import { CollectionView } from '../view/collectionView';\n\nimport { Collection as CollectionDomain } from '../domain/collection';\nimport { EncString } from '../domain/encString';\n\nexport class Collection {\n static template(): Collection {\n const req = new Collection();\n req.organizationId = '00000000-0000-0000-0000-000000000000';\n req.name = 'Collection name';\n req.externalId = null;\n return req;\n }\n\n static toView(req: Collection, view = new CollectionView()) {\n view.name = req.name;\n view.externalId = req.externalId;\n if (view.organizationId == null) {\n view.organizationId = req.organizationId;\n }\n return view;\n }\n\n static toDomain(req: Collection, domain = new CollectionDomain()) {\n domain.name = req.name != null ? new EncString(req.name) : null;\n domain.externalId = req.externalId;\n if (domain.organizationId == null) {\n domain.organizationId = req.organizationId;\n }\n return domain;\n }\n\n organizationId: string;\n name: string;\n externalId: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CollectionView | CollectionDomain) {\n this.organizationId = o.organizationId;\n if (o instanceof CollectionView) {\n this.name = o.name;\n } else {\n this.name = o.name?.encryptedString;\n }\n this.externalId = o.externalId;\n }\n}\n","import { FolderView } from '../view/folderView';\n\nimport { EncString } from '../domain/encString';\nimport { Folder as FolderDomain } from '../domain/folder';\n\nexport class Folder {\n static template(): Folder {\n const req = new Folder();\n req.name = 'Folder name';\n return req;\n }\n\n static toView(req: Folder, view = new FolderView()) {\n view.name = req.name;\n return view;\n }\n\n static toDomain(req: Folder, domain = new FolderDomain()) {\n domain.name = req.name != null ? new EncString(req.name) : null;\n return domain;\n }\n\n name: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: FolderView | FolderDomain) {\n if (o instanceof FolderView) {\n this.name = o.name;\n } else {\n this.name = o.name?.encryptedString;\n }\n }\n}\n","import { ApiService } from '../abstractions/api.service';\nimport { FileUploadService as FileUploadServiceAbstraction } from '../abstractions/fileUpload.service';\nimport { LogService } from '../abstractions/log.service';\n\nimport { FileUploadType } from '../enums/fileUploadType';\n\nimport { EncArrayBuffer } from '../models/domain/encArrayBuffer';\nimport { EncString } from '../models/domain/encString';\n\nimport { AttachmentUploadDataResponse } from '../models/response/attachmentUploadDataResponse';\nimport { SendFileUploadDataResponse } from '../models/response/sendFileUploadDataResponse';\n\nimport { AzureFileUploadService } from './azureFileUpload.service';\nimport { BitwardenFileUploadService } from './bitwardenFileUpload.service';\n\nexport class FileUploadService implements FileUploadServiceAbstraction {\n private azureFileUploadService: AzureFileUploadService;\n private bitwardenFileUploadService: BitwardenFileUploadService;\n\n constructor(private logService: LogService, private apiService: ApiService) {\n this.azureFileUploadService = new AzureFileUploadService(logService);\n this.bitwardenFileUploadService = new BitwardenFileUploadService(apiService);\n }\n\n async uploadSendFile(uploadData: SendFileUploadDataResponse, fileName: EncString, encryptedFileData: EncArrayBuffer) {\n try {\n switch (uploadData.fileUploadType) {\n case FileUploadType.Direct:\n await this.bitwardenFileUploadService.upload(fileName.encryptedString, encryptedFileData,\n fd => this.apiService.postSendFile(uploadData.sendResponse.id, uploadData.sendResponse.file.id, fd));\n break;\n case FileUploadType.Azure:\n const renewalCallback = async () => {\n const renewalResponse = await this.apiService.renewSendFileUploadUrl(uploadData.sendResponse.id,\n uploadData.sendResponse.file.id);\n return renewalResponse.url;\n };\n await this.azureFileUploadService.upload(uploadData.url, encryptedFileData,\n renewalCallback);\n break;\n default:\n throw new Error('Unknown file upload type');\n }\n } catch (e) {\n await this.apiService.deleteSend(uploadData.sendResponse.id);\n throw e;\n }\n }\n\n async uploadCipherAttachment(admin: boolean, uploadData: AttachmentUploadDataResponse, encryptedFileName: string, encryptedFileData: EncArrayBuffer) {\n const response = admin ? uploadData.cipherMiniResponse : uploadData.cipherResponse;\n try {\n switch (uploadData.fileUploadType) {\n case FileUploadType.Direct:\n await this.bitwardenFileUploadService.upload(encryptedFileName, encryptedFileData,\n fd => this.apiService.postAttachmentFile(response.id, uploadData.attachmentId, fd));\n break;\n case FileUploadType.Azure:\n const renewalCallback = async () => {\n const renewalResponse = await this.apiService.renewAttachmentUploadUrl(response.id,\n uploadData.attachmentId);\n return renewalResponse.url;\n };\n await this.azureFileUploadService.upload(uploadData.url, encryptedFileData, renewalCallback);\n break;\n default:\n throw new Error('Unknown file upload type.');\n }\n } catch (e) {\n if (admin) {\n await this.apiService.deleteCipherAttachmentAdmin(response.id, uploadData.attachmentId);\n } else {\n await this.apiService.deleteCipherAttachment(response.id, uploadData.attachmentId);\n }\n throw e;\n }\n }\n}\n","export enum FileUploadType {\n Direct = 0,\n Azure = 1,\n}\n","import { LogService } from '../abstractions/log.service';\n\nimport { Utils } from '../misc/utils';\n\nimport { EncArrayBuffer } from '../models/domain/encArrayBuffer';\n\nconst MAX_SINGLE_BLOB_UPLOAD_SIZE = 256 * 1024 * 1024; // 256 MiB\nconst MAX_BLOCKS_PER_BLOB = 50000;\n\nexport class AzureFileUploadService {\n constructor(private logService: LogService) { }\n\n async upload(url: string, data: EncArrayBuffer, renewalCallback: () => Promise) {\n if (data.buffer.byteLength <= MAX_SINGLE_BLOB_UPLOAD_SIZE) {\n return await this.azureUploadBlob(url, data);\n } else {\n return await this.azureUploadBlocks(url, data, renewalCallback);\n }\n }\n private async azureUploadBlob(url: string, data: EncArrayBuffer) {\n const urlObject = Utils.getUrl(url);\n const headers = new Headers({\n 'x-ms-date': new Date().toUTCString(),\n 'x-ms-version': urlObject.searchParams.get('sv'),\n 'Content-Length': data.buffer.byteLength.toString(),\n 'x-ms-blob-type': 'BlockBlob',\n });\n\n const request = new Request(url, {\n body: data.buffer,\n cache: 'no-store',\n method: 'PUT',\n headers: headers,\n });\n\n const blobResponse = await fetch(request);\n\n if (blobResponse.status !== 201) {\n throw new Error(`Failed to create Azure blob: ${blobResponse.status}`);\n }\n }\n private async azureUploadBlocks(url: string, data: EncArrayBuffer, renewalCallback: () => Promise) {\n const baseUrl = Utils.getUrl(url);\n const blockSize = this.getMaxBlockSize(baseUrl.searchParams.get('sv'));\n let blockIndex = 0;\n const numBlocks = Math.ceil(data.buffer.byteLength / blockSize);\n const blocksStaged: string[] = [];\n\n if (numBlocks > MAX_BLOCKS_PER_BLOB) {\n throw new Error(`Cannot upload file, exceeds maximum size of ${blockSize * MAX_BLOCKS_PER_BLOB}`);\n }\n\n try {\n while (blockIndex < numBlocks) {\n url = await this.renewUrlIfNecessary(url, renewalCallback);\n const blockUrl = Utils.getUrl(url);\n const blockId = this.encodedBlockId(blockIndex);\n blockUrl.searchParams.append('comp', 'block');\n blockUrl.searchParams.append('blockid', blockId);\n const start = blockIndex * blockSize;\n const blockData = data.buffer.slice(start, start + blockSize);\n const blockHeaders = new Headers({\n 'x-ms-date': new Date().toUTCString(),\n 'x-ms-version': blockUrl.searchParams.get('sv'),\n 'Content-Length': blockData.byteLength.toString(),\n });\n\n const blockRequest = new Request(blockUrl.toString(), {\n body: blockData,\n cache: 'no-store',\n method: 'PUT',\n headers: blockHeaders,\n });\n\n const blockResponse = await fetch(blockRequest);\n\n if (blockResponse.status !== 201) {\n const message = `Unsuccessful block PUT. Received status ${blockResponse.status}`;\n this.logService.error(message + '\\n' + await blockResponse.json());\n throw new Error(message);\n }\n\n blocksStaged.push(blockId);\n blockIndex++;\n }\n\n url = await this.renewUrlIfNecessary(url, renewalCallback);\n const blockListUrl = Utils.getUrl(url);\n const blockListXml = this.blockListXml(blocksStaged);\n blockListUrl.searchParams.append('comp', 'blocklist');\n const headers = new Headers({\n 'x-ms-date': new Date().toUTCString(),\n 'x-ms-version': blockListUrl.searchParams.get('sv'),\n 'Content-Length': blockListXml.length.toString(),\n });\n\n const request = new Request(blockListUrl.toString(), {\n body: blockListXml,\n cache: 'no-store',\n method: 'PUT',\n headers: headers,\n });\n\n const response = await fetch(request);\n\n if (response.status !== 201) {\n const message = `Unsuccessful block list PUT. Received status ${response.status}`;\n this.logService.error(message + '\\n' + await response.json());\n throw new Error(message);\n }\n } catch (e) {\n throw e;\n }\n }\n\n private async renewUrlIfNecessary(url: string, renewalCallback: () => Promise): Promise {\n const urlObject = Utils.getUrl(url);\n const expiry = new Date(urlObject.searchParams.get('se') ?? '');\n\n if (isNaN(expiry.getTime())) {\n expiry.setTime(Date.now() + 3600000);\n }\n\n if (expiry.getTime() < Date.now() + 1000) {\n return await renewalCallback();\n }\n return url;\n }\n\n private encodedBlockId(blockIndex: number) {\n // Encoded blockId max size is 64, so pre-encoding max size is 48\n const utfBlockId = ('000000000000000000000000000000000000000000000000' + blockIndex.toString()).slice(-48);\n return Utils.fromUtf8ToB64(utfBlockId);\n }\n\n private blockListXml(blockIdList: string[]) {\n let xml = '';\n blockIdList.forEach(blockId => {\n xml += `${blockId}`;\n });\n xml += '';\n return xml;\n }\n\n private getMaxBlockSize(version: string) {\n if (Version.compare(version, '2019-12-12') >= 0) {\n return 4000 * 1024 * 1024; // 4000 MiB\n } else if (Version.compare(version, '2016-05-31') >= 0) {\n return 100 * 1024 * 1024; // 100 MiB\n } else {\n return 4 * 1024 * 1024; // 4 MiB\n }\n }\n}\n\nclass Version {\n /**\n * Compares two Azure Versions against each other\n * @param a Version to compare\n * @param b Version to compare\n * @returns a number less than zero if b is newer than a, 0 if equal,\n * and greater than zero if a is newer than b\n */\n static compare(a: Required | string, b: Required | string) {\n if (typeof (a) === 'string') {\n a = new Version(a);\n }\n\n if (typeof (b) === 'string') {\n b = new Version(b);\n }\n\n return a.year !== b.year ? a.year - b.year :\n a.month !== b.month ? a.month - b.month :\n a.day !== b.day ? a.day - b.day :\n 0;\n }\n year = 0;\n month = 0;\n day = 0;\n\n constructor(version: string) {\n try {\n const parts = version.split('-').map(v => Number.parseInt(v, 10));\n this.year = parts[0];\n this.month = parts[1];\n this.day = parts[2];\n } catch { }\n }\n /**\n * Compares two Azure Versions against each other\n * @param compareTo Version to compare against\n * @returns a number less than zero if compareTo is newer, 0 if equal,\n * and greater than zero if this is greater than compareTo\n */\n compare(compareTo: Required | string) {\n return Version.compare(this, compareTo);\n }\n}\n","import { ApiService } from '../abstractions/api.service';\n\nimport { EncArrayBuffer } from '../models/domain/encArrayBuffer';\n\nimport { Utils } from '../misc/utils';\n\nexport class BitwardenFileUploadService\n{\n constructor(private apiService: ApiService) { }\n\n async upload(encryptedFileName: string, encryptedFileData: EncArrayBuffer, apiCall: (fd: FormData) => Promise) {\n const fd = new FormData();\n try {\n const blob = new Blob([encryptedFileData.buffer], { type: 'application/octet-stream' });\n fd.append('data', blob, encryptedFileName);\n } catch (e) {\n if (Utils.isNode && !Utils.isBrowser) {\n fd.append('data', Buffer.from(encryptedFileData.buffer) as any, {\n filepath: encryptedFileName,\n contentType: 'application/octet-stream',\n } as any);\n } else {\n throw e;\n }\n }\n\n await apiCall(fd);\n }\n}\n","import { ApiService } from '../abstractions/api.service';\nimport { CipherService } from '../abstractions/cipher.service';\nimport { CollectionService } from '../abstractions/collection.service';\nimport { FolderService } from '../abstractions/folder.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport {\n ImportOption,\n ImportService as ImportServiceAbstraction,\n} from '../abstractions/import.service';\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherType } from '../enums/cipherType';\n\nimport { Utils } from '../misc/utils';\n\nimport { CipherRequest } from '../models/request/cipherRequest';\nimport { CollectionRequest } from '../models/request/collectionRequest';\nimport { FolderRequest } from '../models/request/folderRequest';\nimport { ImportCiphersRequest } from '../models/request/importCiphersRequest';\nimport { ImportOrganizationCiphersRequest } from '../models/request/importOrganizationCiphersRequest';\nimport { KvpRequest } from '../models/request/kvpRequest';\n\nimport { ErrorResponse } from '../models/response/errorResponse';\nimport { CipherView } from '../models/view/cipherView';\n\nimport { AscendoCsvImporter } from '../importers/ascendoCsvImporter';\nimport { AvastCsvImporter } from '../importers/avastCsvImporter';\nimport { AvastJsonImporter } from '../importers/avastJsonImporter';\nimport { AviraCsvImporter } from '../importers/aviraCsvImporter';\nimport { BitwardenCsvImporter } from '../importers/bitwardenCsvImporter';\nimport { BitwardenJsonImporter } from '../importers/bitwardenJsonImporter';\nimport { BlackBerryCsvImporter } from '../importers/blackBerryCsvImporter';\nimport { BlurCsvImporter } from '../importers/blurCsvImporter';\nimport { ButtercupCsvImporter } from '../importers/buttercupCsvImporter';\nimport { ChromeCsvImporter } from '../importers/chromeCsvImporter';\nimport { ClipperzHtmlImporter } from '../importers/clipperzHtmlImporter';\nimport { CodebookCsvImporter } from '../importers/codebookCsvImporter';\nimport { DashlaneJsonImporter } from '../importers/dashlaneJsonImporter';\nimport { EncryptrCsvImporter } from '../importers/encryptrCsvImporter';\nimport { EnpassCsvImporter } from '../importers/enpassCsvImporter';\nimport { EnpassJsonImporter } from '../importers/enpassJsonImporter';\nimport { FirefoxCsvImporter } from '../importers/firefoxCsvImporter';\nimport { FSecureFskImporter } from '../importers/fsecureFskImporter';\nimport { GnomeJsonImporter } from '../importers/gnomeJsonImporter';\nimport { Importer } from '../importers/importer';\nimport { KasperskyTxtImporter } from '../importers/kasperskyTxtImporter';\nimport { KeePass2XmlImporter } from '../importers/keepass2XmlImporter';\nimport { KeePassXCsvImporter } from '../importers/keepassxCsvImporter';\nimport { KeeperCsvImporter } from '../importers/keeperCsvImporter';\nimport { LastPassCsvImporter } from '../importers/lastpassCsvImporter';\nimport { LogMeOnceCsvImporter } from '../importers/logMeOnceCsvImporter';\nimport { MeldiumCsvImporter } from '../importers/meldiumCsvImporter';\nimport { MSecureCsvImporter } from '../importers/msecureCsvImporter';\nimport { MykiCsvImporter } from '../importers/mykiCsvImporter';\nimport { OnePassword1PifImporter } from '../importers/onepasswordImporters/onepassword1PifImporter';\nimport { OnePasswordMacCsvImporter } from '../importers/onepasswordImporters/onepasswordMacCsvImporter';\nimport { OnePasswordWinCsvImporter } from '../importers/onepasswordImporters/onepasswordWinCsvImporter';\nimport { PadlockCsvImporter } from '../importers/padlockCsvImporter';\nimport { PassKeepCsvImporter } from '../importers/passkeepCsvImporter';\nimport { PassmanJsonImporter } from '../importers/passmanJsonImporter';\nimport { PasspackCsvImporter } from '../importers/passpackCsvImporter';\nimport { PasswordAgentCsvImporter } from '../importers/passwordAgentCsvImporter';\nimport { PasswordBossJsonImporter } from '../importers/passwordBossJsonImporter';\nimport { PasswordDragonXmlImporter } from '../importers/passwordDragonXmlImporter';\nimport { PasswordSafeXmlImporter } from '../importers/passwordSafeXmlImporter';\nimport { PasswordWalletTxtImporter } from '../importers/passwordWalletTxtImporter';\nimport { RememBearCsvImporter } from '../importers/rememBearCsvImporter';\nimport { RoboFormCsvImporter } from '../importers/roboformCsvImporter';\nimport { SafeInCloudXmlImporter } from '../importers/safeInCloudXmlImporter';\nimport { SaferPassCsvImporter } from '../importers/saferpassCsvImport';\nimport { SecureSafeCsvImporter } from '../importers/secureSafeCsvImporter';\nimport { SplashIdCsvImporter } from '../importers/splashIdCsvImporter';\nimport { StickyPasswordXmlImporter } from '../importers/stickyPasswordXmlImporter';\nimport { TrueKeyCsvImporter } from '../importers/truekeyCsvImporter';\nimport { UpmCsvImporter } from '../importers/upmCsvImporter';\nimport { YotiCsvImporter } from '../importers/yotiCsvImporter';\nimport { ZohoVaultCsvImporter } from '../importers/zohoVaultCsvImporter';\n\nexport class ImportService implements ImportServiceAbstraction {\n featuredImportOptions = [\n { id: 'bitwardenjson', name: 'Bitwarden (json)' },\n { id: 'bitwardencsv', name: 'Bitwarden (csv)' },\n { id: 'lastpasscsv', name: 'LastPass (csv)' },\n { id: 'chromecsv', name: 'Chrome (csv)' },\n { id: 'firefoxcsv', name: 'Firefox (csv)' },\n { id: 'keepass2xml', name: 'KeePass 2 (xml)' },\n { id: '1password1pif', name: '1Password (1pif)' },\n { id: 'dashlanejson', name: 'Dashlane (json)' },\n ];\n\n regularImportOptions: ImportOption[] = [\n { id: 'keepassxcsv', name: 'KeePassX (csv)' },\n { id: '1passwordwincsv', name: '1Password 6 and 7 Windows (csv)' },\n { id: '1passwordmaccsv', name: '1Password 6 and 7 Mac (csv)' },\n { id: 'roboformcsv', name: 'RoboForm (csv)' },\n { id: 'keepercsv', name: 'Keeper (csv)' },\n { id: 'enpasscsv', name: 'Enpass (csv)' },\n { id: 'enpassjson', name: 'Enpass (json)' },\n { id: 'safeincloudxml', name: 'SafeInCloud (xml)' },\n { id: 'pwsafexml', name: 'Password Safe (xml)' },\n { id: 'stickypasswordxml', name: 'Sticky Password (xml)' },\n { id: 'msecurecsv', name: 'mSecure (csv)' },\n { id: 'truekeycsv', name: 'True Key (csv)' },\n { id: 'passwordbossjson', name: 'Password Boss (json)' },\n { id: 'zohovaultcsv', name: 'Zoho Vault (csv)' },\n { id: 'splashidcsv', name: 'SplashID (csv)' },\n { id: 'passworddragonxml', name: 'Password Dragon (xml)' },\n { id: 'padlockcsv', name: 'Padlock (csv)' },\n { id: 'passboltcsv', name: 'Passbolt (csv)' },\n { id: 'clipperzhtml', name: 'Clipperz (html)' },\n { id: 'aviracsv', name: 'Avira (csv)' },\n { id: 'saferpasscsv', name: 'SaferPass (csv)' },\n { id: 'upmcsv', name: 'Universal Password Manager (csv)' },\n { id: 'ascendocsv', name: 'Ascendo DataVault (csv)' },\n { id: 'meldiumcsv', name: 'Meldium (csv)' },\n { id: 'passkeepcsv', name: 'PassKeep (csv)' },\n { id: 'operacsv', name: 'Opera (csv)' },\n { id: 'vivaldicsv', name: 'Vivaldi (csv)' },\n { id: 'gnomejson', name: 'GNOME Passwords and Keys/Seahorse (json)' },\n { id: 'blurcsv', name: 'Blur (csv)' },\n { id: 'passwordagentcsv', name: 'Password Agent (csv)' },\n { id: 'passpackcsv', name: 'Passpack (csv)' },\n { id: 'passmanjson', name: 'Passman (json)' },\n { id: 'avastcsv', name: 'Avast Passwords (csv)' },\n { id: 'avastjson', name: 'Avast Passwords (json)' },\n { id: 'fsecurefsk', name: 'F-Secure KEY (fsk)' },\n { id: 'kasperskytxt', name: 'Kaspersky Password Manager (txt)' },\n { id: 'remembearcsv', name: 'RememBear (csv)' },\n { id: 'passwordwallettxt', name: 'PasswordWallet (txt)' },\n { id: 'mykicsv', name: 'Myki (csv)' },\n { id: 'securesafecsv', name: 'SecureSafe (csv)' },\n { id: 'logmeoncecsv', name: 'LogMeOnce (csv)' },\n { id: 'blackberrycsv', name: 'BlackBerry Password Keeper (csv)' },\n { id: 'buttercupcsv', name: 'Buttercup (csv)' },\n { id: 'codebookcsv', name: 'Codebook (csv)' },\n { id: 'encryptrcsv', name: 'Encryptr (csv)' },\n { id: 'yoticsv', name: 'Yoti (csv)' },\n ];\n\n constructor(private cipherService: CipherService, private folderService: FolderService,\n private apiService: ApiService, private i18nService: I18nService,\n private collectionService: CollectionService, private platformUtilsService: PlatformUtilsService) { }\n\n getImportOptions(): ImportOption[] {\n return this.featuredImportOptions.concat(this.regularImportOptions);\n }\n\n async import(importer: Importer, fileContents: string, organizationId: string = null): Promise {\n const importResult = await importer.parse(fileContents);\n if (importResult.success) {\n if (importResult.folders.length === 0 && importResult.ciphers.length === 0) {\n return new Error(this.i18nService.t('importNothingError'));\n } else if (importResult.ciphers.length > 0) {\n const halfway = Math.floor(importResult.ciphers.length / 2);\n const last = importResult.ciphers.length - 1;\n\n if (this.badData(importResult.ciphers[0]) &&\n this.badData(importResult.ciphers[halfway]) &&\n this.badData(importResult.ciphers[last])) {\n return new Error(this.i18nService.t('importFormatError'));\n }\n }\n try {\n await this.postImport(importResult, organizationId);\n } catch (error) {\n const errorResponse = new ErrorResponse(error, 400);\n return this.handleServerError(errorResponse, importResult);\n }\n return null;\n } else {\n return new Error(this.i18nService.t('importFormatError'));\n }\n }\n\n getImporter(format: string, organizationId: string = null): Importer {\n const importer = this.getImporterInstance(format);\n if (importer == null) {\n return null;\n }\n importer.organizationId = organizationId;\n return importer;\n }\n\n private getImporterInstance(format: string) {\n if (format == null || format === '') {\n return null;\n }\n\n switch (format) {\n case 'bitwardencsv':\n return new BitwardenCsvImporter();\n case 'bitwardenjson':\n return new BitwardenJsonImporter();\n case 'lastpasscsv':\n case 'passboltcsv':\n return new LastPassCsvImporter();\n case 'keepassxcsv':\n return new KeePassXCsvImporter();\n case 'aviracsv':\n return new AviraCsvImporter();\n case 'blurcsv':\n return new BlurCsvImporter();\n case 'safeincloudxml':\n return new SafeInCloudXmlImporter();\n case 'padlockcsv':\n return new PadlockCsvImporter();\n case 'keepass2xml':\n return new KeePass2XmlImporter();\n case 'chromecsv':\n case 'operacsv':\n case 'vivaldicsv':\n return new ChromeCsvImporter();\n case 'firefoxcsv':\n return new FirefoxCsvImporter();\n case 'upmcsv':\n return new UpmCsvImporter();\n case 'saferpasscsv':\n return new SaferPassCsvImporter();\n case 'meldiumcsv':\n return new MeldiumCsvImporter();\n case '1password1pif':\n return new OnePassword1PifImporter();\n case '1passwordwincsv':\n return new OnePasswordWinCsvImporter();\n case '1passwordmaccsv':\n return new OnePasswordMacCsvImporter();\n case 'keepercsv':\n return new KeeperCsvImporter();\n case 'passworddragonxml':\n return new PasswordDragonXmlImporter();\n case 'enpasscsv':\n return new EnpassCsvImporter();\n case 'enpassjson':\n return new EnpassJsonImporter();\n case 'pwsafexml':\n return new PasswordSafeXmlImporter();\n case 'dashlanejson':\n return new DashlaneJsonImporter();\n case 'msecurecsv':\n return new MSecureCsvImporter();\n case 'stickypasswordxml':\n return new StickyPasswordXmlImporter();\n case 'truekeycsv':\n return new TrueKeyCsvImporter();\n case 'clipperzhtml':\n return new ClipperzHtmlImporter();\n case 'roboformcsv':\n return new RoboFormCsvImporter();\n case 'ascendocsv':\n return new AscendoCsvImporter();\n case 'passwordbossjson':\n return new PasswordBossJsonImporter();\n case 'zohovaultcsv':\n return new ZohoVaultCsvImporter();\n case 'splashidcsv':\n return new SplashIdCsvImporter();\n case 'passkeepcsv':\n return new PassKeepCsvImporter();\n case 'gnomejson':\n return new GnomeJsonImporter();\n case 'passwordagentcsv':\n return new PasswordAgentCsvImporter();\n case 'passpackcsv':\n return new PasspackCsvImporter();\n case 'passmanjson':\n return new PassmanJsonImporter();\n case 'avastcsv':\n return new AvastCsvImporter();\n case 'avastjson':\n return new AvastJsonImporter();\n case 'fsecurefsk':\n return new FSecureFskImporter();\n case 'kasperskytxt':\n return new KasperskyTxtImporter();\n case 'remembearcsv':\n return new RememBearCsvImporter();\n case 'passwordwallettxt':\n return new PasswordWalletTxtImporter();\n case 'mykicsv':\n return new MykiCsvImporter();\n case 'securesafecsv':\n return new SecureSafeCsvImporter();\n case 'logmeoncecsv':\n return new LogMeOnceCsvImporter();\n case 'blackberrycsv':\n return new BlackBerryCsvImporter();\n case 'buttercupcsv':\n return new ButtercupCsvImporter();\n case 'codebookcsv':\n return new CodebookCsvImporter();\n case 'encryptrcsv':\n return new EncryptrCsvImporter();\n case 'yoticsv':\n return new YotiCsvImporter();\n default:\n return null;\n }\n }\n\n private async postImport(importResult: ImportResult, organizationId: string = null) {\n if (organizationId == null) {\n const request = new ImportCiphersRequest();\n for (let i = 0; i < importResult.ciphers.length; i++) {\n const c = await this.cipherService.encrypt(importResult.ciphers[i]);\n request.ciphers.push(new CipherRequest(c));\n }\n if (importResult.folders != null) {\n for (let i = 0; i < importResult.folders.length; i++) {\n const f = await this.folderService.encrypt(importResult.folders[i]);\n request.folders.push(new FolderRequest(f));\n }\n }\n if (importResult.folderRelationships != null) {\n importResult.folderRelationships.forEach(r =>\n request.folderRelationships.push(new KvpRequest(r[0], r[1])));\n }\n return await this.apiService.postImportCiphers(request);\n } else {\n const request = new ImportOrganizationCiphersRequest();\n for (let i = 0; i < importResult.ciphers.length; i++) {\n importResult.ciphers[i].organizationId = organizationId;\n const c = await this.cipherService.encrypt(importResult.ciphers[i]);\n request.ciphers.push(new CipherRequest(c));\n }\n if (importResult.collections != null) {\n for (let i = 0; i < importResult.collections.length; i++) {\n importResult.collections[i].organizationId = organizationId;\n const c = await this.collectionService.encrypt(importResult.collections[i]);\n request.collections.push(new CollectionRequest(c));\n }\n }\n if (importResult.collectionRelationships != null) {\n importResult.collectionRelationships.forEach(r =>\n request.collectionRelationships.push(new KvpRequest(r[0], r[1])));\n }\n return await this.apiService.postImportOrganizationCiphers(organizationId, request);\n }\n }\n\n private badData(c: CipherView) {\n return (c.name == null || c.name === '--') &&\n (c.type === CipherType.Login && c.login != null && Utils.isNullOrWhitespace(c.login.password));\n }\n\n private handleServerError(errorResponse: ErrorResponse, importResult: ImportResult): Error {\n if (errorResponse.validationErrors == null) {\n return new Error(errorResponse.message);\n }\n\n let errorMessage = '';\n\n Object.entries(errorResponse.validationErrors).forEach(([key, value], index) => {\n let item;\n let itemType;\n const i = Number(key.match(/[0-9]+/)[0]);\n\n switch (key.match(/^\\w+/)[0]) {\n case 'Ciphers':\n item = importResult.ciphers[i];\n itemType = CipherType[item.type];\n break;\n case 'Folders':\n item = importResult.folders[i];\n itemType = 'Folder';\n break;\n case 'Collections':\n item = importResult.collections[i];\n itemType = 'Collection';\n break;\n default:\n return;\n }\n\n if (index > 0) {\n errorMessage += '\\n\\n';\n }\n\n if (itemType !== 'Folder' && itemType !== 'Collection') {\n errorMessage += '[' + (i + 1) + '] ';\n }\n\n errorMessage += '[' + itemType + '] \"' + item.name + '\": ' + value;\n });\n\n return new Error(errorMessage);\n }\n}\n","import { CipherRequest } from './cipherRequest';\nimport { FolderRequest } from './folderRequest';\nimport { KvpRequest } from './kvpRequest';\n\nexport class ImportCiphersRequest {\n ciphers: CipherRequest[] = [];\n folders: FolderRequest[] = [];\n folderRelationships: KvpRequest[] = [];\n}\n","import { CipherRequest } from './cipherRequest';\nimport { CollectionRequest } from './collectionRequest';\nimport { KvpRequest } from './kvpRequest';\n\nexport class ImportOrganizationCiphersRequest {\n ciphers: CipherRequest[] = [];\n collections: CollectionRequest[] = [];\n collectionRelationships: KvpRequest[] = [];\n}\n","export class KvpRequest {\n key: TK;\n value: TV;\n\n constructor(key: TK, value: TV) {\n this.key = key;\n this.value = value;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class AscendoCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (value.length < 2) {\n return;\n }\n\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value[value.length - 1]);\n cipher.name = this.getValueOrDefault(value[0], '--');\n\n if (value.length > 2 && (value.length % 2) === 0) {\n for (let i = 0; i < value.length - 2; i += 2) {\n const val: string = value[i + 2];\n const field: string = value[i + 1];\n if (this.isNullOrWhitespace(val) || this.isNullOrWhitespace(field)) {\n continue;\n }\n\n const fieldLower = field.toLowerCase();\n if (cipher.login.password == null && this.passwordFieldNames.indexOf(fieldLower) > -1) {\n cipher.login.password = this.getValueOrDefault(val);\n } else if (cipher.login.username == null &&\n this.usernameFieldNames.indexOf(fieldLower) > -1) {\n cipher.login.username = this.getValueOrDefault(val);\n } else if ((cipher.login.uris == null || cipher.login.uris.length === 0) &&\n this.uriFieldNames.indexOf(fieldLower) > -1) {\n cipher.login.uris = this.makeUriArray(val);\n } else {\n this.processKvp(cipher, field, val);\n }\n }\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class AvastCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.name);\n cipher.login.uris = this.makeUriArray(value.web);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.username = this.getValueOrDefault(value.login);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nexport class AvastJsonImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n if (results.logins != null) {\n results.logins.forEach((value: any) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.custName);\n cipher.notes = this.getValueOrDefault(value.note);\n cipher.login.uris = this.makeUriArray(value.url);\n cipher.login.password = this.getValueOrDefault(value.pwd);\n cipher.login.username = this.getValueOrDefault(value.loginName);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n }\n\n if (results.notes != null) {\n results.notes.forEach((value: any) => {\n const cipher = this.initLoginCipher();\n cipher.type = CipherType.SecureNote;\n cipher.secureNote.type = SecureNoteType.Generic;\n cipher.name = this.getValueOrDefault(value.label);\n cipher.notes = this.getValueOrDefault(value.text);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n }\n\n if (results.cards != null) {\n results.cards.forEach((value: any) => {\n const cipher = this.initLoginCipher();\n cipher.type = CipherType.Card;\n cipher.name = this.getValueOrDefault(value.custName);\n cipher.notes = this.getValueOrDefault(value.note);\n cipher.card.cardholderName = this.getValueOrDefault(value.holderName);\n cipher.card.number = this.getValueOrDefault(value.cardNumber);\n cipher.card.code = this.getValueOrDefault(value.cvv);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n if (value.expirationDate != null) {\n if (value.expirationDate.month != null) {\n cipher.card.expMonth = value.expirationDate.month + '';\n }\n if (value.expirationDate.year != null) {\n cipher.card.expYear = value.expirationDate.year + '';\n }\n }\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class AviraCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.name,\n this.getValueOrDefault(this.nameFromUrl(value.website), '--'));\n cipher.login.uris = this.makeUriArray(value.website);\n cipher.login.password = this.getValueOrDefault(value.password);\n\n if (this.isNullOrWhitespace(value.username) && !this.isNullOrWhitespace(value.secondary_username)) {\n cipher.login.username = value.secondary_username;\n } else {\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.notes = this.getValueOrDefault(value.secondary_username);\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherView } from '../models/view/cipherView';\nimport { CollectionView } from '../models/view/collectionView';\nimport { FieldView } from '../models/view/fieldView';\nimport { FolderView } from '../models/view/folderView';\nimport { LoginView } from '../models/view/loginView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { FieldType } from '../enums/fieldType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nexport class BitwardenCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (this.organization && !this.isNullOrWhitespace(value.collections)) {\n const collections = (value.collections as string).split(',');\n collections.forEach(col => {\n let addCollection = true;\n let collectionIndex = result.collections.length;\n\n for (let i = 0; i < result.collections.length; i++) {\n if (result.collections[i].name === col) {\n addCollection = false;\n collectionIndex = i;\n break;\n }\n }\n\n if (addCollection) {\n const collection = new CollectionView();\n collection.name = col;\n result.collections.push(collection);\n }\n\n result.collectionRelationships.push([result.ciphers.length, collectionIndex]);\n });\n } else if (!this.organization) {\n this.processFolder(result, value.folder);\n }\n\n const cipher = new CipherView();\n cipher.favorite = !this.organization && this.getValueOrDefault(value.favorite, '0') !== '0' ? true : false;\n cipher.type = CipherType.Login;\n cipher.notes = this.getValueOrDefault(value.notes);\n cipher.name = this.getValueOrDefault(value.name, '--');\n\n if (!this.isNullOrWhitespace(value.fields)) {\n const fields = this.splitNewLine(value.fields);\n for (let i = 0; i < fields.length; i++) {\n if (this.isNullOrWhitespace(fields[i])) {\n continue;\n }\n\n const delimPosition = fields[i].lastIndexOf(': ');\n if (delimPosition === -1) {\n continue;\n }\n\n if (cipher.fields == null) {\n cipher.fields = [];\n }\n\n const field = new FieldView();\n field.name = fields[i].substr(0, delimPosition);\n field.value = null;\n field.type = FieldType.Text;\n if (fields[i].length > (delimPosition + 2)) {\n field.value = fields[i].substr(delimPosition + 2);\n }\n cipher.fields.push(field);\n }\n }\n\n const valueType = value.type != null ? value.type.toLowerCase() : null;\n switch (valueType) {\n case 'note':\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n break;\n default:\n cipher.type = CipherType.Login;\n cipher.login = new LoginView();\n cipher.login.totp = this.getValueOrDefault(value.login_totp || value.totp);\n cipher.login.username = this.getValueOrDefault(value.login_username || value.username);\n cipher.login.password = this.getValueOrDefault(value.login_password || value.password);\n const uris = this.parseSingleRowCsv(value.login_uri || value.uri);\n cipher.login.uris = this.makeUriArray(uris);\n break;\n }\n\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherWithIds } from '../models/export/cipherWithIds';\nimport { CollectionWithId } from '../models/export/collectionWithId';\nimport { FolderWithId } from '../models/export/folderWithId';\n\nexport class BitwardenJsonImporter extends BaseImporter implements Importer {\n private results: any;\n private result: ImportResult;\n\n async parse(data: string): Promise {\n this.result = new ImportResult();\n this.results = JSON.parse(data);\n if (this.results == null || this.results.items == null || this.results.items.length === 0) {\n this.result.success = false;\n return this.result;\n }\n\n if (this.results.encrypted) {\n await this.parseEncrypted();\n } else {\n this.parseDecrypted();\n }\n\n this.result.success = true;\n return this.result;\n }\n\n private async parseEncrypted() {\n const groupingsMap = new Map();\n\n if (this.organization && this.results.collections != null) {\n for (const c of this.results.collections as CollectionWithId[]) {\n const collection = CollectionWithId.toDomain(c);\n if (collection != null) {\n collection.id = null;\n collection.organizationId = this.organizationId;\n const view = await collection.decrypt();\n groupingsMap.set(c.id, this.result.collections.length);\n this.result.collections.push(view);\n }\n }\n } else if (!this.organization && this.results.folders != null) {\n for (const f of this.results.folders as FolderWithId[]) {\n const folder = FolderWithId.toDomain(f);\n if (folder != null) {\n folder.id = null;\n const view = await folder.decrypt();\n groupingsMap.set(f.id, this.result.folders.length);\n this.result.folders.push(view);\n }\n }\n }\n\n for (const c of this.results.items as CipherWithIds[]) {\n const cipher = CipherWithIds.toDomain(c);\n // reset ids incase they were set for some reason\n cipher.id = null;\n cipher.folderId = null;\n cipher.organizationId = this.organizationId;\n cipher.collectionIds = null;\n\n // make sure password history is limited\n if (cipher.passwordHistory != null && cipher.passwordHistory.length > 5) {\n cipher.passwordHistory = cipher.passwordHistory.slice(0, 5);\n }\n\n if (!this.organization && c.folderId != null && groupingsMap.has(c.folderId)) {\n this.result.folderRelationships.push([this.result.ciphers.length, groupingsMap.get(c.folderId)]);\n } else if (this.organization && c.collectionIds != null) {\n c.collectionIds.forEach(cId => {\n if (groupingsMap.has(cId)) {\n this.result.collectionRelationships.push([this.result.ciphers.length, groupingsMap.get(cId)]);\n }\n });\n }\n\n const view = await cipher.decrypt();\n this.cleanupCipher(view);\n this.result.ciphers.push(view);\n }\n }\n\n private parseDecrypted() {\n const groupingsMap = new Map();\n if (this.organization && this.results.collections != null) {\n this.results.collections.forEach((c: CollectionWithId) => {\n const collection = CollectionWithId.toView(c);\n if (collection != null) {\n collection.id = null;\n collection.organizationId = null;\n groupingsMap.set(c.id, this.result.collections.length);\n this.result.collections.push(collection);\n }\n });\n } else if (!this.organization && this.results.folders != null) {\n this.results.folders.forEach((f: FolderWithId) => {\n const folder = FolderWithId.toView(f);\n if (folder != null) {\n folder.id = null;\n groupingsMap.set(f.id, this.result.folders.length);\n this.result.folders.push(folder);\n }\n });\n }\n\n this.results.items.forEach((c: CipherWithIds) => {\n const cipher = CipherWithIds.toView(c);\n // reset ids incase they were set for some reason\n cipher.id = null;\n cipher.folderId = null;\n cipher.organizationId = null;\n cipher.collectionIds = null;\n\n // make sure password history is limited\n if (cipher.passwordHistory != null && cipher.passwordHistory.length > 5) {\n cipher.passwordHistory = cipher.passwordHistory.slice(0, 5);\n }\n\n if (!this.organization && c.folderId != null && groupingsMap.has(c.folderId)) {\n this.result.folderRelationships.push([this.result.ciphers.length, groupingsMap.get(c.folderId)]);\n } else if (this.organization && c.collectionIds != null) {\n c.collectionIds.forEach(cId => {\n if (groupingsMap.has(cId)) {\n this.result.collectionRelationships.push([this.result.ciphers.length, groupingsMap.get(cId)]);\n }\n });\n }\n\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class BlackBerryCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (value.grouping === 'list') {\n return;\n }\n const cipher = this.initLoginCipher();\n cipher.favorite = value.fav === '1';\n cipher.name = this.getValueOrDefault(value.name);\n cipher.notes = this.getValueOrDefault(value.extra);\n if (value.grouping !== 'note') {\n cipher.login.uris = this.makeUriArray(value.url);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.username = this.getValueOrDefault(value.username);\n }\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class BlurCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (value.label === 'null') {\n value.label = null;\n }\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.label,\n this.getValueOrDefault(this.nameFromUrl(value.domain), '--'));\n cipher.login.uris = this.makeUriArray(value.domain);\n cipher.login.password = this.getValueOrDefault(value.password);\n\n if (this.isNullOrWhitespace(value.email) && !this.isNullOrWhitespace(value.username)) {\n cipher.login.username = value.username;\n } else {\n cipher.login.username = this.getValueOrDefault(value.email);\n cipher.notes = this.getValueOrDefault(value.username);\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nconst OfficialProps = [\n '!group_id', '!group_name', 'title', 'username', 'password', 'URL', 'id',\n];\n\nexport class ButtercupCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n this.processFolder(result, this.getValueOrDefault(value['!group_name']));\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.title, '--');\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.URL);\n\n let processingCustomFields = false;\n for (const prop in value) {\n if (value.hasOwnProperty(prop)) {\n if (!processingCustomFields && OfficialProps.indexOf(prop) === -1) {\n processingCustomFields = true;\n }\n if (processingCustomFields) {\n this.processKvp(cipher, prop, value[prop]);\n }\n }\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class ChromeCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.name, '--');\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.url);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class ClipperzHtmlImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const doc = this.parseXml(data);\n if (doc == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const textarea = doc.querySelector('textarea');\n if (textarea == null || this.isNullOrWhitespace(textarea.textContent)) {\n result.errorMessage = 'Missing textarea.';\n result.success = false;\n return Promise.resolve(result);\n }\n\n const entries = JSON.parse(textarea.textContent);\n entries.forEach((entry: any) => {\n const cipher = this.initLoginCipher();\n if (!this.isNullOrWhitespace(entry.label)) {\n cipher.name = entry.label.split(' ')[0];\n }\n if (entry.data != null && !this.isNullOrWhitespace(entry.data.notes)) {\n cipher.notes = entry.data.notes.split('\\\\n').join('\\n');\n }\n\n if (entry.currentVersion != null && entry.currentVersion.fields != null) {\n for (const property in entry.currentVersion.fields) {\n if (!entry.currentVersion.fields.hasOwnProperty(property)) {\n continue;\n }\n\n const field = entry.currentVersion.fields[property];\n const actionType = field.actionType != null ? field.actionType.toLowerCase() : null;\n switch (actionType) {\n case 'password':\n cipher.login.password = this.getValueOrDefault(field.value);\n break;\n case 'email':\n case 'username':\n case 'user':\n case 'name':\n cipher.login.username = this.getValueOrDefault(field.value);\n break;\n case 'url':\n cipher.login.uris = this.makeUriArray(field.value);\n break;\n default:\n const labelLower = field.label != null ? field.label.toLowerCase() : null;\n if (cipher.login.password == null && this.passwordFieldNames.indexOf(labelLower) > -1) {\n cipher.login.password = this.getValueOrDefault(field.value);\n } else if (cipher.login.username == null &&\n this.usernameFieldNames.indexOf(labelLower) > -1) {\n cipher.login.username = this.getValueOrDefault(field.value);\n } else if ((cipher.login.uris == null || cipher.login.uris.length === 0) &&\n this.uriFieldNames.indexOf(labelLower) > -1) {\n cipher.login.uris = this.makeUriArray(field.value);\n } else {\n this.processKvp(cipher, field.label, field.value);\n }\n break;\n }\n }\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class CodebookCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n this.processFolder(result, this.getValueOrDefault(value.Category));\n\n const cipher = this.initLoginCipher();\n cipher.favorite = this.getValueOrDefault(value.Favorite) === 'True';\n cipher.name = this.getValueOrDefault(value.Entry, '--');\n cipher.notes = this.getValueOrDefault(value.Note);\n cipher.login.username = this.getValueOrDefault(value.Username, value.Email);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.totp = this.getValueOrDefault(value.TOTP);\n cipher.login.uris = this.makeUriArray(value.Website);\n\n if (!this.isNullOrWhitespace(value.Username)) {\n this.processKvp(cipher, 'Email', value.Email);\n }\n this.processKvp(cipher, 'Phone', value.Phone);\n this.processKvp(cipher, 'PIN', value.PIN);\n this.processKvp(cipher, 'Account', value.Account);\n this.processKvp(cipher, 'Date', value.Date);\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\nimport { CipherView } from '../models/view/cipherView';\nimport { IdentityView } from '../models/view/identityView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nconst HandledResults = new Set(['ADDRESS', 'AUTHENTIFIANT', 'BANKSTATEMENT', 'IDCARD', 'IDENTITY',\n 'PAYMENTMEANS_CREDITCARD', 'PAYMENTMEAN_PAYPAL', 'EMAIL']);\n\nexport class DashlaneJsonImporter extends BaseImporter implements Importer {\n private result: ImportResult;\n\n parse(data: string): Promise {\n this.result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.length === 0) {\n this.result.success = false;\n return Promise.resolve(this.result);\n }\n\n if (results.ADDRESS != null) {\n this.processAddress(results.ADDRESS);\n }\n if (results.AUTHENTIFIANT != null) {\n this.processAuth(results.AUTHENTIFIANT);\n }\n if (results.BANKSTATEMENT != null) {\n this.processNote(results.BANKSTATEMENT, 'BankAccountName');\n }\n if (results.IDCARD != null) {\n this.processNote(results.IDCARD, 'Fullname');\n }\n if (results.PAYMENTMEANS_CREDITCARD != null) {\n this.processCard(results.PAYMENTMEANS_CREDITCARD);\n }\n if (results.IDENTITY != null) {\n this.processIdentity(results.IDENTITY);\n }\n\n for (const key in results) {\n if (results.hasOwnProperty(key) && !HandledResults.has(key)) {\n this.processNote(results[key], null, 'Generic Note');\n }\n }\n\n this.result.success = true;\n return Promise.resolve(this.result);\n }\n\n private processAuth(results: any[]) {\n results.forEach((credential: any) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(credential.title);\n\n cipher.login.username = this.getValueOrDefault(credential.login,\n this.getValueOrDefault(credential.secondaryLogin));\n if (this.isNullOrWhitespace(cipher.login.username)) {\n cipher.login.username = this.getValueOrDefault(credential.email);\n } else if (!this.isNullOrWhitespace(credential.email)) {\n cipher.notes = ('Email: ' + credential.email + '\\n');\n }\n\n cipher.login.password = this.getValueOrDefault(credential.password);\n cipher.login.uris = this.makeUriArray(credential.domain);\n cipher.notes += this.getValueOrDefault(credential.note, '');\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n\n private processIdentity(results: any[]) {\n results.forEach((obj: any) => {\n const cipher = new CipherView();\n cipher.identity = new IdentityView();\n cipher.type = CipherType.Identity;\n cipher.name = this.getValueOrDefault(obj.fullName, '');\n const nameParts = cipher.name.split(' ');\n if (nameParts.length > 0) {\n cipher.identity.firstName = this.getValueOrDefault(nameParts[0]);\n }\n if (nameParts.length === 2) {\n cipher.identity.lastName = this.getValueOrDefault(nameParts[1]);\n } else if (nameParts.length === 3) {\n cipher.identity.middleName = this.getValueOrDefault(nameParts[1]);\n cipher.identity.lastName = this.getValueOrDefault(nameParts[2]);\n }\n cipher.identity.username = this.getValueOrDefault(obj.pseudo);\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n\n private processAddress(results: any[]) {\n results.forEach((obj: any) => {\n const cipher = new CipherView();\n cipher.identity = new IdentityView();\n cipher.type = CipherType.Identity;\n cipher.name = this.getValueOrDefault(obj.addressName);\n cipher.identity.address1 = this.getValueOrDefault(obj.addressFull);\n cipher.identity.city = this.getValueOrDefault(obj.city);\n cipher.identity.state = this.getValueOrDefault(obj.state);\n cipher.identity.postalCode = this.getValueOrDefault(obj.zipcode);\n cipher.identity.country = this.getValueOrDefault(obj.country);\n if (cipher.identity.country != null) {\n cipher.identity.country = cipher.identity.country.toUpperCase();\n }\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n\n private processCard(results: any[]) {\n results.forEach((obj: any) => {\n const cipher = new CipherView();\n cipher.card = new CardView();\n cipher.type = CipherType.Card;\n cipher.name = this.getValueOrDefault(obj.bank);\n cipher.card.number = this.getValueOrDefault(obj.cardNumber);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.cardholderName = this.getValueOrDefault(obj.owner);\n if (!this.isNullOrWhitespace(cipher.card.brand)) {\n if (this.isNullOrWhitespace(cipher.name)) {\n cipher.name = cipher.card.brand;\n } else {\n cipher.name += (' - ' + cipher.card.brand);\n }\n }\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n\n private processNote(results: any[], nameProperty: string, name: string = null) {\n results.forEach((obj: any) => {\n const cipher = new CipherView();\n cipher.secureNote = new SecureNoteView();\n cipher.type = CipherType.SecureNote;\n cipher.secureNote.type = SecureNoteType.Generic;\n if (name != null) {\n cipher.name = name;\n } else {\n cipher.name = this.getValueOrDefault(obj[nameProperty]);\n }\n for (const key in obj) {\n if (obj.hasOwnProperty(key) && key !== nameProperty) {\n this.processKvp(cipher, key, obj[key].toString());\n }\n }\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\n\nimport { CipherType } from '../enums/cipherType';\n\nexport class EncryptrCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.Label, '--');\n cipher.notes = this.getValueOrDefault(value.Notes);\n const text = this.getValueOrDefault(value.Text);\n if (!this.isNullOrWhitespace(text)) {\n if (this.isNullOrWhitespace(cipher.notes)) {\n cipher.notes = text;\n } else {\n cipher.notes += ('\\n\\n' + text);\n }\n }\n\n const type = value['Entry Type'];\n if (type === 'Password') {\n cipher.login.username = this.getValueOrDefault(value.Username);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value['Site URL']);\n } else if (type === 'Credit Card') {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n cipher.card.cardholderName = this.getValueOrDefault(value['Name on card']);\n cipher.card.number = this.getValueOrDefault(value['Card Number']);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.code = this.getValueOrDefault(value.CVV);\n const expiry = this.getValueOrDefault(value.Expiry);\n if (!this.isNullOrWhitespace(expiry)) {\n const expParts = expiry.split('/');\n if (expParts.length > 1) {\n cipher.card.expMonth = parseInt(expParts[0], null).toString();\n cipher.card.expYear = (2000 + parseInt(expParts[1], null)).toString();\n }\n }\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nimport { CardView } from '../models/view/cardView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nexport class EnpassCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n let firstRow = true;\n results.forEach(value => {\n if (value.length < 2 || (firstRow && (value[0] === 'Title' || value[0] === 'title'))) {\n firstRow = false;\n return;\n }\n\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value[value.length - 1]);\n cipher.name = this.getValueOrDefault(value[0], '--');\n\n if (value.length === 2 || (!this.containsField(value, 'username') &&\n !this.containsField(value, 'password') && !this.containsField(value, 'email') &&\n !this.containsField(value, 'url'))) {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n }\n\n if (this.containsField(value, 'cardholder') && this.containsField(value, 'number') &&\n this.containsField(value, 'expiry date')) {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n }\n\n if (value.length > 2 && (value.length % 2) === 0) {\n for (let i = 0; i < value.length - 2; i += 2) {\n const fieldValue: string = value[i + 2];\n if (this.isNullOrWhitespace(fieldValue)) {\n continue;\n }\n\n const fieldName: string = value[i + 1];\n const fieldNameLower = fieldName.toLowerCase();\n\n if (cipher.type === CipherType.Login) {\n if (fieldNameLower === 'url' && (cipher.login.uris == null || cipher.login.uris.length === 0)) {\n cipher.login.uris = this.makeUriArray(fieldValue);\n continue;\n } else if ((fieldNameLower === 'username' || fieldNameLower === 'email') &&\n this.isNullOrWhitespace(cipher.login.username)) {\n cipher.login.username = fieldValue;\n continue;\n } else if (fieldNameLower === 'password' && this.isNullOrWhitespace(cipher.login.password)) {\n cipher.login.password = fieldValue;\n continue;\n } else if (fieldNameLower === 'totp' && this.isNullOrWhitespace(cipher.login.totp)) {\n cipher.login.totp = fieldValue;\n continue;\n }\n } else if (cipher.type === CipherType.Card) {\n if (fieldNameLower === 'cardholder' && this.isNullOrWhitespace(cipher.card.cardholderName)) {\n cipher.card.cardholderName = fieldValue;\n continue;\n } else if (fieldNameLower === 'number' && this.isNullOrWhitespace(cipher.card.number)) {\n cipher.card.number = fieldValue;\n cipher.card.brand = this.getCardBrand(fieldValue);\n continue;\n } else if (fieldNameLower === 'cvc' && this.isNullOrWhitespace(cipher.card.code)) {\n cipher.card.code = fieldValue;\n continue;\n } else if (fieldNameLower === 'expiry date' && this.isNullOrWhitespace(cipher.card.expMonth) &&\n this.isNullOrWhitespace(cipher.card.expYear)) {\n if (this.setCardExpiration(cipher, fieldValue)) {\n continue;\n }\n } else if (fieldNameLower === 'type') {\n // Skip since brand was determined from number above\n continue;\n }\n }\n\n this.processKvp(cipher, fieldName, fieldValue);\n }\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private containsField(fields: any[], name: string) {\n if (fields == null || name == null) {\n return false;\n }\n return fields.filter(f => !this.isNullOrWhitespace(f) &&\n f.toLowerCase() === name.toLowerCase()).length > 0;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\nimport { CipherView } from '../models/view/cipherView';\nimport { FolderView } from '../models/view/folderView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { FieldType } from '../enums/fieldType';\n\nexport class EnpassJsonImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.items == null || results.items.length === 0) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const foldersMap = new Map();\n const foldersIndexMap = new Map();\n const folderTree = this.buildFolderTree(results.folders);\n this.flattenFolderTree(null, folderTree, foldersMap);\n foldersMap.forEach((val, key) => {\n foldersIndexMap.set(key, result.folders.length);\n const f = new FolderView();\n f.name = val;\n result.folders.push(f);\n });\n\n results.items.forEach((item: any) => {\n if (item.folders != null && item.folders.length > 0 && foldersIndexMap.has(item.folders[0])) {\n result.folderRelationships.push([result.ciphers.length, foldersIndexMap.get(item.folders[0])]);\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(item.title);\n cipher.favorite = item.favorite > 0;\n\n if (item.template_type != null && item.fields != null && item.fields.length > 0) {\n if (item.template_type.indexOf('login.') === 0 || item.template_type.indexOf('password.') === 0) {\n this.processLogin(cipher, item.fields);\n } else if (item.template_type.indexOf('creditcard.') === 0) {\n this.processCard(cipher, item.fields);\n } else if (item.template_type.indexOf('identity.') < 0 &&\n item.fields.some((f: any) => f.type === 'password' && !this.isNullOrWhitespace(f.value))) {\n this.processLogin(cipher, item.fields);\n } else {\n this.processNote(cipher, item.fields);\n }\n }\n\n cipher.notes += ('\\n' + this.getValueOrDefault(item.note, ''));\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private processLogin(cipher: CipherView, fields: any[]) {\n const urls: string[] = [];\n fields.forEach((field: any) => {\n if (this.isNullOrWhitespace(field.value) || field.type === 'section') {\n return;\n }\n\n if ((field.type === 'username' || field.type === 'email') &&\n this.isNullOrWhitespace(cipher.login.username)) {\n cipher.login.username = field.value;\n } else if (field.type === 'password' && this.isNullOrWhitespace(cipher.login.password)) {\n cipher.login.password = field.value;\n } else if (field.type === 'totp' && this.isNullOrWhitespace(cipher.login.totp)) {\n cipher.login.totp = field.value;\n } else if (field.type === 'url') {\n urls.push(field.value);\n } else {\n this.processKvp(cipher, field.label, field.value,\n field.sensitive === 1 ? FieldType.Hidden : FieldType.Text);\n }\n });\n cipher.login.uris = this.makeUriArray(urls);\n }\n\n private processCard(cipher: CipherView, fields: any[]) {\n cipher.card = new CardView();\n cipher.type = CipherType.Card;\n fields.forEach((field: any) => {\n if (this.isNullOrWhitespace(field.value) || field.type === 'section' || field.type === 'ccType') {\n return;\n }\n\n if (field.type === 'ccName' && this.isNullOrWhitespace(cipher.card.cardholderName)) {\n cipher.card.cardholderName = field.value;\n } else if (field.type === 'ccNumber' && this.isNullOrWhitespace(cipher.card.number)) {\n cipher.card.number = field.value;\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n } else if (field.type === 'ccCvc' && this.isNullOrWhitespace(cipher.card.code)) {\n cipher.card.code = field.value;\n } else if (field.type === 'ccExpiry' && this.isNullOrWhitespace(cipher.card.expYear)) {\n if (!this.setCardExpiration(cipher, field.value)) {\n this.processKvp(cipher, field.label, field.value,\n field.sensitive === 1 ? FieldType.Hidden : FieldType.Text);\n }\n } else {\n this.processKvp(cipher, field.label, field.value,\n field.sensitive === 1 ? FieldType.Hidden : FieldType.Text);\n }\n });\n }\n\n private processNote(cipher: CipherView, fields: any[]) {\n fields.forEach((field: any) => {\n if (this.isNullOrWhitespace(field.value) || field.type === 'section') {\n return;\n }\n this.processKvp(cipher, field.label, field.value,\n field.sensitive === 1 ? FieldType.Hidden : FieldType.Text);\n });\n }\n\n private buildFolderTree(folders: any[]): any[] {\n if (folders == null) {\n return [];\n }\n const folderTree: any[] = [];\n const map = new Map([]);\n folders.forEach((obj: any) => {\n map.set(obj.uuid, obj);\n obj.children = [];\n });\n folders.forEach((obj: any) => {\n if (obj.parent_uuid != null && obj.parent_uuid !== '' && map.has(obj.parent_uuid)) {\n map.get(obj.parent_uuid).children.push(obj);\n } else {\n folderTree.push(obj);\n }\n });\n return folderTree;\n }\n\n private flattenFolderTree(titlePrefix: string, tree: any[], map: Map) {\n if (tree == null) {\n return;\n }\n tree.forEach((f: any) => {\n if (f.title != null && f.title.trim() !== '') {\n let title = f.title.trim();\n if (titlePrefix != null && titlePrefix.trim() !== '') {\n title = titlePrefix + '/' + title;\n }\n map.set(f.uuid, title);\n if (f.children != null && f.children.length !== 0) {\n this.flattenFolderTree(title, f.children, map);\n }\n }\n });\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class FirefoxCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.filter(value => {\n return value.url !== 'chrome://FirefoxAccounts';\n }).forEach(value => {\n const cipher = this.initLoginCipher();\n const url = this.getValueOrDefault(value.url, this.getValueOrDefault(value.hostname));\n cipher.name = this.getValueOrDefault(this.nameFromUrl(url), '--');\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(url);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\n\nimport { CipherType } from '../enums/cipherType';\n\nexport class FSecureFskImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.data == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n for (const key in results.data) {\n if (!results.data.hasOwnProperty(key)) {\n continue;\n }\n\n const value = results.data[key];\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.service);\n cipher.notes = this.getValueOrDefault(value.notes);\n\n if (value.style === 'website') {\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.url);\n } else if (value.style === 'creditcard') {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n cipher.card.cardholderName = this.getValueOrDefault(value.username);\n cipher.card.number = this.getValueOrDefault(value.creditNumber);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.code = this.getValueOrDefault(value.creditCvv);\n if (!this.isNullOrWhitespace(value.creditExpiry)) {\n if (!this.setCardExpiration(cipher, value.creditExpiry)) {\n this.processKvp(cipher, 'Expiration', value.creditExpiry);\n }\n }\n if (!this.isNullOrWhitespace(value.password)) {\n this.processKvp(cipher, 'PIN', value.password);\n }\n } else {\n continue;\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class GnomeJsonImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || Object.keys(results).length === 0) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n for (const keyRing in results) {\n if (!results.hasOwnProperty(keyRing) || this.isNullOrWhitespace(keyRing) ||\n results[keyRing].length === 0) {\n continue;\n }\n\n results[keyRing].forEach((value: any) => {\n if (this.isNullOrWhitespace(value.display_name) || value.display_name.indexOf('http') !== 0) {\n return;\n }\n\n this.processFolder(result, keyRing);\n const cipher = this.initLoginCipher();\n cipher.name = value.display_name.replace('http://', '').replace('https://', '');\n if (cipher.name.length > 30) {\n cipher.name = cipher.name.substring(0, 30);\n }\n cipher.login.password = this.getValueOrDefault(value.secret);\n cipher.login.uris = this.makeUriArray(value.display_name);\n\n if (value.attributes != null) {\n cipher.login.username = value.attributes != null ?\n this.getValueOrDefault(value.attributes.username_value) : null;\n for (const attr in value.attributes) {\n if (!value.attributes.hasOwnProperty(attr) || attr === 'username_value' ||\n attr === 'xdg:schema') {\n continue;\n }\n this.processKvp(cipher, attr, value.attributes[attr]);\n }\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n }\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nconst NotesHeader = 'Notes\\n\\n';\nconst ApplicationsHeader = 'Applications\\n\\n';\nconst WebsitesHeader = 'Websites\\n\\n';\nconst Delimiter = '\\n---\\n';\n\nexport class KasperskyTxtImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n\n let notesData: string;\n let applicationsData: string;\n let websitesData: string;\n let workingData = this.splitNewLine(data).join('\\n');\n\n if (workingData.indexOf(NotesHeader) !== -1) {\n const parts = workingData.split(NotesHeader);\n if (parts.length > 1) {\n workingData = parts[0];\n notesData = parts[1];\n }\n }\n if (workingData.indexOf(ApplicationsHeader) !== -1) {\n const parts = workingData.split(ApplicationsHeader);\n if (parts.length > 1) {\n workingData = parts[0];\n applicationsData = parts[1];\n }\n }\n if (workingData.indexOf(WebsitesHeader) === 0) {\n const parts = workingData.split(WebsitesHeader);\n if (parts.length > 1) {\n workingData = parts[0];\n websitesData = parts[1];\n }\n }\n\n const notes = this.parseDataCategory(notesData);\n const applications = this.parseDataCategory(applicationsData);\n const websites = this.parseDataCategory(websitesData);\n\n notes.forEach(n => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(n.get('Name'));\n cipher.notes = this.getValueOrDefault(n.get('Text'));\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n websites.concat(applications).forEach(w => {\n const cipher = this.initLoginCipher();\n const nameKey = w.has('Website name') ? 'Website name' : 'Application';\n cipher.name = this.getValueOrDefault(w.get(nameKey), '');\n if (!this.isNullOrWhitespace(w.get('Login name'))) {\n if (!this.isNullOrWhitespace(cipher.name)) {\n cipher.name += ': ';\n }\n cipher.name += w.get('Login name');\n }\n cipher.notes = this.getValueOrDefault(w.get('Comment'));\n if (w.has('Website URL')) {\n cipher.login.uris = this.makeUriArray(w.get('Website URL'));\n }\n cipher.login.username = this.getValueOrDefault(w.get('Login'));\n cipher.login.password = this.getValueOrDefault(w.get('Password'));\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private parseDataCategory(data: string): Map[] {\n if (this.isNullOrWhitespace(data) || data.indexOf(Delimiter) === -1) {\n return [];\n }\n const items: Map[] = [];\n data.split(Delimiter).forEach(p => {\n if (p.indexOf('\\n') === -1) {\n return;\n }\n const item = new Map();\n let itemComment: string;\n let itemCommentKey: string;\n p.split('\\n').forEach(l => {\n if (itemComment != null) {\n itemComment += ('\\n' + l);\n return;\n }\n const colonIndex = l.indexOf(':');\n let key: string;\n let val: string;\n if (colonIndex === -1) {\n return;\n } else {\n key = l.substring(0, colonIndex);\n if (l.length > colonIndex + 1) {\n val = l.substring(colonIndex + 2);\n }\n }\n if (key != null) {\n item.set(key, val);\n }\n if (key === 'Comment' || key === 'Text') {\n itemComment = val;\n itemCommentKey = key;\n }\n });\n if (itemComment != null && itemCommentKey != null) {\n item.set(itemCommentKey, itemComment);\n }\n if (item.size === 0) {\n return;\n }\n items.push(item);\n });\n return items;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { FieldType } from '../enums/fieldType';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { FolderView } from '../models/view/folderView';\n\nexport class KeePass2XmlImporter extends BaseImporter implements Importer {\n result = new ImportResult();\n\n parse(data: string): Promise {\n const doc = this.parseXml(data);\n if (doc == null) {\n this.result.success = false;\n return Promise.resolve(this.result);\n }\n\n const rootGroup = doc.querySelector('KeePassFile > Root > Group');\n if (rootGroup == null) {\n this.result.errorMessage = 'Missing `KeePassFile > Root > Group` node.';\n this.result.success = false;\n return Promise.resolve(this.result);\n }\n\n this.traverse(rootGroup, true, '');\n\n if (this.organization) {\n this.moveFoldersToCollections(this.result);\n }\n\n this.result.success = true;\n return Promise.resolve(this.result);\n }\n\n traverse(node: Element, isRootNode: boolean, groupPrefixName: string) {\n const folderIndex = this.result.folders.length;\n let groupName = groupPrefixName;\n\n if (!isRootNode) {\n if (groupName !== '') {\n groupName += '/';\n }\n const nameEl = this.querySelectorDirectChild(node, 'Name');\n groupName += nameEl == null ? '-' : nameEl.textContent;\n const folder = new FolderView();\n folder.name = groupName;\n this.result.folders.push(folder);\n }\n\n this.querySelectorAllDirectChild(node, 'Entry').forEach(entry => {\n const cipherIndex = this.result.ciphers.length;\n\n const cipher = this.initLoginCipher();\n this.querySelectorAllDirectChild(entry, 'String').forEach(entryString => {\n const valueEl = this.querySelectorDirectChild(entryString, 'Value');\n const value = valueEl != null ? valueEl.textContent : null;\n if (this.isNullOrWhitespace(value)) {\n return;\n }\n const keyEl = this.querySelectorDirectChild(entryString, 'Key');\n const key = keyEl != null ? keyEl.textContent : null;\n\n if (key === 'URL') {\n cipher.login.uris = this.makeUriArray(value);\n } else if (key === 'UserName') {\n cipher.login.username = value;\n } else if (key === 'Password') {\n cipher.login.password = value;\n } else if (key === 'otp') {\n cipher.login.totp = value.replace('key=', '');\n } else if (key === 'Title') {\n cipher.name = value;\n } else if (key === 'Notes') {\n cipher.notes += (value + '\\n');\n } else {\n let type = FieldType.Text;\n const attrs = (valueEl.attributes as any);\n if (attrs.length > 0 && attrs.ProtectInMemory != null &&\n attrs.ProtectInMemory.value === 'True') {\n type = FieldType.Hidden;\n }\n this.processKvp(cipher, key, value, type);\n }\n });\n\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n\n if (!isRootNode) {\n this.result.folderRelationships.push([cipherIndex, folderIndex]);\n }\n });\n\n this.querySelectorAllDirectChild(node, 'Group').forEach(group => {\n this.traverse(group, false, groupName);\n });\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class KeePassXCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (this.isNullOrWhitespace(value.Title)) {\n return;\n }\n\n value.Group = !this.isNullOrWhitespace(value.Group) && value.Group.startsWith('Root/') ?\n value.Group.replace('Root/', '') : value.Group;\n const groupName = !this.isNullOrWhitespace(value.Group) ? value.Group : null;\n this.processFolder(result, groupName);\n\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value.Notes);\n cipher.name = this.getValueOrDefault(value.Title, '--');\n cipher.login.username = this.getValueOrDefault(value.Username);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value.URL);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { FolderView } from '../models/view/folderView';\n\nexport class KeeperCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (value.length < 6) {\n return;\n }\n\n this.processFolder(result, value[0]);\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value[5]) + '\\n';\n cipher.name = this.getValueOrDefault(value[1], '--');\n cipher.login.username = this.getValueOrDefault(value[2]);\n cipher.login.password = this.getValueOrDefault(value[3]);\n cipher.login.uris = this.makeUriArray(value[4]);\n\n if (value.length > 7) {\n // we have some custom fields.\n for (let i = 7; i < value.length; i = i + 2) {\n this.processKvp(cipher, value[i], value[i + 1]);\n }\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\nimport { CipherView } from '../models/view/cipherView';\nimport { FolderView } from '../models/view/folderView';\nimport { IdentityView } from '../models/view/identityView';\nimport { LoginView } from '../models/view/loginView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nexport class LastPassCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value, index) => {\n const cipherIndex = result.ciphers.length;\n let folderIndex = result.folders.length;\n let grouping = value.grouping;\n if (grouping != null) {\n grouping = grouping.replace(/\\\\/g, '/').replace(/[\\x00-\\x1F\\x7F-\\x9F]/g, '');\n }\n const hasFolder = this.getValueOrDefault(grouping, '(none)') !== '(none)';\n let addFolder = hasFolder;\n\n if (hasFolder) {\n for (let i = 0; i < result.folders.length; i++) {\n if (result.folders[i].name === grouping) {\n addFolder = false;\n folderIndex = i;\n break;\n }\n }\n }\n\n const cipher = this.buildBaseCipher(value);\n if (cipher.type === CipherType.Login) {\n cipher.notes = this.getValueOrDefault(value.extra);\n cipher.login = new LoginView();\n cipher.login.uris = this.makeUriArray(value.url);\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n } else if (cipher.type === CipherType.SecureNote) {\n this.parseSecureNote(value, cipher);\n } else if (cipher.type === CipherType.Card) {\n cipher.card = this.parseCard(value);\n cipher.notes = this.getValueOrDefault(value.notes);\n } else if (cipher.type === CipherType.Identity) {\n cipher.identity = this.parseIdentity(value);\n cipher.notes = this.getValueOrDefault(value.notes);\n if (!this.isNullOrWhitespace(value.ccnum)) {\n // there is a card on this identity too\n const cardCipher = this.buildBaseCipher(value);\n cardCipher.identity = null;\n cardCipher.type = CipherType.Card;\n cardCipher.card = this.parseCard(value);\n result.ciphers.push(cardCipher);\n }\n }\n\n result.ciphers.push(cipher);\n\n if (addFolder) {\n const f = new FolderView();\n f.name = grouping;\n result.folders.push(f);\n }\n if (hasFolder) {\n result.folderRelationships.push([cipherIndex, folderIndex]);\n }\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private buildBaseCipher(value: any) {\n const cipher = new CipherView();\n if (value.hasOwnProperty('profilename') && value.hasOwnProperty('profilelanguage')) {\n // form fill\n cipher.favorite = false;\n cipher.name = this.getValueOrDefault(value.profilename, '--');\n cipher.type = CipherType.Card;\n\n if (!this.isNullOrWhitespace(value.title) || !this.isNullOrWhitespace(value.firstname) ||\n !this.isNullOrWhitespace(value.lastname) || !this.isNullOrWhitespace(value.address1) ||\n !this.isNullOrWhitespace(value.phone) || !this.isNullOrWhitespace(value.username) ||\n !this.isNullOrWhitespace(value.email)) {\n cipher.type = CipherType.Identity;\n }\n } else {\n // site or secure note\n cipher.favorite = !this.organization && this.getValueOrDefault(value.fav, '0') === '1';\n cipher.name = this.getValueOrDefault(value.name, '--');\n cipher.type = value.url === 'http://sn' ? CipherType.SecureNote : CipherType.Login;\n }\n return cipher;\n }\n\n private parseCard(value: any): CardView {\n const card = new CardView();\n card.cardholderName = this.getValueOrDefault(value.ccname);\n card.number = this.getValueOrDefault(value.ccnum);\n card.code = this.getValueOrDefault(value.cccsc);\n card.brand = this.getCardBrand(value.ccnum);\n\n if (!this.isNullOrWhitespace(value.ccexp) && value.ccexp.indexOf('-') > -1) {\n const ccexpParts = (value.ccexp as string).split('-');\n if (ccexpParts.length > 1) {\n card.expYear = ccexpParts[0];\n card.expMonth = ccexpParts[1];\n if (card.expMonth.length === 2 && card.expMonth[0] === '0') {\n card.expMonth = card.expMonth[1];\n }\n }\n }\n\n return card;\n }\n\n private parseIdentity(value: any): IdentityView {\n const identity = new IdentityView();\n identity.title = this.getValueOrDefault(value.title);\n identity.firstName = this.getValueOrDefault(value.firstname);\n identity.middleName = this.getValueOrDefault(value.middlename);\n identity.lastName = this.getValueOrDefault(value.lastname);\n identity.username = this.getValueOrDefault(value.username);\n identity.company = this.getValueOrDefault(value.company);\n identity.ssn = this.getValueOrDefault(value.ssn);\n identity.address1 = this.getValueOrDefault(value.address1);\n identity.address2 = this.getValueOrDefault(value.address2);\n identity.address3 = this.getValueOrDefault(value.address3);\n identity.city = this.getValueOrDefault(value.city);\n identity.state = this.getValueOrDefault(value.state);\n identity.postalCode = this.getValueOrDefault(value.zip);\n identity.country = this.getValueOrDefault(value.country);\n identity.email = this.getValueOrDefault(value.email);\n identity.phone = this.getValueOrDefault(value.phone);\n\n if (!this.isNullOrWhitespace(identity.title)) {\n identity.title = identity.title.charAt(0).toUpperCase() + identity.title.slice(1);\n }\n\n return identity;\n }\n\n private parseSecureNote(value: any, cipher: CipherView) {\n const extraParts = this.splitNewLine(value.extra);\n let processedNote = false;\n\n if (extraParts.length) {\n const typeParts = extraParts[0].split(':');\n if (typeParts.length > 1 && typeParts[0] === 'NoteType' &&\n (typeParts[1] === 'Credit Card' || typeParts[1] === 'Address')) {\n if (typeParts[1] === 'Credit Card') {\n const mappedData = this.parseSecureNoteMapping(cipher, extraParts, {\n 'Number': 'number',\n 'Name on Card': 'cardholderName',\n 'Security Code': 'code',\n // LP provides date in a format like 'June,2020'\n // Store in expMonth, then parse and modify\n 'Expiration Date': 'expMonth',\n });\n\n if (this.isNullOrWhitespace(mappedData.expMonth) || mappedData.expMonth === ',') {\n // No expiration data\n mappedData.expMonth = undefined;\n } else {\n const [monthString, year] = mappedData.expMonth.split(',');\n // Parse month name into number\n if (!this.isNullOrWhitespace(monthString)) {\n const month = new Date(Date.parse(monthString.trim() + ' 1, 2012')).getMonth() + 1;\n if (isNaN(month)) {\n mappedData.expMonth = undefined;\n } else {\n mappedData.expMonth = month.toString();\n }\n } else {\n mappedData.expMonth = undefined;\n }\n if (!this.isNullOrWhitespace(year)) {\n mappedData.expYear = year;\n }\n }\n\n cipher.type = CipherType.Card;\n cipher.card = mappedData;\n } else if (typeParts[1] === 'Address') {\n const mappedData = this.parseSecureNoteMapping(cipher, extraParts, {\n 'Title': 'title',\n 'First Name': 'firstName',\n 'Last Name': 'lastName',\n 'Middle Name': 'middleName',\n 'Company': 'company',\n 'Address 1': 'address1',\n 'Address 2': 'address2',\n 'Address 3': 'address3',\n 'City / Town': 'city',\n 'State': 'state',\n 'Zip / Postal Code': 'postalCode',\n 'Country': 'country',\n 'Email Address': 'email',\n 'Username': 'username',\n });\n cipher.type = CipherType.Identity;\n cipher.identity = mappedData;\n }\n processedNote = true;\n }\n }\n\n if (!processedNote) {\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n cipher.notes = this.getValueOrDefault(value.extra);\n }\n }\n\n private parseSecureNoteMapping(cipher: CipherView, extraParts: string[], map: any): T {\n const dataObj: any = {};\n\n let processingNotes = false;\n extraParts.forEach(extraPart => {\n let key: string = null;\n let val: string = null;\n if (!processingNotes) {\n if (this.isNullOrWhitespace(extraPart)) {\n return;\n }\n const colonIndex = extraPart.indexOf(':');\n if (colonIndex === -1) {\n key = extraPart;\n } else {\n key = extraPart.substring(0, colonIndex);\n if (extraPart.length > colonIndex) {\n val = extraPart.substring(colonIndex + 1);\n }\n }\n if (this.isNullOrWhitespace(key) || this.isNullOrWhitespace(val) || key === 'NoteType') {\n return;\n }\n }\n\n if (processingNotes) {\n cipher.notes += ('\\n' + extraPart);\n } else if (key === 'Notes') {\n if (!this.isNullOrWhitespace(cipher.notes)) {\n cipher.notes += ('\\n' + val);\n } else {\n cipher.notes = val;\n }\n processingNotes = true;\n } else if (map.hasOwnProperty(key)) {\n dataObj[map[key]] = val;\n } else {\n this.processKvp(cipher, key, val);\n }\n });\n\n return dataObj;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class LogMeOnceCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (value.length < 4) {\n return;\n }\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[0], '--');\n cipher.login.username = this.getValueOrDefault(value[2]);\n cipher.login.password = this.getValueOrDefault(value[3]);\n cipher.login.uris = this.makeUriArray(value[1]);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class MeldiumCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.DisplayName, '--');\n cipher.notes = this.getValueOrDefault(value.Notes);\n cipher.login.username = this.getValueOrDefault(value.UserName);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value.Url);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nexport class MSecureCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (value.length < 3) {\n return;\n }\n\n const folderName = this.getValueOrDefault(value[0], 'Unassigned') !== 'Unassigned' ? value[0] : null;\n this.processFolder(result, folderName);\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[2], '--');\n\n if (value[1] === 'Web Logins' || value[1] === 'Login') {\n cipher.login.uris = this.makeUriArray(value[4]);\n cipher.login.username = this.getValueOrDefault(value[5]);\n cipher.login.password = this.getValueOrDefault(value[6]);\n cipher.notes = !this.isNullOrWhitespace(value[3]) ? value[3].split('\\\\n').join('\\n') : null;\n } else if (value.length > 3) {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n for (let i = 3; i < value.length; i++) {\n if (!this.isNullOrWhitespace(value[i])) {\n cipher.notes += (value[i] + '\\n');\n }\n }\n }\n\n if (!this.isNullOrWhitespace(value[1]) && cipher.type !== CipherType.Login) {\n cipher.name = value[1] + ': ' + cipher.name;\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nimport { CardView } from '../models/view/cardView';\nimport { IdentityView } from '../models/view/identityView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class MykiCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.nickname, '--');\n cipher.notes = this.getValueOrDefault(value.additionalInfo);\n\n if (value.url !== undefined) {\n // Accounts\n cipher.login.uris = this.makeUriArray(value.url);\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.totp = this.getValueOrDefault(value.twoFactAuthToken);\n } else if (value.cardNumber !== undefined) {\n // Cards\n cipher.card = new CardView();\n cipher.type = CipherType.Card;\n cipher.card.cardholderName = this.getValueOrDefault(value.cardName);\n cipher.card.number = this.getValueOrDefault(value.cardNumber);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.expMonth = this.getValueOrDefault(value.exp_month);\n cipher.card.expYear = this.getValueOrDefault(value.exp_year);\n cipher.card.code = this.getValueOrDefault(value.cvv);\n } else if (value.firstName !== undefined) {\n // Identities\n cipher.identity = new IdentityView();\n cipher.type = CipherType.Identity;\n cipher.identity.title = this.getValueOrDefault(value.title);\n cipher.identity.firstName = this.getValueOrDefault(value.firstName);\n cipher.identity.middleName = this.getValueOrDefault(value.middleName);\n cipher.identity.lastName = this.getValueOrDefault(value.lastName);\n cipher.identity.phone = this.getValueOrDefault(value.number);\n cipher.identity.email = this.getValueOrDefault(value.email);\n cipher.identity.address1 = this.getValueOrDefault(value.firstAddressLine);\n cipher.identity.address2 = this.getValueOrDefault(value.secondAddressLine);\n cipher.identity.city = this.getValueOrDefault(value.city);\n cipher.identity.country = this.getValueOrDefault(value.country);\n cipher.identity.postalCode = this.getValueOrDefault(value.zipCode);\n } else if (value.content !== undefined) {\n // Notes\n cipher.secureNote = new SecureNoteView();\n cipher.type = CipherType.SecureNote;\n cipher.secureNote.type = SecureNoteType.Generic;\n cipher.name = this.getValueOrDefault(value.title, '--');\n cipher.notes = this.getValueOrDefault(value.content);\n } else {\n return;\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from '../baseImporter';\nimport { Importer } from '../importer';\n\nimport { ImportResult } from '../../models/domain/importResult';\n\nimport { CardView } from '../../models/view/cardView';\nimport { CipherView } from '../../models/view/cipherView';\nimport { IdentityView } from '../../models/view/identityView';\nimport { PasswordHistoryView } from '../../models/view/passwordHistoryView';\nimport { SecureNoteView } from '../../models/view/secureNoteView';\n\nimport { CipherType } from '../../enums/cipherType';\nimport { FieldType } from '../../enums/fieldType';\nimport { SecureNoteType } from '../../enums/secureNoteType';\n\nexport class OnePassword1PifImporter extends BaseImporter implements Importer {\n result = new ImportResult();\n\n parse(data: string): Promise {\n data.split(this.newLineRegex).forEach(line => {\n if (this.isNullOrWhitespace(line) || line[0] !== '{') {\n return;\n }\n const item = JSON.parse(line);\n if (item.trashed === true) {\n return;\n }\n const cipher = this.initLoginCipher();\n\n if (this.isNullOrWhitespace(item.hmac)) {\n this.processStandardItem(item, cipher);\n } else {\n this.processWinOpVaultItem(item, cipher);\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n\n this.result.success = true;\n return Promise.resolve(this.result);\n }\n\n private processWinOpVaultItem(item: any, cipher: CipherView) {\n if (item.overview != null) {\n cipher.name = this.getValueOrDefault(item.overview.title);\n if (item.overview.URLs != null) {\n const urls: string[] = [];\n item.overview.URLs.forEach((url: any) => {\n if (!this.isNullOrWhitespace(url.u)) {\n urls.push(url.u);\n }\n });\n cipher.login.uris = this.makeUriArray(urls);\n }\n }\n\n if (item.details != null) {\n if (item.details.passwordHistory != null) {\n this.parsePasswordHistory(item.details.passwordHistory, cipher);\n }\n if (!this.isNullOrWhitespace(item.details.ccnum) || !this.isNullOrWhitespace(item.details.cvv)) {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n } else if (!this.isNullOrWhitespace(item.details.firstname) ||\n !this.isNullOrWhitespace(item.details.address1)) {\n cipher.type = CipherType.Identity;\n cipher.identity = new IdentityView();\n }\n if (cipher.type === CipherType.Login && !this.isNullOrWhitespace(item.details.password)) {\n cipher.login.password = item.details.password;\n }\n if (!this.isNullOrWhitespace(item.details.notesPlain)) {\n cipher.notes = item.details.notesPlain.split(this.newLineRegex).join('\\n') + '\\n';\n }\n if (item.details.fields != null) {\n this.parseFields(item.details.fields, cipher, 'designation', 'value', 'name');\n }\n if (item.details.sections != null) {\n item.details.sections.forEach((section: any) => {\n if (section.fields != null) {\n this.parseFields(section.fields, cipher, 'n', 'v', 't');\n }\n });\n }\n }\n }\n\n private processStandardItem(item: any, cipher: CipherView) {\n cipher.favorite = item.openContents && item.openContents.faveIndex ? true : false;\n cipher.name = this.getValueOrDefault(item.title);\n\n if (item.typeName === 'securenotes.SecureNote') {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n } else if (item.typeName === 'wallet.financial.CreditCard') {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n } else if (item.typeName === 'identities.Identity') {\n cipher.type = CipherType.Identity;\n cipher.identity = new IdentityView();\n } else {\n cipher.login.uris = this.makeUriArray(item.location);\n }\n\n if (item.secureContents != null) {\n if (item.secureContents.passwordHistory != null) {\n this.parsePasswordHistory(item.secureContents.passwordHistory, cipher);\n }\n if (!this.isNullOrWhitespace(item.secureContents.notesPlain)) {\n cipher.notes = item.secureContents.notesPlain.split(this.newLineRegex).join('\\n') + '\\n';\n }\n if (cipher.type === CipherType.Login) {\n if (!this.isNullOrWhitespace(item.secureContents.password)) {\n cipher.login.password = item.secureContents.password;\n }\n if (item.secureContents.URLs != null) {\n const urls: string[] = [];\n item.secureContents.URLs.forEach((u: any) => {\n if (!this.isNullOrWhitespace(u.url)) {\n urls.push(u.url);\n }\n });\n if (urls.length > 0) {\n cipher.login.uris = this.makeUriArray(urls);\n }\n }\n }\n if (item.secureContents.fields != null) {\n this.parseFields(item.secureContents.fields, cipher, 'designation', 'value', 'name');\n }\n if (item.secureContents.sections != null) {\n item.secureContents.sections.forEach((section: any) => {\n if (section.fields != null) {\n this.parseFields(section.fields, cipher, 'n', 'v', 't');\n }\n });\n }\n }\n }\n\n private parsePasswordHistory(items: any[], cipher: CipherView) {\n const maxSize = items.length > 5 ? 5 : items.length;\n cipher.passwordHistory = items\n .filter((h: any) => !this.isNullOrWhitespace(h.value) && h.time != null)\n .sort((a, b) => b.time - a.time)\n .slice(0, maxSize)\n .map((h: any) => {\n const ph = new PasswordHistoryView();\n ph.password = h.value;\n ph.lastUsedDate = new Date(('' + h.time).length >= 13 ? h.time : h.time * 1000);\n return ph;\n });\n }\n\n private parseFields(fields: any[], cipher: CipherView, designationKey: string, valueKey: string, nameKey: string) {\n fields.forEach((field: any) => {\n if (field[valueKey] == null || field[valueKey].toString().trim() === '') {\n return;\n }\n\n const fieldValue = field[valueKey].toString();\n const fieldDesignation = field[designationKey] != null ? field[designationKey].toString() : null;\n\n if (cipher.type === CipherType.Login) {\n if (this.isNullOrWhitespace(cipher.login.username) && fieldDesignation === 'username') {\n cipher.login.username = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(cipher.login.password) && fieldDesignation === 'password') {\n cipher.login.password = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(cipher.login.totp) && fieldDesignation != null &&\n fieldDesignation.startsWith('TOTP_')) {\n cipher.login.totp = fieldValue;\n return;\n }\n } else if (cipher.type === CipherType.Card) {\n if (this.isNullOrWhitespace(cipher.card.number) && fieldDesignation === 'ccnum') {\n cipher.card.number = fieldValue;\n cipher.card.brand = this.getCardBrand(fieldValue);\n return;\n } else if (this.isNullOrWhitespace(cipher.card.code) && fieldDesignation === 'cvv') {\n cipher.card.code = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(cipher.card.cardholderName) && fieldDesignation === 'cardholder') {\n cipher.card.cardholderName = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(cipher.card.expiration) && fieldDesignation === 'expiry' &&\n fieldValue.length === 6) {\n cipher.card.expMonth = (fieldValue as string).substr(4, 2);\n if (cipher.card.expMonth[0] === '0') {\n cipher.card.expMonth = cipher.card.expMonth.substr(1, 1);\n }\n cipher.card.expYear = (fieldValue as string).substr(0, 4);\n return;\n } else if (fieldDesignation === 'type') {\n // Skip since brand was determined from number above\n return;\n }\n } else if (cipher.type === CipherType.Identity) {\n const identity = cipher.identity;\n if (this.isNullOrWhitespace(identity.firstName) && fieldDesignation === 'firstname') {\n identity.firstName = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.lastName) && fieldDesignation === 'lastname') {\n identity.lastName = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.middleName) && fieldDesignation === 'initial') {\n identity.middleName = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.phone) && fieldDesignation === 'defphone') {\n identity.phone = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.company) && fieldDesignation === 'company') {\n identity.company = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.email) && fieldDesignation === 'email') {\n identity.email = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.username) && fieldDesignation === 'username') {\n identity.username = fieldValue;\n return;\n } else if (fieldDesignation === 'address') {\n // fieldValue is an object casted into a string, so access the plain value instead\n const { street, city, country, zip } = field[valueKey];\n identity.address1 = this.getValueOrDefault(street);\n identity.city = this.getValueOrDefault(city);\n if (!this.isNullOrWhitespace(country)) {\n identity.country = country.toUpperCase();\n }\n identity.postalCode = this.getValueOrDefault(zip);\n return;\n }\n }\n\n const fieldName = this.isNullOrWhitespace(field[nameKey]) ? 'no_name' : field[nameKey];\n if (fieldName === 'password' && cipher.passwordHistory != null &&\n cipher.passwordHistory.some(h => h.password === fieldValue)) {\n return;\n }\n\n const fieldType = field.k === 'concealed' ? FieldType.Hidden : FieldType.Text;\n this.processKvp(cipher, fieldName, fieldValue, fieldType);\n });\n }\n}\n","import { Importer } from '../importer';\nimport { IgnoredProperties, OnePasswordCsvImporter } from './onepasswordCsvImporter';\n\nimport { CipherType } from '../../enums/cipherType';\nimport { CardView, CipherView, IdentityView } from '../../models/view';\n\nexport class OnePasswordMacCsvImporter extends OnePasswordCsvImporter implements Importer {\n setCipherType(value: any, cipher: CipherView) {\n const onePassType = this.getValueOrDefault(this.getProp(value, 'type'), 'Login');\n switch (onePassType) {\n case 'Credit Card':\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n IgnoredProperties.push('type');\n break;\n case 'Identity':\n cipher.type = CipherType.Identity;\n cipher.identity = new IdentityView();\n IgnoredProperties.push('type');\n break;\n case 'Login':\n case 'Secure Note':\n IgnoredProperties.push('type');\n default:\n break;\n }\n }\n}\n","import { CipherView } from '../../models/view';\n\nexport class CipherImportContext {\n lowerProperty: string;\n constructor(public importRecord: any, public property: string, public cipher: CipherView) {\n this.lowerProperty = property.toLowerCase();\n }\n}\n","export class View {\n}\n","import { Importer } from '../importer';\nimport { CipherImportContext } from './cipherImportContext';\nimport { OnePasswordCsvImporter } from './onepasswordCsvImporter';\n\nimport { CipherType } from '../../enums/cipherType';\nimport { CardView, CipherView, IdentityView, LoginView } from '../../models/view';\n\nexport class OnePasswordWinCsvImporter extends OnePasswordCsvImporter implements Importer {\n constructor() {\n super();\n this.identityPropertyParsers.push(this.setIdentityAddress);\n }\n\n setCipherType(value: any, cipher: CipherView) {\n cipher.type = CipherType.Login;\n cipher.login = new LoginView();\n\n if (!this.isNullOrWhitespace(this.getPropByRegexp(value, /\\d+: number/i)) &&\n !this.isNullOrWhitespace(this.getPropByRegexp(value, /\\d+: expiry date/i))) {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n }\n\n if (!this.isNullOrWhitespace(this.getPropByRegexp(value, /name \\d+: first name/i)) ||\n !this.isNullOrWhitespace(this.getPropByRegexp(value, /name \\d+: initial/i)) ||\n !this.isNullOrWhitespace(this.getPropByRegexp(value, /name \\d+: last name/i)) ||\n !this.isNullOrWhitespace(this.getPropByRegexp(value, /internet \\d+: email/i))) {\n cipher.type = CipherType.Identity;\n cipher.identity = new IdentityView();\n }\n }\n\n setIdentityAddress(context: CipherImportContext) {\n if (context.lowerProperty.match(/address \\d+: address/i)) {\n this.processKvp(context.cipher, 'address', context.importRecord[context.property]);\n return true;\n }\n return false;\n }\n\n setCreditCardExpiry(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.card.expiration) && context.lowerProperty.includes('expiry date')) {\n const expSplit = (context.importRecord[context.property] as string).split('/');\n context.cipher.card.expMonth = expSplit[0];\n if (context.cipher.card.expMonth[0] === '0' && context.cipher.card.expMonth.length === 2) {\n context.cipher.card.expMonth = context.cipher.card.expMonth.substr(1, 1);\n }\n context.cipher.card.expYear = expSplit[2].length > 4 ? expSplit[2].substr(0, 4) : expSplit[2];\n return true;\n }\n return false;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CollectionView } from '../models/view/collectionView';\nimport { FolderView } from '../models/view/folderView';\n\nexport class PadlockCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n let headers: string[] = null;\n results.forEach(value => {\n if (headers == null) {\n headers = value.map((v: string) => v);\n return;\n }\n\n if (value.length < 2 || value.length !== headers.length) {\n return;\n }\n\n if (!this.isNullOrWhitespace(value[1])) {\n if (this.organization) {\n const tags = (value[1] as string).split(',');\n tags.forEach(tag => {\n tag = tag.trim();\n let addCollection = true;\n let collectionIndex = result.collections.length;\n\n for (let i = 0; i < result.collections.length; i++) {\n if (result.collections[i].name === tag) {\n addCollection = false;\n collectionIndex = i;\n break;\n }\n }\n\n if (addCollection) {\n const collection = new CollectionView();\n collection.name = tag;\n result.collections.push(collection);\n }\n\n result.collectionRelationships.push([result.ciphers.length, collectionIndex]);\n });\n } else {\n const tags = (value[1] as string).split(',');\n const tag = tags.length > 0 ? tags[0].trim() : null;\n this.processFolder(result, tag);\n }\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[0], '--');\n\n for (let i = 2; i < value.length; i++) {\n const header = headers[i].trim().toLowerCase();\n if (this.isNullOrWhitespace(value[i]) || this.isNullOrWhitespace(header)) {\n continue;\n }\n\n if (this.usernameFieldNames.indexOf(header) > -1) {\n cipher.login.username = value[i];\n } else if (this.passwordFieldNames.indexOf(header) > -1) {\n cipher.login.password = value[i];\n } else if (this.uriFieldNames.indexOf(header) > -1) {\n cipher.login.uris = this.makeUriArray(value[i]);\n } else {\n this.processKvp(cipher, headers[i], value[i]);\n }\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class PassKeepCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n this.processFolder(result, this.getValue('category', value));\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValue('description', value);\n cipher.name = this.getValueOrDefault(this.getValue('title', value), '--');\n cipher.login.username = this.getValue('username', value);\n cipher.login.password = this.getValue('password', value);\n cipher.login.uris = this.makeUriArray(this.getValue('site', value));\n this.processKvp(cipher, 'Password 2', this.getValue('password2', value));\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private getValue(key: string, value: any) {\n return this.getValueOrDefault(value[key], this.getValueOrDefault(value[(' ' + key)]));\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class PassmanJsonImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.length === 0) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((credential: any) => {\n if (credential.tags != null && credential.tags.length > 0) {\n const folderName = credential.tags[0].text;\n this.processFolder(result, folderName);\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = credential.label;\n\n cipher.login.username = this.getValueOrDefault(credential.username);\n if (this.isNullOrWhitespace(cipher.login.username)) {\n cipher.login.username = this.getValueOrDefault(credential.email);\n } else if (!this.isNullOrWhitespace(credential.email)) {\n cipher.notes = ('Email: ' + credential.email + '\\n');\n }\n\n cipher.login.password = this.getValueOrDefault(credential.password);\n cipher.login.uris = this.makeUriArray(credential.url);\n cipher.notes += this.getValueOrDefault(credential.description, '');\n if (credential.otp != null) {\n cipher.login.totp = this.getValueOrDefault(credential.otp.secret);\n }\n\n if (credential.custom_fields != null) {\n credential.custom_fields.forEach((customField: any) => {\n switch (customField.field_type) {\n case 'text':\n case 'password':\n this.processKvp(cipher, customField.label, customField.value);\n break;\n }\n });\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CollectionView } from '../models/view/collectionView';\n\nexport class PasspackCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n const tagsJson = !this.isNullOrWhitespace(value.Tags) ? JSON.parse(value.Tags) : null;\n const tags: string[] = tagsJson != null && tagsJson.tags != null && tagsJson.tags.length > 0 ?\n tagsJson.tags.map((tagJson: string) => {\n try {\n const t = JSON.parse(tagJson);\n return this.getValueOrDefault(t.tag);\n } catch { }\n return null;\n }).filter((t: string) => !this.isNullOrWhitespace(t)) : null;\n\n if (this.organization && tags != null && tags.length > 0) {\n tags.forEach(tag => {\n let addCollection = true;\n let collectionIndex = result.collections.length;\n\n for (let i = 0; i < result.collections.length; i++) {\n if (result.collections[i].name === tag) {\n addCollection = false;\n collectionIndex = i;\n break;\n }\n }\n\n if (addCollection) {\n const collection = new CollectionView();\n collection.name = tag;\n result.collections.push(collection);\n }\n\n result.collectionRelationships.push([result.ciphers.length, collectionIndex]);\n });\n } else if (!this.organization && tags != null && tags.length > 0) {\n this.processFolder(result, tags[0]);\n }\n\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value.Notes, '');\n cipher.notes += ('\\n\\n' + this.getValueOrDefault(value['Shared Notes'], '') + '\\n');\n cipher.name = this.getValueOrDefault(value['Entry Name'], '--');\n cipher.login.username = this.getValueOrDefault(value['User ID']);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value.URL);\n\n if (value.__parsed_extra != null && value.__parsed_extra.length > 0) {\n value.__parsed_extra.forEach((extra: string) => {\n if (!this.isNullOrWhitespace(extra)) {\n cipher.notes += ('\\n' + extra);\n }\n });\n }\n\n const fieldsJson = !this.isNullOrWhitespace(value['Extra Fields']) ?\n JSON.parse(value['Extra Fields']) : null;\n const fields = fieldsJson != null && fieldsJson.extraFields != null &&\n fieldsJson.extraFields.length > 0 ? fieldsJson.extraFields.map((fieldJson: string) => {\n try {\n return JSON.parse(fieldJson);\n } catch { }\n return null;\n }) : null;\n if (fields != null) {\n fields.forEach((f: any) => {\n if (f != null) {\n this.processKvp(cipher, f.name, f.data);\n }\n });\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class PasswordAgentCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n let newVersion = true;\n results.forEach(value => {\n if (value.length !== 5 && value.length < 9) {\n return;\n }\n const altFormat = value.length === 10 && value[0] === '0';\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[altFormat ? 1 : 0], '--');\n cipher.login.username = this.getValueOrDefault(value[altFormat ? 2 : 1]);\n cipher.login.password = this.getValueOrDefault(value[altFormat ? 3 : 2]);\n if (value.length === 5) {\n newVersion = false;\n cipher.notes = this.getValueOrDefault(value[4]);\n cipher.login.uris = this.makeUriArray(value[3]);\n } else {\n const folder = this.getValueOrDefault(value[altFormat ? 9 : 8], '(None)');\n let folderName = folder !== '(None)' ? folder.split('\\\\').join('/') : null;\n if (folderName != null) {\n folderName = folder.split(' > ').join('/');\n folderName = folder.split('>').join('/');\n }\n this.processFolder(result, folderName);\n cipher.notes = this.getValueOrDefault(value[altFormat ? 5 : 3]);\n cipher.login.uris = this.makeUriArray(value[4]);\n }\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (newVersion && this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\nimport { FolderView } from '../models/view/folderView';\n\nimport { CipherType } from '../enums/cipherType';\n\nexport class PasswordBossJsonImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.items == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const foldersMap = new Map();\n results.folders.forEach((value: any) => {\n foldersMap.set(value.id, value.name);\n });\n const foldersIndexMap = new Map();\n foldersMap.forEach((val, key) => {\n foldersIndexMap.set(key, result.folders.length);\n const f = new FolderView();\n f.name = val;\n result.folders.push(f);\n });\n\n results.items.forEach((value: any) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.name, '--');\n cipher.login.uris = this.makeUriArray(value.login_url);\n\n if (value.folder != null && foldersIndexMap.has(value.folder)) {\n result.folderRelationships.push([result.ciphers.length, foldersIndexMap.get(value.folder)]);\n }\n\n if (value.identifiers == null) {\n return;\n }\n\n if (!this.isNullOrWhitespace(value.identifiers.notes)) {\n cipher.notes = value.identifiers.notes.split('\\\\r\\\\n').join('\\n').split('\\\\n').join('\\n');\n }\n\n if (value.type === 'CreditCard') {\n cipher.card = new CardView();\n cipher.type = CipherType.Card;\n }\n\n for (const property in value.identifiers) {\n if (!value.identifiers.hasOwnProperty(property)) {\n continue;\n }\n const valObj = value.identifiers[property];\n const val = valObj != null ? valObj.toString() : null;\n if (this.isNullOrWhitespace(val) || property === 'notes' || property === 'ignoreItemInSecurityScore') {\n continue;\n }\n\n if (property === 'custom_fields') {\n valObj.forEach((cf: any) => {\n this.processKvp(cipher, cf.name, cf.value);\n });\n continue;\n }\n\n if (cipher.type === CipherType.Card) {\n if (property === 'cardNumber') {\n cipher.card.number = val;\n cipher.card.brand = this.getCardBrand(val);\n continue;\n } else if (property === 'nameOnCard') {\n cipher.card.cardholderName = val;\n continue;\n } else if (property === 'security_code') {\n cipher.card.code = val;\n continue;\n } else if (property === 'expires') {\n try {\n const expDate = new Date(val);\n cipher.card.expYear = expDate.getFullYear().toString();\n cipher.card.expMonth = (expDate.getMonth() + 1).toString();\n } catch { }\n continue;\n } else if (property === 'cardType') {\n continue;\n }\n } else {\n if ((property === 'username' || property === 'email') &&\n this.isNullOrWhitespace(cipher.login.username)) {\n cipher.login.username = val;\n continue;\n } else if (property === 'password') {\n cipher.login.password = val;\n continue;\n } else if (property === 'totp') {\n cipher.login.totp = val;\n continue;\n } else if ((cipher.login.uris == null || cipher.login.uris.length === 0) &&\n this.uriFieldNames.indexOf(property) > -1) {\n cipher.login.uris = this.makeUriArray(val);\n continue;\n }\n }\n\n this.processKvp(cipher, property, val);\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class PasswordDragonXmlImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const doc = this.parseXml(data);\n if (doc == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const records = doc.querySelectorAll('PasswordManager > record');\n Array.from(records).forEach(record => {\n const category = this.querySelectorDirectChild(record, 'Category');\n const categoryText = category != null && !this.isNullOrWhitespace(category.textContent) &&\n category.textContent !== 'Unfiled' ? category.textContent : null;\n this.processFolder(result, categoryText);\n\n const accountName = this.querySelectorDirectChild(record, 'Account-Name');\n const userId = this.querySelectorDirectChild(record, 'User-Id');\n const password = this.querySelectorDirectChild(record, 'Password');\n const url = this.querySelectorDirectChild(record, 'URL');\n const notes = this.querySelectorDirectChild(record, 'Notes');\n const cipher = this.initLoginCipher();\n cipher.name = accountName != null ? this.getValueOrDefault(accountName.textContent, '--') : '--';\n cipher.notes = notes != null ? this.getValueOrDefault(notes.textContent) : '';\n cipher.login.username = userId != null ? this.getValueOrDefault(userId.textContent) : null;\n cipher.login.password = password != null ? this.getValueOrDefault(password.textContent) : null;\n cipher.login.uris = url != null ? this.makeUriArray(url.textContent) : null;\n\n const attributes: string[] = [];\n for (let i = 1; i <= 10; i++) {\n attributes.push('Attribute-' + i);\n }\n\n this.querySelectorAllDirectChild(record, attributes.join(',')).forEach(attr => {\n if (this.isNullOrWhitespace(attr.textContent) || attr.textContent === 'null') {\n return;\n }\n this.processKvp(cipher, attr.tagName, attr.textContent);\n });\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class PasswordSafeXmlImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const doc = this.parseXml(data);\n if (doc == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const passwordSafe = doc.querySelector('passwordsafe');\n if (passwordSafe == null) {\n result.errorMessage = 'Missing `passwordsafe` node.';\n result.success = false;\n return Promise.resolve(result);\n }\n\n const notesDelimiter = passwordSafe.getAttribute('delimiter');\n const entries = doc.querySelectorAll('passwordsafe > entry');\n Array.from(entries).forEach(entry => {\n const group = this.querySelectorDirectChild(entry, 'group');\n const groupText = group != null && !this.isNullOrWhitespace(group.textContent) ?\n group.textContent.split('.').join('/') : null;\n this.processFolder(result, groupText);\n\n const title = this.querySelectorDirectChild(entry, 'title');\n const username = this.querySelectorDirectChild(entry, 'username');\n const email = this.querySelectorDirectChild(entry, 'email');\n const password = this.querySelectorDirectChild(entry, 'password');\n const url = this.querySelectorDirectChild(entry, 'url');\n const notes = this.querySelectorDirectChild(entry, 'notes');\n const cipher = this.initLoginCipher();\n cipher.name = title != null ? this.getValueOrDefault(title.textContent, '--') : '--';\n cipher.notes = notes != null ?\n this.getValueOrDefault(notes.textContent, '').split(notesDelimiter).join('\\n') : null;\n cipher.login.username = username != null ? this.getValueOrDefault(username.textContent) : null;\n cipher.login.password = password != null ? this.getValueOrDefault(password.textContent) : null;\n cipher.login.uris = url != null ? this.makeUriArray(url.textContent) : null;\n\n if (this.isNullOrWhitespace(cipher.login.username) && email != null) {\n cipher.login.username = this.getValueOrDefault(email.textContent);\n } else if (email != null && !this.isNullOrWhitespace(email.textContent)) {\n cipher.notes = this.isNullOrWhitespace(cipher.notes) ? 'Email: ' + email.textContent\n : (cipher.notes + '\\n' + 'Email: ' + email.textContent);\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class PasswordWalletTxtImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (value.length < 1) {\n return;\n }\n if (value.length > 5) {\n this.processFolder(result, value[5]);\n }\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[0], '--');\n if (value.length > 4) {\n cipher.notes = this.getValueOrDefault(value[4], '').split('¬').join('\\n');\n }\n if (value.length > 2) {\n cipher.login.username = this.getValueOrDefault(value[2]);\n }\n if (value.length > 3) {\n cipher.login.password = this.getValueOrDefault(value[3]);\n }\n if (value.length > 1) {\n cipher.login.uris = this.makeUriArray(value[1]);\n }\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { CipherType } from '../enums/cipherType';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\n\nexport class RememBearCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (value.trash === 'true') {\n return;\n }\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.name);\n cipher.notes = this.getValueOrDefault(value.notes);\n if (value.type === 'LoginItem') {\n cipher.login.uris = this.makeUriArray(value.website);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.username = this.getValueOrDefault(value.username);\n } else if (value.type === 'CreditCardItem') {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n cipher.card.cardholderName = this.getValueOrDefault(value.cardholder);\n cipher.card.number = this.getValueOrDefault(value.number);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.code = this.getValueOrDefault(value.verification);\n\n try {\n const expMonth = this.getValueOrDefault(value.expiryMonth);\n if (expMonth != null) {\n const expMonthNumber = parseInt(expMonth, null);\n if (expMonthNumber != null && expMonthNumber >= 1 && expMonthNumber <= 12) {\n cipher.card.expMonth = expMonthNumber.toString();\n }\n }\n } catch { }\n try {\n const expYear = this.getValueOrDefault(value.expiryYear);\n if (expYear != null) {\n const expYearNumber = parseInt(expYear, null);\n if (expYearNumber != null) {\n cipher.card.expYear = expYearNumber.toString();\n }\n }\n } catch { }\n\n const pin = this.getValueOrDefault(value.pin);\n if (pin != null) {\n this.processKvp(cipher, 'PIN', pin);\n }\n const zip = this.getValueOrDefault(value.zipCode);\n if (zip != null) {\n this.processKvp(cipher, 'Zip Code', zip);\n }\n }\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class RoboFormCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n let i = 1;\n results.forEach(value => {\n const folder = !this.isNullOrWhitespace(value.Folder) && value.Folder.startsWith('/') ?\n value.Folder.replace('/', '') : value.Folder;\n const folderName = !this.isNullOrWhitespace(folder) ? folder : null;\n this.processFolder(result, folderName);\n\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value.Note);\n cipher.name = this.getValueOrDefault(value.Name, '--');\n cipher.login.username = this.getValueOrDefault(value.Login);\n cipher.login.password = this.getValueOrDefault(value.Pwd);\n cipher.login.uris = this.makeUriArray(value.Url);\n\n if (!this.isNullOrWhitespace(value.Rf_fields)) {\n let fields: string[] = [value.Rf_fields];\n if (value.__parsed_extra != null && value.__parsed_extra.length > 0) {\n fields = fields.concat(value.__parsed_extra);\n }\n fields.forEach((field: string) => {\n const parts = field.split(':');\n if (parts.length < 3) {\n return;\n }\n const key = parts[0] === '-no-name-' ? null : parts[0];\n const val = parts.length === 4 && parts[2] === 'rck' ? parts[1] : parts[2];\n this.processKvp(cipher, key, val);\n });\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n\n if (i === results.length && cipher.name === '--' && this.isNullOrWhitespace(cipher.login.password)) {\n return;\n }\n\n result.ciphers.push(cipher);\n i++;\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { FolderView } from '../models/view/folderView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nimport { FieldType } from '../enums';\nimport { CipherView, FieldView } from '../models/view';\n\nexport class SafeInCloudXmlImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const doc = this.parseXml(data);\n if (doc == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const db = doc.querySelector('database');\n if (db == null) {\n result.errorMessage = 'Missing `database` node.';\n result.success = false;\n return Promise.resolve(result);\n }\n\n const foldersMap = new Map();\n\n Array.from(doc.querySelectorAll('database > label')).forEach(labelEl => {\n const name = labelEl.getAttribute('name');\n const id = labelEl.getAttribute('id');\n if (!this.isNullOrWhitespace(name) && !this.isNullOrWhitespace(id)) {\n foldersMap.set(id, result.folders.length);\n const folder = new FolderView();\n folder.name = name;\n result.folders.push(folder);\n }\n });\n\n Array.from(doc.querySelectorAll('database > card')).forEach(cardEl => {\n if (cardEl.getAttribute('template') === 'true' || cardEl.getAttribute('deleted') === 'true') {\n return;\n }\n\n const labelIdEl = this.querySelectorDirectChild(cardEl, 'label_id');\n if (labelIdEl != null) {\n const labelId = labelIdEl.textContent;\n if (!this.isNullOrWhitespace(labelId) && foldersMap.has(labelId)) {\n result.folderRelationships.push([result.ciphers.length, foldersMap.get(labelId)]);\n }\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(cardEl.getAttribute('title'), '--');\n\n if (cardEl.getAttribute('star') === 'true') {\n cipher.favorite = true;\n }\n\n const cardType = cardEl.getAttribute('type');\n if (cardType === 'note') {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n } else {\n Array.from(this.querySelectorAllDirectChild(cardEl, 'field')).forEach(fieldEl => {\n const text = fieldEl.textContent;\n if (this.isNullOrWhitespace(text)) {\n return;\n }\n const name = fieldEl.getAttribute('name');\n const fieldType = this.getValueOrDefault(fieldEl.getAttribute('type'), '').toLowerCase();\n if (fieldType === 'login') {\n cipher.login.username = text;\n } else if (fieldType === 'password' || fieldType === 'secret') {\n // safeInCloud allows for more than one password. we just insert them here and find the one used as password later\n this.processKvp(cipher, name, text, FieldType.Hidden);\n } else if (fieldType === 'one_time_password') {\n cipher.login.totp = text;\n } else if (fieldType === 'notes') {\n cipher.notes += (text + '\\n');\n } else if (fieldType === 'weblogin' || fieldType === 'website') {\n cipher.login.uris = this.makeUriArray(text);\n }\n else {\n this.processKvp(cipher, name, text);\n }\n });\n }\n\n Array.from(this.querySelectorAllDirectChild(cardEl, 'notes')).forEach(notesEl => {\n cipher.notes += (notesEl.textContent + '\\n');\n });\n\n this.setPassword(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n // Choose a password from all passwords. Take one that has password in its name, or the first one if there is no such entry\n // if its name is password, we can safely remove it form the fields. otherwise, it would maybe be best to keep it as a hidden field\n setPassword(cipher: CipherView) {\n const candidates = cipher.fields.filter(field => field.type === FieldType.Hidden);\n if (!candidates.length) {\n return;\n }\n\n let choice: FieldView;\n for (const field of candidates) {\n if (this.passwordFieldNames.includes(field.name.toLowerCase())) {\n choice = field;\n cipher.fields = cipher.fields.filter(f => f !== choice);\n break;\n }\n }\n\n if (!choice) {\n choice = candidates[0];\n }\n\n cipher.login.password = choice.value;\n }\n}\n","export { CipherType } from './cipherType';\nexport { DeviceType } from './deviceType';\nexport { EncryptionType } from './encryptionType';\nexport { FieldType } from './fieldType';\nexport { LogLevelType } from './logLevelType';\nexport { SecureNoteType } from './secureNoteType';\nexport { TwoFactorProviderType } from './twoFactorProviderType';\nexport { UriMatchType } from './uriMatchType';\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class SaferPassCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(this.nameFromUrl(value.url), '--');\n cipher.notes = this.getValueOrDefault(value.notes);\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.url);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class SecureSafeCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.Title);\n cipher.notes = this.getValueOrDefault(value.Comment);\n cipher.login.uris = this.makeUriArray(value.Url);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.username = this.getValueOrDefault(value.Username);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\nimport { CipherView } from '../models/view/cipherView';\n\nexport class SplashIdCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (value.length < 3) {\n return;\n }\n\n this.processFolder(result, this.getValueOrDefault(value[value.length - 1]));\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value[value.length - 2], '');\n cipher.name = this.getValueOrDefault(value[1], '--');\n\n if (value[0] === 'Web Logins' || value[0] === 'Servers' || value[0] === 'Email Accounts') {\n cipher.login.username = this.getValueOrDefault(value[2]);\n cipher.login.password = this.getValueOrDefault(value[3]);\n cipher.login.uris = this.makeUriArray(value[4]);\n this.parseFieldsToNotes(cipher, 5, value);\n } else {\n this.parseFieldsToNotes(cipher, 2, value);\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private parseFieldsToNotes(cipher: CipherView, startIndex: number, value: any) {\n // last 3 rows do not get parsed\n for (let i = startIndex; i < value.length - 3; i++) {\n if (this.isNullOrWhitespace(value[i])) {\n continue;\n }\n cipher.notes += (value[i] + '\\n');\n }\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class StickyPasswordXmlImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const doc = this.parseXml(data);\n if (doc == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const loginNodes = doc.querySelectorAll('root > Database > Logins > Login');\n Array.from(loginNodes).forEach(loginNode => {\n const accountId = loginNode.getAttribute('ID');\n if (this.isNullOrWhitespace(accountId)) {\n return;\n }\n\n const usernameText = loginNode.getAttribute('Name');\n const passwordText = loginNode.getAttribute('Password');\n let titleText: string = null;\n let linkText: string = null;\n let notesText: string = null;\n let groupId: string = null;\n let groupText: string = null;\n\n const accountLogin = doc.querySelector('root > Database > Accounts > Account > ' +\n 'LoginLinks > Login[SourceLoginID=\"' + accountId + '\"]');\n if (accountLogin != null) {\n const account = accountLogin.parentElement.parentElement;\n if (account != null) {\n titleText = account.getAttribute('Name');\n linkText = account.getAttribute('Link');\n groupId = account.getAttribute('ParentID');\n notesText = account.getAttribute('Comments');\n if (!this.isNullOrWhitespace(notesText)) {\n notesText = notesText.split('/n').join('\\n');\n }\n }\n }\n\n if (!this.isNullOrWhitespace(groupId)) {\n groupText = this.buildGroupText(doc, groupId, '');\n this.processFolder(result, groupText);\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(titleText, '--');\n cipher.notes = this.getValueOrDefault(notesText);\n cipher.login.username = this.getValueOrDefault(usernameText);\n cipher.login.password = this.getValueOrDefault(passwordText);\n cipher.login.uris = this.makeUriArray(linkText);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n buildGroupText(doc: Document, groupId: string, groupText: string): string {\n const group = doc.querySelector('root > Database > Groups > Group[ID=\"' + groupId + '\"]');\n if (group == null) {\n return groupText;\n }\n if (!this.isNullOrWhitespace(groupText)) {\n groupText = '/' + groupText;\n }\n groupText = group.getAttribute('Name') + groupText;\n return this.buildGroupText(doc, group.getAttribute('ParentID'), groupText);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nconst PropertiesToIgnore = ['kind', 'autologin', 'favorite', 'hexcolor', 'protectedwithpassword', 'subdomainonly',\n 'type', 'tk_export_version', 'note', 'title', 'document_content',\n];\n\nexport class TrueKeyCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n const cipher = this.initLoginCipher();\n cipher.favorite = this.getValueOrDefault(value.favorite, '').toLowerCase() === 'true';\n cipher.name = this.getValueOrDefault(value.name, '--');\n cipher.notes = this.getValueOrDefault(value.memo, '');\n cipher.login.username = this.getValueOrDefault(value.login);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.url);\n\n if (value.kind !== 'login') {\n cipher.name = this.getValueOrDefault(value.title, '--');\n cipher.notes = this.getValueOrDefault(value.note, '');\n }\n\n if (value.kind === 'cc') {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n cipher.card.cardholderName = this.getValueOrDefault(value.cardholder);\n cipher.card.number = this.getValueOrDefault(value.number);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n if (!this.isNullOrWhitespace(value.expiryDate)) {\n try {\n const expDate = new Date(value.expiryDate);\n cipher.card.expYear = expDate.getFullYear().toString();\n cipher.card.expMonth = (expDate.getMonth() + 1).toString();\n } catch { }\n }\n } else if (value.kind !== 'login') {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n if (!this.isNullOrWhitespace(cipher.notes)) {\n cipher.notes = this.getValueOrDefault(value.document_content, '');\n }\n for (const property in value) {\n if (value.hasOwnProperty(property) && PropertiesToIgnore.indexOf(property.toLowerCase()) < 0 &&\n !this.isNullOrWhitespace(value[property])) {\n this.processKvp(cipher, property, value[property]);\n }\n }\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class UpmCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (value.length !== 5) {\n return;\n }\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[0], '--');\n cipher.notes = this.getValueOrDefault(value[4]);\n cipher.login.username = this.getValueOrDefault(value[1]);\n cipher.login.password = this.getValueOrDefault(value[2]);\n cipher.login.uris = this.makeUriArray(value[3]);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class YotiCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.Name, '--');\n cipher.login.username = this.getValueOrDefault(value['User name']);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value.URL);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\nimport { CipherView } from '../models/view';\n\nexport class ZohoVaultCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (this.isNullOrWhitespace(value['Password Name']) && this.isNullOrWhitespace(value['Secret Name'])) {\n return;\n }\n this.processFolder(result, this.getValueOrDefault(value.ChamberName));\n const cipher = this.initLoginCipher();\n cipher.favorite = this.getValueOrDefault(value.Favorite, '0') === '1';\n cipher.notes = this.getValueOrDefault(value.Notes);\n cipher.name = this.getValueOrDefault(\n value['Password Name'], this.getValueOrDefault(value['Secret Name'], '--'));\n cipher.login.uris = this.makeUriArray(\n this.getValueOrDefault(value['Password URL'], this.getValueOrDefault(value['Secret URL'])));\n this.parseData(cipher, value.SecretData);\n this.parseData(cipher, value.CustomData);\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private parseData(cipher: CipherView, data: string) {\n if (this.isNullOrWhitespace(data)) {\n return;\n }\n const dataLines = this.splitNewLine(data);\n dataLines.forEach(line => {\n const delimPosition = line.indexOf(':');\n if (delimPosition < 0) {\n return;\n }\n const field = line.substring(0, delimPosition);\n const value = line.length > delimPosition ? line.substring(delimPosition + 1) : null;\n if (this.isNullOrWhitespace(field) || this.isNullOrWhitespace(value) || field === 'SecretType') {\n return;\n }\n const fieldLower = field.toLowerCase();\n if (cipher.login.username == null && this.usernameFieldNames.indexOf(fieldLower) > -1) {\n cipher.login.username = value;\n } else if (cipher.login.password == null && this.passwordFieldNames.indexOf(fieldLower) > -1) {\n cipher.login.password = value;\n } else {\n this.processKvp(cipher, field, value);\n }\n });\n }\n}\n","import * as signalR from '@microsoft/signalr';\nimport * as signalRMsgPack from '@microsoft/signalr-protocol-msgpack';\n\nimport { NotificationType } from '../enums/notificationType';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { AppIdService } from '../abstractions/appId.service';\nimport { EnvironmentService } from '../abstractions/environment.service';\nimport { LogService } from '../abstractions/log.service';\nimport { NotificationsService as NotificationsServiceAbstraction } from '../abstractions/notifications.service';\nimport { SyncService } from '../abstractions/sync.service';\nimport { UserService } from '../abstractions/user.service';\nimport { VaultTimeoutService } from '../abstractions/vaultTimeout.service';\n\nimport {\n NotificationResponse,\n SyncCipherNotification,\n SyncFolderNotification,\n SyncSendNotification,\n} from '../models/response/notificationResponse';\n\nexport class NotificationsService implements NotificationsServiceAbstraction {\n private signalrConnection: signalR.HubConnection;\n private url: string;\n private connected = false;\n private inited = false;\n private inactive = false;\n private reconnectTimer: any = null;\n\n constructor(private userService: UserService, private syncService: SyncService,\n private appIdService: AppIdService, private apiService: ApiService,\n private vaultTimeoutService: VaultTimeoutService,\n private logoutCallback: () => Promise, private logService: LogService) {\n }\n\n async init(environmentService: EnvironmentService): Promise {\n this.inited = false;\n this.url = 'https://notifications.bitwarden.com';\n if (environmentService.notificationsUrl != null) {\n this.url = environmentService.notificationsUrl;\n } else if (environmentService.baseUrl != null) {\n this.url = environmentService.baseUrl + '/notifications';\n }\n\n // Set notifications server URL to `https://-` to effectively disable communication\n // with the notifications server from the client app\n if (this.url === 'https://-') {\n return;\n }\n\n if (this.signalrConnection != null) {\n this.signalrConnection.off('ReceiveMessage');\n this.signalrConnection.off('Heartbeat');\n await this.signalrConnection.stop();\n this.connected = false;\n this.signalrConnection = null;\n }\n\n this.signalrConnection = new signalR.HubConnectionBuilder()\n .withUrl(this.url + '/hub', {\n accessTokenFactory: () => this.apiService.getActiveBearerToken(),\n skipNegotiation: true,\n transport: signalR.HttpTransportType.WebSockets,\n })\n .withHubProtocol(new signalRMsgPack.MessagePackHubProtocol() as signalR.IHubProtocol)\n // .configureLogging(signalR.LogLevel.Trace)\n .build();\n\n this.signalrConnection.on('ReceiveMessage',\n (data: any) => this.processNotification(new NotificationResponse(data)));\n this.signalrConnection.on('Heartbeat',\n (data: any) => { /*console.log('Heartbeat!');*/ });\n this.signalrConnection.onclose(() => {\n this.connected = false;\n this.reconnect(true);\n });\n this.inited = true;\n if (await this.isAuthedAndUnlocked()) {\n await this.reconnect(false);\n }\n }\n\n async updateConnection(sync = false): Promise {\n if (!this.inited) {\n return;\n }\n try {\n if (await this.isAuthedAndUnlocked()) {\n await this.reconnect(sync);\n } else {\n await this.signalrConnection.stop();\n }\n } catch (e) {\n this.logService.error(e.toString());\n }\n }\n\n async reconnectFromActivity(): Promise {\n this.inactive = false;\n if (this.inited && !this.connected) {\n await this.reconnect(true);\n }\n }\n\n async disconnectFromInactivity(): Promise {\n this.inactive = true;\n if (this.inited && this.connected) {\n await this.signalrConnection.stop();\n }\n }\n\n private async processNotification(notification: NotificationResponse) {\n const appId = await this.appIdService.getAppId();\n if (notification == null || notification.contextId === appId) {\n return;\n }\n\n const isAuthenticated = await this.userService.isAuthenticated();\n const payloadUserId = notification.payload.userId || notification.payload.UserId;\n const myUserId = await this.userService.getUserId();\n if (isAuthenticated && payloadUserId != null && payloadUserId !== myUserId) {\n return;\n }\n\n switch (notification.type) {\n case NotificationType.SyncCipherCreate:\n case NotificationType.SyncCipherUpdate:\n await this.syncService.syncUpsertCipher(notification.payload as SyncCipherNotification,\n notification.type === NotificationType.SyncCipherUpdate);\n break;\n case NotificationType.SyncCipherDelete:\n case NotificationType.SyncLoginDelete:\n await this.syncService.syncDeleteCipher(notification.payload as SyncCipherNotification);\n break;\n case NotificationType.SyncFolderCreate:\n case NotificationType.SyncFolderUpdate:\n await this.syncService.syncUpsertFolder(notification.payload as SyncFolderNotification,\n notification.type === NotificationType.SyncFolderUpdate);\n break;\n case NotificationType.SyncFolderDelete:\n await this.syncService.syncDeleteFolder(notification.payload as SyncFolderNotification);\n break;\n case NotificationType.SyncVault:\n case NotificationType.SyncCiphers:\n case NotificationType.SyncSettings:\n if (isAuthenticated) {\n await this.syncService.fullSync(false);\n }\n break;\n case NotificationType.SyncOrgKeys:\n if (isAuthenticated) {\n await this.apiService.refreshIdentityToken();\n await this.syncService.fullSync(true);\n // Stop so a reconnect can be made\n await this.signalrConnection.stop();\n }\n break;\n case NotificationType.LogOut:\n if (isAuthenticated) {\n this.logoutCallback();\n }\n break;\n case NotificationType.SyncSendCreate:\n case NotificationType.SyncSendUpdate:\n await this.syncService.syncUpsertSend(notification.payload as SyncSendNotification,\n notification.type === NotificationType.SyncSendUpdate);\n break;\n case NotificationType.SyncSendDelete:\n await this.syncService.syncDeleteSend(notification.payload as SyncSendNotification);\n default:\n break;\n }\n }\n\n private async reconnect(sync: boolean) {\n if (this.reconnectTimer != null) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n if (this.connected || !this.inited || this.inactive) {\n return;\n }\n const authedAndUnlocked = await this.isAuthedAndUnlocked();\n if (!authedAndUnlocked) {\n return;\n }\n\n try {\n await this.signalrConnection.start();\n this.connected = true;\n if (sync) {\n await this.syncService.fullSync(false);\n }\n } catch { }\n\n if (!this.connected) {\n this.reconnectTimer = setTimeout(() => this.reconnect(sync), this.random(120000, 300000));\n }\n }\n\n private async isAuthedAndUnlocked() {\n if (await this.userService.isAuthenticated()) {\n const locked = await this.vaultTimeoutService.isLocked();\n return !locked;\n }\n return false;\n }\n\n private random(min: number, max: number) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { NotificationType } from '../../enums/notificationType';\n\nexport class NotificationResponse extends BaseResponse {\n contextId: string;\n type: NotificationType;\n payload: any;\n\n constructor(response: any) {\n super(response);\n this.contextId = this.getResponseProperty('ContextId');\n this.type = this.getResponseProperty('Type');\n\n const payload = this.getResponseProperty('Payload');\n switch (this.type) {\n case NotificationType.SyncCipherCreate:\n case NotificationType.SyncCipherDelete:\n case NotificationType.SyncCipherUpdate:\n case NotificationType.SyncLoginDelete:\n this.payload = new SyncCipherNotification(payload);\n break;\n case NotificationType.SyncFolderCreate:\n case NotificationType.SyncFolderDelete:\n case NotificationType.SyncFolderUpdate:\n this.payload = new SyncFolderNotification(payload);\n break;\n case NotificationType.SyncVault:\n case NotificationType.SyncCiphers:\n case NotificationType.SyncOrgKeys:\n case NotificationType.SyncSettings:\n case NotificationType.LogOut:\n this.payload = new UserNotification(payload);\n break;\n case NotificationType.SyncSendCreate:\n case NotificationType.SyncSendUpdate:\n case NotificationType.SyncSendDelete:\n this.payload = new SyncSendNotification(payload);\n default:\n break;\n }\n }\n}\n\nexport class SyncCipherNotification extends BaseResponse {\n id: string;\n userId: string;\n organizationId: string;\n collectionIds: string[];\n revisionDate: Date;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.userId = this.getResponseProperty('UserId');\n this.organizationId = this.getResponseProperty('OrganizationId');\n this.collectionIds = this.getResponseProperty('CollectionIds');\n this.revisionDate = new Date(this.getResponseProperty('RevisionDate'));\n }\n}\n\nexport class SyncFolderNotification extends BaseResponse {\n id: string;\n userId: string;\n revisionDate: Date;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.userId = this.getResponseProperty('UserId');\n this.revisionDate = new Date(this.getResponseProperty('RevisionDate'));\n }\n}\n\nexport class UserNotification extends BaseResponse {\n userId: string;\n date: Date;\n\n constructor(response: any) {\n super(response);\n this.userId = this.getResponseProperty('UserId');\n this.date = new Date(this.getResponseProperty('Date'));\n }\n}\n\nexport class SyncSendNotification extends BaseResponse {\n id: string;\n userId: string;\n revisionDate: Date;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.userId = this.getResponseProperty('UserId');\n this.revisionDate = new Date(this.getResponseProperty('RevisionDate'));\n }\n}\n","import { PolicyService as PolicyServiceAbstraction } from '../abstractions/policy.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\n\nimport { PolicyData } from '../models/data/policyData';\n\nimport { MasterPasswordPolicyOptions } from '../models/domain/masterPasswordPolicyOptions';\nimport { Policy } from '../models/domain/policy';\n\nimport { PolicyType } from '../enums/policyType';\n\nconst Keys = {\n policiesPrefix: 'policies_',\n};\n\nexport class PolicyService implements PolicyServiceAbstraction {\n policyCache: Policy[];\n\n constructor(private userService: UserService, private storageService: StorageService) {\n }\n\n clearCache(): void {\n this.policyCache = null;\n }\n\n async getAll(type?: PolicyType): Promise {\n if (this.policyCache == null) {\n const userId = await this.userService.getUserId();\n const policies = await this.storageService.get<{ [id: string]: PolicyData; }>(\n Keys.policiesPrefix + userId);\n const response: Policy[] = [];\n for (const id in policies) {\n if (policies.hasOwnProperty(id)) {\n response.push(new Policy(policies[id]));\n }\n }\n this.policyCache = response;\n }\n if (type != null) {\n return this.policyCache.filter(p => p.type === type);\n } else {\n return this.policyCache;\n }\n }\n\n async replace(policies: { [id: string]: PolicyData; }): Promise {\n const userId = await this.userService.getUserId();\n await this.storageService.save(Keys.policiesPrefix + userId, policies);\n this.policyCache = null;\n }\n\n async clear(userId: string): Promise {\n await this.storageService.remove(Keys.policiesPrefix + userId);\n this.policyCache = null;\n }\n\n async getMasterPasswordPolicyOptions(policies?: Policy[]): Promise {\n let enforcedOptions: MasterPasswordPolicyOptions = null;\n\n if (policies == null) {\n policies = await this.getAll(PolicyType.MasterPassword);\n } else {\n policies = policies.filter(p => p.type === PolicyType.MasterPassword);\n }\n\n if (policies == null || policies.length === 0) {\n return enforcedOptions;\n }\n\n policies.forEach(currentPolicy => {\n if (!currentPolicy.enabled || currentPolicy.data == null) {\n return;\n }\n\n if (enforcedOptions == null) {\n enforcedOptions = new MasterPasswordPolicyOptions();\n }\n\n if (currentPolicy.data.minComplexity != null\n && currentPolicy.data.minComplexity > enforcedOptions.minComplexity) {\n enforcedOptions.minComplexity = currentPolicy.data.minComplexity;\n }\n\n if (currentPolicy.data.minLength != null\n && currentPolicy.data.minLength > enforcedOptions.minLength) {\n enforcedOptions.minLength = currentPolicy.data.minLength;\n }\n\n if (currentPolicy.data.requireUpper) {\n enforcedOptions.requireUpper = true;\n }\n\n if (currentPolicy.data.requireLower) {\n enforcedOptions.requireLower = true;\n }\n\n if (currentPolicy.data.requireNumbers) {\n enforcedOptions.requireNumbers = true;\n }\n\n if (currentPolicy.data.requireSpecial) {\n enforcedOptions.requireSpecial = true;\n }\n });\n\n return enforcedOptions;\n }\n\n evaluateMasterPassword(passwordStrength: number, newPassword: string,\n enforcedPolicyOptions: MasterPasswordPolicyOptions): boolean {\n if (enforcedPolicyOptions == null) {\n return true;\n }\n\n if (enforcedPolicyOptions.minComplexity > 0 && enforcedPolicyOptions.minComplexity > passwordStrength) {\n return false;\n }\n\n if (enforcedPolicyOptions.minLength > 0 && enforcedPolicyOptions.minLength > newPassword.length) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireUpper && newPassword.toLocaleLowerCase() === newPassword) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireLower && newPassword.toLocaleUpperCase() === newPassword) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireNumbers && !(/[0-9]/.test(newPassword))) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireSpecial && !(/[!@#$%\\^&*]/g.test(newPassword))) {\n return false;\n }\n\n return true;\n }\n}\n","import Domain from './domainBase';\n\nexport class MasterPasswordPolicyOptions extends Domain {\n minComplexity: number = 0;\n minLength: number = 0;\n requireUpper: boolean = false;\n requireLower: boolean = false;\n requireNumbers: boolean = false;\n requireSpecial: boolean = false;\n}\n","import * as lunr from 'lunr';\n\nimport { CipherView } from '../models/view/cipherView';\n\nimport { CipherService } from '../abstractions/cipher.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport { LogService } from '../abstractions/log.service';\nimport { SearchService as SearchServiceAbstraction } from '../abstractions/search.service';\n\nimport { CipherType } from '../enums/cipherType';\nimport { FieldType } from '../enums/fieldType';\nimport { UriMatchType } from '../enums/uriMatchType';\nimport { SendView } from '../models/view/sendView';\n\nexport class SearchService implements SearchServiceAbstraction {\n indexedEntityId?: string = null;\n private indexing = false;\n private index: lunr.Index = null;\n private searchableMinLength = 2;\n\n constructor(private cipherService: CipherService, private logService: LogService,\n private i18nService: I18nService) {\n if (['zh-CN', 'zh-TW'].indexOf(i18nService.locale) !== -1) {\n this.searchableMinLength = 1;\n }\n }\n\n clearIndex(): void {\n this.indexedEntityId = null;\n this.index = null;\n }\n\n isSearchable(query: string): boolean {\n const notSearchable = query == null || (this.index == null && query.length < this.searchableMinLength) ||\n (this.index != null && query.length < this.searchableMinLength && query.indexOf('>') !== 0);\n return !notSearchable;\n }\n\n async indexCiphers(indexedEntityId?: string, ciphers?: CipherView[]): Promise {\n if (this.indexing) {\n return;\n }\n\n this.logService.time('search indexing');\n this.indexing = true;\n this.indexedEntityId = indexedEntityId;\n this.index = null;\n const builder = new lunr.Builder();\n builder.ref('id');\n builder.field('shortid', { boost: 100, extractor: (c: CipherView) => c.id.substr(0, 8) });\n builder.field('name', { boost: 10 });\n builder.field('subtitle', {\n boost: 5,\n extractor: (c: CipherView) => {\n if (c.subTitle != null && c.type === CipherType.Card) {\n return c.subTitle.replace(/\\*/g, '');\n }\n return c.subTitle;\n },\n });\n builder.field('notes');\n builder.field('login.username', {\n extractor: (c: CipherView) => c.type === CipherType.Login && c.login != null ? c.login.username : null,\n });\n builder.field('login.uris', { boost: 2, extractor: (c: CipherView) => this.uriExtractor(c) });\n builder.field('fields', { extractor: (c: CipherView) => this.fieldExtractor(c, false) });\n builder.field('fields_joined', { extractor: (c: CipherView) => this.fieldExtractor(c, true) });\n builder.field('attachments', { extractor: (c: CipherView) => this.attachmentExtractor(c, false) });\n builder.field('attachments_joined',\n { extractor: (c: CipherView) => this.attachmentExtractor(c, true) });\n builder.field('organizationid', { extractor: (c: CipherView) => c.organizationId });\n ciphers = ciphers || await this.cipherService.getAllDecrypted();\n ciphers.forEach(c => builder.add(c));\n this.index = builder.build();\n\n this.indexing = false;\n\n this.logService.timeEnd('search indexing');\n }\n\n async searchCiphers(query: string,\n filter: (((cipher: CipherView) => boolean) | (((cipher: CipherView) => boolean)[])) = null,\n ciphers: CipherView[] = null):\n Promise {\n const results: CipherView[] = [];\n if (query != null) {\n query = query.trim().toLowerCase();\n }\n if (query === '') {\n query = null;\n }\n\n if (ciphers == null) {\n ciphers = await this.cipherService.getAllDecrypted();\n }\n\n if (filter != null && Array.isArray(filter) && filter.length > 0) {\n ciphers = ciphers.filter(c => filter.every(f => f == null || f(c)));\n } else if (filter != null) {\n ciphers = ciphers.filter(filter as (cipher: CipherView) => boolean);\n }\n\n if (!this.isSearchable(query)) {\n return ciphers;\n }\n\n if (this.indexing) {\n await new Promise(r => setTimeout(r, 250));\n if (this.indexing) {\n await new Promise(r => setTimeout(r, 500));\n }\n }\n\n const index = this.getIndexForSearch();\n if (index == null) {\n // Fall back to basic search if index is not available\n return this.searchCiphersBasic(ciphers, query);\n }\n\n const ciphersMap = new Map();\n ciphers.forEach(c => ciphersMap.set(c.id, c));\n\n let searchResults: lunr.Index.Result[] = null;\n const isQueryString = query != null && query.length > 1 && query.indexOf('>') === 0;\n if (isQueryString) {\n try {\n searchResults = index.search(query.substr(1).trim());\n } catch { }\n } else {\n // tslint:disable-next-line\n const soWild = lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING;\n searchResults = index.query(q => {\n lunr.tokenizer(query).forEach(token => {\n const t = token.toString();\n q.term(t, { fields: ['name'], wildcard: soWild });\n q.term(t, { fields: ['subtitle'], wildcard: soWild });\n q.term(t, { fields: ['login.uris'], wildcard: soWild });\n q.term(t, {});\n });\n });\n }\n\n if (searchResults != null) {\n searchResults.forEach(r => {\n if (ciphersMap.has(r.ref)) {\n results.push(ciphersMap.get(r.ref));\n }\n });\n }\n return results;\n }\n\n searchCiphersBasic(ciphers: CipherView[], query: string, deleted: boolean = false) {\n query = query.trim().toLowerCase();\n return ciphers.filter(c => {\n if (deleted !== c.isDeleted) {\n return false;\n }\n if (c.name != null && c.name.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n if (query.length >= 8 && c.id.startsWith(query)) {\n return true;\n }\n if (c.subTitle != null && c.subTitle.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n if (c.login && c.login.uri != null && c.login.uri.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n return false;\n });\n }\n\n searchSends(sends: SendView[], query: string) {\n query = query.trim().toLocaleLowerCase();\n\n return sends.filter(s => {\n if (s.name != null && s.name.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n if (query.length >= 8 && (s.id.startsWith(query) || s.accessId.toLocaleLowerCase().startsWith(query) || (s.file?.id != null && s.file.id.startsWith(query)))) {\n return true;\n }\n if (s.notes != null && s.notes.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n if (s.text?.text != null && s.text.text.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n if (s.file?.fileName != null && s.file.fileName.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n });\n }\n\n getIndexForSearch(): lunr.Index {\n return this.index;\n }\n\n private fieldExtractor(c: CipherView, joined: boolean) {\n if (!c.hasFields) {\n return null;\n }\n let fields: string[] = [];\n c.fields.forEach(f => {\n if (f.name != null) {\n fields.push(f.name);\n }\n if (f.type === FieldType.Text && f.value != null) {\n fields.push(f.value);\n }\n });\n fields = fields.filter(f => f.trim() !== '');\n if (fields.length === 0) {\n return null;\n }\n return joined ? fields.join(' ') : fields;\n }\n\n private attachmentExtractor(c: CipherView, joined: boolean) {\n if (!c.hasAttachments) {\n return null;\n }\n let attachments: string[] = [];\n c.attachments.forEach(a => {\n if (a != null && a.fileName != null) {\n if (joined && a.fileName.indexOf('.') > -1) {\n attachments.push(a.fileName.substr(0, a.fileName.lastIndexOf('.')));\n } else {\n attachments.push(a.fileName);\n }\n }\n });\n attachments = attachments.filter(f => f.trim() !== '');\n if (attachments.length === 0) {\n return null;\n }\n return joined ? attachments.join(' ') : attachments;\n }\n\n private uriExtractor(c: CipherView) {\n if (c.type !== CipherType.Login || c.login == null || !c.login.hasUris) {\n return null;\n }\n const uris: string[] = [];\n c.login.uris.forEach(u => {\n if (u.uri == null || u.uri === '') {\n return;\n }\n if (u.hostname != null) {\n uris.push(u.hostname);\n return;\n }\n let uri = u.uri;\n if (u.match !== UriMatchType.RegularExpression) {\n const protocolIndex = uri.indexOf('://');\n if (protocolIndex > -1) {\n uri = uri.substr(protocolIndex + 3);\n }\n const queryIndex = uri.search(/\\?|&|#/);\n if (queryIndex > -1) {\n uri = uri.substring(0, queryIndex);\n }\n }\n uris.push(uri);\n });\n return uris.length > 0 ? uris : null;\n }\n}\n","import { SendData } from '../models/data/sendData';\n\nimport { SendRequest } from '../models/request/sendRequest';\n\nimport { ErrorResponse } from '../models/response/errorResponse';\nimport { SendResponse } from '../models/response/sendResponse';\n\nimport { EncArrayBuffer } from '../models/domain/encArrayBuffer';\nimport { EncString } from '../models/domain/encString';\nimport { Send } from '../models/domain/send';\nimport { SendFile } from '../models/domain/sendFile';\nimport { SendText } from '../models/domain/sendText';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nimport { FileUploadType } from '../enums/fileUploadType';\nimport { SendType } from '../enums/sendType';\n\nimport { SendView } from '../models/view/sendView';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { CryptoFunctionService } from '../abstractions/cryptoFunction.service';\nimport { FileUploadService } from '../abstractions/fileUpload.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport { SendService as SendServiceAbstraction } from '../abstractions/send.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\n\nimport { Utils } from '../misc/utils';\n\nconst Keys = {\n sendsPrefix: 'sends_',\n};\n\nexport class SendService implements SendServiceAbstraction {\n decryptedSendCache: SendView[];\n\n constructor(private cryptoService: CryptoService, private userService: UserService,\n private apiService: ApiService, private fileUploadService: FileUploadService,\n private storageService: StorageService, private i18nService: I18nService,\n private cryptoFunctionService: CryptoFunctionService) { }\n\n clearCache(): void {\n this.decryptedSendCache = null;\n }\n\n async encrypt(model: SendView, file: File | ArrayBuffer, password: string,\n key?: SymmetricCryptoKey): Promise<[Send, EncArrayBuffer]> {\n let fileData: EncArrayBuffer = null;\n const send = new Send();\n send.id = model.id;\n send.type = model.type;\n send.disabled = model.disabled;\n send.hideEmail = model.hideEmail;\n send.maxAccessCount = model.maxAccessCount;\n if (model.key == null) {\n model.key = await this.cryptoFunctionService.randomBytes(16);\n model.cryptoKey = await this.cryptoService.makeSendKey(model.key);\n }\n if (password != null) {\n const passwordHash = await this.cryptoFunctionService.pbkdf2(password, model.key, 'sha256', 100000);\n send.password = Utils.fromBufferToB64(passwordHash);\n }\n send.key = await this.cryptoService.encrypt(model.key, key);\n send.name = await this.cryptoService.encrypt(model.name, model.cryptoKey);\n send.notes = await this.cryptoService.encrypt(model.notes, model.cryptoKey);\n if (send.type === SendType.Text) {\n send.text = new SendText();\n send.text.text = await this.cryptoService.encrypt(model.text.text, model.cryptoKey);\n send.text.hidden = model.text.hidden;\n } else if (send.type === SendType.File) {\n send.file = new SendFile();\n if (file != null) {\n if (file instanceof ArrayBuffer) {\n const [name, data] = await this.encryptFileData(model.file.fileName, file, model.cryptoKey);\n send.file.fileName = name;\n fileData = data;\n } else {\n fileData = await this.parseFile(send, file, model.cryptoKey);\n }\n }\n }\n\n return [send, fileData];\n }\n\n async get(id: string): Promise {\n const userId = await this.userService.getUserId();\n const sends = await this.storageService.get<{ [id: string]: SendData; }>(\n Keys.sendsPrefix + userId);\n if (sends == null || !sends.hasOwnProperty(id)) {\n return null;\n }\n\n return new Send(sends[id]);\n }\n\n async getAll(): Promise {\n const userId = await this.userService.getUserId();\n const sends = await this.storageService.get<{ [id: string]: SendData; }>(\n Keys.sendsPrefix + userId);\n const response: Send[] = [];\n for (const id in sends) {\n if (sends.hasOwnProperty(id)) {\n response.push(new Send(sends[id]));\n }\n }\n return response;\n }\n\n async getAllDecrypted(): Promise {\n if (this.decryptedSendCache != null) {\n return this.decryptedSendCache;\n }\n\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error('No key.');\n }\n\n const decSends: SendView[] = [];\n const promises: Promise[] = [];\n const sends = await this.getAll();\n sends.forEach(send => {\n promises.push(send.decrypt().then(f => decSends.push(f)));\n });\n\n await Promise.all(promises);\n decSends.sort(Utils.getSortFunction(this.i18nService, 'name'));\n\n this.decryptedSendCache = decSends;\n return this.decryptedSendCache;\n }\n\n async saveWithServer(sendData: [Send, EncArrayBuffer]): Promise {\n const request = new SendRequest(sendData[0], sendData[1]?.buffer.byteLength);\n let response: SendResponse;\n if (sendData[0].id == null) {\n if (sendData[0].type === SendType.Text) {\n response = await this.apiService.postSend(request);\n } else {\n try {\n const uploadDataResponse = await this.apiService.postFileTypeSend(request);\n response = uploadDataResponse.sendResponse;\n\n await this.fileUploadService.uploadSendFile(uploadDataResponse, sendData[0].file.fileName, sendData[1]);\n } catch (e) {\n if (e instanceof ErrorResponse && (e as ErrorResponse).statusCode === 404) {\n response = await this.legacyServerSendFileUpload(sendData, request);\n } else if (e instanceof ErrorResponse) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n } else {\n throw e;\n }\n }\n }\n sendData[0].id = response.id;\n sendData[0].accessId = response.accessId;\n } else {\n response = await this.apiService.putSend(sendData[0].id, request);\n }\n\n const userId = await this.userService.getUserId();\n const data = new SendData(response, userId);\n await this.upsert(data);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async legacyServerSendFileUpload(sendData: [Send, EncArrayBuffer], request: SendRequest): Promise\n {\n const fd = new FormData();\n try {\n const blob = new Blob([sendData[1].buffer], { type: 'application/octet-stream' });\n fd.append('model', JSON.stringify(request));\n fd.append('data', blob, sendData[0].file.fileName.encryptedString);\n } catch (e) {\n if (Utils.isNode && !Utils.isBrowser) {\n fd.append('model', JSON.stringify(request));\n fd.append('data', Buffer.from(sendData[1].buffer) as any, {\n filepath: sendData[0].file.fileName.encryptedString,\n contentType: 'application/octet-stream',\n } as any);\n } else {\n throw e;\n }\n }\n return await this.apiService.postSendFileLegacy(fd);\n }\n\n async upsert(send: SendData | SendData[]): Promise {\n const userId = await this.userService.getUserId();\n let sends = await this.storageService.get<{ [id: string]: SendData; }>(\n Keys.sendsPrefix + userId);\n if (sends == null) {\n sends = {};\n }\n\n if (send instanceof SendData) {\n const s = send as SendData;\n sends[s.id] = s;\n } else {\n (send as SendData[]).forEach(s => {\n sends[s.id] = s;\n });\n }\n\n await this.storageService.save(Keys.sendsPrefix + userId, sends);\n this.decryptedSendCache = null;\n }\n\n async replace(sends: { [id: string]: SendData; }): Promise {\n const userId = await this.userService.getUserId();\n await this.storageService.save(Keys.sendsPrefix + userId, sends);\n this.decryptedSendCache = null;\n }\n\n async clear(userId: string): Promise {\n await this.storageService.remove(Keys.sendsPrefix + userId);\n this.decryptedSendCache = null;\n }\n\n async delete(id: string | string[]): Promise {\n const userId = await this.userService.getUserId();\n const sends = await this.storageService.get<{ [id: string]: SendData; }>(\n Keys.sendsPrefix + userId);\n if (sends == null) {\n return;\n }\n\n if (typeof id === 'string') {\n if (sends[id] == null) {\n return;\n }\n delete sends[id];\n } else {\n (id as string[]).forEach(i => {\n delete sends[i];\n });\n }\n\n await this.storageService.save(Keys.sendsPrefix + userId, sends);\n this.decryptedSendCache = null;\n }\n\n async deleteWithServer(id: string): Promise {\n await this.apiService.deleteSend(id);\n await this.delete(id);\n }\n\n async removePasswordWithServer(id: string): Promise {\n const response = await this.apiService.putSendRemovePassword(id);\n const userId = await this.userService.getUserId();\n const data = new SendData(response, userId);\n await this.upsert(data);\n }\n\n private parseFile(send: Send, file: File, key: SymmetricCryptoKey): Promise {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsArrayBuffer(file);\n reader.onload = async evt => {\n try {\n const [name, data] = await this.encryptFileData(file.name, evt.target.result as ArrayBuffer, key);\n send.file.fileName = name;\n resolve(data);\n } catch (e) {\n reject(e);\n }\n };\n reader.onerror = evt => {\n reject('Error reading file.');\n };\n });\n }\n\n private async encryptFileData(fileName: string, data: ArrayBuffer,\n key: SymmetricCryptoKey): Promise<[EncString, EncArrayBuffer]> {\n const encFileName = await this.cryptoService.encrypt(fileName, key);\n const encFileData = await this.cryptoService.encryptToBytes(data, key);\n return [encFileName, encFileData];\n }\n}\n","import { SendType } from '../../enums/sendType';\n\nimport { SendFileApi } from '../api/sendFileApi';\nimport { SendTextApi } from '../api/sendTextApi';\n\nimport { Send } from '../domain/send';\n\nexport class SendRequest {\n type: SendType;\n fileLength?: number;\n name: string;\n notes: string;\n key: string;\n maxAccessCount?: number;\n expirationDate: string;\n deletionDate: string;\n text: SendTextApi;\n file: SendFileApi;\n password: string;\n disabled: boolean;\n hideEmail: boolean;\n\n constructor(send: Send, fileLength?: number) {\n this.type = send.type;\n this.fileLength = fileLength;\n this.name = send.name ? send.name.encryptedString : null;\n this.notes = send.notes ? send.notes.encryptedString : null;\n this.maxAccessCount = send.maxAccessCount;\n this.expirationDate = send.expirationDate != null ? send.expirationDate.toISOString() : null;\n this.deletionDate = send.deletionDate != null ? send.deletionDate.toISOString() : null;\n this.key = send.key != null ? send.key.encryptedString : null;\n this.password = send.password;\n this.disabled = send.disabled;\n this.hideEmail = send.hideEmail;\n\n switch (this.type) {\n case SendType.Text:\n this.text = new SendTextApi();\n this.text.text = send.text.text != null ? send.text.text.encryptedString : null;\n this.text.hidden = send.text.hidden;\n break;\n case SendType.File:\n this.file = new SendFileApi();\n this.file.fileName = send.file.fileName != null ? send.file.fileName.encryptedString : null;\n break;\n default:\n break;\n }\n }\n}\n","import { CryptoService } from '../../abstractions/crypto.service';\n\nimport { SendType } from '../../enums/sendType';\n\nimport { Utils } from '../../misc/utils';\n\nimport { SendData } from '../data/sendData';\n\nimport { SendView } from '../view/sendView';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\nimport { SendFile } from './sendFile';\nimport { SendText } from './sendText';\n\nexport class Send extends Domain {\n id: string;\n accessId: string;\n userId: string;\n type: SendType;\n name: EncString;\n notes: EncString;\n file: SendFile;\n text: SendText;\n key: EncString;\n maxAccessCount?: number;\n accessCount: number;\n revisionDate: Date;\n expirationDate: Date;\n deletionDate: Date;\n password: string;\n disabled: boolean;\n hideEmail: boolean;\n\n constructor(obj?: SendData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(this, obj, {\n id: null,\n accessId: null,\n userId: null,\n name: null,\n notes: null,\n key: null,\n }, alreadyEncrypted, ['id', 'accessId', 'userId']);\n\n this.type = obj.type;\n this.maxAccessCount = obj.maxAccessCount;\n this.accessCount = obj.accessCount;\n this.password = obj.password;\n this.disabled = obj.disabled;\n this.revisionDate = obj.revisionDate != null ? new Date(obj.revisionDate) : null;\n this.deletionDate = obj.deletionDate != null ? new Date(obj.deletionDate) : null;\n this.expirationDate = obj.expirationDate != null ? new Date(obj.expirationDate) : null;\n this.hideEmail = obj.hideEmail;\n\n switch (this.type) {\n case SendType.Text:\n this.text = new SendText(obj.text, alreadyEncrypted);\n break;\n case SendType.File:\n this.file = new SendFile(obj.file, alreadyEncrypted);\n break;\n default:\n break;\n }\n }\n\n async decrypt(): Promise {\n const model = new SendView(this);\n\n let cryptoService: CryptoService;\n const containerService = (Utils.global as any).bitwardenContainerService;\n if (containerService) {\n cryptoService = containerService.getCryptoService();\n } else {\n throw new Error('global bitwardenContainerService not initialized.');\n }\n\n try {\n model.key = await cryptoService.decryptToBytes(this.key, null);\n model.cryptoKey = await cryptoService.makeSendKey(model.key);\n } catch (e) {\n // TODO: error?\n }\n\n await this.decryptObj(model, {\n name: null,\n notes: null,\n }, null, model.cryptoKey);\n\n switch (this.type) {\n case SendType.File:\n model.file = await this.file.decrypt(model.cryptoKey);\n break;\n case SendType.Text:\n model.text = await this.text.decrypt(model.cryptoKey);\n break;\n default:\n break;\n }\n\n return model;\n }\n}\n","import * as forge from 'node-forge';\n\nimport { CryptoFunctionService } from '../abstractions/cryptoFunction.service';\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\n\nimport { Utils } from '../misc/utils';\n\nimport { DecryptParameters } from '../models/domain/decryptParameters';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nexport class WebCryptoFunctionService implements CryptoFunctionService {\n private crypto: Crypto;\n private subtle: SubtleCrypto;\n private isIE: boolean;\n private isOldSafari: boolean;\n\n constructor(private win: Window, private platformUtilsService: PlatformUtilsService) {\n this.crypto = typeof win.crypto !== 'undefined' ? win.crypto : null;\n this.subtle = (!!this.crypto && typeof win.crypto.subtle !== 'undefined') ? win.crypto.subtle : null;\n this.isIE = platformUtilsService.isIE();\n const ua = win.navigator.userAgent;\n this.isOldSafari = platformUtilsService.isSafari() &&\n (ua.indexOf(' Version/10.') > -1 || ua.indexOf(' Version/9.') > -1);\n }\n\n async pbkdf2(password: string | ArrayBuffer, salt: string | ArrayBuffer, algorithm: 'sha256' | 'sha512',\n iterations: number): Promise {\n if (this.isIE || this.isOldSafari) {\n const forgeLen = algorithm === 'sha256' ? 32 : 64;\n const passwordBytes = this.toByteString(password);\n const saltBytes = this.toByteString(salt);\n const derivedKeyBytes = (forge as any).pbkdf2(passwordBytes, saltBytes, iterations, forgeLen, algorithm);\n return Utils.fromByteStringToArray(derivedKeyBytes).buffer;\n }\n\n const wcLen = algorithm === 'sha256' ? 256 : 512;\n const passwordBuf = this.toBuf(password);\n const saltBuf = this.toBuf(salt);\n\n const pbkdf2Params: Pbkdf2Params = {\n name: 'PBKDF2',\n salt: saltBuf,\n iterations: iterations,\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n\n const impKey = await this.subtle.importKey('raw', passwordBuf, { name: 'PBKDF2' } as any,\n false, ['deriveBits']);\n return await this.subtle.deriveBits(pbkdf2Params, impKey, wcLen);\n }\n\n async hkdf(ikm: ArrayBuffer, salt: string | ArrayBuffer, info: string | ArrayBuffer,\n outputByteSize: number, algorithm: 'sha256' | 'sha512'): Promise {\n const saltBuf = this.toBuf(salt);\n const infoBuf = this.toBuf(info);\n\n const hkdfParams: HkdfParams = {\n name: 'HKDF',\n salt: saltBuf,\n info: infoBuf,\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n\n const impKey = await this.subtle.importKey('raw', ikm, { name: 'HKDF' } as any,\n false, ['deriveBits']);\n return await this.subtle.deriveBits(hkdfParams as any, impKey, outputByteSize * 8);\n }\n\n // ref: https://tools.ietf.org/html/rfc5869\n async hkdfExpand(prk: ArrayBuffer, info: string | ArrayBuffer, outputByteSize: number,\n algorithm: 'sha256' | 'sha512'): Promise {\n const hashLen = algorithm === 'sha256' ? 32 : 64;\n if (outputByteSize > 255 * hashLen) {\n throw new Error('outputByteSize is too large.');\n }\n const prkArr = new Uint8Array(prk);\n if (prkArr.length < hashLen) {\n throw new Error('prk is too small.');\n }\n const infoBuf = this.toBuf(info);\n const infoArr = new Uint8Array(infoBuf);\n let runningOkmLength = 0;\n let previousT = new Uint8Array(0);\n const n = Math.ceil(outputByteSize / hashLen);\n const okm = new Uint8Array(n * hashLen);\n for (let i = 0; i < n; i++) {\n const t = new Uint8Array(previousT.length + infoArr.length + 1);\n t.set(previousT);\n t.set(infoArr, previousT.length);\n t.set([i + 1], t.length - 1);\n previousT = new Uint8Array(await this.hmac(t.buffer, prk, algorithm));\n okm.set(previousT, runningOkmLength);\n runningOkmLength += previousT.length;\n if (runningOkmLength >= outputByteSize) {\n break;\n }\n }\n return okm.slice(0, outputByteSize).buffer;\n }\n\n async hash(value: string | ArrayBuffer, algorithm: 'sha1' | 'sha256' | 'sha512' | 'md5'): Promise {\n if ((this.isIE && algorithm === 'sha1') || algorithm === 'md5') {\n const md = algorithm === 'md5' ? forge.md.md5.create() : forge.md.sha1.create();\n const valueBytes = this.toByteString(value);\n md.update(valueBytes, 'raw');\n return Utils.fromByteStringToArray(md.digest().data).buffer;\n }\n\n const valueBuf = this.toBuf(value);\n return await this.subtle.digest({ name: this.toWebCryptoAlgorithm(algorithm) }, valueBuf);\n }\n\n async hmac(value: ArrayBuffer, key: ArrayBuffer, algorithm: 'sha1' | 'sha256' | 'sha512'): Promise {\n if (this.isIE && algorithm === 'sha512') {\n const hmac = (forge as any).hmac.create();\n const keyBytes = this.toByteString(key);\n const valueBytes = this.toByteString(value);\n hmac.start(algorithm, keyBytes);\n hmac.update(valueBytes, 'raw');\n return Utils.fromByteStringToArray(hmac.digest().data).buffer;\n }\n\n const signingAlgorithm = {\n name: 'HMAC',\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n\n const impKey = await this.subtle.importKey('raw', key, signingAlgorithm, false, ['sign']);\n return await this.subtle.sign(signingAlgorithm, impKey, value);\n }\n\n // Safely compare two values in a way that protects against timing attacks (Double HMAC Verification).\n // ref: https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2011/february/double-hmac-verification/\n // ref: https://paragonie.com/blog/2015/11/preventing-timing-attacks-on-string-comparison-with-double-hmac-strategy\n async compare(a: ArrayBuffer, b: ArrayBuffer): Promise {\n const macKey = await this.randomBytes(32);\n const signingAlgorithm = {\n name: 'HMAC',\n hash: { name: 'SHA-256' },\n };\n const impKey = await this.subtle.importKey('raw', macKey, signingAlgorithm, false, ['sign']);\n const mac1 = await this.subtle.sign(signingAlgorithm, impKey, a);\n const mac2 = await this.subtle.sign(signingAlgorithm, impKey, b);\n\n if (mac1.byteLength !== mac2.byteLength) {\n return false;\n }\n\n const arr1 = new Uint8Array(mac1);\n const arr2 = new Uint8Array(mac2);\n for (let i = 0; i < arr2.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n hmacFast(value: string, key: string, algorithm: 'sha1' | 'sha256' | 'sha512'): Promise {\n const hmac = (forge as any).hmac.create();\n hmac.start(algorithm, key);\n hmac.update(value);\n const bytes = hmac.digest().getBytes();\n return Promise.resolve(bytes);\n }\n\n async compareFast(a: string, b: string): Promise {\n const rand = await this.randomBytes(32);\n const bytes = new Uint32Array(rand);\n const buffer = forge.util.createBuffer();\n for (let i = 0; i < bytes.length; i++) {\n buffer.putInt32(bytes[i]);\n }\n const macKey = buffer.getBytes();\n\n const hmac = (forge as any).hmac.create();\n hmac.start('sha256', macKey);\n hmac.update(a);\n const mac1 = hmac.digest().getBytes();\n\n hmac.start(null, null);\n hmac.update(b);\n const mac2 = hmac.digest().getBytes();\n\n const equals = mac1 === mac2;\n return equals;\n }\n\n async aesEncrypt(data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer): Promise {\n const impKey = await this.subtle.importKey('raw', key, { name: 'AES-CBC' } as any, false, ['encrypt']);\n return await this.subtle.encrypt({ name: 'AES-CBC', iv: iv }, impKey, data);\n }\n\n aesDecryptFastParameters(data: string, iv: string, mac: string, key: SymmetricCryptoKey):\n DecryptParameters {\n const p = new DecryptParameters();\n if (key.meta != null) {\n p.encKey = key.meta.encKeyByteString;\n p.macKey = key.meta.macKeyByteString;\n }\n\n if (p.encKey == null) {\n p.encKey = forge.util.decode64(key.encKeyB64);\n }\n p.data = forge.util.decode64(data);\n p.iv = forge.util.decode64(iv);\n p.macData = p.iv + p.data;\n if (p.macKey == null && key.macKeyB64 != null) {\n p.macKey = forge.util.decode64(key.macKeyB64);\n }\n if (mac != null) {\n p.mac = forge.util.decode64(mac);\n }\n\n // cache byte string keys for later\n if (key.meta == null) {\n key.meta = {};\n }\n if (key.meta.encKeyByteString == null) {\n key.meta.encKeyByteString = p.encKey;\n }\n if (p.macKey != null && key.meta.macKeyByteString == null) {\n key.meta.macKeyByteString = p.macKey;\n }\n\n return p;\n }\n\n aesDecryptFast(parameters: DecryptParameters): Promise {\n const dataBuffer = (forge as any).util.createBuffer(parameters.data);\n const decipher = (forge as any).cipher.createDecipher('AES-CBC', parameters.encKey);\n decipher.start({ iv: parameters.iv });\n decipher.update(dataBuffer);\n decipher.finish();\n const val = decipher.output.toString('utf8');\n return Promise.resolve(val);\n }\n\n async aesDecrypt(data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer): Promise {\n const impKey = await this.subtle.importKey('raw', key, { name: 'AES-CBC' } as any, false, ['decrypt']);\n return await this.subtle.decrypt({ name: 'AES-CBC', iv: iv }, impKey, data);\n }\n\n async rsaEncrypt(data: ArrayBuffer, publicKey: ArrayBuffer, algorithm: 'sha1' | 'sha256'): Promise {\n // Note: Edge browser requires that we specify name and hash for both key import and decrypt.\n // We cannot use the proper types here.\n const rsaParams = {\n name: 'RSA-OAEP',\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n const impKey = await this.subtle.importKey('spki', publicKey, rsaParams, false, ['encrypt']);\n return await this.subtle.encrypt(rsaParams, impKey, data);\n }\n\n async rsaDecrypt(data: ArrayBuffer, privateKey: ArrayBuffer, algorithm: 'sha1' | 'sha256'): Promise {\n // Note: Edge browser requires that we specify name and hash for both key import and decrypt.\n // We cannot use the proper types here.\n const rsaParams = {\n name: 'RSA-OAEP',\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n const impKey = await this.subtle.importKey('pkcs8', privateKey, rsaParams, false, ['decrypt']);\n return await this.subtle.decrypt(rsaParams, impKey, data);\n }\n\n async rsaExtractPublicKey(privateKey: ArrayBuffer): Promise {\n const rsaParams = {\n name: 'RSA-OAEP',\n // Have to specify some algorithm\n hash: { name: this.toWebCryptoAlgorithm('sha1') },\n };\n const impPrivateKey = await this.subtle.importKey('pkcs8', privateKey, rsaParams, true, ['decrypt']);\n const jwkPrivateKey = await this.subtle.exportKey('jwk', impPrivateKey);\n const jwkPublicKeyParams = {\n kty: 'RSA',\n e: jwkPrivateKey.e,\n n: jwkPrivateKey.n,\n alg: 'RSA-OAEP',\n ext: true,\n };\n const impPublicKey = await this.subtle.importKey('jwk', jwkPublicKeyParams, rsaParams, true, ['encrypt']);\n return await this.subtle.exportKey('spki', impPublicKey);\n }\n\n async rsaGenerateKeyPair(length: 1024 | 2048 | 4096): Promise<[ArrayBuffer, ArrayBuffer]> {\n const rsaParams = {\n name: 'RSA-OAEP',\n modulusLength: length,\n publicExponent: new Uint8Array([0x01, 0x00, 0x01]), // 65537\n // Have to specify some algorithm\n hash: { name: this.toWebCryptoAlgorithm('sha1') },\n };\n const keyPair = await this.subtle.generateKey(rsaParams, true, ['encrypt', 'decrypt']);\n const publicKey = await this.subtle.exportKey('spki', keyPair.publicKey);\n const privateKey = await this.subtle.exportKey('pkcs8', keyPair.privateKey);\n return [publicKey, privateKey];\n }\n\n randomBytes(length: number): Promise {\n const arr = new Uint8Array(length);\n this.crypto.getRandomValues(arr);\n return Promise.resolve(arr.buffer);\n }\n\n private toBuf(value: string | ArrayBuffer): ArrayBuffer {\n let buf: ArrayBuffer;\n if (typeof (value) === 'string') {\n buf = Utils.fromUtf8ToArray(value).buffer;\n } else {\n buf = value;\n }\n return buf;\n }\n\n private toByteString(value: string | ArrayBuffer): string {\n let bytes: string;\n if (typeof (value) === 'string') {\n bytes = forge.util.encodeUtf8(value);\n } else {\n bytes = Utils.fromBufferToByteString(value);\n }\n return bytes;\n }\n\n private toWebCryptoAlgorithm(algorithm: 'sha1' | 'sha256' | 'sha512' | 'md5'): string {\n if (algorithm === 'md5') {\n throw new Error('MD5 is not supported in WebCrypto.');\n }\n return algorithm === 'sha1' ? 'SHA-1' : algorithm === 'sha256' ? 'SHA-256' : 'SHA-512';\n }\n}\n","export class DecryptParameters {\n encKey: T;\n data: T;\n iv: T;\n macKey: T;\n mac: T;\n macData: T;\n}\n","import { EncArrayBuffer } from '../models/domain/encArrayBuffer';\nimport { EncString } from '../models/domain/encString';\nimport { AttachmentUploadDataResponse } from '../models/response/attachmentUploadDataResponse';\nimport { SendFileUploadDataResponse } from '../models/response/sendFileUploadDataResponse';\n\nexport abstract class FileUploadService {\n uploadSendFile: (uploadData: SendFileUploadDataResponse, fileName: EncString,\n encryptedFileData: EncArrayBuffer) => Promise;\n uploadCipherAttachment: (admin: boolean, uploadData: AttachmentUploadDataResponse, fileName: string,\n encryptedFileData: EncArrayBuffer) => Promise;\n}\n","import * as jq from 'jquery';\nimport Swal from 'sweetalert2/dist/sweetalert2.js';\n\nimport {\n BodyOutputType,\n Toast,\n ToasterConfig,\n ToasterService,\n} from 'angular2-toaster';\n\nimport {\n Component,\n NgZone,\n OnDestroy,\n OnInit,\n SecurityContext,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport {\n NavigationEnd,\n Router,\n} from '@angular/router';\n\nimport { BroadcasterService } from 'jslib/angular/services/broadcaster.service';\n\nimport { StorageService } from 'jslib/abstractions/storage.service';\n\nimport { AuthService } from 'jslib/abstractions/auth.service';\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { CollectionService } from 'jslib/abstractions/collection.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { EventService } from 'jslib/abstractions/event.service';\nimport { FolderService } from 'jslib/abstractions/folder.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { NotificationsService } from 'jslib/abstractions/notifications.service';\nimport { PasswordGenerationService } from 'jslib/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib/abstractions/policy.service';\nimport { SearchService } from 'jslib/abstractions/search.service';\nimport { SettingsService } from 'jslib/abstractions/settings.service';\nimport { StateService } from 'jslib/abstractions/state.service';\nimport { SyncService } from 'jslib/abstractions/sync.service';\nimport { TokenService } from 'jslib/abstractions/token.service';\nimport { UserService } from 'jslib/abstractions/user.service';\nimport { VaultTimeoutService } from 'jslib/abstractions/vaultTimeout.service';\n\nimport { ConstantsService } from 'jslib/services/constants.service';\n\nimport { RouterService } from './services/router.service';\n\nconst BroadcasterSubscriptionId = 'AppComponent';\nconst IdleTimeout = 60000 * 10; // 10 minutes\n\n@Component({\n selector: 'app-root',\n templateUrl: 'app.component.html',\n})\nexport class AppComponent implements OnDestroy, OnInit {\n toasterConfig: ToasterConfig = new ToasterConfig({\n showCloseButton: true,\n mouseoverTimerStop: true,\n animation: 'flyRight',\n limit: 5,\n });\n\n private lastActivity: number = null;\n private idleTimer: number = null;\n private isIdle = false;\n\n constructor(\n private broadcasterService: BroadcasterService, private userService: UserService,\n private tokenService: TokenService, private folderService: FolderService,\n private settingsService: SettingsService, private syncService: SyncService,\n private passwordGenerationService: PasswordGenerationService, private cipherService: CipherService,\n private authService: AuthService, private router: Router,\n private toasterService: ToasterService, private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService, private ngZone: NgZone,\n private vaultTimeoutService: VaultTimeoutService, private storageService: StorageService,\n private cryptoService: CryptoService, private collectionService: CollectionService,\n private sanitizer: DomSanitizer, private searchService: SearchService,\n private notificationsService: NotificationsService, private routerService: RouterService,\n private stateService: StateService, private eventService: EventService,\n private policyService: PolicyService) { }\n\n ngOnInit() {\n this.ngZone.runOutsideAngular(() => {\n window.onmousemove = () => this.recordActivity();\n window.onmousedown = () => this.recordActivity();\n window.ontouchstart = () => this.recordActivity();\n window.onclick = () => this.recordActivity();\n window.onscroll = () => this.recordActivity();\n window.onkeypress = () => this.recordActivity();\n });\n\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, async (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case 'loggedIn':\n case 'loggedOut':\n case 'unlocked':\n this.notificationsService.updateConnection(false);\n break;\n case 'authBlocked':\n this.router.navigate(['/']);\n break;\n case 'logout':\n this.logOut(!!message.expired);\n break;\n case 'lockVault':\n await this.vaultTimeoutService.lock();\n break;\n case 'locked':\n this.notificationsService.updateConnection(false);\n this.router.navigate(['lock']);\n break;\n case 'lockedUrl':\n window.setTimeout(() => this.routerService.setPreviousUrl(message.url), 500);\n break;\n case 'syncStarted':\n break;\n case 'syncCompleted':\n break;\n case 'upgradeOrganization':\n const upgradeConfirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('upgradeOrganizationDesc'), this.i18nService.t('upgradeOrganization'),\n this.i18nService.t('upgradeOrganization'), this.i18nService.t('cancel'));\n if (upgradeConfirmed) {\n this.router.navigate(['organizations', message.organizationId, 'settings', 'billing']);\n }\n break;\n case 'premiumRequired':\n const premiumConfirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('premiumRequiredDesc'), this.i18nService.t('premiumRequired'),\n this.i18nService.t('learnMore'), this.i18nService.t('cancel'));\n if (premiumConfirmed) {\n this.router.navigate(['settings/premium']);\n }\n break;\n case 'emailVerificationRequired':\n const emailVerificationConfirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('emailVerificationRequiredDesc'),\n this.i18nService.t('emailVerificationRequired'),\n this.i18nService.t('learnMore'), this.i18nService.t('cancel'));\n if (emailVerificationConfirmed) {\n this.platformUtilsService.launchUri('https://bitwarden.com/help/article/create-bitwarden-account/');\n }\n break;\n case 'showToast':\n this.showToast(message);\n break;\n case 'setFullWidth':\n this.setFullWidth();\n break;\n default:\n break;\n }\n });\n });\n\n this.router.events.subscribe(event => {\n if (event instanceof NavigationEnd) {\n const modals = Array.from(document.querySelectorAll('.modal'));\n for (const modal of modals) {\n (jq(modal) as any).modal('hide');\n }\n\n if (document.querySelector('.swal-modal') != null) {\n Swal.close(undefined);\n }\n }\n });\n\n this.setFullWidth();\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n private async logOut(expired: boolean) {\n await this.eventService.uploadEvents();\n const userId = await this.userService.getUserId();\n\n await Promise.all([\n this.eventService.clearEvents(),\n this.syncService.setLastSync(new Date(0)),\n this.tokenService.clearToken(),\n this.cryptoService.clearKeys(),\n this.userService.clear(),\n this.settingsService.clear(userId),\n this.cipherService.clear(userId),\n this.folderService.clear(userId),\n this.collectionService.clear(userId),\n this.policyService.clear(userId),\n this.passwordGenerationService.clear(),\n this.stateService.purge(),\n ]);\n\n this.searchService.clearIndex();\n this.authService.logOut(async () => {\n if (expired) {\n this.toasterService.popAsync('warning', this.i18nService.t('loggedOut'),\n this.i18nService.t('loginExpired'));\n }\n\n Swal.close();\n this.router.navigate(['/']);\n });\n }\n\n private async recordActivity() {\n const now = (new Date()).getTime();\n if (this.lastActivity != null && now - this.lastActivity < 250) {\n return;\n }\n\n this.lastActivity = now;\n this.storageService.save(ConstantsService.lastActiveKey, now);\n\n // Idle states\n if (this.isIdle) {\n this.isIdle = false;\n this.idleStateChanged();\n }\n if (this.idleTimer != null) {\n window.clearTimeout(this.idleTimer);\n this.idleTimer = null;\n }\n this.idleTimer = window.setTimeout(() => {\n if (!this.isIdle) {\n this.isIdle = true;\n this.idleStateChanged();\n }\n }, IdleTimeout);\n }\n\n private showToast(msg: any) {\n const toast: Toast = {\n type: msg.type,\n title: msg.title,\n };\n if (typeof (msg.text) === 'string') {\n toast.body = msg.text;\n } else if (msg.text.length === 1) {\n toast.body = msg.text[0];\n } else {\n let message = '';\n msg.text.forEach((t: string) =>\n message += ('

' + this.sanitizer.sanitize(SecurityContext.HTML, t) + '

'));\n toast.body = message;\n toast.bodyOutputType = BodyOutputType.TrustedHtml;\n }\n if (msg.options != null) {\n if (msg.options.trustedHtml === true) {\n toast.bodyOutputType = BodyOutputType.TrustedHtml;\n }\n if (msg.options.timeout != null && msg.options.timeout > 0) {\n toast.timeout = msg.options.timeout;\n }\n }\n this.toasterService.popAsync(toast);\n }\n\n private idleStateChanged() {\n if (this.isIdle) {\n this.notificationsService.disconnectFromInactivity();\n } else {\n this.notificationsService.reconnectFromActivity();\n }\n }\n\n private async setFullWidth() {\n const enableFullWidth = await this.storageService.get('enableFullWidth');\n if (enableFullWidth) {\n document.body.classList.add('full-width');\n } else {\n document.body.classList.remove('full-width');\n }\n }\n}\n","\n\n","import {\n Directive,\n ElementRef,\n HostListener,\n} from '@angular/core';\n\n@Directive({\n selector: '[appBlurClick]',\n})\nexport class BlurClickDirective {\n constructor(private el: ElementRef) {\n }\n\n @HostListener('click') onClick() {\n this.el.nativeElement.blur();\n }\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n OnInit,\n} from '@angular/core';\n\n@Directive({\n selector: '[appBoxRow]',\n})\nexport class BoxRowDirective implements OnInit {\n el: HTMLElement = null;\n formEls: Element[];\n\n constructor(private elRef: ElementRef) {\n this.el = elRef.nativeElement;\n }\n\n ngOnInit(): void {\n this.formEls = Array.from(this.el.querySelectorAll('input:not([type=\"hidden\"]), select, textarea'));\n this.formEls.forEach(formEl => {\n formEl.addEventListener('focus', (event: Event) => {\n this.el.classList.add('active');\n }, false);\n\n formEl.addEventListener('blur', (event: Event) => {\n this.el.classList.remove('active');\n }, false);\n });\n }\n\n @HostListener('click', ['$event']) onClick(event: Event) {\n const target = event.target as HTMLElement;\n if (target !== this.el && !target.classList.contains('progress') &&\n !target.classList.contains('progress-bar')) {\n return;\n }\n\n if (this.formEls.length > 0) {\n const formEl = (this.formEls[0] as HTMLElement);\n if (formEl.tagName.toLowerCase() === 'input') {\n const inputEl = (formEl as HTMLInputElement);\n if (inputEl.type != null && inputEl.type.toLowerCase() === 'checkbox') {\n inputEl.click();\n return;\n }\n }\n formEl.focus();\n }\n }\n}\n","import {\n Pipe,\n PipeTransform,\n} from '@angular/core';\n\nimport { CipherView } from '../../models/view/cipherView';\n\n@Pipe({\n name: 'searchCiphers',\n})\nexport class SearchCiphersPipe implements PipeTransform {\n transform(ciphers: CipherView[], searchText: string, deleted: boolean = false): CipherView[] {\n if (ciphers == null || ciphers.length === 0) {\n return [];\n }\n\n if (searchText == null || searchText.length < 2) {\n return ciphers.filter(c => {\n return deleted !== c.isDeleted;\n });\n }\n\n searchText = searchText.trim().toLowerCase();\n return ciphers.filter(c => {\n if (deleted !== c.isDeleted) {\n return false;\n }\n if (c.name != null && c.name.toLowerCase().indexOf(searchText) > -1) {\n return true;\n }\n if (searchText.length >= 8 && c.id.startsWith(searchText)) {\n return true;\n }\n if (c.subTitle != null && c.subTitle.toLowerCase().indexOf(searchText) > -1) {\n return true;\n }\n if (c.login && c.login.uri != null && c.login.uri.toLowerCase().indexOf(searchText) > -1) {\n return true;\n }\n\n return false;\n });\n }\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/app/main.d875a1005df5117243c1.css b/app/main.d875a1005df5117243c1.css new file mode 100644 index 00000000..8b83c6cf --- /dev/null +++ b/app/main.d875a1005df5117243c1.css @@ -0,0 +1,97 @@ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 300; + font-display: auto; + src: url(../fonts/Open_Sans-italic-300.woff) format('woff'); + unicode-range: U+0-10FFFF; +} + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + font-display: auto; + src: url(../fonts/Open_Sans-italic-400.woff) format('woff'); + unicode-range: U+0-10FFFF; +} + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + font-display: auto; + src: url(../fonts/Open_Sans-italic-600.woff) format('woff'); + unicode-range: U+0-10FFFF; +} + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + font-display: auto; + src: url(../fonts/Open_Sans-italic-700.woff) format('woff'); + unicode-range: U+0-10FFFF; +} + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 800; + font-display: auto; + src: url(../fonts/Open_Sans-italic-800.woff) format('woff'); + unicode-range: U+0-10FFFF; +} + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + font-display: auto; + src: url(../fonts/Open_Sans-normal-300.woff) format('woff'); + unicode-range: U+0-10FFFF; +} + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + font-display: auto; + src: url(../fonts/Open_Sans-normal-400.woff) format('woff'); + unicode-range: U+0-10FFFF; +} + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + font-display: auto; + src: url(../fonts/Open_Sans-normal-600.woff) format('woff'); + unicode-range: U+0-10FFFF; +} + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + font-display: auto; + src: url(../fonts/Open_Sans-normal-700.woff) format('woff'); + unicode-range: U+0-10FFFF; +} + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + font-display: auto; + src: url(../fonts/Open_Sans-normal-800.woff) format('woff'); + unicode-range: U+0-10FFFF; +} + + +:root{--blue: #007bff;--indigo: #6610f2;--purple: #6f42c1;--pink: #e83e8c;--red: #dc3545;--orange: #fd7e14;--yellow: #ffc107;--green: #28a745;--teal: #20c997;--cyan: #17a2b8;--white: #fff;--gray: #6c757d;--gray-dark: #343a40;--primary: #175DDC;--secondary: #ced4da;--success: #00a65a;--info: #555555;--warning: #bf7e16;--danger: #dd4b39;--light: #f8f9fa;--dark: #343a40;--primary-accent: #1252A3;--secondary-alt: #1A3B66;--breakpoint-xs: 0;--breakpoint-sm: 1px;--breakpoint-md: 2px;--breakpoint-lg: 3px;--breakpoint-xl: 4px;--font-family-sans-serif: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}*,*::before,*::after{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#333;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0 !important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:#175ddc;text-decoration:none;background-color:transparent}a:hover{color:#104097;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{padding:0;border-style:none}input[type=radio],input[type=checkbox]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none !important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1{font-size:1.7rem}h2,.h2{font-size:1.3rem}h3,.h3{font-size:1rem}h4,.h4{font-size:1rem}h5,.h5{font-size:1rem}h6,.h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:normal}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}small,.small{font-size:90%;font-weight:400}mark,.mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:90%;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid,.table.table-list td.table-list-icon img{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:100%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:100%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:100%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-xl,.container-lg,.container-md,.container-sm{width:100%;padding-right:10px;padding-left:10px;margin-right:auto;margin-left:auto}@media(min-width: 1px){.container-sm,.container{max-width:540px}}@media(min-width: 2px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 3px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 4px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}.row{display:flex;flex-wrap:wrap;margin-right:-10px;margin-left:-10px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col-xl,.col-xl-auto,.col-xl-12,.col-xl-11,.col-xl-10,.col-xl-9,.col-xl-8,.col-xl-7,.col-xl-6,.col-xl-5,.col-xl-4,.col-xl-3,.col-xl-2,.col-xl-1,.col-lg,.col-lg-auto,.col-lg-12,.col-lg-11,.col-lg-10,.col-lg-9,.col-lg-8,.col-lg-7,.col-lg-6,.col-lg-5,.col-lg-4,.col-lg-3,.col-lg-2,.col-lg-1,.col-md,.col-md-auto,.col-md-12,.col-md-11,.col-md-10,.col-md-9,.col-md-8,.col-md-7,.col-md-6,.col-md-5,.col-md-4,.col-md-3,.col-md-2,.col-md-1,.col-sm,.col-sm-auto,.col-sm-12,.col-sm-11,.col-sm-10,.col-sm-9,.col-sm-8,.col-sm-7,.col-sm-6,.col-sm-5,.col-sm-4,.col-sm-3,.col-sm-2,.col-sm-1,.col,.col-auto,.col-12,.col-11,.col-10,.col-9,.col-8,.col-7,.col-6,.col-5,.col-4,.col-3,.col-2,.col-1{position:relative;width:100%;padding-right:10px;padding-left:10px}.col{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media(min-width: 1px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media(min-width: 2px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media(min-width: 3px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media(min-width: 4px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.table{width:100%;margin-bottom:1rem;color:#333}.table th,.table td{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm th,.table-sm td{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered th,.table-bordered td{border:1px solid #dee2e6}.table-bordered thead th,.table-bordered thead td{border-bottom-width:2px}.table-borderless th,.table-borderless td,.table-borderless thead th,.table-borderless tbody+tbody{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.02)}.table-hover tbody tr:hover{color:#333;background-color:rgba(0,0,0,.03)}.table-primary,.table-primary>th,.table-primary>td{background-color:#bed2f5}.table-primary th,.table-primary td,.table-primary thead th,.table-primary tbody+tbody{border-color:#86abed}.table-hover .table-primary:hover{background-color:#a8c3f2}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#a8c3f2}.table-secondary,.table-secondary>th,.table-secondary>td{background-color:#f1f3f5}.table-secondary th,.table-secondary td,.table-secondary thead th,.table-secondary tbody+tbody{border-color:#e6e9ec}.table-hover .table-secondary:hover{background-color:#e2e6ea}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#e2e6ea}.table-success,.table-success>th,.table-success>td{background-color:#b8e6d1}.table-success th,.table-success td,.table-success thead th,.table-success tbody+tbody{border-color:#7ad1a9}.table-hover .table-success:hover{background-color:#a5dfc5}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#a5dfc5}.table-info,.table-info>th,.table-info>td{background-color:#cfcfcf}.table-info th,.table-info td,.table-info thead th,.table-info tbody+tbody{border-color:#a7a7a7}.table-hover .table-info:hover{background-color:#c2c2c2}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#c2c2c2}.table-warning,.table-warning>th,.table-warning>td{background-color:#eddbbe}.table-warning th,.table-warning td,.table-warning thead th,.table-warning tbody+tbody{border-color:#debc86}.table-hover .table-warning:hover{background-color:#e7d0aa}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#e7d0aa}.table-danger,.table-danger>th,.table-danger>td{background-color:#f5cdc8}.table-danger th,.table-danger td,.table-danger thead th,.table-danger tbody+tbody{border-color:#eda198}.table-hover .table-danger:hover{background-color:#f1b9b2}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b9b2}.table-light,.table-light>th,.table-light>td{background-color:#fdfdfe}.table-light th,.table-light td,.table-light thead th,.table-light tbody+tbody{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>th,.table-dark>td{background-color:#c6c8ca}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-primary-accent,.table-primary-accent>th,.table-primary-accent>td{background-color:#bdcfe5}.table-primary-accent th,.table-primary-accent td,.table-primary-accent thead th,.table-primary-accent tbody+tbody{border-color:#84a5cf}.table-hover .table-primary-accent:hover{background-color:#abc2de}.table-hover .table-primary-accent:hover>td,.table-hover .table-primary-accent:hover>th{background-color:#abc2de}.table-secondary-alt,.table-secondary-alt>th,.table-secondary-alt>td{background-color:#bfc8d4}.table-secondary-alt th,.table-secondary-alt td,.table-secondary-alt thead th,.table-secondary-alt tbody+tbody{border-color:#8899af}.table-hover .table-secondary-alt:hover{background-color:#b0bbca}.table-hover .table-secondary-alt:hover>td,.table-hover .table-secondary-alt:hover>th{background-color:#b0bbca}.table-active,.table-active>th,.table-active>td{background-color:rgba(0,0,0,.03)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.03)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.03)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark th,.table-dark td,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media(max-width: 0.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media(max-width: 1.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media(max-width: 2.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media(max-width: 3.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + 0.75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fbfbfb;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#81a9f2;outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,.25)}.form-control::placeholder{color:#b4b4b4;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e0e0e0;opacity:1}input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fbfbfb}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.15rem;line-height:1.5}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#333;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + 0.5rem + 2px);padding:.25rem .5rem;font-size:0.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.15rem;line-height:1.5;border-radius:.3rem}select.form-control[size],select.form-control[multiple]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:90%;color:#00a65a}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;line-height:1.5;color:#fff;background-color:rgba(0,166,90,.9);border-radius:.25rem}.form-row>.col>.valid-tooltip,.form-row>[class*=col-]>.valid-tooltip{left:5px}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#00a65a;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2300a65a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#00a65a;box-shadow:0 0 0 .2rem rgba(0,166,90,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .custom-select:valid,.custom-select.is-valid{border-color:#00a65a;padding-right:calc(0.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fbfbfb url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2300a65a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat}.was-validated .custom-select:valid:focus,.custom-select.is-valid:focus{border-color:#00a65a;box-shadow:0 0 0 .2rem rgba(0,166,90,.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#00a65a}.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip,.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip{display:block}.was-validated .custom-control-input:valid~.custom-control-label,.custom-control-input.is-valid~.custom-control-label{color:#00a65a}.was-validated .custom-control-input:valid~.custom-control-label::before,.custom-control-input.is-valid~.custom-control-label::before{border-color:#00a65a}.was-validated .custom-control-input:valid:checked~.custom-control-label::before,.custom-control-input.is-valid:checked~.custom-control-label::before{border-color:#00d976;background-color:#00d976}.was-validated .custom-control-input:valid:focus~.custom-control-label::before,.custom-control-input.is-valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,166,90,.25)}.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before,.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before{border-color:#00a65a}.was-validated .custom-file-input:valid~.custom-file-label,.custom-file-input.is-valid~.custom-file-label{border-color:#00a65a}.was-validated .custom-file-input:valid:focus~.custom-file-label,.custom-file-input.is-valid:focus~.custom-file-label{border-color:#00a65a;box-shadow:0 0 0 .2rem rgba(0,166,90,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:90%;color:#dd4b39}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;line-height:1.5;color:#fff;background-color:rgba(221,75,57,.9);border-radius:.25rem}.form-row>.col>.invalid-tooltip,.form-row>[class*=col-]>.invalid-tooltip{left:5px}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#dd4b39;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dd4b39' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dd4b39' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dd4b39;box-shadow:0 0 0 .2rem rgba(221,75,57,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .custom-select:invalid,.custom-select.is-invalid{border-color:#dd4b39;padding-right:calc(0.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fbfbfb url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dd4b39' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dd4b39' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat}.was-validated .custom-select:invalid:focus,.custom-select.is-invalid:focus{border-color:#dd4b39;box-shadow:0 0 0 .2rem rgba(221,75,57,.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#dd4b39}.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip,.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip{display:block}.was-validated .custom-control-input:invalid~.custom-control-label,.custom-control-input.is-invalid~.custom-control-label{color:#dd4b39}.was-validated .custom-control-input:invalid~.custom-control-label::before,.custom-control-input.is-invalid~.custom-control-label::before{border-color:#dd4b39}.was-validated .custom-control-input:invalid:checked~.custom-control-label::before,.custom-control-input.is-invalid:checked~.custom-control-label::before{border-color:#e47365;background-color:#e47365}.was-validated .custom-control-input:invalid:focus~.custom-control-label::before,.custom-control-input.is-invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(221,75,57,.25)}.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before,.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dd4b39}.was-validated .custom-file-input:invalid~.custom-file-label,.custom-file-input.is-invalid~.custom-file-label{border-color:#dd4b39}.was-validated .custom-file-input:invalid:focus~.custom-file-label,.custom-file-input.is-invalid:focus~.custom-file-label{border-color:#dd4b39;box-shadow:0 0 0 .2rem rgba(221,75,57,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media(min-width: 1px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group,.form-inline .custom-select{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn,.swal2-popup .swal2-actions button{display:inline-block;font-weight:600;color:#333;text-align:center;vertical-align:middle;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.btn,.swal2-popup .swal2-actions button{transition:none}}.btn:hover,.swal2-popup .swal2-actions button:hover{color:#333;text-decoration:none}.btn:focus,.swal2-popup .swal2-actions button:focus,.btn.focus,.swal2-popup .swal2-actions button.focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,.25)}.btn.disabled,.swal2-popup .swal2-actions button.disabled,.btn:disabled,.swal2-popup .swal2-actions button:disabled{opacity:.65}.btn:not(:disabled):not(.disabled),.swal2-popup .swal2-actions button:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary,.swal2-popup .swal2-actions button.swal2-confirm{color:#fff;background-color:#175ddc;border-color:#175ddc}.btn-primary:hover,.swal2-popup .swal2-actions button.swal2-confirm:hover{color:#fff;background-color:#134eb9;border-color:#1249ae}.btn-primary:focus,.swal2-popup .swal2-actions button.swal2-confirm:focus,.btn-primary.focus,.swal2-popup .swal2-actions button.focus.swal2-confirm{color:#fff;background-color:#134eb9;border-color:#1249ae;box-shadow:0 0 0 .2rem rgba(58,117,225,.5)}.btn-primary.disabled,.swal2-popup .swal2-actions button.disabled.swal2-confirm,.btn-primary:disabled,.swal2-popup .swal2-actions button.swal2-confirm:disabled{color:#fff;background-color:#175ddc;border-color:#175ddc}.btn-primary:not(:disabled):not(.disabled):active,.swal2-popup .swal2-actions button.swal2-confirm:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.swal2-popup .swal2-actions button.swal2-confirm:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle,.swal2-popup .swal2-actions .show>button.dropdown-toggle.swal2-confirm{color:#fff;background-color:#1249ae;border-color:#1145a2}.btn-primary:not(:disabled):not(.disabled):active:focus,.swal2-popup .swal2-actions button.swal2-confirm:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.swal2-popup .swal2-actions button.swal2-confirm:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus,.swal2-popup .swal2-actions .show>button.dropdown-toggle.swal2-confirm:focus{box-shadow:0 0 0 .2rem rgba(58,117,225,.5)}.btn-secondary{color:#212529;background-color:#ced4da;border-color:#ced4da}.btn-secondary:hover{color:#212529;background-color:#b8c1ca;border-color:#b1bbc4}.btn-secondary:focus,.btn-secondary.focus{color:#212529;background-color:#b8c1ca;border-color:#b1bbc4;box-shadow:0 0 0 .2rem rgba(180,186,191,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#212529;background-color:#ced4da;border-color:#ced4da}.btn-secondary:not(:disabled):not(.disabled):active,.btn-secondary:not(:disabled):not(.disabled).active,.show>.btn-secondary.dropdown-toggle{color:#212529;background-color:#b1bbc4;border-color:#aab4bf}.btn-secondary:not(:disabled):not(.disabled):active:focus,.btn-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(180,186,191,.5)}.btn-success{color:#fff;background-color:#00a65a;border-color:#00a65a}.btn-success:hover{color:#fff;background-color:#008045;border-color:#00733e}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#008045;border-color:#00733e;box-shadow:0 0 0 .2rem rgba(38,179,115,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#00a65a;border-color:#00a65a}.btn-success:not(:disabled):not(.disabled):active,.btn-success:not(:disabled):not(.disabled).active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#00733e;border-color:#006637}.btn-success:not(:disabled):not(.disabled):active:focus,.btn-success:not(:disabled):not(.disabled).active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,179,115,.5)}.btn-info{color:#fff;background-color:#555;border-color:#555}.btn-info:hover{color:#fff;background-color:#424242;border-color:#3c3c3c}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#424242;border-color:#3c3c3c;box-shadow:0 0 0 .2rem rgba(111,111,111,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#555;border-color:#555}.btn-info:not(:disabled):not(.disabled):active,.btn-info:not(:disabled):not(.disabled).active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#3c3c3c;border-color:#353535}.btn-info:not(:disabled):not(.disabled):active:focus,.btn-info:not(:disabled):not(.disabled).active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(111,111,111,.5)}.btn-warning{color:#fff;background-color:#bf7e16;border-color:#bf7e16}.btn-warning:hover{color:#fff;background-color:#9d6712;border-color:#916011}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#9d6712;border-color:#916011;box-shadow:0 0 0 .2rem rgba(201,145,57,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#fff;background-color:#bf7e16;border-color:#bf7e16}.btn-warning:not(:disabled):not(.disabled):active,.btn-warning:not(:disabled):not(.disabled).active,.show>.btn-warning.dropdown-toggle{color:#fff;background-color:#916011;border-color:#86580f}.btn-warning:not(:disabled):not(.disabled):active:focus,.btn-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(201,145,57,.5)}.btn-danger{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.btn-danger:hover{color:#fff;background-color:#cd3623;border-color:#c23321}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#cd3623;border-color:#c23321;box-shadow:0 0 0 .2rem rgba(226,102,87,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.btn-danger:not(:disabled):not(.disabled):active,.btn-danger:not(:disabled):not(.disabled).active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#c23321;border-color:#b7301f}.btn-danger:not(:disabled):not(.disabled):active:focus,.btn-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(226,102,87,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light:focus,.btn-light.focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled):active,.btn-light:not(:disabled):not(.disabled).active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled):active:focus,.btn-light:not(:disabled):not(.disabled).active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark:focus,.btn-dark.focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled):active,.btn-dark:not(:disabled):not(.disabled).active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled):active:focus,.btn-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-primary-accent{color:#fff;background-color:#1252a3;border-color:#1252a3}.btn-primary-accent:hover{color:#fff;background-color:#0e4181;border-color:#0d3b75}.btn-primary-accent:focus,.btn-primary-accent.focus{color:#fff;background-color:#0e4181;border-color:#0d3b75;box-shadow:0 0 0 .2rem rgba(54,108,177,.5)}.btn-primary-accent.disabled,.btn-primary-accent:disabled{color:#fff;background-color:#1252a3;border-color:#1252a3}.btn-primary-accent:not(:disabled):not(.disabled):active,.btn-primary-accent:not(:disabled):not(.disabled).active,.show>.btn-primary-accent.dropdown-toggle{color:#fff;background-color:#0d3b75;border-color:#0c356a}.btn-primary-accent:not(:disabled):not(.disabled):active:focus,.btn-primary-accent:not(:disabled):not(.disabled).active:focus,.show>.btn-primary-accent.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(54,108,177,.5)}.btn-secondary-alt{color:#fff;background-color:#1a3b66;border-color:#1a3b66}.btn-secondary-alt:hover{color:#fff;background-color:#122948;border-color:#10233d}.btn-secondary-alt:focus,.btn-secondary-alt.focus{color:#fff;background-color:#122948;border-color:#10233d;box-shadow:0 0 0 .2rem rgba(60,88,125,.5)}.btn-secondary-alt.disabled,.btn-secondary-alt:disabled{color:#fff;background-color:#1a3b66;border-color:#1a3b66}.btn-secondary-alt:not(:disabled):not(.disabled):active,.btn-secondary-alt:not(:disabled):not(.disabled).active,.show>.btn-secondary-alt.dropdown-toggle{color:#fff;background-color:#10233d;border-color:#0d1e33}.btn-secondary-alt:not(:disabled):not(.disabled):active:focus,.btn-secondary-alt:not(:disabled):not(.disabled).active:focus,.show>.btn-secondary-alt.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(60,88,125,.5)}.btn-outline-primary{color:#175ddc;border-color:#175ddc}.btn-outline-primary:hover{color:#fff;background-color:#175ddc;border-color:#175ddc}.btn-outline-primary:focus,.btn-outline-primary.focus{box-shadow:0 0 0 .2rem rgba(23,93,220,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#175ddc;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled):active,.btn-outline-primary:not(:disabled):not(.disabled).active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#175ddc;border-color:#175ddc}.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,93,220,.5)}.btn-outline-secondary,.swal2-popup .swal2-actions button.swal2-cancel{color:#ced4da;border-color:#ced4da}.btn-outline-secondary:hover,.swal2-popup .swal2-actions button.swal2-cancel:hover{color:#212529;background-color:#ced4da;border-color:#ced4da}.btn-outline-secondary:focus,.swal2-popup .swal2-actions button.swal2-cancel:focus,.btn-outline-secondary.focus,.swal2-popup .swal2-actions button.focus.swal2-cancel{box-shadow:0 0 0 .2rem rgba(206,212,218,.5)}.btn-outline-secondary.disabled,.swal2-popup .swal2-actions button.disabled.swal2-cancel,.btn-outline-secondary:disabled,.swal2-popup .swal2-actions button.swal2-cancel:disabled{color:#ced4da;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled):active,.swal2-popup .swal2-actions button.swal2-cancel:not(:disabled):not(.disabled):active,.btn-outline-secondary:not(:disabled):not(.disabled).active,.swal2-popup .swal2-actions button.swal2-cancel:not(:disabled):not(.disabled).active,.show>.btn-outline-secondary.dropdown-toggle,.swal2-popup .swal2-actions .show>button.dropdown-toggle.swal2-cancel{color:#212529;background-color:#ced4da;border-color:#ced4da}.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.swal2-popup .swal2-actions button.swal2-cancel:not(:disabled):not(.disabled):active:focus,.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.swal2-popup .swal2-actions button.swal2-cancel:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus,.swal2-popup .swal2-actions .show>button.dropdown-toggle.swal2-cancel:focus{box-shadow:0 0 0 .2rem rgba(206,212,218,.5)}.btn-outline-success{color:#00a65a;border-color:#00a65a}.btn-outline-success:hover{color:#fff;background-color:#00a65a;border-color:#00a65a}.btn-outline-success:focus,.btn-outline-success.focus{box-shadow:0 0 0 .2rem rgba(0,166,90,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#00a65a;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled):active,.btn-outline-success:not(:disabled):not(.disabled).active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#00a65a;border-color:#00a65a}.btn-outline-success:not(:disabled):not(.disabled):active:focus,.btn-outline-success:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,166,90,.5)}.btn-outline-info{color:#555;border-color:#555}.btn-outline-info:hover{color:#fff;background-color:#555;border-color:#555}.btn-outline-info:focus,.btn-outline-info.focus{box-shadow:0 0 0 .2rem rgba(85,85,85,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#555;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled):active,.btn-outline-info:not(:disabled):not(.disabled).active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#555;border-color:#555}.btn-outline-info:not(:disabled):not(.disabled):active:focus,.btn-outline-info:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(85,85,85,.5)}.btn-outline-warning{color:#bf7e16;border-color:#bf7e16}.btn-outline-warning:hover{color:#fff;background-color:#bf7e16;border-color:#bf7e16}.btn-outline-warning:focus,.btn-outline-warning.focus{box-shadow:0 0 0 .2rem rgba(191,126,22,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#bf7e16;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled):active,.btn-outline-warning:not(:disabled):not(.disabled).active,.show>.btn-outline-warning.dropdown-toggle{color:#fff;background-color:#bf7e16;border-color:#bf7e16}.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(191,126,22,.5)}.btn-outline-danger{color:#dd4b39;border-color:#dd4b39}.btn-outline-danger:hover{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.btn-outline-danger:focus,.btn-outline-danger.focus{box-shadow:0 0 0 .2rem rgba(221,75,57,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dd4b39;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled):active,.btn-outline-danger:not(:disabled):not(.disabled).active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(221,75,57,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:focus,.btn-outline-light.focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled):active,.btn-outline-light:not(:disabled):not(.disabled).active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled):active:focus,.btn-outline-light:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:focus,.btn-outline-dark.focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled):active,.btn-outline-dark:not(:disabled):not(.disabled).active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary-accent{color:#1252a3;border-color:#1252a3}.btn-outline-primary-accent:hover{color:#fff;background-color:#1252a3;border-color:#1252a3}.btn-outline-primary-accent:focus,.btn-outline-primary-accent.focus{box-shadow:0 0 0 .2rem rgba(18,82,163,.5)}.btn-outline-primary-accent.disabled,.btn-outline-primary-accent:disabled{color:#1252a3;background-color:transparent}.btn-outline-primary-accent:not(:disabled):not(.disabled):active,.btn-outline-primary-accent:not(:disabled):not(.disabled).active,.show>.btn-outline-primary-accent.dropdown-toggle{color:#fff;background-color:#1252a3;border-color:#1252a3}.btn-outline-primary-accent:not(:disabled):not(.disabled):active:focus,.btn-outline-primary-accent:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-primary-accent.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(18,82,163,.5)}.btn-outline-secondary-alt{color:#1a3b66;border-color:#1a3b66}.btn-outline-secondary-alt:hover{color:#fff;background-color:#1a3b66;border-color:#1a3b66}.btn-outline-secondary-alt:focus,.btn-outline-secondary-alt.focus{box-shadow:0 0 0 .2rem rgba(26,59,102,.5)}.btn-outline-secondary-alt.disabled,.btn-outline-secondary-alt:disabled{color:#1a3b66;background-color:transparent}.btn-outline-secondary-alt:not(:disabled):not(.disabled):active,.btn-outline-secondary-alt:not(:disabled):not(.disabled).active,.show>.btn-outline-secondary-alt.dropdown-toggle{color:#fff;background-color:#1a3b66;border-color:#1a3b66}.btn-outline-secondary-alt:not(:disabled):not(.disabled):active:focus,.btn-outline-secondary-alt:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-secondary-alt.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(26,59,102,.5)}.btn-link{font-weight:400;color:#175ddc;text-decoration:none}.btn-link:hover{color:#104097;text-decoration:underline}.btn-link:focus,.btn-link.focus{text-decoration:underline}.btn-link:disabled,.btn-link.disabled{color:#6c757d;pointer-events:none}.btn-lg,.btn-group-lg>.btn,.swal2-popup .swal2-actions .btn-group-lg>button{padding:.5rem 1rem;font-size:1.15rem;line-height:1.5;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn,.swal2-popup .swal2-actions .btn-group-sm>button{padding:.25rem .5rem;font-size:0.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.dropup,.dropright,.dropdown,.dropleft{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#333;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media(min-width: 1px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media(min-width: 2px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media(min-width: 3px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media(min-width: 4px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=top],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#333;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:hover,.dropdown-item:focus{color:#16181b;text-decoration:none;background-color:rgba(0,0,0,.06)}.dropdown-item.active,.dropdown-item:active{color:#333;text-decoration:none;background-color:rgba(0,0,0,.1)}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:0.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#333}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.swal2-popup .swal2-actions .btn-group>button,.btn-group-vertical>.btn,.swal2-popup .swal2-actions .btn-group-vertical>button{position:relative;flex:1 1 auto}.btn-group>.btn:hover,.swal2-popup .swal2-actions .btn-group>button:hover,.btn-group-vertical>.btn:hover,.swal2-popup .swal2-actions .btn-group-vertical>button:hover{z-index:1}.btn-group>.btn:focus,.swal2-popup .swal2-actions .btn-group>button:focus,.btn-group>.btn:active,.swal2-popup .swal2-actions .btn-group>button:active,.btn-group>.btn.active,.swal2-popup .swal2-actions .btn-group>button.active,.btn-group-vertical>.btn:focus,.swal2-popup .swal2-actions .btn-group-vertical>button:focus,.btn-group-vertical>.btn:active,.swal2-popup .swal2-actions .btn-group-vertical>button:active,.btn-group-vertical>.btn.active,.swal2-popup .swal2-actions .btn-group-vertical>button.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.swal2-popup .swal2-actions .btn-group>button:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-left:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.swal2-popup .swal2-actions .btn-group>button:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn,.swal2-popup .swal2-actions .btn-group>.btn-group:not(:last-child)>button{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:not(:first-child),.swal2-popup .swal2-actions .btn-group>button:not(:first-child),.btn-group>.btn-group:not(:first-child)>.btn,.swal2-popup .swal2-actions .btn-group>.btn-group:not(:first-child)>button{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split,.swal2-popup .swal2-actions .btn-group-sm>button+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split,.swal2-popup .swal2-actions .btn-group-lg>button+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.swal2-popup .swal2-actions .btn-group-vertical>button,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.swal2-popup .swal2-actions .btn-group-vertical>button:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.swal2-popup .swal2-actions .btn-group-vertical>button:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn,.swal2-popup .swal2-actions .btn-group-vertical>.btn-group:not(:last-child)>button{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:not(:first-child),.swal2-popup .swal2-actions .btn-group-vertical>button:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child)>.btn,.swal2-popup .swal2-actions .btn-group-vertical>.btn-group:not(:first-child)>button{border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.swal2-popup .swal2-actions .btn-group-toggle>button,.btn-group-toggle>.btn-group>.btn,.swal2-popup .swal2-actions .btn-group-toggle>.btn-group>button{margin-bottom:0}.btn-group-toggle>.btn input[type=radio],.swal2-popup .swal2-actions .btn-group-toggle>button input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.swal2-popup .swal2-actions .btn-group-toggle>button input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-control-plaintext,.input-group>.custom-select,.input-group>.custom-file{position:relative;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.form-control+.form-control,.input-group>.form-control+.custom-select,.input-group>.form-control+.custom-file,.input-group>.form-control-plaintext+.form-control,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.custom-file,.input-group>.custom-select+.form-control,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.custom-file,.input-group>.custom-file+.form-control,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.custom-file{margin-left:-1px}.input-group>.form-control:focus,.input-group>.custom-select:focus,.input-group>.custom-file .custom-file-input:focus~.custom-file-label{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.form-control:not(:first-child),.input-group>.custom-select:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group:not(.has-validation)>.form-control:not(:last-child),.input-group:not(.has-validation)>.custom-select:not(:last-child),.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.form-control:nth-last-child(n+3),.input-group.has-validation>.custom-select:nth-last-child(n+3),.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-prepend,.input-group-append{display:flex}.input-group-prepend .btn,.input-group-prepend .swal2-popup .swal2-actions button,.swal2-popup .swal2-actions .input-group-prepend button,.input-group-append .btn,.input-group-append .swal2-popup .swal2-actions button,.swal2-popup .swal2-actions .input-group-append button{position:relative;z-index:2}.input-group-prepend .btn:focus,.input-group-prepend .swal2-popup .swal2-actions button:focus,.swal2-popup .swal2-actions .input-group-prepend button:focus,.input-group-append .btn:focus,.input-group-append .swal2-popup .swal2-actions button:focus,.swal2-popup .swal2-actions .input-group-append button:focus{z-index:3}.input-group-prepend .btn+.btn,.input-group-prepend .swal2-popup .swal2-actions button+.btn,.swal2-popup .swal2-actions .input-group-prepend button+.btn,.input-group-prepend .swal2-popup .swal2-actions .btn+button,.swal2-popup .swal2-actions .input-group-prepend .btn+button,.input-group-prepend .swal2-popup .swal2-actions button+button,.swal2-popup .swal2-actions .input-group-prepend button+button,.input-group-prepend .btn+.input-group-text,.input-group-prepend .swal2-popup .swal2-actions button+.input-group-text,.swal2-popup .swal2-actions .input-group-prepend button+.input-group-text,.input-group-prepend .input-group-text+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .swal2-popup .swal2-actions .input-group-text+button,.swal2-popup .swal2-actions .input-group-prepend .input-group-text+button,.input-group-append .btn+.btn,.input-group-append .swal2-popup .swal2-actions button+.btn,.swal2-popup .swal2-actions .input-group-append button+.btn,.input-group-append .swal2-popup .swal2-actions .btn+button,.swal2-popup .swal2-actions .input-group-append .btn+button,.input-group-append .swal2-popup .swal2-actions button+button,.swal2-popup .swal2-actions .input-group-append button+button,.input-group-append .btn+.input-group-text,.input-group-append .swal2-popup .swal2-actions button+.input-group-text,.swal2-popup .swal2-actions .input-group-append button+.input-group-text,.input-group-append .input-group-text+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .swal2-popup .swal2-actions .input-group-text+button,.swal2-popup .swal2-actions .input-group-append .input-group-text+button{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=radio],.input-group-text input[type=checkbox]{margin-top:0}.input-group-lg>.form-control:not(textarea),.input-group-lg>.custom-select{height:calc(1.5em + 1rem + 2px)}.input-group-lg>.form-control,.input-group-lg>.custom-select,.input-group-lg>.input-group-prepend>.input-group-text,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.swal2-popup .swal2-actions .input-group-lg>.input-group-prepend>button,.input-group-lg>.input-group-append>.btn,.swal2-popup .swal2-actions .input-group-lg>.input-group-append>button{padding:.5rem 1rem;font-size:1.15rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.form-control:not(textarea),.input-group-sm>.custom-select{height:calc(1.5em + 0.5rem + 2px)}.input-group-sm>.form-control,.input-group-sm>.custom-select,.input-group-sm>.input-group-prepend>.input-group-text,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.swal2-popup .swal2-actions .input-group-sm>.input-group-prepend>button,.input-group-sm>.input-group-append>.btn,.swal2-popup .swal2-actions .input-group-sm>.input-group-append>button{padding:.25rem .5rem;font-size:0.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-prepend>.btn,.swal2-popup .swal2-actions .input-group>.input-group-prepend>button,.input-group>.input-group-prepend>.input-group-text,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.btn,.swal2-popup .swal2-actions .input-group:not(.has-validation)>.input-group-append:not(:last-child)>button,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.input-group-text,.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.btn,.swal2-popup .swal2-actions .input-group.has-validation>.input-group-append:nth-last-child(n+3)>button,.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.swal2-popup .swal2-actions .input-group>.input-group-append:last-child>button:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.swal2-popup .swal2-actions .input-group>.input-group-append>button,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:not(:first-child)>.btn,.swal2-popup .swal2-actions .input-group>.input-group-prepend:not(:first-child)>button,.input-group>.input-group-prepend:not(:first-child)>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.swal2-popup .swal2-actions .input-group>.input-group-prepend:first-child>button:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem;color-adjust:exact}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#175ddc;background-color:#175ddc}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(23,93,220,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#81a9f2}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#afc8f7;border-color:#afc8f7}.custom-control-input[disabled]~.custom-control-label,.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input[disabled]~.custom-control-label::before,.custom-control-input:disabled~.custom-control-label::before{background-color:#e0e0e0}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fbfbfb;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:50%/50% 50% no-repeat}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#175ddc;background-color:#175ddc}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(23,93,220,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(23,93,220,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(23,93,220,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(0.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fbfbfb;transform:translateX(0.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(23,93,220,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + 0.75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fbfbfb url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat;border:1px solid #ced4da;border-radius:.25rem;appearance:none}.custom-select:focus{border-color:#81a9f2;outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fbfbfb}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + 0.5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.15rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + 0.75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + 0.75rem + 2px);margin:0;overflow:hidden;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#81a9f2;box-shadow:0 0 0 .2rem rgba(23,93,220,.25)}.custom-file-input[disabled]~.custom-file-label,.custom-file-input:disabled~.custom-file-label{background-color:#e0e0e0}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + 0.75rem + 2px);padding:.375rem .75rem;overflow:hidden;font-weight:400;line-height:1.5;color:#495057;background-color:#fbfbfb;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + 0.75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(23,93,220,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(23,93,220,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(23,93,220,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;background-color:#175ddc;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media(prefers-reduced-motion: reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#afc8f7}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#175ddc;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media(prefers-reduced-motion: reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#afc8f7}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#175ddc;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media(prefers-reduced-motion: reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#afc8f7}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:hover,.nav-link:focus{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#175ddc}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:.75rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-sm,.navbar .container-md,.navbar .container-lg,.navbar .container-xl{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:0;padding-bottom:0;margin-right:1rem;font-size:2.1875rem;line-height:inherit;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.15rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:hover,.navbar-toggler:focus{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:50%/100% 100% no-repeat}.navbar-nav-scroll{max-height:75vh;overflow-y:auto}@media(max-width: 0.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media(min-width: 1px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media(max-width: 1.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-md,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media(min-width: 2px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-md,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media(max-width: 2.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media(min-width: 3px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media(max-width: 3.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media(min-width: 4px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-sm,.navbar-expand>.container-md,.navbar-expand>.container-lg,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-sm,.navbar-expand>.container-md,.navbar-expand>.container-lg,.navbar-expand>.container-xl{flex-wrap:nowrap}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .nav-link.active{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.7)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,.9)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.7);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.7%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.7)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(0.25rem - 1px);border-bottom-left-radius:calc(0.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.6rem}.card-subtitle{margin-top:-0.3rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.6rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.card-footer{padding:.6rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.card-header-tabs{margin-right:-0.625rem;margin-bottom:-0.6rem;margin-left:-0.625rem;border-bottom:0}.card-header-pills{margin-right:-0.625rem;margin-left:-0.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(0.25rem - 1px)}.card-img,.card-img-top,.card-img-bottom{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(0.25rem - 1px);border-bottom-left-radius:calc(0.25rem - 1px)}.card-deck .card{margin-bottom:10px}@media(min-width: 1px){.card-deck{display:flex;flex-flow:row wrap;margin-right:-10px;margin-left:-10px}.card-deck .card{flex:1 0 0%;margin-right:10px;margin-bottom:0;margin-left:10px}}.card-group>.card{margin-bottom:10px}@media(min-width: 1px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.6rem}@media(min-width: 1px){.card-columns{column-count:3;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#175ddc;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#104097;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#175ddc;border-color:#175ddc}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.15rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:0.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.badge{transition:none}}a.badge:hover,a.badge:focus{text-decoration:none}.badge:empty{display:none}.btn .badge,.swal2-popup .swal2-actions button .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#175ddc}a.badge-primary:hover,a.badge-primary:focus{color:#fff;background-color:#1249ae}a.badge-primary:focus,a.badge-primary.focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,.5)}.badge-secondary{color:#212529;background-color:#ced4da}a.badge-secondary:hover,a.badge-secondary:focus{color:#212529;background-color:#b1bbc4}a.badge-secondary:focus,a.badge-secondary.focus{outline:0;box-shadow:0 0 0 .2rem rgba(206,212,218,.5)}.badge-success{color:#fff;background-color:#00a65a}a.badge-success:hover,a.badge-success:focus{color:#fff;background-color:#00733e}a.badge-success:focus,a.badge-success.focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,166,90,.5)}.badge-info{color:#fff;background-color:#555}a.badge-info:hover,a.badge-info:focus{color:#fff;background-color:#3c3c3c}a.badge-info:focus,a.badge-info.focus{outline:0;box-shadow:0 0 0 .2rem rgba(85,85,85,.5)}.badge-warning{color:#fff;background-color:#bf7e16}a.badge-warning:hover,a.badge-warning:focus{color:#fff;background-color:#916011}a.badge-warning:focus,a.badge-warning.focus{outline:0;box-shadow:0 0 0 .2rem rgba(191,126,22,.5)}.badge-danger{color:#fff;background-color:#dd4b39}a.badge-danger:hover,a.badge-danger:focus{color:#fff;background-color:#c23321}a.badge-danger:focus,a.badge-danger.focus{outline:0;box-shadow:0 0 0 .2rem rgba(221,75,57,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:hover,a.badge-light:focus{color:#212529;background-color:#dae0e5}a.badge-light:focus,a.badge-light.focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:hover,a.badge-dark:focus{color:#fff;background-color:#1d2124}a.badge-dark:focus,a.badge-dark.focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.badge-primary-accent{color:#fff;background-color:#1252a3}a.badge-primary-accent:hover,a.badge-primary-accent:focus{color:#fff;background-color:#0d3b75}a.badge-primary-accent:focus,a.badge-primary-accent.focus{outline:0;box-shadow:0 0 0 .2rem rgba(18,82,163,.5)}.badge-secondary-alt{color:#fff;background-color:#1a3b66}a.badge-secondary-alt:hover,a.badge-secondary-alt:focus{color:#fff;background-color:#10233d}a.badge-secondary-alt:focus,a.badge-secondary-alt.focus{outline:0;box-shadow:0 0 0 .2rem rgba(26,59,102,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media(min-width: 1px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#0c3072;background-color:#d1dff8;border-color:#bed2f5}.alert-primary hr{border-top-color:#a8c3f2}.alert-primary .alert-link{color:#071d44}.alert-secondary{color:#6b6e71;background-color:#f5f6f8;border-color:#f1f3f5}.alert-secondary hr{border-top-color:#e2e6ea}.alert-secondary .alert-link{color:#525557}.alert-success{color:#00562f;background-color:#ccedde;border-color:#b8e6d1}.alert-success hr{border-top-color:#a5dfc5}.alert-success .alert-link{color:#002313}.alert-info{color:#2c2c2c;background-color:#ddd;border-color:#cfcfcf}.alert-info hr{border-top-color:#c2c2c2}.alert-info .alert-link{color:#131313}.alert-warning{color:#63420b;background-color:#f2e5d0;border-color:#eddbbe}.alert-warning hr{border-top-color:#e7d0aa}.alert-warning .alert-link{color:#352306}.alert-danger{color:#73271e;background-color:#f8dbd7;border-color:#f5cdc8}.alert-danger hr{border-top-color:#f1b9b2}.alert-danger .alert-link{color:#4b1913}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}.alert-primary-accent{color:#092b55;background-color:#d0dced;border-color:#bdcfe5}.alert-primary-accent hr{border-top-color:#abc2de}.alert-primary-accent .alert-link{color:#041427}.alert-secondary-alt{color:#0e1f35;background-color:#d1d8e0;border-color:#bfc8d4}.alert-secondary-alt hr{border-top-color:#b0bbca}.alert-secondary-alt .alert-link{color:#03070d}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;line-height:0;font-size:0.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#175ddc;transition:width .6s ease}@media(prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-size:1rem 1rem}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media(prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#333;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.6rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#333;background-color:#fff;border-color:rgba(0,0,0,.125)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media(min-width: 1px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 2px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 3px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 4px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#0c3072;background-color:#bed2f5}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#0c3072;background-color:#a8c3f2}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#0c3072;border-color:#0c3072}.list-group-item-secondary{color:#6b6e71;background-color:#f1f3f5}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#6b6e71;background-color:#e2e6ea}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#6b6e71;border-color:#6b6e71}.list-group-item-success{color:#00562f;background-color:#b8e6d1}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#00562f;background-color:#a5dfc5}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#00562f;border-color:#00562f}.list-group-item-info{color:#2c2c2c;background-color:#cfcfcf}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#2c2c2c;background-color:#c2c2c2}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#2c2c2c;border-color:#2c2c2c}.list-group-item-warning{color:#63420b;background-color:#eddbbe}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#63420b;background-color:#e7d0aa}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#63420b;border-color:#63420b}.list-group-item-danger{color:#73271e;background-color:#f5cdc8}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#73271e;background-color:#f1b9b2}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#73271e;border-color:#73271e}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.list-group-item-primary-accent{color:#092b55;background-color:#bdcfe5}.list-group-item-primary-accent.list-group-item-action:hover,.list-group-item-primary-accent.list-group-item-action:focus{color:#092b55;background-color:#abc2de}.list-group-item-primary-accent.list-group-item-action.active{color:#fff;background-color:#092b55;border-color:#092b55}.list-group-item-secondary-alt{color:#0e1f35;background-color:#bfc8d4}.list-group-item-secondary-alt.list-group-item-action:hover,.list-group-item-secondary-alt.list-group-item-action:focus{color:#0e1f35;background-color:#b0bbca}.list-group-item-secondary-alt.list-group-item-action.active{color:#fff;background-color:#0e1f35;border-color:#0e1f35}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):hover,.close:not(:disabled):not(.disabled):focus{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0, -50px)}@media(prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-header,.modal-dialog-scrollable .modal-footer{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.3}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(0.3rem - 1px);border-top-right-radius:calc(0.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(0.3rem - 1px);border-bottom-left-radius:calc(0.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media(min-width: 1px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:min-content}.modal-sm{max-width:300px}}@media(min-width: 3px){.modal-lg,.modal-xl{max-width:800px}}@media(min-width: 4px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:0.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top,.bs-tooltip-auto[x-placement^=top]{padding:.4rem 0}.bs-tooltip-top .arrow,.bs-tooltip-auto[x-placement^=top] .arrow{bottom:0}.bs-tooltip-top .arrow::before,.bs-tooltip-auto[x-placement^=top] .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-right,.bs-tooltip-auto[x-placement^=right]{padding:0 .4rem}.bs-tooltip-right .arrow,.bs-tooltip-auto[x-placement^=right] .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-right .arrow::before,.bs-tooltip-auto[x-placement^=right] .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-bottom,.bs-tooltip-auto[x-placement^=bottom]{padding:.4rem 0}.bs-tooltip-bottom .arrow,.bs-tooltip-auto[x-placement^=bottom] .arrow{top:0}.bs-tooltip-bottom .arrow::before,.bs-tooltip-auto[x-placement^=bottom] .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-left,.bs-tooltip-auto[x-placement^=left]{padding:0 .4rem}.bs-tooltip-left .arrow,.bs-tooltip-auto[x-placement^=left] .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-left .arrow::before,.bs-tooltip-auto[x-placement^=left] .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:0.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::before,.popover .arrow::after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-top,.bs-popover-auto[x-placement^=top]{margin-bottom:.5rem}.bs-popover-top>.arrow,.bs-popover-auto[x-placement^=top]>.arrow{bottom:calc(-0.5rem - 1px)}.bs-popover-top>.arrow::before,.bs-popover-auto[x-placement^=top]>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-top>.arrow::after,.bs-popover-auto[x-placement^=top]>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-right,.bs-popover-auto[x-placement^=right]{margin-left:.5rem}.bs-popover-right>.arrow,.bs-popover-auto[x-placement^=right]>.arrow{left:calc(-0.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-right>.arrow::before,.bs-popover-auto[x-placement^=right]>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-right>.arrow::after,.bs-popover-auto[x-placement^=right]>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-bottom,.bs-popover-auto[x-placement^=bottom]{margin-top:.5rem}.bs-popover-bottom>.arrow,.bs-popover-auto[x-placement^=bottom]>.arrow{top:calc(-0.5rem - 1px)}.bs-popover-bottom>.arrow::before,.bs-popover-auto[x-placement^=bottom]>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-bottom>.arrow::after,.bs-popover-auto[x-placement^=bottom]>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-bottom .popover-header::before,.bs-popover-auto[x-placement^=bottom] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-0.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-left,.bs-popover-auto[x-placement^=left]{margin-right:.5rem}.bs-popover-left>.arrow,.bs-popover-auto[x-placement^=left]>.arrow{right:calc(-0.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-left>.arrow::before,.bs-popover-auto[x-placement^=left]>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-left>.arrow::after,.bs-popover-auto[x-placement^=left]>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(0.3rem - 1px);border-top-right-radius:calc(0.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#333}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media(prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-left),.active.carousel-item-right{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-right),.active.carousel-item-left{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media(prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media(prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:20px;height:20px;background:50%/100% 100% no-repeat}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media(prefers-reduced-motion: reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{animation-duration:1.5s}}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.bg-primary{background-color:#175ddc !important}a.bg-primary:hover,a.bg-primary:focus,button.bg-primary:hover,button.bg-primary:focus{background-color:#1249ae !important}.bg-secondary{background-color:#ced4da !important}a.bg-secondary:hover,a.bg-secondary:focus,button.bg-secondary:hover,button.bg-secondary:focus{background-color:#b1bbc4 !important}.bg-success{background-color:#00a65a !important}a.bg-success:hover,a.bg-success:focus,button.bg-success:hover,button.bg-success:focus{background-color:#00733e !important}.bg-info{background-color:#555 !important}a.bg-info:hover,a.bg-info:focus,button.bg-info:hover,button.bg-info:focus{background-color:#3c3c3c !important}.bg-warning{background-color:#bf7e16 !important}a.bg-warning:hover,a.bg-warning:focus,button.bg-warning:hover,button.bg-warning:focus{background-color:#916011 !important}.bg-danger{background-color:#dd4b39 !important}a.bg-danger:hover,a.bg-danger:focus,button.bg-danger:hover,button.bg-danger:focus{background-color:#c23321 !important}.bg-light{background-color:#f8f9fa !important}a.bg-light:hover,a.bg-light:focus,button.bg-light:hover,button.bg-light:focus{background-color:#dae0e5 !important}.bg-dark{background-color:#343a40 !important}a.bg-dark:hover,a.bg-dark:focus,button.bg-dark:hover,button.bg-dark:focus{background-color:#1d2124 !important}.bg-primary-accent{background-color:#1252a3 !important}a.bg-primary-accent:hover,a.bg-primary-accent:focus,button.bg-primary-accent:hover,button.bg-primary-accent:focus{background-color:#0d3b75 !important}.bg-secondary-alt{background-color:#1a3b66 !important}a.bg-secondary-alt:hover,a.bg-secondary-alt:focus,button.bg-secondary-alt:hover,button.bg-secondary-alt:focus{background-color:#10233d !important}.bg-white{background-color:#fff !important}.bg-transparent{background-color:transparent !important}.border{border:1px solid #dee2e6 !important}.border-top{border-top:1px solid #dee2e6 !important}.border-right{border-right:1px solid #dee2e6 !important}.border-bottom{border-bottom:1px solid #dee2e6 !important}.border-left{border-left:1px solid #dee2e6 !important}.border-0{border:0 !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.border-primary{border-color:#175ddc !important}.border-secondary{border-color:#ced4da !important}.border-success{border-color:#00a65a !important}.border-info{border-color:#555 !important}.border-warning{border-color:#bf7e16 !important}.border-danger{border-color:#dd4b39 !important}.border-light{border-color:#f8f9fa !important}.border-dark{border-color:#343a40 !important}.border-primary-accent{border-color:#1252a3 !important}.border-secondary-alt{border-color:#1a3b66 !important}.border-white{border-color:#fff !important}.rounded-sm{border-radius:.2rem !important}.rounded,app-avatar img,.table.table-list td.table-list-icon img{border-radius:.25rem !important}.rounded-top{border-top-left-radius:.25rem !important;border-top-right-radius:.25rem !important}.rounded-right{border-top-right-radius:.25rem !important;border-bottom-right-radius:.25rem !important}.rounded-bottom{border-bottom-right-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-left{border-top-left-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-lg{border-radius:.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-0{border-radius:0 !important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}@media(min-width: 1px){.d-sm-none{display:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}}@media(min-width: 2px){.d-md-none{display:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}}@media(min-width: 3px){.d-lg-none{display:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}}@media(min-width: 4px){.d-xl-none{display:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}}@media print{.d-print-none{display:none !important}.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.8571428571%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-fill{flex:1 1 auto !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}@media(min-width: 1px){.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}}@media(min-width: 2px){.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}}@media(min-width: 3px){.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}}@media(min-width: 4px){.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}}.float-left{float:left !important}.float-right{float:right !important}.float-none{float:none !important}@media(min-width: 1px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media(min-width: 2px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media(min-width: 3px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media(min-width: 4px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports(position: sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only,.table.table-list tr:not(:hover) td.table-list-options>.dropdown:not(.show) button:not(:focus):not(:active),.table.table-list tr:not(:hover) td.table-list-options>button:not(:focus):not(:active){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175) !important}.shadow-none{box-shadow:none !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mw-100{max-width:100% !important}.mh-100{max-height:100% !important}.min-vw-100{min-width:100vw !important}.min-vh-100{min-height:100vh !important}.vw-100{width:100vw !important}.vh-100{height:100vh !important}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:.25rem !important}.mt-1,.my-1{margin-top:.25rem !important}.mr-1,.mx-1{margin-right:.25rem !important}.mb-1,.my-1{margin-bottom:.25rem !important}.ml-1,.mx-1{margin-left:.25rem !important}.m-2{margin:.5rem !important}.mt-2,.form-check-block .form-check-label>span,.my-2{margin-top:.5rem !important}.mr-2,.mx-2{margin-right:.5rem !important}.mb-2,.my-2{margin-bottom:.5rem !important}.ml-2,.mx-2{margin-left:.5rem !important}.m-3{margin:1rem !important}.mt-3,.form-check-block+.form-check-block:not(.mt-2),.my-3{margin-top:1rem !important}.mr-3,.mx-3{margin-right:1rem !important}.mb-3,.my-3{margin-bottom:1rem !important}.ml-3,.mx-3{margin-left:1rem !important}.m-4{margin:1.5rem !important}.mt-4,.my-4{margin-top:1.5rem !important}.mr-4,.mx-4{margin-right:1.5rem !important}.mb-4,.card-body-header,.my-4{margin-bottom:1.5rem !important}.ml-4,.mx-4{margin-left:1.5rem !important}.m-5{margin:3rem !important}.mt-5,.my-5{margin-top:3rem !important}.mr-5,.mx-5{margin-right:3rem !important}.mb-5,.my-5{margin-bottom:3rem !important}.ml-5,.mx-5{margin-left:3rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:.25rem !important}.pt-1,.py-1{padding-top:.25rem !important}.pr-1,.px-1{padding-right:.25rem !important}.pb-1,.py-1{padding-bottom:.25rem !important}.pl-1,.px-1{padding-left:.25rem !important}.p-2{padding:.5rem !important}.pt-2,.py-2{padding-top:.5rem !important}.pr-2,.px-2{padding-right:.5rem !important}.pb-2,.py-2{padding-bottom:.5rem !important}.pl-2,.px-2{padding-left:.5rem !important}.p-3{padding:1rem !important}.pt-3,.py-3{padding-top:1rem !important}.pr-3,.px-3{padding-right:1rem !important}.pb-3,.py-3{padding-bottom:1rem !important}.pl-3,.px-3{padding-left:1rem !important}.p-4{padding:1.5rem !important}.pt-4,.py-4{padding-top:1.5rem !important}.pr-4,.px-4{padding-right:1.5rem !important}.pb-4,.py-4{padding-bottom:1.5rem !important}.pl-4,.px-4{padding-left:1.5rem !important}.p-5{padding:3rem !important}.pt-5,.py-5{padding-top:3rem !important}.pr-5,.px-5{padding-right:3rem !important}.pb-5,.py-5{padding-bottom:3rem !important}.pl-5,.px-5{padding-left:3rem !important}.m-n1{margin:-0.25rem !important}.mt-n1,.my-n1{margin-top:-0.25rem !important}.mr-n1,.mx-n1{margin-right:-0.25rem !important}.mb-n1,.my-n1{margin-bottom:-0.25rem !important}.ml-n1,.mx-n1{margin-left:-0.25rem !important}.m-n2{margin:-0.5rem !important}.mt-n2,.my-n2{margin-top:-0.5rem !important}.mr-n2,.mx-n2{margin-right:-0.5rem !important}.mb-n2,.my-n2{margin-bottom:-0.5rem !important}.ml-n2,.mx-n2{margin-left:-0.5rem !important}.m-n3{margin:-1rem !important}.mt-n3,.my-n3{margin-top:-1rem !important}.mr-n3,.mx-n3{margin-right:-1rem !important}.mb-n3,.my-n3{margin-bottom:-1rem !important}.ml-n3,.mx-n3{margin-left:-1rem !important}.m-n4{margin:-1.5rem !important}.mt-n4,.my-n4{margin-top:-1.5rem !important}.mr-n4,.mx-n4{margin-right:-1.5rem !important}.mb-n4,.my-n4{margin-bottom:-1.5rem !important}.ml-n4,.mx-n4{margin-left:-1.5rem !important}.m-n5{margin:-3rem !important}.mt-n5,.my-n5{margin-top:-3rem !important}.mr-n5,.mx-n5{margin-right:-3rem !important}.mb-n5,.my-n5{margin-bottom:-3rem !important}.ml-n5,.mx-n5{margin-left:-3rem !important}.m-auto{margin:auto !important}.mt-auto,.my-auto{margin-top:auto !important}.mr-auto,.mx-auto{margin-right:auto !important}.mb-auto,.my-auto{margin-bottom:auto !important}.ml-auto,.mx-auto{margin-left:auto !important}@media(min-width: 1px){.m-sm-0{margin:0 !important}.mt-sm-0,.my-sm-0{margin-top:0 !important}.mr-sm-0,.mx-sm-0{margin-right:0 !important}.mb-sm-0,.my-sm-0{margin-bottom:0 !important}.ml-sm-0,.mx-sm-0{margin-left:0 !important}.m-sm-1{margin:.25rem !important}.mt-sm-1,.my-sm-1{margin-top:.25rem !important}.mr-sm-1,.mx-sm-1{margin-right:.25rem !important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem !important}.ml-sm-1,.mx-sm-1{margin-left:.25rem !important}.m-sm-2{margin:.5rem !important}.mt-sm-2,.my-sm-2{margin-top:.5rem !important}.mr-sm-2,.mx-sm-2{margin-right:.5rem !important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem !important}.ml-sm-2,.mx-sm-2{margin-left:.5rem !important}.m-sm-3{margin:1rem !important}.mt-sm-3,.my-sm-3{margin-top:1rem !important}.mr-sm-3,.mx-sm-3{margin-right:1rem !important}.mb-sm-3,.my-sm-3{margin-bottom:1rem !important}.ml-sm-3,.mx-sm-3{margin-left:1rem !important}.m-sm-4{margin:1.5rem !important}.mt-sm-4,.my-sm-4{margin-top:1.5rem !important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem !important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem !important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem !important}.m-sm-5{margin:3rem !important}.mt-sm-5,.my-sm-5{margin-top:3rem !important}.mr-sm-5,.mx-sm-5{margin-right:3rem !important}.mb-sm-5,.my-sm-5{margin-bottom:3rem !important}.ml-sm-5,.mx-sm-5{margin-left:3rem !important}.p-sm-0{padding:0 !important}.pt-sm-0,.py-sm-0{padding-top:0 !important}.pr-sm-0,.px-sm-0{padding-right:0 !important}.pb-sm-0,.py-sm-0{padding-bottom:0 !important}.pl-sm-0,.px-sm-0{padding-left:0 !important}.p-sm-1{padding:.25rem !important}.pt-sm-1,.py-sm-1{padding-top:.25rem !important}.pr-sm-1,.px-sm-1{padding-right:.25rem !important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem !important}.pl-sm-1,.px-sm-1{padding-left:.25rem !important}.p-sm-2{padding:.5rem !important}.pt-sm-2,.py-sm-2{padding-top:.5rem !important}.pr-sm-2,.px-sm-2{padding-right:.5rem !important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem !important}.pl-sm-2,.px-sm-2{padding-left:.5rem !important}.p-sm-3{padding:1rem !important}.pt-sm-3,.py-sm-3{padding-top:1rem !important}.pr-sm-3,.px-sm-3{padding-right:1rem !important}.pb-sm-3,.py-sm-3{padding-bottom:1rem !important}.pl-sm-3,.px-sm-3{padding-left:1rem !important}.p-sm-4{padding:1.5rem !important}.pt-sm-4,.py-sm-4{padding-top:1.5rem !important}.pr-sm-4,.px-sm-4{padding-right:1.5rem !important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem !important}.pl-sm-4,.px-sm-4{padding-left:1.5rem !important}.p-sm-5{padding:3rem !important}.pt-sm-5,.py-sm-5{padding-top:3rem !important}.pr-sm-5,.px-sm-5{padding-right:3rem !important}.pb-sm-5,.py-sm-5{padding-bottom:3rem !important}.pl-sm-5,.px-sm-5{padding-left:3rem !important}.m-sm-n1{margin:-0.25rem !important}.mt-sm-n1,.my-sm-n1{margin-top:-0.25rem !important}.mr-sm-n1,.mx-sm-n1{margin-right:-0.25rem !important}.mb-sm-n1,.my-sm-n1{margin-bottom:-0.25rem !important}.ml-sm-n1,.mx-sm-n1{margin-left:-0.25rem !important}.m-sm-n2{margin:-0.5rem !important}.mt-sm-n2,.my-sm-n2{margin-top:-0.5rem !important}.mr-sm-n2,.mx-sm-n2{margin-right:-0.5rem !important}.mb-sm-n2,.my-sm-n2{margin-bottom:-0.5rem !important}.ml-sm-n2,.mx-sm-n2{margin-left:-0.5rem !important}.m-sm-n3{margin:-1rem !important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem !important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem !important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem !important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem !important}.m-sm-n4{margin:-1.5rem !important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem !important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem !important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem !important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem !important}.m-sm-n5{margin:-3rem !important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem !important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem !important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem !important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem !important}.m-sm-auto{margin:auto !important}.mt-sm-auto,.my-sm-auto{margin-top:auto !important}.mr-sm-auto,.mx-sm-auto{margin-right:auto !important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto !important}.ml-sm-auto,.mx-sm-auto{margin-left:auto !important}}@media(min-width: 2px){.m-md-0{margin:0 !important}.mt-md-0,.my-md-0{margin-top:0 !important}.mr-md-0,.mx-md-0{margin-right:0 !important}.mb-md-0,.my-md-0{margin-bottom:0 !important}.ml-md-0,.mx-md-0{margin-left:0 !important}.m-md-1{margin:.25rem !important}.mt-md-1,.my-md-1{margin-top:.25rem !important}.mr-md-1,.mx-md-1{margin-right:.25rem !important}.mb-md-1,.my-md-1{margin-bottom:.25rem !important}.ml-md-1,.mx-md-1{margin-left:.25rem !important}.m-md-2{margin:.5rem !important}.mt-md-2,.my-md-2{margin-top:.5rem !important}.mr-md-2,.mx-md-2{margin-right:.5rem !important}.mb-md-2,.my-md-2{margin-bottom:.5rem !important}.ml-md-2,.mx-md-2{margin-left:.5rem !important}.m-md-3{margin:1rem !important}.mt-md-3,.my-md-3{margin-top:1rem !important}.mr-md-3,.mx-md-3{margin-right:1rem !important}.mb-md-3,.my-md-3{margin-bottom:1rem !important}.ml-md-3,.mx-md-3{margin-left:1rem !important}.m-md-4{margin:1.5rem !important}.mt-md-4,.my-md-4{margin-top:1.5rem !important}.mr-md-4,.mx-md-4{margin-right:1.5rem !important}.mb-md-4,.my-md-4{margin-bottom:1.5rem !important}.ml-md-4,.mx-md-4{margin-left:1.5rem !important}.m-md-5{margin:3rem !important}.mt-md-5,.my-md-5{margin-top:3rem !important}.mr-md-5,.mx-md-5{margin-right:3rem !important}.mb-md-5,.my-md-5{margin-bottom:3rem !important}.ml-md-5,.mx-md-5{margin-left:3rem !important}.p-md-0{padding:0 !important}.pt-md-0,.py-md-0{padding-top:0 !important}.pr-md-0,.px-md-0{padding-right:0 !important}.pb-md-0,.py-md-0{padding-bottom:0 !important}.pl-md-0,.px-md-0{padding-left:0 !important}.p-md-1{padding:.25rem !important}.pt-md-1,.py-md-1{padding-top:.25rem !important}.pr-md-1,.px-md-1{padding-right:.25rem !important}.pb-md-1,.py-md-1{padding-bottom:.25rem !important}.pl-md-1,.px-md-1{padding-left:.25rem !important}.p-md-2{padding:.5rem !important}.pt-md-2,.py-md-2{padding-top:.5rem !important}.pr-md-2,.px-md-2{padding-right:.5rem !important}.pb-md-2,.py-md-2{padding-bottom:.5rem !important}.pl-md-2,.px-md-2{padding-left:.5rem !important}.p-md-3{padding:1rem !important}.pt-md-3,.py-md-3{padding-top:1rem !important}.pr-md-3,.px-md-3{padding-right:1rem !important}.pb-md-3,.py-md-3{padding-bottom:1rem !important}.pl-md-3,.px-md-3{padding-left:1rem !important}.p-md-4{padding:1.5rem !important}.pt-md-4,.py-md-4{padding-top:1.5rem !important}.pr-md-4,.px-md-4{padding-right:1.5rem !important}.pb-md-4,.py-md-4{padding-bottom:1.5rem !important}.pl-md-4,.px-md-4{padding-left:1.5rem !important}.p-md-5{padding:3rem !important}.pt-md-5,.py-md-5{padding-top:3rem !important}.pr-md-5,.px-md-5{padding-right:3rem !important}.pb-md-5,.py-md-5{padding-bottom:3rem !important}.pl-md-5,.px-md-5{padding-left:3rem !important}.m-md-n1{margin:-0.25rem !important}.mt-md-n1,.my-md-n1{margin-top:-0.25rem !important}.mr-md-n1,.mx-md-n1{margin-right:-0.25rem !important}.mb-md-n1,.my-md-n1{margin-bottom:-0.25rem !important}.ml-md-n1,.mx-md-n1{margin-left:-0.25rem !important}.m-md-n2{margin:-0.5rem !important}.mt-md-n2,.my-md-n2{margin-top:-0.5rem !important}.mr-md-n2,.mx-md-n2{margin-right:-0.5rem !important}.mb-md-n2,.my-md-n2{margin-bottom:-0.5rem !important}.ml-md-n2,.mx-md-n2{margin-left:-0.5rem !important}.m-md-n3{margin:-1rem !important}.mt-md-n3,.my-md-n3{margin-top:-1rem !important}.mr-md-n3,.mx-md-n3{margin-right:-1rem !important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem !important}.ml-md-n3,.mx-md-n3{margin-left:-1rem !important}.m-md-n4{margin:-1.5rem !important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem !important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem !important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem !important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem !important}.m-md-n5{margin:-3rem !important}.mt-md-n5,.my-md-n5{margin-top:-3rem !important}.mr-md-n5,.mx-md-n5{margin-right:-3rem !important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem !important}.ml-md-n5,.mx-md-n5{margin-left:-3rem !important}.m-md-auto{margin:auto !important}.mt-md-auto,.my-md-auto{margin-top:auto !important}.mr-md-auto,.mx-md-auto{margin-right:auto !important}.mb-md-auto,.my-md-auto{margin-bottom:auto !important}.ml-md-auto,.mx-md-auto{margin-left:auto !important}}@media(min-width: 3px){.m-lg-0{margin:0 !important}.mt-lg-0,.my-lg-0{margin-top:0 !important}.mr-lg-0,.mx-lg-0{margin-right:0 !important}.mb-lg-0,.my-lg-0{margin-bottom:0 !important}.ml-lg-0,.mx-lg-0{margin-left:0 !important}.m-lg-1{margin:.25rem !important}.mt-lg-1,.my-lg-1{margin-top:.25rem !important}.mr-lg-1,.mx-lg-1{margin-right:.25rem !important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem !important}.ml-lg-1,.mx-lg-1{margin-left:.25rem !important}.m-lg-2{margin:.5rem !important}.mt-lg-2,.my-lg-2{margin-top:.5rem !important}.mr-lg-2,.mx-lg-2{margin-right:.5rem !important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem !important}.ml-lg-2,.mx-lg-2{margin-left:.5rem !important}.m-lg-3{margin:1rem !important}.mt-lg-3,.my-lg-3{margin-top:1rem !important}.mr-lg-3,.mx-lg-3{margin-right:1rem !important}.mb-lg-3,.my-lg-3{margin-bottom:1rem !important}.ml-lg-3,.mx-lg-3{margin-left:1rem !important}.m-lg-4{margin:1.5rem !important}.mt-lg-4,.my-lg-4{margin-top:1.5rem !important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem !important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem !important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem !important}.m-lg-5{margin:3rem !important}.mt-lg-5,.my-lg-5{margin-top:3rem !important}.mr-lg-5,.mx-lg-5{margin-right:3rem !important}.mb-lg-5,.my-lg-5{margin-bottom:3rem !important}.ml-lg-5,.mx-lg-5{margin-left:3rem !important}.p-lg-0{padding:0 !important}.pt-lg-0,.py-lg-0{padding-top:0 !important}.pr-lg-0,.px-lg-0{padding-right:0 !important}.pb-lg-0,.py-lg-0{padding-bottom:0 !important}.pl-lg-0,.px-lg-0{padding-left:0 !important}.p-lg-1{padding:.25rem !important}.pt-lg-1,.py-lg-1{padding-top:.25rem !important}.pr-lg-1,.px-lg-1{padding-right:.25rem !important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem !important}.pl-lg-1,.px-lg-1{padding-left:.25rem !important}.p-lg-2{padding:.5rem !important}.pt-lg-2,.py-lg-2{padding-top:.5rem !important}.pr-lg-2,.px-lg-2{padding-right:.5rem !important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem !important}.pl-lg-2,.px-lg-2{padding-left:.5rem !important}.p-lg-3{padding:1rem !important}.pt-lg-3,.py-lg-3{padding-top:1rem !important}.pr-lg-3,.px-lg-3{padding-right:1rem !important}.pb-lg-3,.py-lg-3{padding-bottom:1rem !important}.pl-lg-3,.px-lg-3{padding-left:1rem !important}.p-lg-4{padding:1.5rem !important}.pt-lg-4,.py-lg-4{padding-top:1.5rem !important}.pr-lg-4,.px-lg-4{padding-right:1.5rem !important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem !important}.pl-lg-4,.px-lg-4{padding-left:1.5rem !important}.p-lg-5{padding:3rem !important}.pt-lg-5,.py-lg-5{padding-top:3rem !important}.pr-lg-5,.px-lg-5{padding-right:3rem !important}.pb-lg-5,.py-lg-5{padding-bottom:3rem !important}.pl-lg-5,.px-lg-5{padding-left:3rem !important}.m-lg-n1{margin:-0.25rem !important}.mt-lg-n1,.my-lg-n1{margin-top:-0.25rem !important}.mr-lg-n1,.mx-lg-n1{margin-right:-0.25rem !important}.mb-lg-n1,.my-lg-n1{margin-bottom:-0.25rem !important}.ml-lg-n1,.mx-lg-n1{margin-left:-0.25rem !important}.m-lg-n2{margin:-0.5rem !important}.mt-lg-n2,.my-lg-n2{margin-top:-0.5rem !important}.mr-lg-n2,.mx-lg-n2{margin-right:-0.5rem !important}.mb-lg-n2,.my-lg-n2{margin-bottom:-0.5rem !important}.ml-lg-n2,.mx-lg-n2{margin-left:-0.5rem !important}.m-lg-n3{margin:-1rem !important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem !important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem !important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem !important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem !important}.m-lg-n4{margin:-1.5rem !important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem !important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem !important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem !important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem !important}.m-lg-n5{margin:-3rem !important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem !important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem !important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem !important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem !important}.m-lg-auto{margin:auto !important}.mt-lg-auto,.my-lg-auto{margin-top:auto !important}.mr-lg-auto,.mx-lg-auto{margin-right:auto !important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto !important}.ml-lg-auto,.mx-lg-auto{margin-left:auto !important}}@media(min-width: 4px){.m-xl-0{margin:0 !important}.mt-xl-0,.my-xl-0{margin-top:0 !important}.mr-xl-0,.mx-xl-0{margin-right:0 !important}.mb-xl-0,.my-xl-0{margin-bottom:0 !important}.ml-xl-0,.mx-xl-0{margin-left:0 !important}.m-xl-1{margin:.25rem !important}.mt-xl-1,.my-xl-1{margin-top:.25rem !important}.mr-xl-1,.mx-xl-1{margin-right:.25rem !important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem !important}.ml-xl-1,.mx-xl-1{margin-left:.25rem !important}.m-xl-2{margin:.5rem !important}.mt-xl-2,.my-xl-2{margin-top:.5rem !important}.mr-xl-2,.mx-xl-2{margin-right:.5rem !important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem !important}.ml-xl-2,.mx-xl-2{margin-left:.5rem !important}.m-xl-3{margin:1rem !important}.mt-xl-3,.my-xl-3{margin-top:1rem !important}.mr-xl-3,.mx-xl-3{margin-right:1rem !important}.mb-xl-3,.my-xl-3{margin-bottom:1rem !important}.ml-xl-3,.mx-xl-3{margin-left:1rem !important}.m-xl-4{margin:1.5rem !important}.mt-xl-4,.my-xl-4{margin-top:1.5rem !important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem !important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem !important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem !important}.m-xl-5{margin:3rem !important}.mt-xl-5,.my-xl-5{margin-top:3rem !important}.mr-xl-5,.mx-xl-5{margin-right:3rem !important}.mb-xl-5,.my-xl-5{margin-bottom:3rem !important}.ml-xl-5,.mx-xl-5{margin-left:3rem !important}.p-xl-0{padding:0 !important}.pt-xl-0,.py-xl-0{padding-top:0 !important}.pr-xl-0,.px-xl-0{padding-right:0 !important}.pb-xl-0,.py-xl-0{padding-bottom:0 !important}.pl-xl-0,.px-xl-0{padding-left:0 !important}.p-xl-1{padding:.25rem !important}.pt-xl-1,.py-xl-1{padding-top:.25rem !important}.pr-xl-1,.px-xl-1{padding-right:.25rem !important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem !important}.pl-xl-1,.px-xl-1{padding-left:.25rem !important}.p-xl-2{padding:.5rem !important}.pt-xl-2,.py-xl-2{padding-top:.5rem !important}.pr-xl-2,.px-xl-2{padding-right:.5rem !important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem !important}.pl-xl-2,.px-xl-2{padding-left:.5rem !important}.p-xl-3{padding:1rem !important}.pt-xl-3,.py-xl-3{padding-top:1rem !important}.pr-xl-3,.px-xl-3{padding-right:1rem !important}.pb-xl-3,.py-xl-3{padding-bottom:1rem !important}.pl-xl-3,.px-xl-3{padding-left:1rem !important}.p-xl-4{padding:1.5rem !important}.pt-xl-4,.py-xl-4{padding-top:1.5rem !important}.pr-xl-4,.px-xl-4{padding-right:1.5rem !important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem !important}.pl-xl-4,.px-xl-4{padding-left:1.5rem !important}.p-xl-5{padding:3rem !important}.pt-xl-5,.py-xl-5{padding-top:3rem !important}.pr-xl-5,.px-xl-5{padding-right:3rem !important}.pb-xl-5,.py-xl-5{padding-bottom:3rem !important}.pl-xl-5,.px-xl-5{padding-left:3rem !important}.m-xl-n1{margin:-0.25rem !important}.mt-xl-n1,.my-xl-n1{margin-top:-0.25rem !important}.mr-xl-n1,.mx-xl-n1{margin-right:-0.25rem !important}.mb-xl-n1,.my-xl-n1{margin-bottom:-0.25rem !important}.ml-xl-n1,.mx-xl-n1{margin-left:-0.25rem !important}.m-xl-n2{margin:-0.5rem !important}.mt-xl-n2,.my-xl-n2{margin-top:-0.5rem !important}.mr-xl-n2,.mx-xl-n2{margin-right:-0.5rem !important}.mb-xl-n2,.my-xl-n2{margin-bottom:-0.5rem !important}.ml-xl-n2,.mx-xl-n2{margin-left:-0.5rem !important}.m-xl-n3{margin:-1rem !important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem !important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem !important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem !important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem !important}.m-xl-n4{margin:-1.5rem !important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem !important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem !important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem !important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem !important}.m-xl-n5{margin:-3rem !important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem !important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem !important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem !important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem !important}.m-xl-auto{margin:auto !important}.mt-xl-auto,.my-xl-auto{margin-top:auto !important}.mr-xl-auto,.mx-xl-auto{margin-right:auto !important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto !important}.ml-xl-auto,.mx-xl-auto{margin-left:auto !important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace,.totp .totp-code{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace !important}.text-justify{text-align:justify !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}@media(min-width: 1px){.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}.text-sm-center{text-align:center !important}}@media(min-width: 2px){.text-md-left{text-align:left !important}.text-md-right{text-align:right !important}.text-md-center{text-align:center !important}}@media(min-width: 3px){.text-lg-left{text-align:left !important}.text-lg-right{text-align:right !important}.text-lg-center{text-align:center !important}}@media(min-width: 4px){.text-xl-left{text-align:left !important}.text-xl-right{text-align:right !important}.text-xl-center{text-align:center !important}}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.font-weight-light{font-weight:300 !important}.font-weight-lighter{font-weight:lighter !important}.font-weight-normal{font-weight:400 !important}.font-weight-bold{font-weight:700 !important}.font-weight-bolder{font-weight:bolder !important}.font-italic{font-style:italic !important}.text-white{color:#fff !important}.text-primary{color:#175ddc !important}a.text-primary:hover,a.text-primary:focus{color:#104097 !important}.text-secondary{color:#ced4da !important}a.text-secondary:hover,a.text-secondary:focus{color:#a2aeb9 !important}.text-success{color:#00a65a !important}a.text-success:hover,a.text-success:focus{color:#005a31 !important}.text-info{color:#555 !important}a.text-info:hover,a.text-info:focus{color:#2f2f2f !important}.text-warning{color:#bf7e16 !important}a.text-warning:hover,a.text-warning:focus{color:#7a510e !important}.text-danger{color:#dd4b39 !important}a.text-danger:hover,a.text-danger:focus{color:#ac2d1e !important}.text-light{color:#f8f9fa !important}a.text-light:hover,a.text-light:focus{color:#cbd3da !important}.text-dark{color:#343a40 !important}a.text-dark:hover,a.text-dark:focus{color:#121416 !important}.text-primary-accent{color:#1252a3 !important}a.text-primary-accent:hover,a.text-primary-accent:focus{color:#0a2f5e !important}.text-secondary-alt{color:#1a3b66 !important}a.text-secondary-alt:hover,a.text-secondary-alt:focus{color:#0a1829 !important}.text-body{color:#333 !important}.text-muted,.card-header small,.modal-header small{color:#6c757d !important}.text-black-50{color:rgba(0,0,0,.5) !important}.text-white-50{color:rgba(255,255,255,.5) !important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none !important}.text-break{word-break:break-word !important;word-wrap:break-word !important}.text-reset{color:inherit !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media print{*,*::before,*::after{text-shadow:none !important;box-shadow:none !important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap !important}pre,blockquote{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:3px !important}.container{min-width:3px !important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #dee2e6 !important}.table-dark{color:inherit}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}/*! + * 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:"FontAwesome";src:url(../fonts/fontawesome-webfont.eot);src:url(../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0) format("embedded-opentype"),url(../fonts/fontawesome-webfont.woff2) format("woff2"),url(../fonts/fontawesome-webfont.woff) format("woff"),url(../fonts/fontawesome-webfont.ttf) format("truetype"),url(../fonts/fontawesome-webfont.svg#fontawesomeregular) format("svg");font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857em;text-align:center}.fa-ul{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.fa-li.fa-lg{left:-1.8571428571em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-tv:before,.fa-television:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:""}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-signing:before,.fa-sign-language:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-vcard:before,.fa-address-card:before{content:""}.fa-vcard-o:before,.fa-address-card-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only,.table.table-list tr:not(:hover) td.table-list-options>.dropdown:not(.show) button:not(:focus):not(:active),.table.table-list tr:not(:hover) td.table-list-options>button:not(:focus):not(:active){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.toast{display:flex;flex-direction:row;align-content:center;justify-content:center;position:relative;background-color:#030303}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-wait{background-color:#2f96b4}.toast-warning{background-color:#f89406}.icon-success{background-repeat:no-repeat;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important}.icon-error{background-repeat:no-repeat;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important}.icon-info{background-repeat:no-repeat;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=") !important}.icon-wait{background-repeat:no-repeat;background-image:url("data:image/gif;base64,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") !important}.icon-warning{background-repeat:no-repeat;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important}.toaster-icon{font-weight:normal;color:#fff}.toast-content{flex-grow:1;padding:15px 15px 15px 50px}.toast-title{font-weight:bold}.toast-message{word-wrap:break-word}.toast-message a,.toast-message label{color:#fff}.toast-message a:hover{color:#ccc;text-decoration:none}.toast-close-button,button.toast-close-button{align-self:flex-start;padding:3px;font-size:23px;line-height:90%;font-weight:bold;color:#fff;text-shadow:0 1px 0 #fff;opacity:.7;z-index:999;cursor:pointer;background:transparent;border:0}.toast-close-button:hover,.toast-close-button:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;border:none}.toast-close-button span{display:flex;flex-direction:column;align-items:flex-start}.toast-progress-bar{position:absolute;left:0;bottom:0;height:4px;background-color:#000;opacity:.4}.toast-container{position:fixed;z-index:999999;pointer-events:auto}.toast-container.toast-center,.toast-container.toast-top-center,.toast-container.toast-bottom-center{width:100%;pointer-events:none;left:0;right:0}.toast-container.toast-center>div,.toast-container.toast-top-center>div,.toast-container.toast-bottom-center>div{margin:6px auto;pointer-events:auto}.toast-container.toast-center>button,.toast-container.toast-top-center>button,.toast-container.toast-bottom-center>button{pointer-events:auto}.toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.toast-container>div{margin:0 0 6px;width:300px;border-radius:3px 3px 3px 3px;background-position:15px center;background-repeat:no-repeat;box-shadow:0 0 12px #999;color:#fff;opacity:.8}.toast-container>:hover{box-shadow:0 0 12px #000;opacity:1;cursor:pointer}.toast-container.toast-top-full-width>div,.toast-container.toast-bottom-full-width>div{width:96%;margin:auto}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-center{top:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-center{bottom:12px}.toast-bottom-left{bottom:12px;left:12px}.toast-center{top:45%}.swal2-popup.swal2-toast{flex-direction:column;align-items:stretch;width:auto;padding:1.25em;overflow-y:hidden;background:#fff;box-shadow:0 0 .625em #d9d9d9}.swal2-popup.swal2-toast .swal2-header{flex-direction:row;padding:0}.swal2-popup.swal2-toast .swal2-title{flex-grow:1;justify-content:flex-start;margin:0 .625em;font-size:1em}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.3125em auto;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{position:static;width:.8em;height:.8em;line-height:.8}.swal2-popup.swal2-toast .swal2-content{justify-content:flex-start;margin:0 .625em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container{padding:.625em 0 0}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-icon{width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}@media all and (-ms-high-contrast: none),(-ms-high-contrast: active){.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{font-size:.25em}}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{flex:1;flex-basis:auto !important;align-self:stretch;width:auto;height:2.2em;height:auto;margin:0 .3125em;margin-top:.3125em;padding:0}.swal2-popup.swal2-toast .swal2-styled{margin:.125em .3125em;padding:.3125em .625em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(100,150,200,.5)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.8em;left:-0.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{animation:swal2-toast-hide .1s forwards}.swal2-container{display:flex;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;flex-direction:row;align-items:center;justify-content:center;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:transparent !important}.swal2-container.swal2-top{align-items:flex-start}.swal2-container.swal2-top-start,.swal2-container.swal2-top-left{align-items:flex-start;justify-content:flex-start}.swal2-container.swal2-top-end,.swal2-container.swal2-top-right{align-items:flex-start;justify-content:flex-end}.swal2-container.swal2-center{align-items:center}.swal2-container.swal2-center-start,.swal2-container.swal2-center-left{align-items:center;justify-content:flex-start}.swal2-container.swal2-center-end,.swal2-container.swal2-center-right{align-items:center;justify-content:flex-end}.swal2-container.swal2-bottom{align-items:flex-end}.swal2-container.swal2-bottom-start,.swal2-container.swal2-bottom-left{align-items:flex-end;justify-content:flex-start}.swal2-container.swal2-bottom-end,.swal2-container.swal2-bottom-right{align-items:flex-end;justify-content:flex-end}.swal2-container.swal2-bottom>:first-child,.swal2-container.swal2-bottom-start>:first-child,.swal2-container.swal2-bottom-left>:first-child,.swal2-container.swal2-bottom-end>:first-child,.swal2-container.swal2-bottom-right>:first-child{margin-top:auto}.swal2-container.swal2-grow-fullscreen>.swal2-modal{display:flex !important;flex:1;align-self:stretch;justify-content:center}.swal2-container.swal2-grow-row>.swal2-modal{display:flex !important;flex:1;align-content:center;justify-content:center}.swal2-container.swal2-grow-column{flex:1;flex-direction:column}.swal2-container.swal2-grow-column.swal2-top,.swal2-container.swal2-grow-column.swal2-center,.swal2-container.swal2-grow-column.swal2-bottom{align-items:center}.swal2-container.swal2-grow-column.swal2-top-start,.swal2-container.swal2-grow-column.swal2-center-start,.swal2-container.swal2-grow-column.swal2-bottom-start,.swal2-container.swal2-grow-column.swal2-top-left,.swal2-container.swal2-grow-column.swal2-center-left,.swal2-container.swal2-grow-column.swal2-bottom-left{align-items:flex-start}.swal2-container.swal2-grow-column.swal2-top-end,.swal2-container.swal2-grow-column.swal2-center-end,.swal2-container.swal2-grow-column.swal2-bottom-end,.swal2-container.swal2-grow-column.swal2-top-right,.swal2-container.swal2-grow-column.swal2-center-right,.swal2-container.swal2-grow-column.swal2-bottom-right{align-items:flex-end}.swal2-container.swal2-grow-column>.swal2-modal{display:flex !important;flex:1;align-content:center;justify-content:center}.swal2-container.swal2-no-transition{transition:none !important}.swal2-container:not(.swal2-top):not(.swal2-top-start):not(.swal2-top-end):not(.swal2-top-left):not(.swal2-top-right):not(.swal2-center-start):not(.swal2-center-end):not(.swal2-center-left):not(.swal2-center-right):not(.swal2-bottom):not(.swal2-bottom-start):not(.swal2-bottom-end):not(.swal2-bottom-left):not(.swal2-bottom-right):not(.swal2-grow-fullscreen)>.swal2-modal{margin:auto}@media all and (-ms-high-contrast: none),(-ms-high-contrast: active){.swal2-container .swal2-modal{margin:0 !important}}.swal2-popup{display:none;position:relative;box-sizing:border-box;flex-direction:column;justify-content:center;width:32em;max-width:100%;padding:1.25em;border:none;border-radius:5px;background:#fff;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:none}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-header{display:flex;flex-direction:column;align-items:center;padding:0 1.8em}.swal2-title{position:relative;max-width:100%;margin:0 0 .4em;padding:0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:100%;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:.625em 1.1em;box-shadow:none;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#2778c4;color:#fff;font-size:1em}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#d14529;color:#fff;font-size:1em}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#757575;color:#fff;font-size:1em}.swal2-styled:focus{outline:none;box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1.25em 0 0;padding:1em 0 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;height:.25em;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:1.25em auto}.swal2-close{position:absolute;z-index:2;top:0;right:0;align-items:center;justify-content:center;width:1.2em;height:1.2em;padding:0;overflow:hidden;transition:color .1s ease-out;border:none;border-radius:5px;background:transparent;color:#ccc;font-family:serif;font-size:2.5em;line-height:1.2;cursor:pointer}.swal2-close:hover{transform:none;background:transparent;color:#f27474}.swal2-close:focus{outline:none;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-content{z-index:1;justify-content:center;margin:0;padding:0 1.6em;color:#545454;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;word-wrap:break-word}.swal2-input,.swal2-file,.swal2-textarea,.swal2-select,.swal2-radio,.swal2-checkbox{margin:1em auto}.swal2-input,.swal2-file,.swal2-textarea{box-sizing:border-box;width:100%;transition:border-color .3s,box-shadow .3s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06);color:inherit;font-size:1.125em}.swal2-input.swal2-inputerror,.swal2-file.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}.swal2-input:focus,.swal2-file:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:none;box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-input::placeholder,.swal2-file::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em auto;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-input[type=number]{max-width:10em}.swal2-file{background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-radio,.swal2-checkbox{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-radio label,.swal2-checkbox label{margin:0 .6em;font-size:1.125em}.swal2-radio input,.swal2-checkbox input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto}.swal2-validation-message{align-items:center;justify-content:center;margin:0 -2.7em;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:"!";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:1.25em auto 1.875em;border:0.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-0.25em;left:-0.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:0 0 1.25em;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{animation:swal2-show .3s}.swal2-hide{animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{right:auto;left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@supports(-ms-accelerator: true){.swal2-range input{width:100% !important}.swal2-range output{display:none}}@media all and (-ms-high-contrast: none),(-ms-high-contrast: active){.swal2-range input{width:100% !important}.swal2-range output{display:none}}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-0.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-show{0%{transform:scale(0.7)}45%{transform:scale(1.05)}80%{transform:scale(0.95)}100%{transform:scale(1)}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(0.5);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-0.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-0.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{top:auto;right:auto;bottom:auto;left:auto;max-width:calc(100% - 0.625em * 2);background-color:transparent !important}body.swal2-no-backdrop .swal2-container>.swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}body.swal2-no-backdrop .swal2-container.swal2-top{top:0;left:50%;transform:translateX(-50%)}body.swal2-no-backdrop .swal2-container.swal2-top-start,body.swal2-no-backdrop .swal2-container.swal2-top-left{top:0;left:0}body.swal2-no-backdrop .swal2-container.swal2-top-end,body.swal2-no-backdrop .swal2-container.swal2-top-right{top:0;right:0}body.swal2-no-backdrop .swal2-container.swal2-center{top:50%;left:50%;transform:translate(-50%, -50%)}body.swal2-no-backdrop .swal2-container.swal2-center-start,body.swal2-no-backdrop .swal2-container.swal2-center-left{top:50%;left:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-container.swal2-center-end,body.swal2-no-backdrop .swal2-container.swal2-center-right{top:50%;right:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-container.swal2-bottom{bottom:0;left:50%;transform:translateX(-50%)}body.swal2-no-backdrop .swal2-container.swal2-bottom-start,body.swal2-no-backdrop .swal2-container.swal2-bottom-left{bottom:0;left:0}body.swal2-no-backdrop .swal2-container.swal2-bottom-end,body.swal2-no-backdrop .swal2-container.swal2-bottom-right{right:0;bottom:0}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static !important}}body.swal2-toast-shown .swal2-container{background-color:transparent}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}.toast-container.toast-top-right{top:76px}.toast-container .toast-close-button{margin-right:4px;font-size:18px}.toast-container .toast{opacity:1 !important;background-image:none !important;border-radius:.25rem;box-shadow:0 0 8px rgba(0,0,0,.35);display:flex;align-items:center}.toast-container .toast:hover{box-shadow:0 0 10px rgba(0,0,0,.6)}.toast-container .toast:before{font-family:FontAwesome;font-size:25px;line-height:20px;float:left;color:#fff;margin:auto 0 auto 15px}.toast-container .toast .toast-content{padding:15px}.toast-container .toast .toaster-icon{display:none}.toast-container .toast .toast-message p{margin-bottom:.5rem}.toast-container .toast .toast-message p:last-child{margin-bottom:0}.toast-container .toast.toast-danger,.toast-container .toast.toast-error{background-image:none !important;background-color:#dd4b39}.toast-container .toast.toast-danger:before,.toast-container .toast.toast-error:before{content:""}.toast-container .toast.toast-warning{background-image:none !important;background-color:#bf7e16}.toast-container .toast.toast-warning:before{content:""}.toast-container .toast.toast-info{background-image:none !important;background-color:#555}.toast-container .toast.toast-info:before{content:""}.toast-container .toast.toast-success{background-image:none !important;background-color:#00a65a}.toast-container .toast.toast-success:before{content:""}.swal2-container{background-color:rgba(0,0,0,.3)}.swal2-popup{padding:15px 0 0;background-color:#fff;color:#333;border:1px solid #9a9a9a;border-radius:.3rem;width:34em}.swal2-popup .swal2-header{padding:0 15px}.swal2-popup .swal2-icon{margin:0 auto;width:auto;height:auto;border:none}.swal2-popup .swal2-content{padding-bottom:15px;font-size:1rem;border-bottom:1px solid #dee2e6}.swal2-popup i.swal-custom-icon{display:block;margin:0 auto;font-size:35px}.swal2-popup .swal2-title{padding:10px 0 15px;margin:0;font-size:1.15rem;color:#333}.swal2-popup .swal2-content{font-size:1rem;color:#333;padding:0 15px 15px}.swal2-popup .swal2-actions{padding:15px;margin:0;background-color:#fbfbfb;border-radius:.3rem;display:flex;flex-direction:row;justify-content:flex-start;font-size:1rem}.swal2-popup .swal2-actions button{margin-right:10px}.swal2-popup .swal2-actions button.swal2-confirm{font-weight:bold}.swal2-popup .swal2-actions button.swal2-cancel{background-color:#fff}.swal2-popup .swal2-validation-message{margin:0 -15px}date-input-polyfill[data-open=true]{z-index:10000 !important}html{font-size:14px}body{min-width:1010px}body.layout_frontend{background-color:#ecf0f5}body.full-width:not(.layout_frontend) .container{min-width:980px;width:90%}.page-header,.secondary-header{border-bottom:1px solid #dee2e6;padding-bottom:.6rem;margin-bottom:.5rem}.page-header h1,.page-header h2,.page-header h3,.page-header h4,.secondary-header h1,.secondary-header h2,.secondary-header h3,.secondary-header h4{margin:0}h1 small,h2 small,h3 small,h4 small,h5 small{font-size:80%}input:required,select:required,textarea:required{box-shadow:none}.secondary-header,.spaced-header{margin-top:4rem}.navbar{padding-left:0;padding-right:0}.navbar .dropdown-menu{min-width:200px;max-width:300px}.navbar .dropdown-menu .dropdown-item-text{line-height:1.3}.navbar .dropdown-menu .dropdown-item-text span,.navbar .dropdown-menu .dropdown-item-text small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.navbar .nav-link{font-weight:600}.navbar-brand{margin-top:-20px;margin-bottom:-20px}.dropdown-menu button{cursor:pointer}.container{width:980px;max-width:none !important;margin:0 auto;padding:0}.page-content{margin-top:20px}.footer{margin-top:40px;padding:40px 0 40px 0;border-top:1px solid #dee2e6}.list-group-item.active{border-left:3px solid #175ddc;font-weight:bold;padding-left:calc(1.25rem - 3px)}.card-header,.modal-header{font-weight:bold;text-transform:uppercase}.card-header small,.modal-header small{font-weight:normal;text-transform:none}.card-body-header{font-size:1.15rem}.card ul.fa-ul.card-ul{margin-left:1.9em}.card ul.fa-ul.card-ul li{word-break:break-all}.card ul.fa-ul.card-ul .fa-li{top:4px}.card ul.fa-ul.card-ul.carets{margin-left:1.1em}.card ul.fa-ul.card-ul.carets .fa-li{left:-17px;width:1.1em}.card ul.fa-ul.card-ul ul.carets{margin-left:.85em}.card-org-plans h2{font-size:1.15rem}.modal-dialog{width:500px}.modal-sm{width:300px}.modal-lg{width:800px}.modal-body h3,.modal-body .section-header>*{font-weight:normal;text-transform:uppercase;color:#6c757d}.modal .list-group-flush :first-child{border-top:none}.modal .list-group-flush :last-child{border-bottom:none}.modal-footer{justify-content:flex-start;background-color:#fbfbfb;border-radius:.3rem}label:not(.form-check-label):not(.btn),label.bold{font-weight:600}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:searchfield-cancel-button}.btn[class*=btn-outline-]:not(:hover),.swal2-popup .swal2-actions button[class*=btn-outline-]:not(:hover){border-color:#ced4da;background-color:#fbfbfb}.btn-link:focus,.btn-link.focus{outline-color:-webkit-focus-ring-color;outline-offset:1px;outline-style:auto;outline-width:1px}.btn-outline-secondary,.swal2-popup .swal2-actions button.swal2-cancel{color:#6c757d}.btn-outline-secondary:hover:not(:disabled),.swal2-popup .swal2-actions button.swal2-cancel:hover:not(:disabled){color:#333}.btn-outline-secondary:disabled,.swal2-popup .swal2-actions button.swal2-cancel:disabled{opacity:1}.btn-outline-secondary:focus,.swal2-popup .swal2-actions button.swal2-cancel:focus,.btn-outline-secondary.focus,.swal2-popup .swal2-actions button.focus.swal2-cancel{box-shadow:0 0 0 .2rem rgba(58,117,225,.5)}.btn-submit{position:relative}.btn-submit .fa-spinner{position:absolute;display:none;align-items:center;justify-content:center;bottom:0;top:0;left:0;right:0}.btn-submit:disabled:not(.manual) .fa-spinner,.btn-submit.loading .fa-spinner{display:flex}.btn-submit:disabled:not(.manual) span,.btn-submit.loading span{visibility:hidden}.list-group-item:focus,.list-group-item.focus{z-index:100}.fa-icon-above-input{height:1.5em}.table.table-list thead th{border-top:none}.table.table-list tr:first-child td{border:none}.table.table-list td{vertical-align:middle}.table.table-list td.reduced-lh{line-height:1}.table.table-list td.reduced-lh small{font-size:80%}.table.table-list td small,.table.table-list td>.fa,.table.table-list td .icon{color:#6c757d}.table.table-list td.wrap{word-break:break-all}.table.table-list td.table-list-options{width:76px;max-width:76px;text-align:right;height:50px}.table.table-list td.table-list-options.wider{width:100px;max-width:100px}.table.table-list td.table-list-options .btn,.table.table-list td.table-list-options .swal2-popup .swal2-actions button,.swal2-popup .swal2-actions .table.table-list td.table-list-options button{line-height:1;transition:initial}.table.table-list td.table-list-options .dropdown-menu{line-height:1.5}.table.table-list td.table-list-icon{width:45px;max-width:45px;text-align:center}.table.table-list td.table-list-icon img{max-height:24px}.table.table-list td.table-list-checkbox{width:35px;max-width:35px}.table.table-list td.table-list-strike{color:#6c757d;text-decoration:line-through}.text-lg{font-size:1.15rem}.text-strike{text-decoration:line-through}.font-weight-semibold{font-weight:600}.password-wrapper{word-break:break-all;white-space:pre-wrap;min-width:0}.password-row{min-width:0}.password-number{color:#007fde}.password-special{color:#c40800}app-vault-groupings .card #search,app-org-vault-groupings .card #search,.groupings .card #search{margin-bottom:1rem}app-vault-groupings .card h3,app-org-vault-groupings .card h3,.groupings .card h3{font-weight:normal;text-transform:uppercase;color:#6c757d}app-vault-groupings .card ul:last-child,app-org-vault-groupings .card ul:last-child,.groupings .card ul:last-child{margin-bottom:0}app-vault-groupings .card .card-body a,app-org-vault-groupings .card .card-body a,.groupings .card .card-body a{color:#333}app-vault-groupings .card .card-body a:hover.text-muted,app-org-vault-groupings .card .card-body a:hover.text-muted,.groupings .card .card-body a:hover.text-muted{color:#333 !important}app-vault-groupings .card .show-active,app-org-vault-groupings .card .show-active,.groupings .card .show-active{display:none}app-vault-groupings .card li>.fa,app-vault-groupings .card li>div>.fa,app-org-vault-groupings .card li>.fa,app-org-vault-groupings .card li>div>.fa,.groupings .card li>.fa,.groupings .card li>div>.fa{cursor:pointer}app-vault-groupings .card li.active>.show-active,app-vault-groupings .card li.active>div .show-active,app-org-vault-groupings .card li.active>.show-active,app-org-vault-groupings .card li.active>div .show-active,.groupings .card li.active>.show-active,.groupings .card li.active>div .show-active{display:inline}app-vault-groupings .card li.active>a:first-of-type,app-vault-groupings .card li.active>div a:first-of-type,app-org-vault-groupings .card li.active>a:first-of-type,app-org-vault-groupings .card li.active>div a:first-of-type,.groupings .card li.active>a:first-of-type,.groupings .card li.active>div a:first-of-type{font-weight:bold;color:#175ddc}app-vault-groupings .card li.active>.fa,app-vault-groupings .card li.active>div>.fa,app-org-vault-groupings .card li.active>.fa,app-org-vault-groupings .card li.active>div>.fa,.groupings .card li.active>.fa,.groupings .card li.active>div>.fa{color:#175ddc}app-password-generator #lengthRange{width:100%}app-password-generator .card-password .card-body{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;text-align:center;font-size:1.15rem;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}app-password-generator-history .list-group-item{line-height:1}app-password-generator-history .list-group-item .password{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}app-import textarea{height:150px}app-user-billing .progress{height:20px}app-user-billing .progress .progress-bar{min-width:50px}#duo-frame{background:url(../images/loading.svg) 0 0 no-repeat;height:330px}#duo-frame iframe{width:100%;height:100%;border:none}#web-authn-frame{background:url(../images/loading.svg) 0 0 no-repeat;height:290px}#web-authn-frame iframe{width:100%;height:100%;border:none}#bt-dropin-container{background:url(../images/loading.svg) 0 0 no-repeat;min-height:50px}.braintree-placeholder,.braintree-sheet__header{display:none}.braintree-sheet__content--button{text-align:left;padding:0;min-height:0}.braintree-sheet__container{margin-bottom:0}.braintree-sheet{border:none}.totp .totp-code{font-size:1.2rem}.totp .totp-countdown{margin:3px 3px 0 0;display:block;user-select:none}.totp .totp-countdown .totp-sec{font-size:.85em;position:absolute;line-height:32px;width:32px;text-align:center}.totp .totp-countdown svg{width:32px;height:32px;transform:rotate(-90deg)}.totp .totp-countdown .totp-circle{fill:none;stroke:#175ddc}.totp .totp-countdown .totp-circle.inner{stroke-width:3;stroke-dasharray:78.6;stroke-dashoffset:0}.totp .totp-countdown .totp-circle.outer{stroke-width:2;stroke-dasharray:88;stroke-dashoffset:0}.totp>.align-items-center{margin-bottom:-5px}.totp.low .totp-sec,.totp.low .totp-code{color:#dd4b39}.totp.low .totp-circle{stroke:#dd4b39}.callout{padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid rgba(0,0,0,.125);border-left-width:5px;border-radius:calc(0.25rem - 1px);background-color:#fafafa}.callout .callout-heading{margin-top:0}.callout h3.callout-heading{font-weight:bold;text-transform:uppercase}.callout.callout-primary{border-left-color:#175ddc}.callout.callout-primary .callout-heading{color:#175ddc}.callout.callout-info{border-left-color:#343a40}.callout.callout-info .callout-heading{color:#343a40}.callout.callout-danger{border-left-color:#dd4b39}.callout.callout-danger .callout-heading{color:#dd4b39}.callout.callout-success{border-left-color:#00a65a}.callout.callout-success .callout-heading{color:#00a65a}.callout.callout-warning{border-left-color:#bf7e16}.callout.callout-warning .callout-heading{color:#bf7e16}.list-group-2fa .logo-2fa{min-width:100px}.form-check-block .form-check-label{font-weight:600}.form-check-block .form-check-label>small{display:block;color:#6c757d;font-weight:normal}.form-check-block .form-check-label>span{display:block;font-weight:normal}.form-inline input[type=datetime-local]{width:200px}.form-control.stripe-form-control{padding-top:.55rem}.form-control.stripe-form-control.is-focused{color:#495057;background-color:#fff;border-color:#81a9f2;outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,.25)}.form-control.stripe-form-control.is-focused.is-invalid{box-shadow:0 0 0 .2rem rgba(221,75,57,.25)}.form-control.stripe-form-control.is-invalid{border-color:#dd4b39}.org-nav{background-color:#fbfbfb;border-bottom:1px solid #dee2e6;height:100px;min-height:100px}.org-nav .container{height:100%}.org-nav .nav-tabs{border-bottom:none}.org-nav .nav-tabs a{color:#333}.org-nav .nav-tabs a:not(.active){border-color:transparent}.org-nav .nav-tabs a.active{border-top:3px solid #175ddc;font-weight:bold;padding-top:calc(0.5rem - 2px)}.org-nav .nav-tabs a.disabled{color:#b4b4b4}.org-nav .org-name{line-height:1}.org-nav .org-name span{font-size:1.15rem;display:block}img.logo{width:284px;height:43px;margin:0 auto;display:block}.min-height-fix{min-height:1px}.overflow-hidden{overflow:hidden}.cdk-drag-preview{z-index:1070 !important;opacity:.8;background-color:#fff;border-radius:.25rem}.cursor-move{cursor:move !important}.layout.enterprise2 header{color:#ced4da;background-color:#175ddc}.layout.enterprise2 header:before{content:"";position:absolute;z-index:-1;width:100%;height:340px;left:0;transform:skewY(-3deg);background:#175ddc}.layout.enterprise2 header img.logo{margin:12px 0 0;width:284px;max-width:284px;height:auto}.layout.enterprise2 h2{color:#fff;font-size:1.8rem;margin:100px 0 150px 0}.layout.enterprise2 p{margin:20px 0 40px 0;font-size:1.4rem}.layout.enterprise2 p:before{content:"/";padding-right:12px}.layout.enterprise2 p:not(.highlight):before{color:#1252a3}.layout.enterprise2 p b:after{content:"⟶";font-size:2rem;padding-left:6px}.layout.enterprise2 blockquote{margin:20px 0 0 0;font-size:1.4rem;padding-right:40px} + +/*# sourceMappingURL=main.d875a1005df5117243c1.css.map*/ \ No newline at end of file diff --git a/app/main.d875a1005df5117243c1.css.map b/app/main.d875a1005df5117243c1.css.map new file mode 100644 index 00000000..212c812b --- /dev/null +++ b/app/main.d875a1005df5117243c1.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/css/webfonts.css","webpack:///./src/scss/styles.scss","webpack:///./node_modules/bootstrap/scss/_root.scss","webpack:///./node_modules/bootstrap/scss/_reboot.scss","webpack:///./node_modules/bootstrap/scss/vendor/_rfs.scss","webpack:///./node_modules/bootstrap/scss/_variables.scss","webpack:///./node_modules/bootstrap/scss/mixins/_hover.scss","webpack:///./node_modules/bootstrap/scss/_type.scss","webpack:///./node_modules/bootstrap/scss/mixins/_lists.scss","webpack:///./node_modules/bootstrap/scss/_images.scss","webpack:///./node_modules/bootstrap/scss/mixins/_image.scss","webpack:///./node_modules/bootstrap/scss/mixins/_border-radius.scss","webpack:///./node_modules/bootstrap/scss/_code.scss","webpack:///./node_modules/bootstrap/scss/_grid.scss","webpack:///./node_modules/bootstrap/scss/mixins/_grid.scss","webpack:///./node_modules/bootstrap/scss/mixins/_breakpoints.scss","webpack:///./node_modules/bootstrap/scss/mixins/_grid-framework.scss","webpack:///./node_modules/bootstrap/scss/_tables.scss","webpack:///./node_modules/bootstrap/scss/mixins/_table-row.scss","webpack:///./node_modules/bootstrap/scss/_forms.scss","webpack:///./node_modules/bootstrap/scss/mixins/_transition.scss","webpack:///./node_modules/bootstrap/scss/mixins/_forms.scss","webpack:///./node_modules/bootstrap/scss/_buttons.scss","webpack:///./node_modules/bootstrap/scss/mixins/_buttons.scss","webpack:///./node_modules/bootstrap/scss/_transitions.scss","webpack:///./node_modules/bootstrap/scss/_dropdown.scss","webpack:///./node_modules/bootstrap/scss/mixins/_caret.scss","webpack:///./node_modules/bootstrap/scss/mixins/_nav-divider.scss","webpack:///./node_modules/bootstrap/scss/_button-group.scss","webpack:///./node_modules/bootstrap/scss/_input-group.scss","webpack:///./node_modules/bootstrap/scss/_custom-forms.scss","webpack:///./node_modules/bootstrap/scss/_nav.scss","webpack:///./node_modules/bootstrap/scss/_navbar.scss","webpack:///./node_modules/bootstrap/scss/_card.scss","webpack:///./node_modules/bootstrap/scss/_breadcrumb.scss","webpack:///./node_modules/bootstrap/scss/_pagination.scss","webpack:///./node_modules/bootstrap/scss/mixins/_pagination.scss","webpack:///./node_modules/bootstrap/scss/_badge.scss","webpack:///./node_modules/bootstrap/scss/mixins/_badge.scss","webpack:///./node_modules/bootstrap/scss/_jumbotron.scss","webpack:///./node_modules/bootstrap/scss/_alert.scss","webpack:///./node_modules/bootstrap/scss/mixins/_alert.scss","webpack:///./node_modules/bootstrap/scss/_progress.scss","webpack:///./node_modules/bootstrap/scss/mixins/_gradients.scss","webpack:///./node_modules/bootstrap/scss/_media.scss","webpack:///./node_modules/bootstrap/scss/_list-group.scss","webpack:///./node_modules/bootstrap/scss/mixins/_list-group.scss","webpack:///./node_modules/bootstrap/scss/_close.scss","webpack:///./node_modules/bootstrap/scss/_modal.scss","webpack:///./node_modules/bootstrap/scss/_tooltip.scss","webpack:///./node_modules/bootstrap/scss/mixins/_reset-text.scss","webpack:///./node_modules/bootstrap/scss/_popover.scss","webpack:///./node_modules/bootstrap/scss/_carousel.scss","webpack:///./node_modules/bootstrap/scss/mixins/_clearfix.scss","webpack:///./node_modules/bootstrap/scss/_spinners.scss","webpack:///./node_modules/bootstrap/scss/utilities/_align.scss","webpack:///./node_modules/bootstrap/scss/mixins/_background-variant.scss","webpack:///./node_modules/bootstrap/scss/utilities/_background.scss","webpack:///./node_modules/bootstrap/scss/utilities/_borders.scss","webpack:///./node_modules/bootstrap/scss/utilities/_display.scss","webpack:///./node_modules/bootstrap/scss/utilities/_embed.scss","webpack:///./node_modules/bootstrap/scss/utilities/_flex.scss","webpack:///./node_modules/bootstrap/scss/utilities/_float.scss","webpack:///./node_modules/bootstrap/scss/utilities/_interactions.scss","webpack:///./node_modules/bootstrap/scss/utilities/_position.scss","webpack:///./node_modules/bootstrap/scss/utilities/_screenreaders.scss","webpack:///./node_modules/bootstrap/scss/mixins/_screen-reader.scss","webpack:///./node_modules/bootstrap/scss/utilities/_shadows.scss","webpack:///./node_modules/bootstrap/scss/utilities/_sizing.scss","webpack:///./node_modules/bootstrap/scss/utilities/_spacing.scss","webpack:///./node_modules/bootstrap/scss/utilities/_stretched-link.scss","webpack:///./node_modules/bootstrap/scss/utilities/_text.scss","webpack:///./node_modules/bootstrap/scss/mixins/_text-truncate.scss","webpack:///./node_modules/bootstrap/scss/mixins/_text-emphasis.scss","webpack:///./node_modules/bootstrap/scss/mixins/_text-hide.scss","webpack:///./node_modules/bootstrap/scss/utilities/_visibility.scss","webpack:///./node_modules/bootstrap/scss/_print.scss","webpack:///./node_modules/font-awesome/scss/font-awesome.scss","webpack:///./node_modules/font-awesome/scss/_path.scss","webpack:///./node_modules/font-awesome/scss/_core.scss","webpack:///./node_modules/font-awesome/scss/_larger.scss","webpack:///./node_modules/font-awesome/scss/_fixed-width.scss","webpack:///./node_modules/font-awesome/scss/_list.scss","webpack:///./node_modules/font-awesome/scss/_variables.scss","webpack:///./node_modules/font-awesome/scss/_bordered-pulled.scss","webpack:///./node_modules/font-awesome/scss/_animated.scss","webpack:///./node_modules/font-awesome/scss/_rotated-flipped.scss","webpack:///./node_modules/font-awesome/scss/_mixins.scss","webpack:///./node_modules/font-awesome/scss/_stacked.scss","webpack:///./node_modules/font-awesome/scss/_icons.scss","webpack:///./node_modules/font-awesome/scss/_screen-reader.scss","webpack:///./node_modules/angular2-toaster/toaster.scss","webpack:///./node_modules/sweetalert2/src/scss/_toasts.scss","webpack:///./node_modules/sweetalert2/src/variables.scss","webpack:///./node_modules/sweetalert2/src/scss/_mixins.scss","webpack:///./node_modules/sweetalert2/src/scss/_core.scss","webpack:///./node_modules/sweetalert2/src/scss/_polyfills.scss","webpack:///./node_modules/sweetalert2/src/scss/_toasts-animations.scss","webpack:///./node_modules/sweetalert2/src/scss/_animations.scss","webpack:///./node_modules/sweetalert2/src/scss/_body.scss","webpack:///./node_modules/sweetalert2/src/scss/_toasts-body.scss","webpack:///./src/scss/plugins.scss","webpack:///./src/scss/register-layout.scss"],"names":[],"mappings":"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,eFhBV,eEgBU,0BFhBV,eEgBU,0BFhBV,SGnDF,UACE,mBZkIO,WJtHI,qBgBPX,cZoV4B,mBYjV1B,6BACA,iBAGF,qBACE,gCACA,oBAGF,4BACE,2BAUF,aZ8T4B,iBYnT9B,wBACE,uCAEA,wBAEE,mDAIA,uBAEE,oGAMJ,QAIE,0CASF,gChBdgB,6BKhDhB,ULKW,iCA4CI,oDiBvDb,wBD8FiC,wFCvF/B,oBDuF2E,mCXxF/E,wBYaqB,2EAMf,wBANe,0DAnBnB,wBD8FiC,gGCvF/B,oBDuF2E,qCXxF/E,wBYaqB,+EAMf,wBANe,oDAnBnB,wBD8FiC,wFCvF/B,oBDuF2E,mCXxF/E,wBYaqB,2EAMf,wBANe,2CAnBnB,wBD8FiC,4ECvF/B,oBDuF2E,gCXxF/E,wBYaqB,qEAMf,wBANe,oDAnBnB,wBD8FiC,wFCvF/B,oBDuF2E,mCXxF/E,wBYaqB,2EAMf,wBANe,iDAnBnB,wBD8FiC,oFCvF/B,oBDuF2E,kCXxF/E,wBYaqB,yEAMf,wBANe,8CAnBnB,wBD8FiC,gFCvF/B,oBDuF2E,iCXxF/E,wBYaqB,uEAMf,wBANe,2CAnBnB,wBD8FiC,4ECvF/B,oBDuF2E,gCXxF/E,wBYaqB,qEAMf,wBANe,yEAnBnB,wBD8FiC,oHCvF/B,oBDuF2E,0CXxF/E,wBYaqB,yFAMf,wBANe,sEAnBnB,wBD8FiC,gHCvF/B,oBDuF2E,yCXxF/E,wBYaqB,uFAMf,wBANe,iDAnBnB,gCjBuDa,kCKjDf,gCYaqB,yEAMf,gCANe,uBDwFnB,UZ1GO,yBAQA,qBAqWmB,wBY3P1B,aZ3GO,yBALA,qBACA,aYuHX,UZ1HW,yBAQA,oDYsHT,oBZ+O4B,4BYzO5B,QACE,qDAIA,sCZiO0B,wCCrW5B,UDLS,wCA4WmB,2BU1S1B,qBEiGA,aAEI,WACA,gBACA,iCACA,sCAGA,QACE,4BF1GN,qBEiGA,aAEI,WACA,gBACA,iCACA,sCAGA,QACE,4BF1GN,qBEiGA,aAEI,WACA,gBACA,iCACA,sCAGA,QACE,4BF1GN,qBEiGA,aAEI,WACA,gBACA,iCACA,sCAGA,QACE,oBATN,aAEI,WACA,gBACA,iCACA,mCAGA,QACE,eE7KV,aACE,WACA,mCd2esC,uBczetC,ef+EiB,gBCsMW,gBAKA,cAtRnB,yBJyCA,4BkBtCT,yBACA,0FAMA,wCCJI,cDdN,eCeQ,4BDMN,4BACE,SACA,8BAIF,iBACE,0BACA,qBEtBF,aACE,sBpB0Ca,qBI6auB,UgBpdpC,2ChByX0B,4BchW5B,alBgBwB,UkBbtB,gDAQF,wBlBIkB,8IkBQlB,eACE,sCAKF,adzDS,yBJyCA,wCkB4BX,aAEE,WACA,iBAUF,gCACE,oCACA,gBACA,kBf3BE,gBC4N0B,oBc5L9B,8BACE,kCACA,kBfjBiB,gBCgJW,oBc1H9B,+BACE,mCACA,mBfxBiB,gBCiJW,yBc9G9B,aACE,WACA,kBACA,gBACA,efvCiB,gBC2MW,WJnRjB,6BkBmHX,yBACA,mBACA,iFAEA,eAEE,eACA,kBAYJ,iCd6VwC,qBc3VtC,mBfhEiB,gBCiJW,oBMxN1B,kBQ6IJ,+BdsVwC,mBcpVtC,kBfxEiB,gBCgJW,oBMvN1B,yDQuJF,WAEE,uBAIJ,WACE,aAQF,kBd2UwC,YcvUxC,aACE,kBd4TsC,WcnTxC,YACE,eACA,kBACA,iBACA,wCAEA,iBAEE,iBACA,aASJ,iBACE,cACA,qBdiSsC,mBc7RxC,iBACE,iBd6RsC,qBc3RtC,4FAGA,advNS,mBc6NX,eACE,oBAGF,mBACE,mBACA,eACA,oBd8QsC,sCc1QtC,eACE,aACA,sBdyQoC,ccvQpC,iBE7MF,YACE,WACA,kBhB2coC,cDjbpC,ce8LqC,gBElNvC,iBACE,SACA,OACA,UACA,aACA,eACA,qBACA,iBACA,mBjB6Be,gBC2MW,WgBrO1B,mCACA,qBV9CA,sEUmDA,QAEE,+HAKF,aAEE,2DA9CF,oBFsOqC,oCdyOD,iRgBvZhC,4BACA,2DACA,gEACA,uEAGF,oBFwKmC,0CEtKjC,2EAhEJ,mChB+coC,kFgBrYhC,6DA1EJ,oBFsOqC,uCdqUG,wjBgBtdpC,yEAGF,oBF8ImC,0CE5IjC,uGAOF,aFqImC,mMEjInC,aAEE,uHAOF,aFwHmC,uIErHjC,oBFqHiC,uJE/GjC,oBACE,yBACqB,mJAKvB,yCACE,+KAG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N,ajBKa,yGChEb,aiBmDkD,yBlBarC,4LkBHb,2CAEE,mLAGF,alBFa,6BkBKX,sZAGF,aAGE,yBlBXW,+ckBeX,2CAKI,sBDzBN,ajBKa,iDChEb,UiBmDkD,yBlBarC,4EkBHb,wCAEE,6DAGF,alBFa,6BkBKX,gKAGF,UAGE,yBlBXW,uMkBeX,wCAKI,mBDzBN,UjBKa,2CChEb,UiBmDkD,sBlBarC,mEkBHb,wCAEE,uDAGF,UlBFa,6BkBKX,uJAGF,UAGE,sBlBXW,2LkBeX,wCAKI,sBDzBN,ajBKa,iDChEb,UiBmDkD,yBlBarC,4EkBHb,0CAEE,6DAGF,alBFa,6BkBKX,gKAGF,UAGE,yBlBXW,uMkBeX,0CAKI,qBDzBN,ajBKa,gDChEb,UiBmDkD,yBlBarC,0EkBHb,yCAEE,2DAGF,alBFa,6BkBKX,6JAGF,UAGE,yBlBXW,oMkBeX,yCAKI,oBDzBN,ajBKa,+CChEb,aiBmDkD,yBlBarC,wEkBHb,2CAEE,yDAGF,alBFa,6BkBKX,0JAGF,aAGE,yBlBXW,iMkBeX,2CAKI,mBDzBN,ajBKa,8CChEb,UiBmDkD,yBlBarC,sEkBHb,wCAEE,uDAGF,alBFa,6BkBKX,uJAGF,UAGE,yBlBXW,8LkBeX,wCAKI,6BDzBN,ajBKa,wDChEb,UiBmDkD,yBlBarC,0FkBHb,yCAEE,2EAGF,alBFa,6BkBKX,qLAGF,UAGE,yBlBXW,4NkBeX,yCAKI,4BDzBN,ajBKa,uDChEb,UiBmDkD,yBlBarC,wFkBHb,yCAEE,yEAGF,alBFa,6BkBKX,kLAGF,UAGE,yBlBXW,yNkBeX,yCAKI,WDdR,ejB6M8B,cAhHY,qBACA,iBCpKxC,aDqKwC,0BACA,iCiBtFxC,yBjBsFwC,uCiBjFxC,ajBpFS,oBiBuFP,6EAWJ,kBCPE,kBnBfiB,gBCgJW,oBMvN1B,6EWiGJ,oBCXE,mBnBfiB,gBCiJW,oBMxN1B,YW0GJ,aACE,WACA,uBAGA,gBjBwT4B,uFiB/S5B,UACE,OE3IJ,8BACE,wCJmBI,MIpBN,eJqBQ,mBIlBN,SACE,sBAKF,YACE,aAIJ,iBACE,SACA,gBACA,4BACA,wCJEI,YINN,eJOQ,yCKpBR,iBAIE,kBAGF,kBACE,yBCoBE,oBACE,mBrBgOwB,sBADA,WqB5NxB,sBAhCJ,oCACA,gBACA,mCACA,+BAqDE,aACE,gBD1CN,iBACE,SACA,OACA,apBypBkC,aoBvpBlC,WACA,gBpBiuBkC,gBoB/tBlC,mBACA,erBgEiB,WHxEN,gBwBWX,gBACA,sBpBtBS,4BoBwBT,iCACA,qBddE,qBcuBA,UACE,OACA,sBAGF,OACE,UACA,wBVYF,uBUnBA,UACE,OACA,yBAGF,OACE,UACA,yBVYF,uBUnBA,UACE,OACA,yBAGF,OACE,UACA,yBVYF,uBUnBA,UACE,OACA,yBAGF,OACE,UACA,yBVYF,uBUnBA,UACE,OACA,yBAGF,OACE,UACA,yBAQJ,QACE,YACA,aACA,sBpB+rBgC,iCqB7tBhC,oBACE,mBrBgOwB,sBADA,WqB5NxB,aAzBJ,oCACA,yBACA,mCACA,uCA8CE,aACE,2BDWJ,KACE,WACA,UACA,aACA,oBpBirBgC,oCqB7tBhC,oBACE,mBrBgOwB,sBADA,WqB5NxB,kCAlBJ,eACA,qCACA,uBACA,0CAuCE,aACE,oCDqBF,gBACE,0BAMJ,KACE,WACA,UACA,aACA,qBpBgqBgC,mCqB7tBhC,oBACE,mBrBgOwB,sBADA,WqB5NxB,mCAWA,YACE,oCAGF,oBACE,oBrB6MsB,sBADA,WqBzMtB,kCA9BN,wBACA,qCACA,yCAiCE,aACE,oCDsCF,gBACE,2IAQJ,UAIE,YACA,mBAKJ,QE9GE,eACA,gBACA,6BACA,gBFkHF,aACE,WACA,oBACA,WACA,gBpBiK4B,WJ9QjB,mBwBgHX,mBAEA,6BACA,SACA,2CnBrHA,aDuvBkC,qBoBlnBhC,iCxB1GqB,6CwB8GvB,UxBxIW,qBwB2IT,gCxB/GsB,iDwBmHxB,apBpJS,oBoBuJP,6BACA,qBAQJ,aACE,kBAIF,aACE,mBpBimBkC,gBoB/lBlC,mBrB3FiB,cC5ER,mBoB0KT,qBAIF,aACE,oBACA,WxB5KW,gC2Bdb,iBAEE,oBACA,sBACA,+IAEA,iBACE,cACA,uKtBCF,SsBII,2fAEF,SAGE,cAMN,YACE,eACA,2BACA,2BAEA,UACE,2IAMF,gBAEE,mQAIF,yBjBXE,6BACA,2NiBeF,wBjBFE,4BACA,wBiBmBJ,sBACE,sBACA,8GAEA,aAGE,0CAGF,cACE,kJAIJ,qBACE,qBACA,kJAGF,oBACE,oBACA,qBAoBF,qBACE,uBACA,uBACA,gHAEA,UAEE,sKAGF,eAEE,uSAIF,4BjBrFE,4BACA,+PiByFF,wBjBxGE,0BACA,+KiB2HF,eAEE,kVAEA,iBAEE,sBACA,oBACA,cCzJN,iBACE,aACA,eACA,oBACA,WACA,uHAEA,iBAIE,cACA,SACA,YACA,gBACA,2gBAEA,gBAGE,0IAKJ,SAGE,oDAIF,SACE,4FAKA,wBlBIA,4BACA,uCkBCA,mBACA,8HAEA,wBlBLA,4BACA,8NkBSA,yBlBxBA,6BACA,qNkB+BA,yBlBhCA,6BACA,0CkB8CJ,YAEE,kRAKA,iBACE,UACA,sTAEA,SACE,uoDAIJ,gBAIE,sBAIJ,sCACA,mCAQA,YACE,mBACA,uBACA,gBACA,ezB7BiB,gBCsMW,gBAKA,cAtRnB,kBwB6GT,mBACA,yBxBnHS,yBwBqHT,qBlB5GE,4EkBgHF,YAEE,4EAUJ,+BxBuWwC,6YwBlWxC,kBAME,kBzBhEiB,gBCgJW,oBMvN1B,4EkB6IJ,iCxBqVwC,6YwBhVxC,oBAME,mBzBjFiB,gBCiJW,oBMxN1B,+DkB8JJ,qBAEE,m9BAWF,yBlB3JI,6BACA,8mBkBqKJ,wBlBxJI,4BACA,iBmBxCJ,iBACE,UACA,cACA,kBACA,oBACA,mBACA,wBAGF,mBACE,kBzByfsC,uByBrfxC,iBACE,OACA,WACA,WzBqfsC,eyBnftC,UACA,6DAEA,UzBxBS,qBAmPmB,oFyBpN5B,0CzBoW4B,yEyB3V5B,oBzBsbsC,2EyBlbtC,UzB5CS,yBA+hBqC,iIyBze5C,azBhDO,4HyBmDL,wB7BPc,uB6BkBpB,iBACE,gBACA,mBAEA,+BAIA,iBACE,WACA,aACA,cACA,WzBwboC,gCyBrbpC,WACA,yB7BpCO,yB6BsCP,8BAKF,iBACE,WACA,aACA,cACA,WzByaoC,uByBtapC,iCACA,gDAUF,oBnBlGE,6EmBuGA,iOACE,oFAKF,oBzB2H0B,4GyBtH1B,8KACE,uFAKF,mCzBoZ4C,6FyBjZ5C,mCzBiZ4C,6CyBtY9C,iBzB2Z8C,0EyBrZ5C,6KACE,oFAKF,mCzB0X4C,gByB/WhD,oBACE,8CAGE,aACE,czBkY0C,mByBhY1C,oBzBiY0C,6CyB5X5C,uBACE,0BACA,uBzB2X0C,iDA5iBrC,oBA2iBqC,kIyBpX1C,wCV/KA,4CUuKF,eVtKI,4EUmLJ,wB7BjJO,8B6BmJL,qFAKF,mCzB+U4C,gByBlUhD,oBACE,WACA,mCzBqRsC,uCyBnRtC,e1BvIiB,gBCsMW,gBAKA,cAtRnB,sByBwNT,yOACA,yBACA,qBnBtNE,gBmByNF,sBAEA,oBzBwPsC,UyBtPpC,2CzBuWgC,iCyB/VhC,azBzOO,yBJyCA,+D6B2MT,WAEE,qBzB+H0B,sByB7H1B,yBAGF,azB5PS,yBAJA,4ByBsQT,YACE,+BAIF,iBACE,0BACA,mBAIJ,iCzB0NwC,mBAxGV,yCACA,mBDpTX,mB0ByMnB,+BzBmNwC,kBApGV,uCACA,kBDzTX,c0BsNnB,iBACE,qBACA,WACA,mCzBiMsC,gByB/LtC,oBAGF,iBACE,UACA,WACA,mCzByLsC,SyBvLtC,gBACA,UACA,6CAEA,oBzBqKsC,2CA3FV,gGyBpE5B,wB7B7QkB,uD6BmRhB,gBzB2Te,2DyBtTjB,yBACE,oBAIJ,iBACE,MACA,QACA,OACA,UACA,mCzBwJsC,uByBtJtC,gBACA,gBzB/D4B,gBAKA,cAtRnB,yBJyCA,yB6B6ST,qBnBlVE,2BmBsVF,iBACE,MACA,QACA,SACA,UACA,cACA,6BzBiIoC,uByB/HpC,gBzB5E0B,cAtRnB,iByBqWP,yBzB1WO,oByB4WP,gCnBnWA,emB8WJ,UACE,cACA,UACA,6BACA,gBACA,qBAEA,SACE,2CAIA,yDzBmOyC,uCyBlOzC,yDzBkOyC,gCyBjOzC,yDzBiOyC,iCyB9N3C,QACE,qCAGF,UzBoN2C,gCyBjNzC,yBzB9J0B,SAkXe,mBM1lBzC,uGmB2YA,gBACA,wCV1YE,oCUiYJ,eVhYM,6CU2YJ,wBzBiNyC,8CyB5M3C,UzB6LkC,aACA,kByB3LhC,ezB4LgC,yBA1lBzB,yByBi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BxBNA,kCACA,8BwBUF,SACE,W9BvCO,yBAmPmB,qD8BtM5B,a9BvCS,oB8ByCP,YAEA,sB9BjDO,qBAGA,2B+BPT,qBACE,kBhCqFe,gBCgJW,kD+B9NxB,4BzBqCF,gCACA,iDyBjCE,6BzBkBF,iCACA,2ByBhCF,oBACE,mBhCqFe,gBCiJW,kD+B/NxB,4BzBqCF,gCACA,iDyBjCE,6BzBkBF,iCACA,Q0B9BJ,oBACE,mBACA,cjCiEE,gBCwN0B,cgCtR5B,kBACA,mBACA,wBACA,qB1BKE,8H0BHF,wCjBKI,OiBfN,ejBgBQ,8BdLN,oB+BGI,cAKJ,YACE,uDAKJ,iBACE,SACA,aAOF,kBhCg4BoC,sCMr5BhC,gB0BgCF,UCjDA,yBjC2Ea,6CC5Db,UgCVI,yBACA,6CAGF,SAEE,0CACA,kBDqCJ,aCjDA,yBjC2Ea,iDC5Db,agCVI,yBACA,iDAGF,SAEE,4CACA,gBDqCJ,UCjDA,yBjC2Ea,6CC5Db,UgCVI,yBACA,6CAGF,SAEE,yCACA,aDqCJ,UCjDA,sBjC2Ea,uCC5Db,UgCVI,yBACA,uCAGF,SAEE,yCACA,gBDqCJ,UCjDA,yBjC2Ea,6CC5Db,UgCVI,yBACA,6CAGF,SAEE,2CACA,eDqCJ,UCjDA,yBjC2Ea,2CC5Db,UgCVI,yBACA,2CAGF,SAEE,0CACA,cDqCJ,aCjDA,yBjC2Ea,yCC5Db,agCVI,yBACA,yCAGF,SAEE,4CACA,aDqCJ,UCjDA,yBjC2Ea,uCC5Db,UgCVI,yBACA,uCAGF,SAEE,yCACA,uBDqCJ,UCjDA,yBjC2Ea,2DC5Db,UgCVI,yBACA,2DAGF,SAEE,0CACA,sBDqCJ,UCjDA,yBjC2Ea,yDC5Db,UgCVI,yBACA,yDAGF,SAEE,0CACA,YCbN,iBACE,mBlCwzBkC,yBAhzBzB,oBMSP,wBI0CA,WwB5DJ,iBAQI,mBAIJ,eACE,eACA,gB5BIE,Q6BdJ,iBACE,uBACA,mBnCw9BkC,6BmCt9BlC,qB7BUE,gB6BLJ,aAEE,aAIF,enC6Q8B,oBmCpQ9B,kBACE,2BAGA,iBACE,MACA,QACA,UACA,uBACA,cACA,gBAUF,aACqH,yBAA5F,qBAA4C,mBC5CrE,wBACE,4BAGF,aACE,kBDsCF,aACqH,yBAA5F,qBAA4C,qBC5CrE,wBACE,8BAGF,aACE,gBDsCF,aACqH,yBAA5F,qBAA4C,mBC5CrE,wBACE,4BAGF,aACE,aDsCF,aACqH,sBAA5F,qBAA4C,gBC5CrE,wBACE,yBAGF,aACE,gBDsCF,aACqH,yBAA5F,qBAA4C,mBC5CrE,wBACE,4BAGF,aACE,eDsCF,aACqH,yBAA5F,qBAA4C,kBC5CrE,wBACE,2BAGF,aACE,cDsCF,aACqH,yBAA5F,qBAA4C,iBC5CrE,wBACE,0BAGF,aACE,aDsCF,aACqH,yBAA5F,qBAA4C,gBC5CrE,wBACE,yBAGF,aACE,uBDsCF,aACqH,yBAA5F,qBAA4C,0BC5CrE,wBACE,mCAGF,aACE,sBDsCF,aACqH,yBAA5F,qBAA4C,yBC5CrE,wBACE,kCAGF,aACE,iCCRF,KACE,8BACA,mCAIJ,YACE,YrCi+BkC,gBqC/9BlC,cACA,kBtC6EiB,yBChFR,qBMSP,e+BCJ,YACE,sBACA,uBACA,gBACA,WrChBS,kBqCkBT,mBACA,yBrCs9BkC,0BqCp9BlC,wCtBRI,csBDN,etBEQ,wBsBUR,oMCYE,0BDVA,wBAIA,iDACE,wCAGE,uBAJJ,cAKM,SE1CR,YACE,uBACA,aAGF,MACE,aCFF,YACE,sBACA,eAGA,gBACA,qBlCQE,yBkCEJ,UACE,cxCPS,mBwCST,6DvCPA,SuCWE,cxCbO,qBwCeP,yBxCrBO,gCwCyBT,U5ChBW,yBIRF,kBwCmCX,iBACE,cACA,sBACA,sBxCxCS,kCwC4CT,8BAEA,8BlC1BE,gCACA,6BkC6BF,kClChBE,kCACA,qDkCmBF,axChDS,oBwCmDP,sBxCzDO,yBwC8DT,SACE,W5CrDS,sBAsBU,8BACU,mC4CoC/B,kBACE,0CAEA,eACE,qBxC4JwB,wBwC7I1B,kBACE,qDAGE,gClC1BJ,0BAZA,oDkC2CI,8BlC3CJ,4BAYA,gDkCoCI,YACE,0DAGF,oBxC2HsB,oBwCzHpB,iEAEA,gBACE,sBxCsHkB,wBUhL1B,0B8BmCA,kBACE,wDAGE,gClC1BJ,0BAZA,uDkC2CI,8BlC3CJ,4BAYA,mDkCoCI,YACE,6DAGF,oBxC2HsB,oBwCzHpB,oEAEA,gBACE,sBxCsHkB,yBUhL1B,0B8BmCA,kBACE,wDAGE,gClC1BJ,0BAZA,uDkC2CI,8BlC3CJ,4BAYA,mDkCoCI,YACE,6DAGF,oBxC2HsB,oBwCzHpB,oEAEA,gBACE,sBxCsHkB,yBUhL1B,0B8BmCA,kBACE,wDAGE,gClC1BJ,0BAZA,uDkC2CI,8BlC3CJ,4BAYA,mDkCoCI,YACE,6DAGF,oBxC2HsB,oBwCzHpB,oEAEA,gBACE,sBxCsHkB,yBUhL1B,0B8BmCA,kBACE,wDAGE,gClC1BJ,0BAZA,uDkC2CI,8BlC3CJ,4BAYA,mDkCoCI,YACE,6DAGF,oBxC2HsB,oBwCzHpB,oEAEA,gBACE,sBxCsHkB,oBwCvG9B,elCnHI,oCkCsHF,oBACE,+CAEA,qBACE,0BCzIJ,aDqJwE,yBAA/B,6GvCxIzC,auCwIwE,yBC9IlE,wDAGF,UzCNK,yBwCiJ+D,iDCrJxE,aDqJwE,yBAA/B,iHvCxIzC,auCwIwE,yBC9IlE,0DAGF,UzCNK,yBwCiJ+D,+CCrJxE,aDqJwE,yBAA/B,6GvCxIzC,auCwIwE,yBC9IlE,wDAGF,UzCNK,yBwCiJ+D,4CCrJxE,aDqJwE,yBAA/B,uGvCxIzC,auCwIwE,yBC9IlE,qDAGF,UzCNK,yBwCiJ+D,+CCrJxE,aDqJwE,yBAA/B,6GvCxIzC,auCwIwE,yBC9IlE,wDAGF,UzCNK,yBwCiJ+D,8CCrJxE,aDqJwE,yBAA/B,2GvCxIzC,auCwIwE,yBC9IlE,uDAGF,UzCNK,yBwCiJ+D,6CCrJxE,aDqJwE,yBAA/B,yGvCxIzC,auCwIwE,yBC9IlE,sDAGF,UzCNK,yBwCiJ+D,4CCrJxE,aDqJwE,yBAA/B,uGvCxIzC,auCwIwE,yBC9IlE,qDAGF,UzCNK,yBwCiJ+D,sDCrJxE,aDqJwE,yBAA/B,2HvCxIzC,auCwIwE,yBC9IlE,+DAGF,UzCNK,yBwCiJ+D,qDCrJxE,aDqJwE,yBAA/B,yHvCxIzC,auCwIwE,yBC9IlE,8DAGF,UzCNK,yBwCiJ+D,6BExJ1E,WACE,iB3CwFiB,gBCuMW,c0C5R5B,W1CaS,yBA2kCyB,W0CrlClC,czCKA,UDKS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CA,yDACA,wDACA,mDAEA,kCACA,wCACA,2CACA,0CACA,yCAGE,+BACE,mBADF,+BACE,iBADF,+BACE,cADF,4BACE,iBADF,+BACE,gBADF,+BACE,eADF,+BACE,cADF,+BACE,wBADF,+BACE,uBADF,+BACE,eAIJ,4BACE,aAOF,8BACE,kEAGF,+BACE,cAGF,wCACE,0CACA,gBAGF,yCACE,6CACA,iBAGF,4CACE,4CACA,eAGF,wCACE,4CACA,aAGF,8BACE,iBAGF,4BACE,eAGF,8BACE,YAGF,0BACE,kBLxEA,aACE,WACA,WACA,SMOE,2W5CiDF,W4CjDE,oY5CiDF,W4CjDE,oY5CiDF,W4CjDE,oY5CiDF,W4CjDE,0XAUN,cAEI,uZCrBJ,iBACE,cACA,WACA,UACA,gBACA,2BAEA,aACE,WACA,4IAGF,iBAKE,MACA,SACA,OACA,WACA,YACA,SACA,iCASA,0BACE,iCADF,kBACE,gCADF,eACE,gCADF,gBACE,WCzBF,2CACA,mDACA,2DACA,oDAEA,uCACA,+CACA,6CACA,sCACA,oCACA,sCACA,wCACA,gDAEA,2DACA,4DACA,2DACA,iEACA,2DAEA,mDACA,oDACA,oDACA,qDACA,oDAEA,uDACA,wDACA,uDACA,6DACA,6DACA,kDAEA,6CACA,iDACA,kDACA,kDACA,mDACA,qD9CYA,a8ClDA,8CACA,sDACA,8DACA,uDAEA,0CACA,kDACA,gDACA,yCACA,uCACA,yCACA,2CACA,mDAEA,8DACA,+DACA,8DACA,oEACA,8DAEA,sDACA,uDACA,uDACA,wDACA,uDAEA,0DACA,2DACA,0DACA,gEACA,gEACA,qDAEA,gDACA,oDACA,qDACA,qDACA,sDACA,sD9CYA,a8ClDA,8CACA,sDACA,8DACA,uDAEA,0CACA,kDACA,gDACA,yCACA,uCACA,yCACA,2CACA,mDAEA,8DACA,+DACA,8DACA,oEACA,8DAEA,sDACA,uDACA,uDACA,wDACA,uDAEA,0DACA,2DACA,0DACA,gEACA,gEACA,qDAEA,gDACA,oDACA,qDACA,qDACA,sDACA,sD9CYA,a8ClDA,8CACA,sDAC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B,iCNsOoB,CMrOpB,4BNuWe,CMtWf,2BNknBc,CMjnBd,6BNsnBgB,CMrnBhB,2BNytBc,CMxtBd,2BNmRc,CMlRd,+BNupBkB,CMtpBlB,yBNqpBY,CMppBZ,8BNspBiB,CMrpBjB,4BNyIe,CMxIf,oDAEkC,WNqqBnB,CMpqBf,kCN8iBqB,CM7iBrB,mCN4iBsB,CM3iBtB,gCN4fmB,CM3fnB,6BNikBgB,CMhkBhB,+BACgC,WNgKnB,CM/Jb,8BN+qBiB,CM9qBjB,2BNwVc,CMvVd,6BNuPgB,CMtPhB,8BNgJiB,CM/IjB,2BNmhBc,CMlhBd,+BNgMkB,CM/LlB,0CNY6B,CMX7B,wCNc2B,CMb3B,4BNqWe,CMpWf,oCNweuB,CMvevB,0CACmC,WNsgBnB,CMrgBhB,8BNggBiB,CM/fjB,+BNwYkB,CMvYlB,2BN2Yc,CM1Yd,2BN4Pc,CM3Pd,iCNoUoB,CMnUpB,iCNitBoB,CMhtBpB,kCN+sBqB,CM9sBrB,gCNgtBmB,CM/sBnB,6BNyegB,CMxehB,8BNwBiB,CMvBjB,0BNymBa,CMxmBb,2BNymBc,CMxmBd,2BNyDc,CMxDd,+BNyDkB,CMxDlB,4BN+de,CM9df,6BN2EgB,CM1EhB,2BN0Pc,CMzPd,2BNiDc,CMhDd,6BN0VgB,CMzVhB,kCNwmBqB,CMvmBrB,iCNwmBoB,CMvmBpB,iCNpCoB,CMqCpB,mCNvCsB,CMwCtB,kCNrCqB,CMsCrB,oCNxCuB,CMyCvB,2BN+Wc,CM9Wd,qCACoC,WN2anB,CM1ajB,6BNsUgB,CMrUhB,mCNkrBsB,CMjrBtB,uDAEsC,WN0bnB,CMzbnB,6BNkbgB,CMjbhB,iCNwXoB,CMvXpB,6BNtDgB,CMuDhB,2BNmnBc,CMlnBd,2CAC4C,WN+anB,CM9azB,qCN8fwB,CM7fxB,qCN+EwB,CM9ExB,6BNzBgB,CM0BhB,oCNmjBuB,CMljBvB,oCNqLuB,CMpLvB,+BNlBkB,CMmBlB,2BNsbc,CMrbd,4BNgae,CM/Zf,2BNmjBc,CMljBd,8BN+NiB,CM9NjB,mCNgLsB,CM/KtB,mCN4iBsB,CM3iBtB,4BN+Ie,CM9If,mCNyEsB,CMxEtB,oCNyEuB,CMxEvB,kCNkbqB,CMjbrB,mCNuXsB,CMtXtB,mCN2lBsB,CM1lBtB,mCN2DsB,CM1DtB,sCNybyB,CMxbzB,kCN0SqB,CMzSrB,iCN0GoB,CMzGpB,qCNulBwB,CMtlBxB,qCNuDwB,CMtDxB,0BNnCa,CMoCb,iCNnDoB,CMoDpB,kCNnDqB,CMoDrB,+BNnDkB,CMoDlB,iCNvDoB,CMwDpB,yCACkC,WN4dnB,CM3df,6BN8IgB,CM7IhB,+BNsFkB,CMrFlB,2BN+Zc,CM9Zd,4BNoWe,CMnWf,+BNpDkB,CMqDlB,yCNuI4B,CMtI5B,2BNkNc,CMjNd,2BN0Sc,CMzSd,2BN6Kc,CM5Kd,0BNyIa,CMxIb,gCNyImB,CMxInB,mDACiD,WNiInB,CMhI9B,4BN+Ye,CM9Yf,gCACA,6BNoagB,CMnahB,8BNgEiB,CM/DjB,6BN6TgB,CM5ThB,iCNuCoB,CMtCpB,mCNmCsB,CMlCtB,8BN+aiB,CM9ajB,oCNkduB,CMjdvB,6BN0KgB,CMzKhB,kCN2KqB,CM1KrB,+BN3EkB,CM4ElB,+BN7EkB,CM8ElB,4CACsC,WNlEnB,CMmEnB,qCN+kBwB,CM9kBxB,sCN4HyB,CM3HzB,mCNTsB,CMUtB,0BN2Qa,CM1Qb,iCACiC,WN6CnB,CM5Cd,+BNkDkB,CMjDlB,kCNsiBqB,CMriBrB,oCNoiBuB,CMniBvB,gCN2emB,CM1enB,8BN8NiB,CM7NjB,+BNockB,CMnclB,sCNuRyB,CMtRzB,iCN6hBoB,CM5hBpB,oCNsGuB,CMrGvB,8BN8biB,CM7bjB,6BNqjBgB,CMpjBhB,oCNgLuB,CM/KvB,6BNukBgB,CMtkBhB,8BNqQiB,CMpQjB,4BNiWe,CMhWf,+BN2dkB,CM1dlB,iCNjDoB,CMkDpB,mCN+VsB,CM9VtB,8BNsjBiB,CMrjBjB,0CACqC,WNgGnB,CM/FlB,6BNoKgB,CMnKhB,6BN0jBgB,CMzjBhB,kCNoCqB,CMnCrB,+BACgC,WN+YnB,CM9Yb,4BNoMe,CMnMf,+BNrDkB,CMsDlB,2BNhFc,CMiFd,kCNrBqB,CMsBrB,mCNoLsB,CMnLtB,kCNkLqB,CMjLrB,gCNmLmB,CMlLnB,kCN+KqB,CM9KrB,wCNrI2B,CMsI3B,yCNjI4B,CMkI5B,sCNjIyB,CMkIzB,wCNzI2B,CM0I3B,4BN2Je,CM1Jf,6BN6lBgB,CM5lBhB,4BNqee,CMpef,6BNyGgB,CMxGhB,gCNzEmB,CM0EnB,iCNlIoB,CMmIpB,kCACkC,WNijBnB,CMhjBf,iCACiC,WN4OnB,CM3Od,4BNde,CMef,4BN0Ge,CMzGf,mCACqC,WN6XnB,CM5XlB,mCACoC,WN2FnB,CM1FjB,gCN6SmB,CM5SnB,oCACqC,WNqGnB,CMpGlB,6BNgbgB,CM/ahB,sDAEiC,WNlInB,CMmId,8BNsOiB,CMrOjB,8BNoOiB,CMnOjB,oCN+buB,CM9bvB,gCN2gBmB,CM1gBnB,4BNuce,CMtcf,4BNyOe,CMxOf,4BN6fe,CM5ff,gCNmTmB,CMlTnB,uCNoT0B,CMnT1B,yCNgI4B,CM/H5B,kCN4HqB,CM3HrB,4BNqQe,CMpQf,iCNpFoB,CMqFpB,+BN9EkB,CM+ElB,iCNrFoB,CMsFpB,kCNrFqB,CMsFrB,8BNhCiB,CMiCjB,oCACiC,WN0YnB,CMzYd,0CACsC,WN8YnB,CM7YnB,uCACqC,WN2YnB,CM1YlB,+BNUkB,CMTlB,+BNuMkB,CMtMlB,uCACiC,WNqfnB,CMpfd,kCACkC,WNoFnB,CMnFf,2CACuC,WN+anB,CM9apB,gCN7CmB,CM8CnB,iCN1CoB,CM2CpB,iCACiC,WNpInB,CMqId,8BN6WiB,CM5WjB,+BNyekB,CMxelB,sCACsC,WNrEnB,CMsEnB,kCNqLqB,CMpLrB,+BNGkB,CMFlB,qCNnEwB,CMoExB,mCNnEsB,CMoEtB,8BNifiB,CMhfjB,kCN8YqB,CM7YrB,+BNyZkB,CMxZlB,6BN9JgB,CM+JhB,6BNlEgB,CMmEhB,8BN1CiB,CM2CjB,kCN8BqB,CM7BrB,iCN1IoB,CM2IpB,iCNsHoB,CMrHpB,gCNrOmB,CMsOnB,6BN4MgB,CM3MhB,kCNUqB,CMTrB,2BN3Kc,CM4Kd,+BNuFkB,CMtFlB,kCN2QqB,CM1QrB,wCNrO2B,CMsO3B,yCNrO4B,CMsO5B,sCNrOyB,CMsOzB,wCNzO2B,CM0O3B,iCNrOoB,CMsOpB,kCNrOqB,CMsOrB,+BNrOkB,CMsOlB,iCNzOoB,CM0OpB,8BNpDiB,CMqDjB,6BN4IgB,CM3IhB,6BNwYgB,CMvYhB,0CACmC,WNuMnB,CMtMhB,+BNzGkB,CM0GlB,iCNyQoB,CMxQpB,kCNyQqB,CMxQrB,8BN+ViB,CM9VjB,6BN9GgB,CM+GhB,uCACkC,WNoRnB,CMnRf,iCN+CoB,CM9CpB,+BNmBkB,CMlBlB,oCNoBuB,CMnBvB,8BNqUiB,CMpUjB,8BN2BiB,CM1BjB,4BNgLe,CM/Kf,8BN2BiB,CM1BjB,iCNuHoB,CMtHpB,6BNMgB,CMLhB,qCNIwB,CMHxB,+BN6XkB,CM5XlB,2BNhHc,CMiHd,+CACsC,WNuQnB,CMtQnB,4EAEwC,WNsVnB,CMrVrB,qCNwIwB,CMvIxB,2BNhGc,CMiGd,gCNvHmB,CMwHnB,0CACyC,WNtJnB,CMuJtB,+BNyOkB,CMxOlB,2BN0Fc,CMzFd,kCN1DqB,CM2DrB,kCNkWqB,CMjWrB,gCN4VmB,CM3VnB,6BNlEgB,CMmEhB,mCNgOsB,CM/NtB,iCN2JoB,CM1JpB,uCN2J0B,CM1J1B,6BNsRgB,CMrRhB,iCN5LoB,CM6LpB,wCNxB2B,CMyB3B,6BNuPgB,CMtPhB,6BN6IgB,CM5IhB,0CN9J6B,CM+J7B,2CN9J8B,CM+J9B,wCN9J2B,CM+J3B,0CNlK6B,CMmK7B,4BN8De,CM7Df,2BNrHc,CMsHd,6BNvSgB,CMwShB,iCN2ZoB,CM1ZpB,+BNhNkB,CMiNlB,iCN7FoB,CM8FpB,iCN7FoB,CM8FpB,iCN+OoB,CM9OpB,kCNiMqB,CMhMrB,6BN6WgB,CM5WhB,mCN0IsB,CMzItB,qCN0IwB,CMzIxB,+BNqFkB,CMpFlB,iCNmFoB,CMlFpB,mCNnLsB,CMoLtB,oCN0KuB,CMzKvB,2CNpF8B,CMqF9B,mCNwPsB,CMvPtB,8BNjJiB,CMkJjB,sDACgD,WN/MnB,CMgN7B,kDAC8C,WN9MnB,CM+M3B,wDACiD,WNjNnB,CMkN9B,+BACgC,WNvGnB,CMwGb,0BNhCa,CMiCb,iCACgC,WNqYnB,CMpYb,gCACgC,WN4CnB,CM3Cb,4DAGgC,WNgDnB,CM/Cb,kDAEgC,WNiNnB,CMhNb,8BACgC,WN+CnB,CM9Cb,kCACgC,WN3PnB,CM4Pb,2BNhGc,CMiGd,gCNpFmB,CMqFnB,qCN0PwB,CMzPxB,sCN0PyB,CMzPzB,sCN0PyB,CMzPzB,uCN0P0B,CMzP1B,uCN6P0B,CM5P1B,wCN6P2B,CM5P3B,gCNkUmB,CMjUnB,kCN8TqB,CM7TrB,qCNyawB,CMxaxB,8BNsaiB,CMrajB,2BN2Zc,CM1Zd,kCN2ZqB,CM1ZrB,mCNoasB,CMnatB,8BNxJiB,CMyJjB,qCN8PwB,CM7PxB,gCNgBmB,CMfnB,6BNpFgB,CMqFhB,0BN3Wa,CM4Wb,gCN/RmB,CMgSnB,uCN/R0B,CMgS1B,6BN+UgB,CM9UhB,oCN+UuB,CM9UvB,sCNgDyB,CM/CzB,oCNkDuB,CMjDvB,sCN+CyB,CM9CzB,uCN+C0B,CM9C1B,4BNjWe,CMkWf,8BNmYiB,CMlYjB,8BN7WiB,CM8WjB,4BNkCe,CMjCf,+BN5KkB,CM6KlB,4BNgNe,CM/Mf,iCNxFoB,CMyFpB,6BN4TgB,CM3ThB,6BNtIgB,CMuIhB,2BN6Cc,CM5Cd,sCACqC,WN5DnB,CM6DlB,4BN8Pe,CM7Pf,6BNuEgB,CMtEhB,8BN9WiB,CM+WjB,0BNtSa,CMuSb,yBNiWY,CMhWZ,4BNuWe,CMtWf,6BN+IgB,CM9IhB,gCNkFmB,CMjFnB,qCN6NwB,CM5NxB,2CN/W8B,CMgX9B,0CNjX6B,CMkX7B,sDACgD,WNzRnB,CM0R7B,mCNnMsB,CMoMtB,iCNiWoB,CMhWpB,mCNoVsB,CMnVtB,uCACgC,WN0SnB,CMzSb,oCN0GuB,CMzGvB,oCN4MuB,CM3MvB,4BNsLe,CMrLf,sCNzLyB,CM0LzB,gCNoWmB,CMnWnB,6BN8DgB,CM7DhB,6DAEuC,WN8SnB,CM7SpB,kDAC2C,WN1FnB,CM2FxB,4BNsWe,CMrWf,6BNlGgB,CMmGhB,6BNgHgB,CM/GhB,oCNiHuB,CMhHvB,yCNyN4B,CMxN5B,kCNuNqB,CMtNrB,gCN/NmB,CMgOnB,2BN5Nc,CM6Nd,oCN2EuB,CM1EvB,qCNyEwB,CMxExB,6BNvNgB,CMwNhB,6BNzCgB,CM0ChB,+BNpCkB,CMqClB,0BNtLa,CMuLb,+BN7UkB,CM8UlB,4BN1Re,CM2Rf,0BNsDa,CMrDb,4BNmLe,CMlLf,2BNrPc,CMsPd,4BNrPe,CMsPf,8BN7WiB,CM8WjB,qCN7WwB,CM8WxB,4BN0Le,CMzLf,mCN0LsB,CMzLtB,8BNyFiB,CMxFjB,qCACgC,WNzUnB,CM0Ub,+BACiC,WN+MnB,CM9Md,2BN4Pc,CM3Pd,8BNuKiB,CMtKjB,iCNtPoB,CMuPpB,iCNiKoB,CMhKpB,+BN9PkB,CM+PlB,iCN/LoB,CMgMpB,kCNxLqB,CMyLrB,mCNrMsB,CMsMtB,wCN/L2B,CMgM3B,0EAEyC,WNxMnB,CMyMtB,gDAC2C,WN9MnB,CM+MxB,gDACyC,WN/MnB,CMgNtB,gDACyC,WNpMnB,CMqMtB,kCNjNqB,CMkNrB,2BNuRc,CMtRd,8BN5SiB,CM6SjB,+BN9EkB,CM+ElB,wGAIsC,WNnEnB,CMoEnB,qCN/TwB,CMgUxB,qDAEkC,WNqDnB,CMpDf,gCACmC,WNnQnB,CMoQhB,iCNzKoB,CM0KpB,0BN3Ka,CM4Kb,2EAEwC,WNxJnB,CMyJrB,oCN2KuB,CM1KvB,yBNiCY,CMhCZ,oCACmC,WN0QnB,CMzQhB,uCACwC,WNVnB,CMWrB,2CAC0C,WNXnB,CMYvB,8BN1IiB,CM2IjB,kCNlVqB,CMmVrB,6BNjJgB,CMkJhB,gCNbmB,CMcnB,8BN+FiB,CM9FjB,gCNuEmB,CMtEnB,uCNuE0B,CMtE1B,2BNzZc,CM0Zd,6CACqC,WN5MnB,CM6MlB,0BN0Ma,CMzMb,iCNxaoB,CMyapB,2BNIc,CMHd,iCNuFoB,CMtFpB,6BN2MgB,CM1MhB,2BN+Qc,CM9Qd,kCNzCqB,CM0CrB,2BNwPc,CMvPd,iCNrZoB,CMsZpB,6BNvBgB,CMwBhB,oCN3LuB,CM4LvB,8BN5XiB,CM6XjB,oCNhYuB,CMiYvB,kCNnYqB,CMoYrB,8BNtYiB,CMuYjB,gCNlYmB,CMmYnB,gCNlYmB,CMmYnB,iCN3boB,CM4bpB,mCN3bsB,CM4btB,4BN+Ke,CM9Kf,gCNnVmB,CMoVnB,yBN9dY,CM+dZ,iCN5RoB,CM6RpB,kCN/CqB,CMgDrB,oCN9buB,CM+bvB,iCNtfoB,CMufpB,gCN/BmB,CMgCnB,iCNzHoB,CM0HpB,6BNvIgB,CMwIhB,oCNvIuB,CMwIvB,iCN4JoB,CM3JpB,gCN4JmB,CM3JnB,8BNxciB,CMycjB,0BNjba,CMkbb,8BNvJiB,CMwJjB,gCN3gBmB,CM4gBnB,yBN7ZY,CM8ZZ,mDAEgC,WNzKnB,CM0Kb,+BNpGkB,CMqGlB,iCNxboB,CMybpB,qCN5WwB,CM6WxB,+BN9VkB,CM+VlB,+BN9PkB,CM+PlB,8BNrJiB,CMsJjB,6BNegB,CMdhB,mCN2BsB,CM1BtB,kCNoCqB,CMnCrB,+BNqCkB,CMpClB,gCN5amB,CM6anB,sCN9ayB,CM+azB,8BN/ViB,CMgWjB,2BNoBc,CMnBd,kCN8KqB,CM7KrB,iCN/FoB,CMgGpB,kCN6EqB,CM5ErB,gCN9MmB,CM+MnB,4BN+Ke,CM9Kf,2BN7Hc,CM8Hd,8BNnHiB,CMoHjB,2CACwC,WNkInB,CMjIrB,sCNkIyB,CMjIzB,mCN0KsB,CMzKtB,kCNlIqB,CMmIrB,iCNyKoB,CMxKpB,kCNnIqB,CMoIrB,oCNlIuB,CMmIvB,oCNpIuB,CMqIvB,6BN1GgB,CM2GhB,iCN7QoB,CM8QpB,wCN1U2B,CM2U3B,kCNzEqB,CM0ErB,+BNkLkB,CMjLlB,6BNXgB,CMYhB,gCNuJmB,CMtJnB,iCNwJoB,CMvJpB,gCACgC,WN/fnB,CMggBb,8BN4JiB,CM3JjB,4BN8Ge,CM7Gf,6BNwDgB,CMvDhB,6BN9IgB,CM+IhB,sCACyC,WN0LnB,CMzLtB,oCNjHuB,CMkHvB,+BNrHkB,CMsHlB,mCNnWsB,CMoWtB,gEAEyC,WN/gBnB,CMghBtB,uDACmD,WN9gBnB,CM+gBhC,6CACyC,WNlhBnB,CMmhBtB,gDAC4C,WNnhBnB,CMohBzB,8CAC0C,WNxhBnB,CMyhBvB,oCN3IuB,CM4IvB,+BN3OkB,CM4OlB,mCNxIsB,CMyItB,qCNxIwB,CMyIxB,kCNwBqB,CMvBrB,oCNwBuB,CMvBvB,6BN/dgB,CMgehB,qCNlewB,CMmexB,4BNpce,CMqcf,oCNljBuB,CMmjBvB,kCNxPqB,CMyPrB,kDAC4C,WNzPnB,CM0PzB,iDAC2C,WN7PnB,CM8PxB,gDAC0C,WNhQnB,CMiQvB,gCNrQmB,CMsQnB,8CACwC,WNxRnB,CMyRrB,+CACyC,WN7RnB,CM8RtB,sCN1RyB,CM2RzB,oCNpSuB,CMqSvB,mCN3RsB,CM4RtB,qCN/RwB,CMgSxB,mCNjSsB,CMkStB,gCN+DmB,CM9DnB,iCN/FoB,CMgGpB,uCN/b0B,CMgc1B,yBNtUY,CMuUZ,gCNtUmB,CMuUnB,kCNkEqB,CMjErB,oCNrKuB,CMsKvB,2CNrK8B,CMsK9B,iCN5UoB,CM6UpB,kCNwHqB,CMvHrB,6BNnFgB,CMoFhB,6BNzegB,CM0ehB,8BN9WiB,CM+WjB,4BNxKe,CMyKf,wCNpQ2B,CMqQ3B,oCACuC,WNSnB,CMRpB,6BNjdgB,CMkdhB,4BNzoBe,CM0oBf,6BN/nBgB,CMgoBhB,sCN3hByB,CM4hBzB,uCN9hB0B,CM+hB1B,uCN5hB0B,CM6hB1B,uCNjiB0B,CMkiB1B,+BNpRkB,CMqRlB,8BN5NiB,CM6NjB,gCN5NmB,CM6NnB,4BN/Ne,CMgOf,0BNlOa,CMmOb,iCNpeoB,CMqepB,mCNpesB,CMqetB,4BNtSe,CMuSf,4BNiFe,CMhFf,gCNlkBmB,CMmkBnB,gCNrXmB,CMsXnB,mCNpIsB,CMqItB,2BNpcc,CMqcd,sCNheyB,CMiezB,+BNpfkB,CMqflB,2BNlNc,CMmNd,mCN1XsB,CM2XtB,0BNoDa,CMnDb,mCN3JsB,CM4JtB,+BNzNkB,CM0NlB,6BNlHgB,CMmHhB,mCN7LsB,CM8LtB,qCN7LwB,CM8LxB,kCN3CqB,CM4CrB,oCN3CuB,CM4CvB,mCNrGsB,CMsGtB,sCNrGyB,CMsGzB,8BN7UiB,CM8UjB,gCNnlBmB,CMolBnB,kCNnlBqB,CMolBrB,8BN/LiB,CMgMjB,6BNlXgB,CMmXhB,iCNkFoB,CMjFpB,8BNmFiB,CMlFjB,6BN9cgB,CM+chB,uCN2B0B,CM1B1B,qCNmEwB,CMlExB,wCNxK2B,CMyK3B,4BN9lBe,CM+lBf,wCNtoB2B,CMuoB3B,2CNqD8B,CMpD9B,8BNxlBiB,CMylBjB,kDN5oBqC,CM6oBrC,2EACgE,WN9qBnB,CM+qB7C,+DAEiC,WNvfnB,CMwfd,4BNhYe,CMiYf,8BNhYiB,CMiYjB,4CAC0C,WN1HnB,CM2HvB,iCNzRoB,CM0RpB,6BNiCgB,CMhChB,oCNiCuB,CMhCvB,+BNlHkB,CMmHlB,qCNlHwB,CMmHxB,sCNlHyB,CMmHzB,iCNrNoB,CMsNpB,kCNpbqB,CMqbrB,4BNmEe,CMlEf,gCNpDmB,CMqDnB,8DACiD,WNzYnB,CM0Y9B,sCACyC,WN7anB,CM8atB,kCNtXqB,CMuXrB,oCNlfuB,CMmfvB,sCNlfyB,CMmfzB,6BNtTgB,CMuThB,mCNptBsB,CMqtBtB,qCNptBwB,CMqtBxB,yCACyC,WNrtBnB,CMstBtB,6CAC2C,WNttBnB,CMutBxB,kCNJqB,CMKrB,oCNJuB,CMKvB,6BNHgB,CMIhB,+BN3WkB,CM4WlB,8CACoC,WN5WnB,CM6WjB,kDACsC,WN7WnB,CM8WnB,4BNtNe,CMuNf,qCN3bwB,CM4bxB,+BNtFkB,CMuFlB,4EAE6C,WNxEnB,CMyE1B,+DACuD,WNvEnB,CMwEpC,qDAC6C,WN3EnB,CM4E1B,wDACgD,WN5EnB,CM6E7B,sDAC8C,WNjFnB,CMkF3B,6BN3KgB,CM4KhB,kDAEiC,WNzrBnB,CM0rBd,8BNlPiB,CMmPjB,sCNKyB,CMJzB,sCNKyB,CMJzB,qCNKwB,CMJxB,mDACyC,WNDnB,CMEtB,uDAC2C,WNFnB,CMGxB,+BNxsBkB,CMysBlB,2BNpbc,CMqbd,2BN1hBc,CM2hBd,2BNxYc,CMyYd,8BN/OiB,CMgPjB,8BNziBiB,CM0iBjB,gCNjUmB,CMkUnB,kCN7KqB,CM8KrB,kCNhIqB,CMiIrB,iCNJoB,CMKpB,6BNxUgB,COzchB,4MH8BE,kBACA,UACA,WACA,UACA,YACA,gBACA,sBACA,SAUA,mDAEE,gBACA,WACA,YACA,SACA,iBACA,UInBJ,OACE,aACA,mBACA,qBACA,uBACA,kBACA,wBA1CgB,CA8ChB,eACE,wBArCa,CAoCf,aACE,wBArCa,CAoCf,YACE,wBArCa,CAoCf,YACE,wBArCa,CAoCf,eACE,wBArCa,CA0Cf,cACE,4BACA,sgBAFF,YACE,4BACA,kzBAFF,WACE,4BACA,0wBAFF,WACE,4BACA,00HAFF,cACE,4BACA,0uBAIJ,cACE,mBACA,UAr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D9B,UFrDoB,CEsDpB,oBFrDqB,CEsDrB,SFrDsB,CEyDlB,2DACE,WAGF,uDACE,yEAGF,wDACE,yEAMR,cACE,aACA,kBFpCyB,CEqCzB,sBFpC6B,CEqC7B,WFpCmB,CEqCnB,YFpCoB,CEqCpB,gBFpCoB,CEqCpB,6DFpCuB,CEqCvB,kBFpC0B,CEqC1B,kBFpC0B,CEqC1B,kBFpC2B,CEqC3B,oDFpC0B,CEuC5B,cACE,cF5DoB,CE6DpB,oBF5DqB,CE6DrB,eF5DwB,CE6DxB,eF5DyB,CE8DzB,8BACE,eAGF,4BAEE,QF9F0B,CE+F1B,mBF9FiC,CE+FjC,mBACA,wBF/FoC,CEgGpC,UF3QkB,CE4QlB,aF/F6B,CEkG/B,yBAEE,QFhGuB,CEiGvB,mBFhG8B,CEiG9B,mBACA,wBFjGiC,CEkGjC,UFrRkB,CEsRlB,aFjG0B,CEoG5B,2BAEE,QFlGyB,CEmGzB,mBFlGgC,CEmGhC,mBACA,wBFnGmC,CEoGnC,UF/RkB,CEgSlB,aFnG4B,CEsG9B,oBACE,YF9FyB,CEgGzB,yCF9F4B,CEiG9B,gCACE,SAIJ,cACE,uBACA,iBFrLoB,CEsLpB,eFrLqB,CEsLrB,0BACA,aFrLmB,CEsLnB,aFrLuB,CEwLzB,oCACE,kBACA,QACA,SACA,OACA,YF1LgC,CE2LhC,gBACA,8BFnToB,CEoTpB,6BFpToB,CEuTtB,0BACE,WACA,YFlMgC,CEmMhC,yBFlMoC,CEqMtC,aACE,eACA,kBF1RmB,CE6RrB,aACE,iBFnM4B,CEoM5B,UACA,KFpMuB,CEqMvB,OFrMuB,CEsMvB,kBF5M+B,CE6M/B,sBF5MmC,CE6MnC,WF5MyB,CE6MzB,YF5M0B,CE6M1B,UACA,gBACA,6BF3M8B,CE4M9B,WF3M0B,CE4M1B,iBF/UoB,CEiVpB,sBF3M8B,CE4M9B,UF3MyB,CE4MzB,iBF3M+B,CE4M/B,eF3M6B,CE4M7B,eFtN+B,CEuN/B,eAEA,mBACE,cF7MiC,CE8MjC,sBF5MkC,CE6MlC,aF5TU,CE+TZ,mBACE,YF9M+B,CE+M/B,+CF9MkC,CEiNpC,+BACE,SAIJ,eACE,UACA,sBF7T8B,CE8T9B,QF7TqB,CE8TrB,eF7TsB,CE8TtB,aF7ToB,CE8TpB,iBF7TwB,CE8TxB,kBF7T0B,CE8T1B,kBF7T0B,CE8T1B,iBF7TyB,CE8TzB,oBF7TwB,CEgU1B,oFAME,eFnUmB,CEsUrB,yCAGE,sBACA,UFzUkB,CE0UlB,0CFjUuB,CEkUvB,wBFxUmB,CEyUnB,qBFxU0B,CEyU1B,kBFtUuB,CEuUvB,0CFzUuB,CE0UvB,aFvUkB,CEwUlB,iBF1UsB,CE4UtB,4FACE,gCACA,sCAGF,2DACE,wBF5UuB,CE6UvB,YF5UwB,CE6UxB,yCF5U2B,CE+U7B,gFACE,WAIJ,aACE,eFpWmB,CEqWnB,eFxaoB,CE0apB,mBACE,UAGF,oBACE,UACA,aFpWgB,CEqWhB,gBACA,kBAGF,uCAEE,cFlXiB,CEmXjB,UACA,iBF/WoB,CEgXpB,mBFrXiB,CEyXrB,aACE,cF1XmB,CE2XnB,eF1XoB,CE4XpB,0BACE,eAIJ,YACE,kBF7XuB,CE8XvB,iBF/XsB,CEkYxB,gBACE,aFxXsB,CEyXtB,aFxXuB,CE2XzB,cACE,cACA,eACA,sBACA,kBF1YuB,CE2YvB,aF1YkB,CE2YlB,iBF7YsB,CEgZxB,6BAEE,mBACA,uBACA,eF9doB,CE+dpB,aFnZkB,CEqZlB,yCACE,cACA,iBFzZoB,CE4ZtB,yCACE,cACA,cAIJ,mBACE,aACA,sBFpZkC,CEqZlC,eFtZyB,CEyZ3B,0BACE,kBFtZqC,CEuZrC,sBFtZyC,CEuZzC,eFtZgC,CEuZhC,cFtZiC,CEuZjC,gBACA,kBFvZoC,CEwZpC,UFvZ+B,CEwZ/B,aFvZmC,CEwZnC,eFvZqC,CEyZrC,kCACE,YACA,qBACA,YACA,gBACA,aACA,gBAEA,kBACA,wBF5dU,CE6dV,UFvgBkB,CEwgBlB,gBACA,kBACA,kBAUJ,YACE,kBACA,uBACA,uBACA,SFvfgB,CEwfhB,UFxfgB,CEyfhB,0BFvfkB,CEyflB,gCACA,kBACA,iBFxfwB,CEyfxB,mBF3fuB,CE4fvB,eF/fgB,CEggBhB,eACA,iBAEA,gCACE,aACA,mBACA,gBFlgBmB,CEqgBrB,wBACE,oBFjgBU,CEkgBV,aFlgBU,CEogBV,sCACE,kBACA,YAOF,mDACE,cACA,kBACA,aACA,eACA,eACA,qBACA,wBFphBQ,CEshBR,gEACE,cACA,wBAGF,iEACE,UACA,yBAKJ,wCAEI,uCAEA,sDACE,yCAMR,0BACE,qBACA,aF9iBY,CEijBd,uBACE,qBACA,aFljBS,CEqjBX,2BACE,qBACA,aFtjBa,CEyjBf,0BACE,oBF/jBY,CEgkBZ,aFhkBY,CEkkBZ,+DAEE,kBACA,aACA,aACA,wBACA,kBAEA,4EACE,cACA,eACA,yBACA,+BACA,8BAOF,6EACE,cACA,aACA,yBACA,0BACA,8BAQJ,8CAEE,kBACA,UACA,YACA,aACA,uBACA,WACA,YACA,wCACA,kBAOF,6CAEE,kBACA,UACA,SACA,aACA,cACA,eACA,yBAOF,sDACE,cACA,kBACA,UACA,eACA,qBACA,wBFzoBU,CE2oBV,kEACE,YACA,aACA,eACA,wBAGF,mEACE,YACA,WACA,eACA,yBAWA,kEACE,8CAGF,mEACE,+CAGF,6EACE,2DAOV,sBACE,cFhnB+B,CEinB/B,kBFhnBiC,CEinBjC,cFhnB+B,CEinB/B,iBF/mB4B,CEgnB5B,SF/mB6B,CEgnB7B,kBFlnBgC,CEmnBhC,eFhnBiC,CEknBjC,yBACE,qBACA,kBAGF,2CACE,WACA,cACA,SFxnBwB,CEynBxB,UFxnByB,CEynBzB,iBFxnBgC,CEynBhC,kBFtnB2B,CEunB3B,UF9uBkB,CE+uBlB,eF5nByB,CE6nBzB,kBAEA,sEACE,kBF5nByB,CE8nBzB,2FACE,kBFjoByB,CEkoBzB,UFvvBc,CE0vBhB,gGACE,kBFtoByB,CE2oB/B,gDACE,WACA,cACA,WFlpB4B,CEmpB5B,YACA,cACA,kBF/oB2B,CEopB/B,eACE,wCAGF,YACE,wBFjwBqB,CEowBvB,YACE,kCFpwBqB,CEuwBvB,mBACE,gBAIF,yBACE,kBACA,YACA,WACA,YACA,gBAKA,wBACE,WACA,MF5pBqB,CE+pBvB,qCACE,QACA,UC5yBJ,iCAEI,mBACE,sBAGF,oBACE,cAMN,qEAGI,mBACE,sBAGF,oBACE,cCrBN,4BACE,GACE,6CAGF,IACE,uCAGF,IACE,6CAGF,KACE,uCAIJ,4BACE,KACE,wBACA,WAIJ,gDACE,GACE,YACA,aACA,QAGF,IACE,WACA,YACA,QAGF,IACE,WACA,aACA,cAGF,IACE,aACA,WACA,WAGF,KACE,YACA,aACA,aAIJ,iDACE,GACE,YACA,cACA,QAGF,IACE,WACA,cACA,QAGF,IACE,YACA,QACA,cAGF,KACE,YACA,cACA,eC7EJ,sBACE,GACE,qBAGF,IACE,sBAGF,IACE,sBAGF,KACE,oBAKJ,sBACE,GACE,mBACA,UAGF,KACE,qBACA,WAKJ,0CACE,GACE,aACA,aACA,QAGF,IACE,aACA,YACA,QAGF,IACE,aACA,cACA,cAGF,IACE,QACA,cACA,eAGF,KACE,aACA,aACA,gBAIJ,2CACE,GACE,YACA,cACA,QAGF,IACE,YACA,cACA,QAGF,IACE,aACA,QACA,eAGF,KACE,YACA,WACA,gBAIJ,8CACE,GACE,yBAGF,GACE,yBAGF,IACE,0BAGF,KACE,2BAKJ,sCACE,GACE,mBACA,qBACA,UAGF,IACE,mBACA,qBACA,UAGF,IACE,oBACA,sBAGF,KACE,aACA,mBACA,WAIJ,oCACE,GACE,0BACA,UAGF,KACE,wBACA,WAIJ,gCACE,GACE,uBAGF,KACE,0BJzIF,iEKbI,gBAIJ,uBACE,uBAIA,wCACE,SACA,WACA,YACA,UACA,mCACA,wCAEA,qDACE,mCAGF,kDACE,MACA,SACA,2BAGF,+GAEE,MACA,OAGF,8GAEE,MACA,QAGF,qDACE,QACA,SACA,gCAGF,qHAEE,QACA,OACA,2BAGF,oHAEE,QACA,QACA,2BAGF,qDACE,SACA,SACA,2BAGF,qHAEE,SACA,OAGF,oHAEE,QACA,SAKN,aLlEA,iEKqEM,6BAEA,oFACE,aAGF,kFACE,4BC5FN,wCACE,6BAEA,kDACE,MACA,WACA,YACA,SACA,2BAGF,8GAEE,MACA,QACA,YACA,UAGF,+GAEE,MACA,WACA,YACA,OAGF,qHAEE,QACA,WACA,YACA,OACA,2BAGF,qDACE,QACA,WACA,YACA,SACA,gCAGF,oHAEE,QACA,QAC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","file":"app/main.d875a1005df5117243c1.css","sourcesContent":["@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: italic;\n\tfont-weight: 300;\n\tfont-display: auto;\n\tsrc: url(webfonts/Open_Sans-italic-300.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: italic;\n\tfont-weight: 400;\n\tfont-display: auto;\n\tsrc: url(webfonts/Open_Sans-italic-400.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: italic;\n\tfont-weight: 600;\n\tfont-display: auto;\n\tsrc: url(webfonts/Open_Sans-italic-600.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: italic;\n\tfont-weight: 700;\n\tfont-display: auto;\n\tsrc: url(webfonts/Open_Sans-italic-700.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: italic;\n\tfont-weight: 800;\n\tfont-display: auto;\n\tsrc: url(webfonts/Open_Sans-italic-800.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: normal;\n\tfont-weight: 300;\n\tfont-display: auto;\n\tsrc: url(webfonts/Open_Sans-normal-300.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: normal;\n\tfont-weight: 400;\n\tfont-display: auto;\n\tsrc: url(webfonts/Open_Sans-normal-400.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: normal;\n\tfont-weight: 600;\n\tfont-display: auto;\n\tsrc: url(webfonts/Open_Sans-normal-600.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: normal;\n\tfont-weight: 700;\n\tfont-display: auto;\n\tsrc: url(webfonts/Open_Sans-normal-700.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: normal;\n\tfont-weight: 800;\n\tfont-display: auto;\n\tsrc: url(webfonts/Open_Sans-normal-800.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n","@import \"../css/webfonts.css\";\n\n$primary: #175DDC;\n$primary-accent: #1252A3;\n$secondary: #ced4da;\n$secondary-alt: #1A3B66;\n$success: #00a65a;\n$info: #555555;\n$warning: #bf7e16;\n$danger: #dd4b39;\n\n$theme-colors: ( \n \"primary-accent\": $primary-accent,\n \"secondary-alt\": $secondary-alt,\n);\n\n$body-bg: #ffffff;\n$body-color: #333333;\n\n$font-family-sans-serif: 'Open Sans','Helvetica Neue',Helvetica,\n Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';\n\n$h1-font-size: 1.7rem;\n$h2-font-size: 1.3rem;\n$h3-font-size: 1rem;\n$h4-font-size: 1rem;\n$h5-font-size: 1rem;\n$h6-font-size: 1rem;\n\n$small-font-size: 90%;\n$font-size-lg: 1.15rem;\n$code-font-size: 100%;\n\n$navbar-padding-y: .75rem;\n$grid-gutter-width: 20px;\n$card-spacer-y: .6rem;\n\n$list-group-item-padding-y: .6rem;\n$list-group-active-color: $body-color;\n$list-group-active-bg: #ffffff;\n$list-group-active-border-color: rgba(#000000, .125);\n\n$dropdown-link-color: $body-color;\n$dropdown-link-hover-bg: rgba(#000000, .06);\n$dropdown-link-active-color: $dropdown-link-color;\n$dropdown-link-active-bg: rgba(#000000, .1);\n$dropdown-item-padding-x: 1rem;\n\n$navbar-brand-font-size: 35px;\n$navbar-brand-height: 35px;\n$navbar-brand-padding-y: 0;\n$navbar-dark-color: rgba(#ffffff, .7);\n$navbar-dark-hover-color: rgba(#ffffff, .9);\n$navbar-nav-link-padding-x: 0.8rem;\n\n$input-bg: #fbfbfb;\n$input-focus-bg: #ffffff;\n$input-disabled-bg: #e0e0e0;\n$input-placeholder-color: #b4b4b4;\n\n$table-accent-bg: rgba(#000000, .02);\n$table-hover-bg: rgba(#000000, .03);\n\n$modal-backdrop-opacity: 0.3;\n$btn-font-weight: 600;\n$lead-font-weight: normal;\n\n$grid-breakpoints: (\n xs: 0,\n sm: 1px,\n md: 2px,\n lg: 3px,\n xl: 4px\n);\n\n//@import \"~bootstrap/scss/bootstrap\";\n@import \"~bootstrap/scss/_functions\";\n@import \"~bootstrap/scss/_variables\";\n@import \"~bootstrap/scss/_mixins\";\n@import \"~bootstrap/scss/_root\";\n@import \"~bootstrap/scss/_reboot\";\n@import \"~bootstrap/scss/_type\";\n@import \"~bootstrap/scss/_images\";\n@import \"~bootstrap/scss/_code\";\n@import \"~bootstrap/scss/_grid\";\n@import \"~bootstrap/scss/_tables\";\n@import \"~bootstrap/scss/_forms\";\n@import \"~bootstrap/scss/_buttons\";\n@import \"~bootstrap/scss/_transitions\";\n@import \"~bootstrap/scss/_dropdown\";\n@import \"~bootstrap/scss/_button-group\";\n@import \"~bootstrap/scss/_input-group\";\n@import \"~bootstrap/scss/_custom-forms\";\n@import \"~bootstrap/scss/_nav\";\n@import \"~bootstrap/scss/_navbar\";\n@import \"~bootstrap/scss/_card\";\n@import \"~bootstrap/scss/_breadcrumb\";\n@import \"~bootstrap/scss/_pagination\";\n@import \"~bootstrap/scss/_badge\";\n@import \"~bootstrap/scss/_jumbotron\";\n@import \"~bootstrap/scss/_alert\";\n@import \"~bootstrap/scss/_progress\";\n@import \"~bootstrap/scss/_media\";\n@import \"~bootstrap/scss/_list-group\";\n@import \"~bootstrap/scss/_close\";\n//@import \"~bootstrap/scss/_toasts\";\n@import \"~bootstrap/scss/_modal\";\n@import \"~bootstrap/scss/_tooltip\";\n@import \"~bootstrap/scss/_popover\";\n@import \"~bootstrap/scss/_carousel\";\n@import \"~bootstrap/scss/_spinners\";\n@import \"~bootstrap/scss/_utilities\";\n@import \"~bootstrap/scss/_print\";\n@import \"./plugins\";\n\nhtml {\n font-size: 14px;\n}\n\nbody {\n min-width: 1010px;\n\n &.layout_frontend {\n background-color: #ecf0f5;\n }\n\n &.full-width:not(.layout_frontend) {\n .container {\n min-width: 980px;\n width: 90%;\n }\n }\n}\n\n.page-header, .secondary-header {\n border-bottom: 1px solid $border-color;\n padding-bottom: 0.6rem;\n margin-bottom: 0.5rem;\n\n h1, h2, h3, h4 {\n margin: 0;\n }\n}\n\nh1, h2, h3, h4, h5 {\n small {\n font-size: 80%;\n }\n}\n\ninput, select, textarea {\n &:required {\n box-shadow: none;\n }\n}\n\n.secondary-header, .spaced-header {\n margin-top: 4rem;\n}\n\n.navbar {\n padding-left: 0;\n padding-right: 0;\n\n .dropdown-menu {\n min-width: 200px;\n max-width: 300px;\n\n .dropdown-item-text {\n line-height: 1.3;\n\n span, small {\n display: block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n }\n\n .nav-link {\n font-weight: 600;\n }\n}\n\n.navbar-brand {\n margin-top: -20px;\n margin-bottom: -20px;\n}\n\n.dropdown-menu {\n button {\n cursor: pointer;\n }\n}\n\n.container {\n width: 980px;\n max-width: none !important;\n margin: 0 auto;\n padding: 0;\n}\n\n.page-content {\n margin-top: 20px;\n}\n\n.footer {\n margin-top: 40px;\n padding: 40px 0 40px 0;\n border-top: 1px solid $border-color;\n}\n\n.list-group-item.active {\n border-left: 3px solid theme-color(\"primary\");\n font-weight: bold;\n padding-left: calc(#{$list-group-item-padding-x} - 3px);\n}\n\n.card-header, .modal-header {\n font-weight: bold;\n text-transform: uppercase;\n\n small {\n font-weight: normal;\n text-transform: none;\n @extend .text-muted;\n }\n}\n\n.card-body-header {\n font-size: $font-size-lg;\n @extend .mb-4\n}\n\n.card ul.fa-ul.card-ul {\n margin-left: 1.9em;\n\n li {\n word-break: break-all;\n }\n\n .fa-li {\n top: 4px;\n }\n\n &.carets {\n margin-left: 1.1em;\n\n .fa-li {\n left: -17px;\n width: 1.1em;\n }\n }\n\n ul {\n &.carets {\n margin-left: 0.85em;\n }\n }\n}\n\n.card-org-plans {\n h2 {\n font-size: $font-size-lg;\n }\n}\n\n.modal-dialog {\n width: $modal-md;\n}\n\n.modal-sm {\n width: $modal-sm;\n}\n\n.modal-lg { \n width: $modal-lg;\n}\n\n.modal-body {\n h3, .section-header > * {\n font-weight: normal;\n text-transform: uppercase;\n color: $text-muted;\n }\n}\n.modal .list-group-flush {\n :first-child {\n border-top: none;\n }\n :last-child {\n border-bottom: none;\n }\n}\n\n.modal-footer {\n justify-content: flex-start;\n background-color: $input-bg;\n @include border-radius($modal-content-border-radius);\n}\n\nlabel:not(.form-check-label):not(.btn), label.bold {\n font-weight: 600;\n}\n\ninput[type=\"search\"]::-webkit-search-cancel-button {\n -webkit-appearance: searchfield-cancel-button;\n}\n\n.btn[class*=\"btn-outline-\"] {\n &:not(:hover) {\n border-color: $secondary;\n background-color: #fbfbfb;\n }\n}\n\n.btn-link {\n &:focus,\n &.focus {\n outline-color: -webkit-focus-ring-color;\n outline-offset: 1px;\n outline-style: auto;\n outline-width: 1px;\n }\n}\n\n.btn-outline-secondary {\n color: $text-muted;\n\n &:hover:not(:disabled) {\n color: $body-color;\n }\n\n &:disabled {\n opacity: 1;\n }\n\n &:focus,\n &.focus {\n box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($primary), $primary, 15%), .5);\n }\n}\n\n.btn-submit {\n position: relative;\n\n .fa-spinner {\n position: absolute;\n display: none;\n align-items: center;\n justify-content: center;\n bottom: 0;\n top: 0;\n left: 0;\n right: 0;\n }\n\n &:disabled:not(.manual), &.loading {\n .fa-spinner {\n display: flex;\n }\n\n span {\n visibility: hidden;\n }\n }\n}\n\n.list-group-item {\n &:focus,\n &.focus {\n z-index: 100;\n }\n}\n\n.fa-icon-above-input {\n height: 1.5em;\n}\n\n.table.table-list {\n thead th {\n border-top: none;\n }\n\n tr:first-child {\n td {\n border: none;\n }\n }\n\n td {\n vertical-align: middle;\n \n &.reduced-lh {\n line-height: 1;\n small {\n font-size: 80%;\n }\n }\n\n small, > .fa, .icon {\n color: $text-muted;\n }\n }\n\n td.wrap {\n word-break: break-all;\n }\n\n td.table-list-options {\n width: 76px;\n max-width: 76px;\n text-align: right;\n height: 50px;\n\n &.wider {\n width: 100px;\n max-width: 100px;\n }\n\n .btn {\n line-height: 1;\n transition: initial;\n }\n\n .dropdown-menu {\n line-height: $line-height-base;\n }\n }\n\n tr:not(:hover) td.table-list-options {\n > .dropdown:not(.show) button:not(:focus):not(:active), > button:not(:focus):not(:active) {\n @extend .sr-only;\n }\n }\n\n td.table-list-icon {\n width: 45px;\n max-width: 45px;\n text-align: center;\n\n img {\n @extend .rounded;\n @extend .img-fluid;\n max-height: 24px;\n }\n }\n\n td.table-list-checkbox {\n width: 35px;\n max-width: 35px;\n }\n\n td.table-list-strike {\n color: $text-muted;\n text-decoration: line-through;\n }\n}\n\n.text-lg {\n font-size: $font-size-lg;\n}\n\n.text-strike {\n text-decoration: line-through;\n}\n\n.font-weight-semibold {\n font-weight: 600;\n}\n\n.password-wrapper {\n word-break: break-all;\n white-space: pre-wrap;\n min-width: 0;\n}\n\n.password-row {\n min-width: 0;\n}\n\n.password-number {\n color: #007fde;\n}\n\n.password-special {\n color: #c40800;\n}\n\napp-vault-groupings, app-org-vault-groupings, .groupings {\n .card {\n #search {\n margin-bottom: 1rem;\n }\n\n h3 {\n font-weight: normal;\n text-transform: uppercase;\n color: $text-muted;\n }\n\n ul:last-child {\n margin-bottom: 0;\n }\n\n .card-body a {\n color: $body-color;\n\n &:hover {\n &.text-muted {\n color: $body-color !important;\n }\n }\n }\n\n .show-active {\n display: none;\n }\n\n li {\n > .fa, > div > .fa {\n cursor: pointer;\n }\n }\n\n li.active {\n > .show-active, > div .show-active {\n display: inline;\n }\n }\n\n li.active {\n > a:first-of-type, > div a:first-of-type {\n font-weight: bold;\n color: theme-color(\"primary\");\n }\n\n > .fa, > div > .fa {\n color: theme-color(\"primary\");\n }\n }\n }\n}\n\napp-password-generator {\n #lengthRange {\n width: 100%;\n }\n\n .card-password {\n .card-body {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n text-align: center;\n font-size: $font-size-lg;\n font-family: $font-family-monospace;\n }\n }\n}\n\napp-password-generator-history {\n .list-group-item {\n line-height: 1;\n\n .password {\n font-family: $font-family-monospace;\n }\n }\n}\n\napp-import {\n textarea {\n height: 150px;\n }\n}\n\napp-avatar {\n img {\n @extend .rounded;\n }\n}\n\napp-user-billing {\n .progress {\n height: 20px;\n \n .progress-bar {\n min-width: 50px;\n }\n }\n}\n\n#duo-frame {\n background: url('../images/loading.svg') 0 0 no-repeat;\n height: 330px;\n\n iframe {\n width: 100%;\n height: 100%;\n border: none;\n }\n}\n\n#web-authn-frame {\n background: url('../images/loading.svg') 0 0 no-repeat;\n height: 290px;\n\n iframe {\n width: 100%;\n height: 100%;\n border: none;\n }\n}\n\n#bt-dropin-container {\n background: url('../images/loading.svg') 0 0 no-repeat;\n min-height: 50px;\n}\n\n.braintree-placeholder, .braintree-sheet__header {\n display: none;\n}\n\n.braintree-sheet__content--button {\n text-align: left;\n padding: 0;\n min-height: 0;\n}\n\n.braintree-sheet__container {\n margin-bottom: 0;\n}\n\n.braintree-sheet {\n border: none;\n}\n\n.totp {\n .totp-code {\n @extend .text-monospace;\n font-size: 1.2rem;\n }\n\n .totp-countdown {\n margin: 3px 3px 0 0;\n display: block;\n user-select: none;\n\n .totp-sec {\n font-size: 0.85em;\n position: absolute;\n line-height: 32px;\n width: 32px;\n text-align: center;\n }\n\n svg {\n width: 32px;\n height: 32px;\n transform: rotate(-90deg);\n }\n\n .totp-circle {\n fill: none;\n stroke: $primary;\n\n &.inner {\n stroke-width: 3;\n stroke-dasharray: 78.6;\n stroke-dashoffset: 0;\n }\n\n &.outer {\n stroke-width: 2;\n stroke-dasharray: 88;\n stroke-dashoffset: 0;\n }\n }\n }\n\n > .align-items-center {\n margin-bottom: -5px;\n }\n\n &.low {\n .totp-sec, .totp-code {\n color: $danger;\n }\n\n .totp-circle {\n stroke: $danger;\n }\n }\n}\n\n.callout {\n padding: $alert-padding-y $alert-padding-x;\n margin-bottom: $alert-margin-bottom;\n border: 1px solid $card-border-color;\n border-left-width: 5px;\n border-radius: $card-inner-border-radius;\n background-color: #fafafa;\n\n .callout-heading {\n margin-top: 0;\n }\n\n h3.callout-heading {\n font-weight: bold;\n text-transform: uppercase;\n }\n\n &.callout-primary {\n border-left-color: $primary;\n\n .callout-heading {\n color: $primary;\n }\n }\n\n &.callout-info {\n border-left-color: $gray-800;\n\n .callout-heading {\n color: $gray-800;\n }\n }\n\n &.callout-danger {\n border-left-color: $danger;\n\n .callout-heading {\n color: $danger;\n }\n }\n\n &.callout-success {\n border-left-color: $success;\n\n .callout-heading {\n color: $success;\n }\n }\n\n &.callout-warning {\n border-left-color: $warning;\n\n .callout-heading {\n color: $warning;\n }\n }\n}\n\n.list-group-2fa {\n .logo-2fa {\n min-width: 100px;\n }\n}\n\n.form-check-block {\n .form-check-label {\n font-weight: 600;\n\n > small {\n display: block;\n color: $text-muted;\n font-weight: normal;\n }\n\n > span {\n display: block;\n font-weight: normal;\n @extend .mt-2;\n }\n }\n}\n\n.form-check-block + .form-check-block {\n &:not(.mt-2) {\n @extend .mt-3;\n }\n}\n\n.form-inline {\n input[type='datetime-local'] {\n width: 200px;\n }\n}\n\n.form-control.stripe-form-control {\n padding-top: 0.55rem;\n\n &.is-focused {\n color: $input-focus-color;\n background-color: $input-focus-bg;\n border-color: $input-focus-border-color;\n outline: 0;\n box-shadow: $input-focus-box-shadow;\n \n &.is-invalid {\n box-shadow: 0 0 0 $input-focus-width rgba($form-feedback-invalid-color, .25);\n }\n }\n \n &.is-invalid {\n border-color: $form-feedback-invalid-color;\n }\n}\n\n.org-nav {\n background-color: $input-bg;\n border-bottom: 1px solid $border-color;\n height: 100px;\n min-height: 100px;\n\n .container {\n height: 100%;\n }\n\n .nav-tabs {\n border-bottom: none;\n\n a {\n color: $body-color;\n\n &:not(.active) {\n border-color: transparent;\n }\n\n &.active {\n border-top: 3px solid theme-color(\"primary\");\n font-weight: bold;\n padding-top: calc(#{$nav-link-padding-y} - 2px);\n }\n\n &.disabled {\n color: $input-placeholder-color;\n }\n }\n }\n\n .org-name {\n line-height: 1;\n span {\n font-size: $font-size-lg;\n display: block;\n }\n }\n}\n\nimg.logo {\n width: 284px;\n height: 43px;\n margin: 0 auto;\n display: block;\n}\n\n.min-height-fix {\n min-height: 1px;\n}\n\n.overflow-hidden {\n overflow: hidden;\n}\n\n.cdk-drag-preview {\n z-index: $zindex-tooltip !important;\n opacity: 0.8;\n background-color: $white;\n border-radius: $border-radius;\n}\n\n.cursor-move {\n cursor: move !important;\n}\n\n@import \"./register-layout\";\n",":root {\n // Custom variable values only support SassScript inside `#{}`.\n @each $color, $value in $colors {\n --#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$color}: #{$value};\n }\n\n @each $bp, $value in $grid-breakpoints {\n --breakpoint-#{$bp}: #{$value};\n }\n\n // Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --font-family-sans-serif: #{inspect($font-family-sans-serif)};\n --font-family-monospace: #{inspect($font-family-monospace)};\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Future-proof rule: in browsers that support :focus-visible, suppress the focus outline\n// on elements that programmatically receive focus but wouldn't normally show a visible\n// focus outline. In general, this would mean that the outline is only applied if the\n// interaction that led to the element receiving programmatic focus was a keyboard interaction,\n// or the browser has somehow determined that the user is primarily a keyboard user and/or\n// wants focus outlines to always be presented.\n//\n// See https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible\n// and https://developer.paciellogroup.com/blog/2018/03/focus-visible-and-backwards-compatibility/\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover() {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n\n @include hover() {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n // Disable auto-hiding scrollbar in IE & legacy Edge to avoid overlap,\n // making it impossible to interact with the content\n -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Set the cursor for non-` ","import { CipherRepromptType } from '../../enums/cipherRepromptType';\nimport { CipherType } from '../../enums/cipherType';\n\nimport { CipherData } from '../data/cipherData';\n\nimport { CipherView } from '../view/cipherView';\n\nimport { Attachment } from './attachment';\nimport { Card } from './card';\nimport Domain from './domainBase';\nimport { EncString } from './encString';\nimport { Field } from './field';\nimport { Identity } from './identity';\nimport { Login } from './login';\nimport { Password } from './password';\nimport { SecureNote } from './secureNote';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class Cipher extends Domain {\n id: string;\n organizationId: string;\n folderId: string;\n name: EncString;\n notes: EncString;\n type: CipherType;\n favorite: boolean;\n organizationUseTotp: boolean;\n edit: boolean;\n viewPassword: boolean;\n revisionDate: Date;\n localData: any;\n login: Login;\n identity: Identity;\n card: Card;\n secureNote: SecureNote;\n attachments: Attachment[];\n fields: Field[];\n passwordHistory: Password[];\n collectionIds: string[];\n deletedDate: Date;\n reprompt: CipherRepromptType;\n\n constructor(obj?: CipherData, alreadyEncrypted: boolean = false, localData: any = null) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(this, obj, {\n id: null,\n userId: null,\n organizationId: null,\n folderId: null,\n name: null,\n notes: null,\n }, alreadyEncrypted, ['id', 'userId', 'organizationId', 'folderId']);\n\n this.type = obj.type;\n this.favorite = obj.favorite;\n this.organizationUseTotp = obj.organizationUseTotp;\n this.edit = obj.edit;\n if (obj.viewPassword != null) {\n this.viewPassword = obj.viewPassword;\n } else {\n this.viewPassword = true; // Default for already synced Ciphers without viewPassword\n }\n this.revisionDate = obj.revisionDate != null ? new Date(obj.revisionDate) : null;\n this.collectionIds = obj.collectionIds;\n this.localData = localData;\n this.deletedDate = obj.deletedDate != null ? new Date(obj.deletedDate) : null;\n this.reprompt = obj.reprompt;\n\n switch (this.type) {\n case CipherType.Login:\n this.login = new Login(obj.login, alreadyEncrypted);\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNote(obj.secureNote, alreadyEncrypted);\n break;\n case CipherType.Card:\n this.card = new Card(obj.card, alreadyEncrypted);\n break;\n case CipherType.Identity:\n this.identity = new Identity(obj.identity, alreadyEncrypted);\n break;\n default:\n break;\n }\n\n if (obj.attachments != null) {\n this.attachments = obj.attachments.map(a => new Attachment(a, alreadyEncrypted));\n } else {\n this.attachments = null;\n }\n\n if (obj.fields != null) {\n this.fields = obj.fields.map(f => new Field(f, alreadyEncrypted));\n } else {\n this.fields = null;\n }\n\n if (obj.passwordHistory != null) {\n this.passwordHistory = obj.passwordHistory.map(ph => new Password(ph, alreadyEncrypted));\n } else {\n this.passwordHistory = null;\n }\n }\n\n async decrypt(encKey?: SymmetricCryptoKey): Promise {\n const model = new CipherView(this);\n\n await this.decryptObj(model, {\n name: null,\n notes: null,\n }, this.organizationId, encKey);\n\n switch (this.type) {\n case CipherType.Login:\n model.login = await this.login.decrypt(this.organizationId, encKey);\n break;\n case CipherType.SecureNote:\n model.secureNote = await this.secureNote.decrypt(this.organizationId, encKey);\n break;\n case CipherType.Card:\n model.card = await this.card.decrypt(this.organizationId, encKey);\n break;\n case CipherType.Identity:\n model.identity = await this.identity.decrypt(this.organizationId, encKey);\n break;\n default:\n break;\n }\n\n const orgId = this.organizationId;\n\n if (this.attachments != null && this.attachments.length > 0) {\n const attachments: any[] = [];\n await this.attachments.reduce((promise, attachment) => {\n return promise.then(() => {\n return attachment.decrypt(orgId, encKey);\n }).then(decAttachment => {\n attachments.push(decAttachment);\n });\n }, Promise.resolve());\n model.attachments = attachments;\n }\n\n if (this.fields != null && this.fields.length > 0) {\n const fields: any[] = [];\n await this.fields.reduce((promise, field) => {\n return promise.then(() => {\n return field.decrypt(orgId, encKey);\n }).then(decField => {\n fields.push(decField);\n });\n }, Promise.resolve());\n model.fields = fields;\n }\n\n if (this.passwordHistory != null && this.passwordHistory.length > 0) {\n const passwordHistory: any[] = [];\n await this.passwordHistory.reduce((promise, ph) => {\n return promise.then(() => {\n return ph.decrypt(orgId, encKey);\n }).then(decPh => {\n passwordHistory.push(decPh);\n });\n }, Promise.resolve());\n model.passwordHistory = passwordHistory;\n }\n\n return model;\n }\n\n toCipherData(userId: string): CipherData {\n const c = new CipherData();\n c.id = this.id;\n c.organizationId = this.organizationId;\n c.folderId = this.folderId;\n c.userId = this.organizationId != null ? userId : null;\n c.edit = this.edit;\n c.viewPassword = this.viewPassword;\n c.organizationUseTotp = this.organizationUseTotp;\n c.favorite = this.favorite;\n c.revisionDate = this.revisionDate != null ? this.revisionDate.toISOString() : null;\n c.type = this.type;\n c.collectionIds = this.collectionIds;\n c.deletedDate = this.deletedDate != null ? this.deletedDate.toISOString() : null;\n c.reprompt = this.reprompt;\n\n this.buildDataModel(this, c, {\n name: null,\n notes: null,\n });\n\n switch (c.type) {\n case CipherType.Login:\n c.login = this.login.toLoginData();\n break;\n case CipherType.SecureNote:\n c.secureNote = this.secureNote.toSecureNoteData();\n break;\n case CipherType.Card:\n c.card = this.card.toCardData();\n break;\n case CipherType.Identity:\n c.identity = this.identity.toIdentityData();\n break;\n default:\n break;\n }\n\n if (this.fields != null) {\n c.fields = this.fields.map(f => f.toFieldData());\n }\n if (this.attachments != null) {\n c.attachments = this.attachments.map(a => a.toAttachmentData());\n }\n if (this.passwordHistory != null) {\n c.passwordHistory = this.passwordHistory.map(ph => ph.toPasswordHistoryData());\n }\n return c;\n }\n}\n","export enum CipherRepromptType {\n None = 0,\n Password = 1,\n}\n","export abstract class PasswordRepromptService {\n protectedFields: () => string[];\n showPasswordPrompt: () => Promise;\n}\n","import {\n Component,\n Input,\n OnChanges,\n} from '@angular/core';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\n@Component({\n selector: 'app-password-strength',\n templateUrl: 'password-strength.component.html',\n})\nexport class PasswordStrengthComponent implements OnChanges {\n @Input() score?: number;\n @Input() showText = false;\n\n scoreWidth = 0;\n color = 'bg-danger';\n text: string;\n\n constructor(private i18nService: I18nService) { }\n\n ngOnChanges(): void {\n this.scoreWidth = this.score == null ? 0 : (this.score + 1) * 20;\n switch (this.score) {\n case 4:\n this.color = 'bg-success';\n this.text = this.i18nService.t('strong');\n break;\n case 3:\n this.color = 'bg-primary';\n this.text = this.i18nService.t('good');\n break;\n case 2:\n this.color = 'bg-warning';\n this.text = this.i18nService.t('weak');\n break;\n default:\n this.color = 'bg-danger';\n this.text = this.score != null ? this.i18nService.t('weak') : null;\n break;\n }\n }\n}\n","

{{text}}
","import {\n Pipe,\n PipeTransform,\n} from '@angular/core';\n\n@Pipe({\n name: 'search',\n})\nexport class SearchPipe implements PipeTransform {\n transform(items: any[], searchText: string, prop1?: string, prop2?: string, prop3?: string): any[] {\n if (items == null || items.length === 0) {\n return [];\n }\n\n if (searchText == null || searchText.length < 2) {\n return items;\n }\n\n searchText = searchText.trim().toLowerCase();\n return items.filter(i => {\n if (prop1 != null && i[prop1] != null && i[prop1].toString().toLowerCase().indexOf(searchText) > -1) {\n return true;\n }\n if (prop2 != null && i[prop2] != null && i[prop2].toString().toLowerCase().indexOf(searchText) > -1) {\n return true;\n }\n if (prop3 != null && i[prop3] != null && i[prop3].toString().toLowerCase().indexOf(searchText) > -1) {\n return true;\n }\n return false;\n });\n }\n}\n","export enum EventType {\n User_LoggedIn = 1000,\n User_ChangedPassword = 1001,\n User_Updated2fa = 1002,\n User_Disabled2fa = 1003,\n User_Recovered2fa = 1004,\n User_FailedLogIn = 1005,\n User_FailedLogIn2fa = 1006,\n User_ClientExportedVault = 1007,\n\n Cipher_Created = 1100,\n Cipher_Updated = 1101,\n Cipher_Deleted = 1102,\n Cipher_AttachmentCreated = 1103,\n Cipher_AttachmentDeleted = 1104,\n Cipher_Shared = 1105,\n Cipher_UpdatedCollections = 1106,\n Cipher_ClientViewed = 1107,\n Cipher_ClientToggledPasswordVisible = 1108,\n Cipher_ClientToggledHiddenFieldVisible = 1109,\n Cipher_ClientToggledCardCodeVisible = 1110,\n Cipher_ClientCopiedPassword = 1111,\n Cipher_ClientCopiedHiddenField = 1112,\n Cipher_ClientCopiedCardCode = 1113,\n Cipher_ClientAutofilled = 1114,\n Cipher_SoftDeleted = 1115,\n Cipher_Restored = 1116,\n Cipher_ClientToggledCardNumberVisible = 1117,\n\n Collection_Created = 1300,\n Collection_Updated = 1301,\n Collection_Deleted = 1302,\n\n Group_Created = 1400,\n Group_Updated = 1401,\n Group_Deleted = 1402,\n\n OrganizationUser_Invited = 1500,\n OrganizationUser_Confirmed = 1501,\n OrganizationUser_Updated = 1502,\n OrganizationUser_Removed = 1503,\n OrganizationUser_UpdatedGroups = 1504,\n OrganizationUser_UnlinkedSso = 1505,\n OrganizationUser_ResetPassword_Enroll = 1506,\n OrganizationUser_ResetPassword_Withdraw = 1507,\n OrganizationUser_AdminResetPassword = 1508,\n\n Organization_Updated = 1600,\n Organization_PurgedVault = 1601,\n // Organization_ClientExportedVault = 1602,\n\n Policy_Updated = 1700,\n}\n","import { FieldType } from '../../enums/fieldType';\n\nimport { View } from './view';\n\nimport { Field } from '../domain/field';\n\nexport class FieldView implements View {\n name: string = null;\n value: string = null;\n type: FieldType = null;\n newField: boolean = false; // Marks if the field is new and hasn't been saved\n showValue: boolean = false;\n\n constructor(f?: Field) {\n if (!f) {\n return;\n }\n\n this.type = f.type;\n }\n\n get maskedValue(): string {\n return this.value != null ? '••••••••' : null;\n }\n}\n","import { CipherRepromptType } from '../../enums/cipherRepromptType';\nimport { CipherType } from '../../enums/cipherType';\n\nimport { Cipher } from '../domain/cipher';\n\nimport { CardApi } from '../api/cardApi';\nimport { FieldApi } from '../api/fieldApi';\nimport { IdentityApi } from '../api/identityApi';\nimport { LoginApi } from '../api/loginApi';\nimport { LoginUriApi } from '../api/loginUriApi';\nimport { SecureNoteApi } from '../api/secureNoteApi';\n\nimport { AttachmentRequest } from './attachmentRequest';\nimport { PasswordHistoryRequest } from './passwordHistoryRequest';\n\nexport class CipherRequest {\n type: CipherType;\n folderId: string;\n organizationId: string;\n name: string;\n notes: string;\n favorite: boolean;\n login: LoginApi;\n secureNote: SecureNoteApi;\n card: CardApi;\n identity: IdentityApi;\n fields: FieldApi[];\n passwordHistory: PasswordHistoryRequest[];\n // Deprecated, remove at some point and rename attachments2 to attachments\n attachments: { [id: string]: string; };\n attachments2: { [id: string]: AttachmentRequest; };\n lastKnownRevisionDate: Date;\n reprompt: CipherRepromptType;\n\n constructor(cipher: Cipher) {\n this.type = cipher.type;\n this.folderId = cipher.folderId;\n this.organizationId = cipher.organizationId;\n this.name = cipher.name ? cipher.name.encryptedString : null;\n this.notes = cipher.notes ? cipher.notes.encryptedString : null;\n this.favorite = cipher.favorite;\n this.lastKnownRevisionDate = cipher.revisionDate;\n this.reprompt = cipher.reprompt;\n\n switch (this.type) {\n case CipherType.Login:\n this.login = new LoginApi();\n this.login.uris = null;\n this.login.username = cipher.login.username ? cipher.login.username.encryptedString : null;\n this.login.password = cipher.login.password ? cipher.login.password.encryptedString : null;\n this.login.passwordRevisionDate = cipher.login.passwordRevisionDate != null ?\n cipher.login.passwordRevisionDate.toISOString() : null;\n this.login.totp = cipher.login.totp ? cipher.login.totp.encryptedString : null;\n this.login.autofillOnPageLoad = cipher.login.autofillOnPageLoad;\n\n if (cipher.login.uris != null) {\n this.login.uris = cipher.login.uris.map(u => {\n const uri = new LoginUriApi();\n uri.uri = u.uri != null ? u.uri.encryptedString : null;\n uri.match = u.match != null ? u.match : null;\n return uri;\n });\n }\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNoteApi();\n this.secureNote.type = cipher.secureNote.type;\n break;\n case CipherType.Card:\n this.card = new CardApi();\n this.card.cardholderName = cipher.card.cardholderName != null ?\n cipher.card.cardholderName.encryptedString : null;\n this.card.brand = cipher.card.brand != null ? cipher.card.brand.encryptedString : null;\n this.card.number = cipher.card.number != null ? cipher.card.number.encryptedString : null;\n this.card.expMonth = cipher.card.expMonth != null ? cipher.card.expMonth.encryptedString : null;\n this.card.expYear = cipher.card.expYear != null ? cipher.card.expYear.encryptedString : null;\n this.card.code = cipher.card.code != null ? cipher.card.code.encryptedString : null;\n break;\n case CipherType.Identity:\n this.identity = new IdentityApi();\n this.identity.title = cipher.identity.title != null ? cipher.identity.title.encryptedString : null;\n this.identity.firstName = cipher.identity.firstName != null ?\n cipher.identity.firstName.encryptedString : null;\n this.identity.middleName = cipher.identity.middleName != null ?\n cipher.identity.middleName.encryptedString : null;\n this.identity.lastName = cipher.identity.lastName != null ?\n cipher.identity.lastName.encryptedString : null;\n this.identity.address1 = cipher.identity.address1 != null ?\n cipher.identity.address1.encryptedString : null;\n this.identity.address2 = cipher.identity.address2 != null ?\n cipher.identity.address2.encryptedString : null;\n this.identity.address3 = cipher.identity.address3 != null ?\n cipher.identity.address3.encryptedString : null;\n this.identity.city = cipher.identity.city != null ? cipher.identity.city.encryptedString : null;\n this.identity.state = cipher.identity.state != null ? cipher.identity.state.encryptedString : null;\n this.identity.postalCode = cipher.identity.postalCode != null ?\n cipher.identity.postalCode.encryptedString : null;\n this.identity.country = cipher.identity.country != null ?\n cipher.identity.country.encryptedString : null;\n this.identity.company = cipher.identity.company != null ?\n cipher.identity.company.encryptedString : null;\n this.identity.email = cipher.identity.email != null ? cipher.identity.email.encryptedString : null;\n this.identity.phone = cipher.identity.phone != null ? cipher.identity.phone.encryptedString : null;\n this.identity.ssn = cipher.identity.ssn != null ? cipher.identity.ssn.encryptedString : null;\n this.identity.username = cipher.identity.username != null ?\n cipher.identity.username.encryptedString : null;\n this.identity.passportNumber = cipher.identity.passportNumber != null ?\n cipher.identity.passportNumber.encryptedString : null;\n this.identity.licenseNumber = cipher.identity.licenseNumber != null ?\n cipher.identity.licenseNumber.encryptedString : null;\n break;\n default:\n break;\n }\n\n if (cipher.fields != null) {\n this.fields = cipher.fields.map(f => {\n const field = new FieldApi();\n field.type = f.type;\n field.name = f.name ? f.name.encryptedString : null;\n field.value = f.value ? f.value.encryptedString : null;\n return field;\n });\n }\n\n if (cipher.passwordHistory != null) {\n this.passwordHistory = [];\n cipher.passwordHistory.forEach(ph => {\n this.passwordHistory.push({\n lastUsedDate: ph.lastUsedDate,\n password: ph.password ? ph.password.encryptedString : null,\n });\n });\n }\n\n if (cipher.attachments != null) {\n this.attachments = {};\n this.attachments2 = {};\n cipher.attachments.forEach(attachment => {\n const fileName = attachment.fileName ? attachment.fileName.encryptedString : null;\n this.attachments[attachment.id] = fileName;\n const attachmentRequest = new AttachmentRequest();\n attachmentRequest.fileName = fileName;\n if (attachment.key != null) {\n attachmentRequest.key = attachment.key.encryptedString;\n }\n this.attachments2[attachment.id] = attachmentRequest;\n });\n }\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class ErrorResponse extends BaseResponse {\n message: string;\n validationErrors: { [key: string]: string[]; };\n statusCode: number;\n\n constructor(response: any, status: number, identityResponse?: boolean) {\n super(response);\n let errorModel = null;\n if (response != null) {\n const responseErrorModel = this.getResponseProperty('ErrorModel');\n if (responseErrorModel && identityResponse) {\n errorModel = responseErrorModel;\n } else {\n errorModel = response;\n }\n }\n\n if (errorModel) {\n this.message = this.getResponseProperty('Message', errorModel);\n this.validationErrors = this.getResponseProperty('ValidationErrors', errorModel);\n } else {\n if (status === 429) {\n this.message = 'Rate limit exceeded. Try again later.';\n }\n }\n this.statusCode = status;\n }\n\n getSingleMessage(): string {\n if (this.validationErrors == null) {\n return this.message;\n }\n for (const key in this.validationErrors) {\n if (!this.validationErrors.hasOwnProperty(key)) {\n continue;\n }\n if (this.validationErrors[key].length) {\n return this.validationErrors[key][0];\n }\n }\n return this.message;\n }\n\n getAllMessages(): string[] {\n const messages: string[] = [];\n if (this.validationErrors == null) {\n return messages;\n }\n for (const key in this.validationErrors) {\n if (!this.validationErrors.hasOwnProperty(key)) {\n continue;\n }\n this.validationErrors[key].forEach((item: string) => {\n let prefix = '';\n if (key.indexOf('[') > -1 && key.indexOf(']') > -1) {\n const lastSep = key.lastIndexOf('.');\n prefix = key.substr(0, lastSep > -1 ? lastSep : key.length) + ': ';\n }\n messages.push(prefix + item);\n });\n }\n return messages;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { ErrorResponse } from 'jslib-common/models/response/errorResponse';\n\n@Injectable()\nexport class ValidationService {\n constructor(private i18nService: I18nService, private platformUtilsService: PlatformUtilsService) { }\n\n showError(data: any): string[] {\n const defaultErrorMessage = this.i18nService.t('unexpectedError');\n let errors: string[] = [];\n\n if (data != null && typeof data === 'string') {\n errors.push(data);\n } else if (data == null || typeof data !== 'object') {\n errors.push(defaultErrorMessage);\n } else if (data.validationErrors != null) {\n errors = errors.concat((data as ErrorResponse).getAllMessages());\n } else {\n errors.push(data.message ? data.message : defaultErrorMessage);\n }\n\n if (errors.length === 1) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), errors[0]);\n } else if (errors.length > 1) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), errors, {\n timeout: 5000 * errors.length,\n });\n }\n\n return errors;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport {\n ActivatedRoute,\n NavigationEnd,\n Router,\n} from '@angular/router';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\n@Injectable()\nexport class RouterService {\n private previousUrl: string = undefined;\n private currentUrl: string = undefined;\n\n constructor(private router: Router, private activatedRoute: ActivatedRoute,\n private titleService: Title, i18nService: I18nService) {\n this.currentUrl = this.router.url;\n router.events.subscribe(event => {\n if (event instanceof NavigationEnd) {\n this.previousUrl = this.currentUrl;\n this.currentUrl = event.url;\n\n let title = i18nService.t('pageTitle', 'Bitwarden');\n let titleId: string = null;\n let rawTitle: string = null;\n let child = this.activatedRoute.firstChild;\n while (child != null) {\n if (child.firstChild != null) {\n child = child.firstChild;\n } else if (child.snapshot.data != null && child.snapshot.data.title != null) {\n rawTitle = child.snapshot.data.title;\n break;\n } else if (child.snapshot.data != null && child.snapshot.data.titleId != null) {\n titleId = child.snapshot.data.titleId;\n break;\n } else {\n titleId = null;\n rawTitle = null;\n break;\n }\n }\n\n if (titleId != null || rawTitle != null) {\n const newTitle = rawTitle != null ? rawTitle : i18nService.t(titleId);\n if (newTitle != null && newTitle !== '') {\n title = (newTitle + ' | ' + title);\n }\n }\n this.titleService.setTitle(title);\n }\n });\n }\n\n getPreviousUrl() {\n return this.previousUrl;\n }\n\n setPreviousUrl(url: string) {\n this.previousUrl = url;\n }\n}\n","export enum KdfType {\n PBKDF2_SHA256 = 0,\n}\n","export enum OrganizationUserType {\n Owner = 0,\n Admin = 1,\n User = 2,\n Manager = 3,\n Custom = 4,\n}\n","import { Injectable } from '@angular/core';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\n\nimport { DeviceType } from 'jslib-common/enums/deviceType';\nimport { EventType } from 'jslib-common/enums/eventType';\nimport { PolicyType } from 'jslib-common/enums/policyType';\n\nimport { EventResponse } from 'jslib-common/models/response/eventResponse';\n\n\n@Injectable()\nexport class EventService {\n constructor(private i18nService: I18nService, private policyService: PolicyService) { }\n\n getDefaultDateFilters() {\n const d = new Date();\n const end = new Date(d.getFullYear(), d.getMonth(), d.getDate(), 23, 59);\n d.setDate(d.getDate() - 30);\n const start = new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0);\n return [this.toDateTimeLocalString(start), this.toDateTimeLocalString(end)];\n }\n\n formatDateFilters(filterStart: string, filterEnd: string) {\n const start: Date = new Date(filterStart);\n const end: Date = new Date(filterEnd + ':59.999');\n if (isNaN(start.getTime()) || isNaN(end.getTime()) || end < start) {\n throw new Error('Invalid date range.');\n }\n return [start.toISOString(), end.toISOString()];\n }\n\n async getEventInfo(ev: EventResponse, options = new EventOptions()): Promise {\n const appInfo = this.getAppInfo(ev.deviceType);\n const { message, humanReadableMessage } = await this.getEventMessage(ev, options);\n return {\n message: message,\n humanReadableMessage: humanReadableMessage,\n appIcon: appInfo[0],\n appName: appInfo[1],\n };\n }\n\n private async getEventMessage(ev: EventResponse, options: EventOptions) {\n let msg = '';\n let humanReadableMsg = '';\n switch (ev.type) {\n // User\n case EventType.User_LoggedIn:\n msg = humanReadableMsg = this.i18nService.t('loggedIn');\n break;\n case EventType.User_ChangedPassword:\n msg = humanReadableMsg = this.i18nService.t('changedPassword');\n break;\n case EventType.User_Updated2fa:\n msg = humanReadableMsg = this.i18nService.t('enabledUpdated2fa');\n break;\n case EventType.User_Disabled2fa:\n msg = humanReadableMsg = this.i18nService.t('disabled2fa');\n break;\n case EventType.User_Recovered2fa:\n msg = humanReadableMsg = this.i18nService.t('recovered2fa');\n break;\n case EventType.User_FailedLogIn:\n msg = humanReadableMsg = this.i18nService.t('failedLogin');\n break;\n case EventType.User_FailedLogIn2fa:\n msg = humanReadableMsg = this.i18nService.t('failedLogin2fa');\n break;\n case EventType.User_ClientExportedVault:\n msg = humanReadableMsg = this.i18nService.t('exportedVault');\n break;\n // Cipher\n case EventType.Cipher_Created:\n msg = this.i18nService.t('createdItemId', this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t('createdItemId', this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_Updated:\n msg = this.i18nService.t('editedItemId', this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t('editedItemId', this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_Deleted:\n msg = this.i18nService.t('permanentlyDeletedItemId', this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t('permanentlyDeletedItemId', this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_SoftDeleted:\n msg = this.i18nService.t('deletedItemId', this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t('deletedItemId', this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_Restored:\n msg = this.i18nService.t('restoredItemId', this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t('restoredItemId', this.formatCipherId(ev, options));\n break;\n case EventType.Cipher_AttachmentCreated:\n msg = this.i18nService.t('createdAttachmentForItem', this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t('createdAttachmentForItem', this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_AttachmentDeleted:\n msg = this.i18nService.t('deletedAttachmentForItem', this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t('deletedAttachmentForItem', this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_Shared:\n msg = this.i18nService.t('sharedItemId', this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t('sharedItemId', this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_ClientViewed:\n msg = this.i18nService.t('viewedItemId', this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t('viewedItemId', this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_ClientToggledPasswordVisible:\n msg = this.i18nService.t('viewedPasswordItemId', this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t('viewedPasswordItemId', this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_ClientToggledHiddenFieldVisible:\n msg = this.i18nService.t('viewedHiddenFieldItemId', this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t('viewedHiddenFieldItemId', this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_ClientToggledCardCodeVisible:\n msg = this.i18nService.t('viewedSecurityCodeItemId', this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t('viewedSecurityCodeItemId', this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_ClientCopiedHiddenField:\n msg = this.i18nService.t('copiedHiddenFieldItemId', this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t('copiedHiddenFieldItemId', this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_ClientCopiedPassword:\n msg = this.i18nService.t('copiedPasswordItemId', this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t('copiedPasswordItemId', this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_ClientCopiedCardCode:\n msg = this.i18nService.t('copiedSecurityCodeItemId', this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t('copiedSecurityCodeItemId', this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_ClientAutofilled:\n msg = this.i18nService.t('autofilledItemId', this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t('autofilledItemId', this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_UpdatedCollections:\n msg = this.i18nService.t('editedCollectionsForItem', this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t('editedCollectionsForItem', this.getShortId(ev.cipherId));\n break;\n // Collection\n case EventType.Collection_Created:\n msg = this.i18nService.t('createdCollectionId', this.formatCollectionId(ev));\n humanReadableMsg = this.i18nService.t('createdCollectionId', this.getShortId(ev.collectionId));\n break;\n case EventType.Collection_Updated:\n msg = this.i18nService.t('editedCollectionId', this.formatCollectionId(ev));\n humanReadableMsg = this.i18nService.t('editedCollectionId', this.getShortId(ev.collectionId));\n break;\n case EventType.Collection_Deleted:\n msg = this.i18nService.t('deletedCollectionId', this.formatCollectionId(ev));\n humanReadableMsg = this.i18nService.t('deletedCollectionId', this.getShortId(ev.collectionId));\n break;\n // Group\n case EventType.Group_Created:\n msg = this.i18nService.t('createdGroupId', this.formatGroupId(ev));\n humanReadableMsg = this.i18nService.t('createdGroupId', this.getShortId(ev.groupId));\n break;\n case EventType.Group_Updated:\n msg = this.i18nService.t('editedGroupId', this.formatGroupId(ev));\n humanReadableMsg = this.i18nService.t('editedGroupId', this.getShortId(ev.groupId));\n break;\n case EventType.Group_Deleted:\n msg = this.i18nService.t('deletedGroupId', this.formatGroupId(ev));\n humanReadableMsg = this.i18nService.t('deletedGroupId', this.getShortId(ev.groupId));\n break;\n // Org user\n case EventType.OrganizationUser_Invited:\n msg = this.i18nService.t('invitedUserId', this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t('invitedUserId', this.getShortId(ev.organizationUserId));\n break;\n case EventType.OrganizationUser_Confirmed:\n msg = this.i18nService.t('confirmedUserId', this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t('confirmedUserId', this.getShortId(ev.organizationUserId));\n break;\n case EventType.OrganizationUser_Updated:\n msg = this.i18nService.t('editedUserId', this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t('editedUserId', this.getShortId(ev.organizationUserId));\n break;\n case EventType.OrganizationUser_Removed:\n msg = this.i18nService.t('removedUserId', this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t('removedUserId', this.getShortId(ev.organizationUserId));\n break;\n case EventType.OrganizationUser_UpdatedGroups:\n msg = this.i18nService.t('editedGroupsForUser', this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t('editedGroupsForUser', this.getShortId(ev.organizationUserId));\n break;\n case EventType.OrganizationUser_UnlinkedSso:\n msg = this.i18nService.t('unlinkedSsoUser', this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t('unlinkedSsoUser', this.getShortId(ev.organizationUserId));\n break;\n case EventType.OrganizationUser_ResetPassword_Enroll:\n msg = this.i18nService.t('eventEnrollPasswordReset', this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t('eventEnrollPasswordReset', this.getShortId(ev.organizationUserId));\n break;\n case EventType.OrganizationUser_ResetPassword_Withdraw:\n msg = this.i18nService.t('eventWithdrawPasswordReset', this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t('eventWithdrawPasswordReset', this.getShortId(ev.organizationUserId));\n break;\n case EventType.OrganizationUser_AdminResetPassword:\n msg = this.i18nService.t('eventAdminPasswordReset', this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t('eventAdminPasswordReset', this.getShortId(ev.organizationUserId));\n break;\n // Org\n case EventType.Organization_Updated:\n msg = humanReadableMsg = this.i18nService.t('editedOrgSettings');\n break;\n case EventType.Organization_PurgedVault:\n msg = humanReadableMsg = this.i18nService.t('purgedOrganizationVault');\n break;\n /*\n case EventType.Organization_ClientExportedVault:\n msg = this.i18nService.t('exportedOrganizationVault');\n break;\n */\n // Policies\n case EventType.Policy_Updated:\n msg = this.i18nService.t('modifiedPolicyId', this.formatPolicyId(ev));\n\n const policies = await this.policyService.getAll();\n const policy = policies.filter(p => p.id === ev.policyId)[0];\n let p1 = this.getShortId(ev.policyId);\n if (policy !== null) {\n p1 = PolicyType[policy.type];\n }\n\n humanReadableMsg = this.i18nService.t('modifiedPolicyId', p1);\n break;\n\n default:\n break;\n }\n return {\n message: msg === '' ? null : msg,\n humanReadableMessage: humanReadableMsg === '' ? null : humanReadableMsg,\n };\n }\n\n private getAppInfo(deviceType: DeviceType): [string, string] {\n switch (deviceType) {\n case DeviceType.Android:\n return ['fa-android', this.i18nService.t('mobile') + ' - Android'];\n case DeviceType.iOS:\n return ['fa-apple', this.i18nService.t('mobile') + ' - iOS'];\n case DeviceType.UWP:\n return ['fa-windows', this.i18nService.t('mobile') + ' - Windows'];\n case DeviceType.ChromeExtension:\n return ['fa-chrome', this.i18nService.t('extension') + ' - Chrome'];\n case DeviceType.FirefoxExtension:\n return ['fa-firefox', this.i18nService.t('extension') + ' - Firefox'];\n case DeviceType.OperaExtension:\n return ['fa-opera', this.i18nService.t('extension') + ' - Opera'];\n case DeviceType.EdgeExtension:\n return ['fa-edge', this.i18nService.t('extension') + ' - Edge'];\n case DeviceType.VivaldiExtension:\n return ['fa-puzzle-piece', this.i18nService.t('extension') + ' - Vivaldi'];\n case DeviceType.SafariExtension:\n return ['fa-safari', this.i18nService.t('extension') + ' - Safari'];\n case DeviceType.WindowsDesktop:\n return ['fa-windows', this.i18nService.t('desktop') + ' - Windows'];\n case DeviceType.MacOsDesktop:\n return ['fa-apple', this.i18nService.t('desktop') + ' - macOS'];\n case DeviceType.LinuxDesktop:\n return ['fa-linux', this.i18nService.t('desktop') + ' - Linux'];\n case DeviceType.ChromeBrowser:\n return ['fa-globe', this.i18nService.t('webVault') + ' - Chrome'];\n case DeviceType.FirefoxBrowser:\n return ['fa-globe', this.i18nService.t('webVault') + ' - Firefox'];\n case DeviceType.OperaBrowser:\n return ['fa-globe', this.i18nService.t('webVault') + ' - Opera'];\n case DeviceType.SafariBrowser:\n return ['fa-globe', this.i18nService.t('webVault') + ' - Safari'];\n case DeviceType.VivaldiBrowser:\n return ['fa-globe', this.i18nService.t('webVault') + ' - Vivaldi'];\n case DeviceType.EdgeBrowser:\n return ['fa-globe', this.i18nService.t('webVault') + ' - Edge'];\n case DeviceType.IEBrowser:\n return ['fa-globe', this.i18nService.t('webVault') + ' - IE'];\n case DeviceType.UnknownBrowser:\n return ['fa-globe', this.i18nService.t('webVault') + ' - ' + this.i18nService.t('unknown')];\n default:\n return ['fa-globe', this.i18nService.t('unknown')];\n }\n }\n\n private formatCipherId(ev: EventResponse, options: EventOptions) {\n const shortId = this.getShortId(ev.cipherId);\n if (ev.organizationId == null || !options.cipherInfo) {\n return '' + shortId + '';\n }\n const a = this.makeAnchor(shortId);\n a.setAttribute('href', '#/organizations/' + ev.organizationId + '/vault?search=' + shortId +\n '&viewEvents=' + ev.cipherId);\n return a.outerHTML;\n }\n\n private formatGroupId(ev: EventResponse) {\n const shortId = this.getShortId(ev.groupId);\n const a = this.makeAnchor(shortId);\n a.setAttribute('href', '#/organizations/' + ev.organizationId + '/manage/groups?search=' + shortId);\n return a.outerHTML;\n }\n\n private formatCollectionId(ev: EventResponse) {\n const shortId = this.getShortId(ev.collectionId);\n const a = this.makeAnchor(shortId);\n a.setAttribute('href', '#/organizations/' + ev.organizationId + '/manage/collections?search=' + shortId);\n return a.outerHTML;\n }\n\n private formatOrgUserId(ev: EventResponse) {\n const shortId = this.getShortId(ev.organizationUserId);\n const a = this.makeAnchor(shortId);\n a.setAttribute('href', '#/organizations/' + ev.organizationId + '/manage/people?search=' + shortId +\n '&viewEvents=' + ev.organizationUserId);\n return a.outerHTML;\n }\n\n private formatPolicyId(ev: EventResponse) {\n const shortId = this.getShortId(ev.policyId);\n const a = this.makeAnchor(shortId);\n a.setAttribute('href', '#/organizations/' + ev.organizationId + '/manage/policies?policyId=' + ev.policyId);\n return a.outerHTML;\n }\n\n private makeAnchor(shortId: string) {\n const a = document.createElement('a');\n a.title = this.i18nService.t('view');\n a.innerHTML = '' + shortId + '';\n return a;\n }\n\n private getShortId(id: string) {\n return id.substring(0, 8);\n }\n\n private toDateTimeLocalString(date: Date) {\n return date.getFullYear() +\n '-' + this.pad(date.getMonth() + 1) +\n '-' + this.pad(date.getDate()) +\n 'T' + this.pad(date.getHours()) +\n ':' + this.pad(date.getMinutes());\n }\n\n private pad(num: number) {\n const norm = Math.floor(Math.abs(num));\n return (norm < 10 ? '0' : '') + norm;\n }\n}\n\nexport class EventInfo {\n message: string;\n humanReadableMessage: string;\n appIcon: string;\n appName: string;\n}\n\nexport class EventOptions {\n cipherInfo = true;\n}\n","import { EncryptionType } from '../../enums/encryptionType';\n\nimport { Utils } from '../../misc/utils';\n\nexport class SymmetricCryptoKey {\n key: ArrayBuffer;\n encKey?: ArrayBuffer;\n macKey?: ArrayBuffer;\n encType: EncryptionType;\n\n keyB64: string;\n encKeyB64: string;\n macKeyB64: string;\n\n meta: any;\n\n constructor(key: ArrayBuffer, encType?: EncryptionType) {\n if (key == null) {\n throw new Error('Must provide key');\n }\n\n if (encType == null) {\n if (key.byteLength === 32) {\n encType = EncryptionType.AesCbc256_B64;\n } else if (key.byteLength === 64) {\n encType = EncryptionType.AesCbc256_HmacSha256_B64;\n } else {\n throw new Error('Unable to determine encType.');\n }\n }\n\n this.key = key;\n this.encType = encType;\n\n if (encType === EncryptionType.AesCbc256_B64 && key.byteLength === 32) {\n this.encKey = key;\n this.macKey = null;\n } else if (encType === EncryptionType.AesCbc128_HmacSha256_B64 && key.byteLength === 32) {\n this.encKey = key.slice(0, 16);\n this.macKey = key.slice(16, 32);\n } else if (encType === EncryptionType.AesCbc256_HmacSha256_B64 && key.byteLength === 64) {\n this.encKey = key.slice(0, 32);\n this.macKey = key.slice(32, 64);\n } else {\n throw new Error('Unsupported encType/key length.');\n }\n\n if (this.key != null) {\n this.keyB64 = Utils.fromBufferToB64(this.key);\n }\n if (this.encKey != null) {\n this.encKeyB64 = Utils.fromBufferToB64(this.encKey);\n }\n if (this.macKey != null) {\n this.macKeyB64 = Utils.fromBufferToB64(this.macKey);\n }\n }\n}\n","export enum PaymentMethodType {\n Card = 0,\n BankAccount = 1,\n PayPal = 2,\n BitPay = 3,\n Credit = 4,\n WireTransfer = 5,\n AppleInApp = 6,\n GoogleInApp = 7,\n Check = 8,\n}\n","import {\n Directive,\n EventEmitter,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\nimport { TwoFactorProviderRequest } from 'jslib-common/models/request/twoFactorProviderRequest';\n\n@Directive()\nexport abstract class TwoFactorBaseComponent {\n @Output() onUpdated = new EventEmitter();\n\n type: TwoFactorProviderType;\n organizationId: string;\n twoFactorProviderType = TwoFactorProviderType;\n enabled = false;\n authed = false;\n\n protected masterPasswordHash: string;\n\n constructor(protected apiService: ApiService, protected i18nService: I18nService,\n protected toasterService: ToasterService, protected platformUtilsService: PlatformUtilsService) { }\n\n protected auth(authResponse: any) {\n this.masterPasswordHash = authResponse.masterPasswordHash;\n this.authed = true;\n }\n\n protected async enable(enableFunction: () => Promise) {\n try {\n await enableFunction();\n this.onUpdated.emit(true);\n } catch { }\n }\n\n protected async disable(promise: Promise) {\n const confirmed = await this.platformUtilsService.showDialog(this.i18nService.t('twoStepDisableDesc'),\n this.i18nService.t('disable'), this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return;\n }\n\n try {\n const request = new TwoFactorProviderRequest();\n request.masterPasswordHash = this.masterPasswordHash;\n request.type = this.type;\n if (this.organizationId != null) {\n promise = this.apiService.putTwoFactorOrganizationDisable(this.organizationId, request);\n } else {\n promise = this.apiService.putTwoFactorDisable(request);\n }\n await promise;\n this.enabled = false;\n this.toasterService.popAsync('success', null, this.i18nService.t('twoStepDisabled'));\n this.onUpdated.emit(false);\n } catch { }\n }\n}\n","import {\n ComponentFactoryResolver,\n Directive,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\n\nimport { ModalComponent } from '../modal.component';\nimport { AddEditComponent as OrgAddEditComponent } from '../organizations/vault/add-edit.component';\nimport { AddEditComponent } from '../vault/add-edit.component';\n\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\n@Directive()\nexport class CipherReportComponent {\n @ViewChild('cipherAddEdit', { read: ViewContainerRef, static: true }) cipherAddEditModalRef: ViewContainerRef;\n\n loading = false;\n hasLoaded = false;\n ciphers: CipherView[] = [];\n organization: Organization;\n\n private modal: ModalComponent = null;\n\n constructor(private componentFactoryResolver: ComponentFactoryResolver, protected userService: UserService,\n protected messagingService: MessagingService, public requiresPaid: boolean) { }\n\n async load() {\n this.loading = true;\n await this.setCiphers();\n this.loading = false;\n this.hasLoaded = true;\n }\n\n selectCipher(cipher: CipherView) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.cipherAddEditModalRef.createComponent(factory).instance;\n let childComponent: OrgAddEditComponent | AddEditComponent;\n if (this.organization != null) {\n childComponent = this.modal.show(OrgAddEditComponent, this.cipherAddEditModalRef);\n (childComponent as OrgAddEditComponent).organization = this.organization;\n } else {\n childComponent = this.modal.show(AddEditComponent, this.cipherAddEditModalRef);\n }\n\n childComponent.cipherId = cipher == null ? null : cipher.id;\n if (this.organization != null) {\n childComponent.organizationId = this.organization.id;\n }\n childComponent.onSavedCipher.subscribe(async (c: CipherView) => {\n this.modal.close();\n await this.load();\n });\n childComponent.onDeletedCipher.subscribe(async (c: CipherView) => {\n this.modal.close();\n await this.load();\n });\n childComponent.onRestoredCipher.subscribe(async (c: CipherView) => {\n this.modal.close();\n await this.load();\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n\n return childComponent;\n }\n\n protected async checkAccess(): Promise {\n if (this.organization != null) {\n // TODO: Maybe we want to just make sure they are not on a free plan? Just compare useTotp for now\n // since all paid plans include useTotp\n if (this.requiresPaid && !this.organization.useTotp) {\n this.messagingService.send('upgradeOrganization', { organizationId: this.organization.id });\n return false;\n }\n } else {\n const accessPremium = await this.userService.canAccessPremium();\n if (this.requiresPaid && !accessPremium) {\n this.messagingService.send('premiumRequired');\n this.loading = false;\n return false;\n }\n }\n return true;\n }\n\n protected async setCiphers() {\n this.ciphers = [];\n }\n}\n","import { UriMatchType } from '../../enums/uriMatchType';\n\nimport { View } from './view';\n\nimport { LoginUri } from '../domain/loginUri';\n\nimport { Utils } from '../../misc/utils';\n\nconst CanLaunchWhitelist = [\n 'https://',\n 'http://',\n 'ssh://',\n 'ftp://',\n 'sftp://',\n 'irc://',\n 'vnc://',\n // https://docs.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/remote-desktop-uri\n 'rdp://', // Legacy RDP URI scheme\n 'ms-rd:', // Preferred RDP URI scheme\n 'chrome://',\n 'iosapp://',\n 'androidapp://',\n];\n\nexport class LoginUriView implements View {\n match: UriMatchType = null;\n\n // tslint:disable\n private _uri: string = null;\n private _domain: string = null;\n private _hostname: string = null;\n private _host: string = null;\n private _canLaunch: boolean = null;\n // tslint:enable\n\n constructor(u?: LoginUri) {\n if (!u) {\n return;\n }\n\n this.match = u.match;\n }\n\n get uri(): string {\n return this._uri;\n }\n set uri(value: string) {\n this._uri = value;\n this._domain = null;\n this._canLaunch = null;\n }\n\n get domain(): string {\n if (this._domain == null && this.uri != null) {\n this._domain = Utils.getDomain(this.uri);\n if (this._domain === '') {\n this._domain = null;\n }\n }\n\n return this._domain;\n }\n\n get hostname(): string {\n if (this.match === UriMatchType.RegularExpression) {\n return null;\n }\n if (this._hostname == null && this.uri != null) {\n this._hostname = Utils.getHostname(this.uri);\n if (this._hostname === '') {\n this._hostname = null;\n }\n }\n\n return this._hostname;\n }\n\n get host(): string {\n if (this.match === UriMatchType.RegularExpression) {\n return null;\n }\n if (this._host == null && this.uri != null) {\n this._host = Utils.getHost(this.uri);\n if (this._host === '') {\n this._host = null;\n }\n }\n\n return this._host;\n }\n\n get hostnameOrUri(): string {\n return this.hostname != null ? this.hostname : this.uri;\n }\n\n get hostOrUri(): string {\n return this.host != null ? this.host : this.uri;\n }\n\n get isWebsite(): boolean {\n return this.uri != null && (this.uri.indexOf('http://') === 0 || this.uri.indexOf('https://') === 0 ||\n (this.uri.indexOf('://') < 0 && Utils.tldEndingRegex.test(this.uri)));\n }\n\n get canLaunch(): boolean {\n if (this._canLaunch != null) {\n return this._canLaunch;\n }\n if (this.uri != null && this.match !== UriMatchType.RegularExpression) {\n const uri = this.launchUri;\n for (let i = 0; i < CanLaunchWhitelist.length; i++) {\n if (uri.indexOf(CanLaunchWhitelist[i]) === 0) {\n this._canLaunch = true;\n return this._canLaunch;\n }\n }\n }\n this._canLaunch = false;\n return this._canLaunch;\n }\n\n get launchUri(): string {\n return this.uri.indexOf('://') < 0 && Utils.tldEndingRegex.test(this.uri) ? ('http://' + this.uri) : this.uri;\n }\n}\n","export enum UriMatchType {\n Domain = 0,\n Host = 1,\n StartsWith = 2,\n Exact = 3,\n RegularExpression = 4,\n Never = 5,\n}\n","import { Component } from '@angular/core';\n\nimport { CipherType } from 'jslib-common/enums/cipherType';\nimport { EventType } from 'jslib-common/enums/eventType';\n\nimport { AuditService } from 'jslib-common/abstractions/audit.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { EventService } from 'jslib-common/abstractions/event.service';\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { TotpService } from 'jslib-common/abstractions/totp.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { AddEditComponent as BaseAddEditComponent } from 'jslib-angular/components/add-edit.component';\nimport { LoginUriView } from 'jslib-common/models/view/loginUriView';\n\n@Component({\n selector: 'app-vault-add-edit',\n templateUrl: 'add-edit.component.html',\n})\nexport class AddEditComponent extends BaseAddEditComponent {\n canAccessPremium: boolean;\n totpCode: string;\n totpCodeFormatted: string;\n totpDash: number;\n totpSec: number;\n totpLow: boolean;\n showRevisionDate = false;\n hasPasswordHistory = false;\n viewingPasswordHistory = false;\n viewOnly = false;\n\n protected totpInterval: number;\n\n constructor(cipherService: CipherService, folderService: FolderService,\n i18nService: I18nService, platformUtilsService: PlatformUtilsService,\n auditService: AuditService, stateService: StateService,\n userService: UserService, collectionService: CollectionService,\n protected totpService: TotpService, protected passwordGenerationService: PasswordGenerationService,\n protected messagingService: MessagingService, eventService: EventService,\n protected policyService: PolicyService) {\n super(cipherService, folderService, i18nService, platformUtilsService, auditService, stateService,\n userService, collectionService, messagingService, eventService, policyService);\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n await this.load();\n this.showRevisionDate = this.cipher.passwordRevisionDisplayDate != null;\n this.hasPasswordHistory = this.cipher.hasPasswordHistory;\n this.cleanUp();\n\n this.canAccessPremium = await this.userService.canAccessPremium();\n if (this.cipher.type === CipherType.Login && this.cipher.login.totp &&\n (this.cipher.organizationUseTotp || this.canAccessPremium)) {\n await this.totpUpdateCode();\n const interval = this.totpService.getTimeInterval(this.cipher.login.totp);\n await this.totpTick(interval);\n\n this.totpInterval = window.setInterval(async () => {\n await this.totpTick(interval);\n }, 1000);\n }\n }\n\n toggleFavorite() {\n this.cipher.favorite = !this.cipher.favorite;\n }\n\n launch(uri: LoginUriView) {\n if (!uri.canLaunch) {\n return;\n }\n\n this.platformUtilsService.launchUri(uri.launchUri);\n }\n\n copy(value: string, typeI18nKey: string, aType: string) {\n if (value == null) {\n return;\n }\n\n this.platformUtilsService.copyToClipboard(value, { window: window });\n this.platformUtilsService.showToast('info', null,\n this.i18nService.t('valueCopied', this.i18nService.t(typeI18nKey)));\n\n if (this.editMode) {\n if (typeI18nKey === 'password') {\n this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, this.cipherId);\n } else if (typeI18nKey === 'securityCode') {\n this.eventService.collect(EventType.Cipher_ClientCopiedCardCode, this.cipherId);\n } else if (aType === 'H_Field') {\n this.eventService.collect(EventType.Cipher_ClientCopiedHiddenField, this.cipherId);\n }\n }\n }\n\n async generatePassword(): Promise {\n const confirmed = await super.generatePassword();\n if (confirmed) {\n const options = (await this.passwordGenerationService.getOptions())[0];\n this.cipher.login.password = await this.passwordGenerationService.generatePassword(options);\n }\n return confirmed;\n }\n\n premiumRequired() {\n if (!this.canAccessPremium) {\n this.messagingService.send('premiumRequired');\n return;\n }\n }\n\n upgradeOrganization() {\n this.messagingService.send('upgradeOrganization', { organizationId: this.cipher.organizationId });\n }\n\n viewHistory() {\n this.viewingPasswordHistory = !this.viewingPasswordHistory;\n }\n\n protected cleanUp() {\n if (this.totpInterval) {\n window.clearInterval(this.totpInterval);\n }\n }\n\n protected async totpUpdateCode() {\n if (this.cipher == null || this.cipher.type !== CipherType.Login || this.cipher.login.totp == null) {\n if (this.totpInterval) {\n window.clearInterval(this.totpInterval);\n }\n return;\n }\n\n this.totpCode = await this.totpService.getCode(this.cipher.login.totp);\n if (this.totpCode != null) {\n if (this.totpCode.length > 4) {\n const half = Math.floor(this.totpCode.length / 2);\n this.totpCodeFormatted = this.totpCode.substring(0, half) + ' ' + this.totpCode.substring(half);\n } else {\n this.totpCodeFormatted = this.totpCode;\n }\n } else {\n this.totpCodeFormatted = null;\n if (this.totpInterval) {\n window.clearInterval(this.totpInterval);\n }\n }\n }\n\n protected allowOwnershipAssignment() {\n return (!this.editMode || this.cloneMode) && this.ownershipOptions != null\n && (this.ownershipOptions.length > 1 || !this.allowPersonal);\n }\n\n private async totpTick(intervalSeconds: number) {\n const epoch = Math.round(new Date().getTime() / 1000.0);\n const mod = epoch % intervalSeconds;\n\n this.totpSec = intervalSeconds - mod;\n this.totpDash = +(Math.round((((78.6 / intervalSeconds) * mod) + 'e+2') as any) + 'e-2');\n this.totpLow = this.totpSec <= 7;\n if (mod === 0) {\n await this.totpUpdateCode();\n }\n }\n}\n","

{{title}}

{{'personalOwnershipPolicyInEffect' | i18n}}
{{totpSec}} {{totpCodeFormatted}}
{{'newUri' | i18n}}

{{'customFields' | i18n}}

{{'newCustomField' | i18n}}

{{'ownership' | i18n}}

{{'collections' | i18n}}

{{'noCollectionsInList' | i18n}}
{{'dateUpdated' | i18n}}: {{cipher.revisionDate | date:'medium'}}
{{'datePasswordUpdated' | i18n}}: {{cipher.passwordRevisionDisplayDate | date:'medium'}}
{{'passwordHistory' | i18n}}: {{cipher.passwordHistory.length}}
{{ph.lastUsedDate | date:'short'}} - {{ph.password}}

{{'options' | i18n}}

","import { Importer } from '../importers/importer';\n\nexport interface ImportOption {\n id: string;\n name: string;\n}\nexport abstract class ImportService {\n featuredImportOptions: ImportOption[];\n regularImportOptions: ImportOption[];\n getImportOptions: () => ImportOption[];\n import: (importer: Importer, fileContents: string, organizationId?: string) => Promise;\n getImporter: (format: string, organizationId: string) => Importer;\n}\n","import { AttachmentResponse } from './attachmentResponse';\nimport { BaseResponse } from './baseResponse';\nimport { PasswordHistoryResponse } from './passwordHistoryResponse';\n\nimport { CipherRepromptType } from '../../enums/cipherRepromptType';\nimport { CardApi } from '../api/cardApi';\nimport { FieldApi } from '../api/fieldApi';\nimport { IdentityApi } from '../api/identityApi';\nimport { LoginApi } from '../api/loginApi';\nimport { SecureNoteApi } from '../api/secureNoteApi';\n\nexport class CipherResponse extends BaseResponse {\n id: string;\n organizationId: string;\n folderId: string;\n type: number;\n name: string;\n notes: string;\n fields: FieldApi[];\n login: LoginApi;\n card: CardApi;\n identity: IdentityApi;\n secureNote: SecureNoteApi;\n favorite: boolean;\n edit: boolean;\n viewPassword: boolean;\n organizationUseTotp: boolean;\n revisionDate: string;\n attachments: AttachmentResponse[];\n passwordHistory: PasswordHistoryResponse[];\n collectionIds: string[];\n deletedDate: string;\n reprompt: CipherRepromptType;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.organizationId = this.getResponseProperty('OrganizationId');\n this.folderId = this.getResponseProperty('FolderId') || null;\n this.type = this.getResponseProperty('Type');\n this.name = this.getResponseProperty('Name');\n this.notes = this.getResponseProperty('Notes');\n this.favorite = this.getResponseProperty('Favorite') || false;\n this.edit = !!this.getResponseProperty('Edit');\n if (this.getResponseProperty('ViewPassword') == null) {\n this.viewPassword = true;\n } else {\n this.viewPassword = this.getResponseProperty('ViewPassword');\n }\n this.organizationUseTotp = this.getResponseProperty('OrganizationUseTotp');\n this.revisionDate = this.getResponseProperty('RevisionDate');\n this.collectionIds = this.getResponseProperty('CollectionIds');\n this.deletedDate = this.getResponseProperty('DeletedDate');\n\n const login = this.getResponseProperty('Login');\n if (login != null) {\n this.login = new LoginApi(login);\n }\n\n const card = this.getResponseProperty('Card');\n if (card != null) {\n this.card = new CardApi(card);\n }\n\n const identity = this.getResponseProperty('Identity');\n if (identity != null) {\n this.identity = new IdentityApi(identity);\n }\n\n const secureNote = this.getResponseProperty('SecureNote');\n if (secureNote != null) {\n this.secureNote = new SecureNoteApi(secureNote);\n }\n\n const fields = this.getResponseProperty('Fields');\n if (fields != null) {\n this.fields = fields.map((f: any) => new FieldApi(f));\n }\n\n const attachments = this.getResponseProperty('Attachments');\n if (attachments != null) {\n this.attachments = attachments.map((a: any) => new AttachmentResponse(a));\n }\n\n const passwordHistory = this.getResponseProperty('PasswordHistory');\n if (passwordHistory != null) {\n this.passwordHistory = passwordHistory.map((h: any) => new PasswordHistoryResponse(h));\n }\n\n this.reprompt = this.getResponseProperty('Reprompt') || CipherRepromptType.None;\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { EventService } from 'jslib-common/abstractions/event.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { SearchService } from 'jslib-common/abstractions/search.service';\nimport { TotpService } from 'jslib-common/abstractions/totp.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { CiphersComponent as BaseCiphersComponent } from 'jslib-angular/components/ciphers.component';\n\nimport { CipherRepromptType } from 'jslib-common/enums/cipherRepromptType';\nimport { CipherType } from 'jslib-common/enums/cipherType';\nimport { EventType } from 'jslib-common/enums/eventType';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nconst MaxCheckedCount = 500;\n\n@Component({\n selector: 'app-vault-ciphers',\n templateUrl: 'ciphers.component.html',\n})\nexport class CiphersComponent extends BaseCiphersComponent implements OnDestroy {\n @Input() showAddNew = true;\n @Output() onAttachmentsClicked = new EventEmitter();\n @Output() onShareClicked = new EventEmitter();\n @Output() onCollectionsClicked = new EventEmitter();\n @Output() onCloneClicked = new EventEmitter();\n\n cipherType = CipherType;\n actionPromise: Promise;\n userHasPremiumAccess = false;\n\n constructor(searchService: SearchService, protected toasterService: ToasterService,\n protected i18nService: I18nService, protected platformUtilsService: PlatformUtilsService,\n protected cipherService: CipherService, protected eventService: EventService,\n protected totpService: TotpService, protected userService: UserService,\n protected passwordRepromptService: PasswordRepromptService) {\n super(searchService);\n this.pageSize = 200;\n }\n\n async ngOnInit() {\n this.userHasPremiumAccess = await this.userService.canAccessPremium();\n }\n\n ngOnDestroy() {\n this.selectAll(false);\n }\n\n launch(uri: string) {\n this.platformUtilsService.launchUri(uri);\n }\n\n async attachments(c: CipherView) {\n if (!await this.repromptCipher(c)) {\n return;\n }\n this.onAttachmentsClicked.emit(c);\n }\n\n async share(c: CipherView) {\n if (!await this.repromptCipher(c)) {\n return;\n }\n this.onShareClicked.emit(c);\n }\n\n collections(c: CipherView) {\n this.onCollectionsClicked.emit(c);\n }\n\n async clone(c: CipherView) {\n if (!await this.repromptCipher(c)) {\n return;\n }\n this.onCloneClicked.emit(c);\n }\n\n async delete(c: CipherView): Promise {\n if (!await this.repromptCipher(c)) {\n return;\n }\n if (this.actionPromise != null) {\n return;\n }\n const permanent = c.isDeleted;\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(permanent ? 'permanentlyDeleteItemConfirmation' : 'deleteItemConfirmation'),\n this.i18nService.t(permanent ? 'permanentlyDeleteItem' : 'deleteItem'),\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.deleteCipher(c.id, permanent);\n await this.actionPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t(permanent ? 'permanentlyDeletedItem'\n : 'deletedItem'));\n this.refresh();\n } catch { }\n this.actionPromise = null;\n }\n\n async restore(c: CipherView): Promise {\n if (this.actionPromise != null || !c.isDeleted) {\n return;\n }\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('restoreItemConfirmation'),\n this.i18nService.t('restoreItem'),\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.cipherService.restoreWithServer(c.id);\n await this.actionPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('restoredItem'));\n this.refresh();\n } catch { }\n this.actionPromise = null;\n }\n\n async copy(cipher: CipherView, value: string, typeI18nKey: string, aType: string) {\n if (this.passwordRepromptService.protectedFields().includes(aType) && !await this.repromptCipher(cipher)) {\n return;\n }\n\n if (value == null || aType === 'TOTP' && !this.displayTotpCopyButton(cipher)) {\n return;\n } else if (value === cipher.login.totp) {\n value = await this.totpService.getCode(value);\n }\n\n if (!cipher.viewPassword) {\n return;\n }\n\n this.platformUtilsService.copyToClipboard(value, { window: window });\n this.toasterService.popAsync('info', null,\n this.i18nService.t('valueCopied', this.i18nService.t(typeI18nKey)));\n\n if (typeI18nKey === 'password' || typeI18nKey === 'verificationCodeTotp') {\n this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, cipher.id);\n } else if (typeI18nKey === 'securityCode') {\n this.eventService.collect(EventType.Cipher_ClientCopiedCardCode, cipher.id);\n }\n }\n\n selectAll(select: boolean) {\n if (select) {\n this.selectAll(false);\n }\n const selectCount = select && this.ciphers.length > MaxCheckedCount\n ? MaxCheckedCount\n : this.ciphers.length;\n for (let i = 0; i < selectCount; i++) {\n this.checkCipher(this.ciphers[i], select);\n }\n }\n\n checkCipher(c: CipherView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n }\n\n getSelected(): CipherView[] {\n if (this.ciphers == null) {\n return [];\n }\n return this.ciphers.filter(c => !!(c as any).checked);\n }\n\n getSelectedIds(): string[] {\n return this.getSelected().map(c => c.id);\n }\n\n displayTotpCopyButton(cipher: CipherView) {\n return (cipher?.login?.hasTotp ?? false) &&\n (cipher.organizationUseTotp || this.userHasPremiumAccess);\n }\n\n async selectCipher(cipher: CipherView) {\n if (await this.repromptCipher(cipher)) {\n super.selectCipher(cipher);\n }\n }\n\n protected deleteCipher(id: string, permanent: boolean) {\n return permanent ? this.cipherService.deleteWithServer(id) : this.cipherService.softDeleteWithServer(id);\n }\n\n protected showFixOldAttachments(c: CipherView) {\n return c.hasOldAttachments && c.organizationId == null;\n }\n\n protected async repromptCipher(c: CipherView) {\n return c.reprompt === CipherRepromptType.None || await this.passwordRepromptService.showPasswordPrompt();\n }\n}\n","
{{c.name}} {{'shared' | i18n}} {{'attachments' | i18n}} {{'attachmentsNeedFix' | i18n}}
{{c.subTitle}}
{{'loading' | i18n}}

{{'noItemsInList' | i18n}}

","export enum EncryptionType {\n AesCbc256_B64 = 0,\n AesCbc128_HmacSha256_B64 = 1,\n AesCbc256_HmacSha256_B64 = 2,\n Rsa2048_OaepSha256_B64 = 3,\n Rsa2048_OaepSha1_B64 = 4,\n Rsa2048_OaepSha256_HmacSha256_B64 = 5,\n Rsa2048_OaepSha1_HmacSha256_B64 = 6,\n}\n","export enum HashPurpose {\n ServerAuthorization = 1,\n LocalAuthorization = 2,\n}\n","export class KeysRequest {\n publicKey: string;\n encryptedPrivateKey: string;\n\n constructor(publicKey: string, encryptedPrivateKey: string) {\n this.publicKey = publicKey;\n this.encryptedPrivateKey = encryptedPrivateKey;\n }\n}\n","import { PolicyResponse } from '../response/policyResponse';\n\nimport { PolicyType } from '../../enums/policyType';\n\nexport class PolicyData {\n id: string;\n organizationId: string;\n type: PolicyType;\n data: any;\n enabled: boolean;\n\n constructor(response: PolicyResponse) {\n this.id = response.id;\n this.organizationId = response.organizationId;\n this.type = response.type;\n this.data = response.data;\n this.enabled = response.enabled;\n }\n}\n","import { HashPurpose } from '../enums/hashPurpose';\nimport { KdfType } from '../enums/kdfType';\nimport { TwoFactorProviderType } from '../enums/twoFactorProviderType';\n\nimport { AuthResult } from '../models/domain/authResult';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nimport { DeviceRequest } from '../models/request/deviceRequest';\nimport { KeysRequest } from '../models/request/keysRequest';\nimport { PreloginRequest } from '../models/request/preloginRequest';\nimport { TokenRequest } from '../models/request/tokenRequest';\n\nimport { IdentityTokenResponse } from '../models/response/identityTokenResponse';\nimport { IdentityTwoFactorResponse } from '../models/response/identityTwoFactorResponse';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { AppIdService } from '../abstractions/appId.service';\nimport { AuthService as AuthServiceAbstraction } from '../abstractions/auth.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport { LogService } from '../abstractions/log.service';\nimport { MessagingService } from '../abstractions/messaging.service';\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\nimport { TokenService } from '../abstractions/token.service';\nimport { UserService } from '../abstractions/user.service';\nimport { VaultTimeoutService } from '../abstractions/vaultTimeout.service';\n\nexport const TwoFactorProviders = {\n [TwoFactorProviderType.Authenticator]: {\n type: TwoFactorProviderType.Authenticator,\n name: null as string,\n description: null as string,\n priority: 1,\n sort: 1,\n premium: false,\n },\n [TwoFactorProviderType.Yubikey]: {\n type: TwoFactorProviderType.Yubikey,\n name: null as string,\n description: null as string,\n priority: 3,\n sort: 2,\n premium: true,\n },\n [TwoFactorProviderType.Duo]: {\n type: TwoFactorProviderType.Duo,\n name: 'Duo',\n description: null as string,\n priority: 2,\n sort: 3,\n premium: true,\n },\n [TwoFactorProviderType.OrganizationDuo]: {\n type: TwoFactorProviderType.OrganizationDuo,\n name: 'Duo (Organization)',\n description: null as string,\n priority: 10,\n sort: 4,\n premium: false,\n },\n [TwoFactorProviderType.Email]: {\n type: TwoFactorProviderType.Email,\n name: null as string,\n description: null as string,\n priority: 0,\n sort: 6,\n premium: false,\n },\n [TwoFactorProviderType.WebAuthn]: {\n type: TwoFactorProviderType.WebAuthn,\n name: null as string,\n description: null as string,\n priority: 4,\n sort: 5,\n premium: true,\n },\n};\n\nexport class AuthService implements AuthServiceAbstraction {\n email: string;\n masterPasswordHash: string;\n localMasterPasswordHash: string;\n code: string;\n codeVerifier: string;\n ssoRedirectUrl: string;\n clientId: string;\n clientSecret: string;\n twoFactorProvidersData: Map;\n selectedTwoFactorProviderType: TwoFactorProviderType = null;\n\n private key: SymmetricCryptoKey;\n\n constructor(private cryptoService: CryptoService, protected apiService: ApiService,\n private userService: UserService, protected tokenService: TokenService,\n protected appIdService: AppIdService, private i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService, private messagingService: MessagingService,\n private vaultTimeoutService: VaultTimeoutService, private logService: LogService,\n private setCryptoKeys = true) {\n }\n\n init() {\n TwoFactorProviders[TwoFactorProviderType.Email].name = this.i18nService.t('emailTitle');\n TwoFactorProviders[TwoFactorProviderType.Email].description = this.i18nService.t('emailDesc');\n\n TwoFactorProviders[TwoFactorProviderType.Authenticator].name = this.i18nService.t('authenticatorAppTitle');\n TwoFactorProviders[TwoFactorProviderType.Authenticator].description =\n this.i18nService.t('authenticatorAppDesc');\n\n TwoFactorProviders[TwoFactorProviderType.Duo].description = this.i18nService.t('duoDesc');\n\n TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].name =\n 'Duo (' + this.i18nService.t('organization') + ')';\n TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].description =\n this.i18nService.t('duoOrganizationDesc');\n\n TwoFactorProviders[TwoFactorProviderType.WebAuthn].name = this.i18nService.t('webAuthnTitle');\n TwoFactorProviders[TwoFactorProviderType.WebAuthn].description = this.i18nService.t('webAuthnDesc');\n\n TwoFactorProviders[TwoFactorProviderType.Yubikey].name = this.i18nService.t('yubiKeyTitle');\n TwoFactorProviders[TwoFactorProviderType.Yubikey].description = this.i18nService.t('yubiKeyDesc');\n }\n\n async logIn(email: string, masterPassword: string): Promise {\n this.selectedTwoFactorProviderType = null;\n const key = await this.makePreloginKey(masterPassword, email);\n const hashedPassword = await this.cryptoService.hashPassword(masterPassword, key);\n const localHashedPassword = await this.cryptoService.hashPassword(masterPassword, key,\n HashPurpose.LocalAuthorization);\n return await this.logInHelper(email, hashedPassword, localHashedPassword, null, null, null, null, null,\n key, null, null, null);\n }\n\n async logInSso(code: string, codeVerifier: string, redirectUrl: string): Promise {\n this.selectedTwoFactorProviderType = null;\n return await this.logInHelper(null, null, null, code, codeVerifier, redirectUrl, null, null,\n null, null, null, null);\n }\n\n async logInApiKey(clientId: string, clientSecret: string): Promise {\n this.selectedTwoFactorProviderType = null;\n return await this.logInHelper(null, null, null, null, null, null, clientId, clientSecret,\n null, null, null, null);\n }\n\n async logInTwoFactor(twoFactorProvider: TwoFactorProviderType, twoFactorToken: string,\n remember?: boolean): Promise {\n return await this.logInHelper(this.email, this.masterPasswordHash, this.localMasterPasswordHash, this.code,\n this.codeVerifier, this.ssoRedirectUrl, this.clientId, this.clientSecret, this.key, twoFactorProvider,\n twoFactorToken, remember);\n }\n\n async logInComplete(email: string, masterPassword: string, twoFactorProvider: TwoFactorProviderType,\n twoFactorToken: string, remember?: boolean): Promise {\n this.selectedTwoFactorProviderType = null;\n const key = await this.makePreloginKey(masterPassword, email);\n const hashedPassword = await this.cryptoService.hashPassword(masterPassword, key);\n const localHashedPassword = await this.cryptoService.hashPassword(masterPassword, key,\n HashPurpose.LocalAuthorization);\n return await this.logInHelper(email, hashedPassword, localHashedPassword, null, null, null, null, null, key,\n twoFactorProvider, twoFactorToken, remember);\n }\n\n async logInSsoComplete(code: string, codeVerifier: string, redirectUrl: string,\n twoFactorProvider: TwoFactorProviderType, twoFactorToken: string, remember?: boolean): Promise {\n this.selectedTwoFactorProviderType = null;\n return await this.logInHelper(null, null, null, code, codeVerifier, redirectUrl, null,\n null, null, twoFactorProvider, twoFactorToken, remember);\n }\n\n async logInApiKeyComplete(clientId: string, clientSecret: string, twoFactorProvider: TwoFactorProviderType,\n twoFactorToken: string, remember?: boolean): Promise {\n this.selectedTwoFactorProviderType = null;\n return await this.logInHelper(null, null, null, null, null, null, clientId, clientSecret, null,\n twoFactorProvider, twoFactorToken, remember);\n }\n\n logOut(callback: Function) {\n callback();\n this.messagingService.send('loggedOut');\n }\n\n getSupportedTwoFactorProviders(win: Window): any[] {\n const providers: any[] = [];\n if (this.twoFactorProvidersData == null) {\n return providers;\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.OrganizationDuo) &&\n this.platformUtilsService.supportsDuo()) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.OrganizationDuo]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Authenticator)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Authenticator]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Yubikey)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Yubikey]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Duo) && this.platformUtilsService.supportsDuo()) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Duo]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.WebAuthn) && this.platformUtilsService.supportsWebAuthn(win)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.WebAuthn]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Email)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Email]);\n }\n\n return providers;\n }\n\n getDefaultTwoFactorProvider(webAuthnSupported: boolean): TwoFactorProviderType {\n if (this.twoFactorProvidersData == null) {\n return null;\n }\n\n if (this.selectedTwoFactorProviderType != null &&\n this.twoFactorProvidersData.has(this.selectedTwoFactorProviderType)) {\n return this.selectedTwoFactorProviderType;\n }\n\n let providerType: TwoFactorProviderType = null;\n let providerPriority = -1;\n this.twoFactorProvidersData.forEach((value, type) => {\n const provider = (TwoFactorProviders as any)[type];\n if (provider != null && provider.priority > providerPriority) {\n if (type === TwoFactorProviderType.WebAuthn && !webAuthnSupported) {\n return;\n }\n\n providerType = type;\n providerPriority = provider.priority;\n }\n });\n\n return providerType;\n }\n\n async makePreloginKey(masterPassword: string, email: string): Promise {\n email = email.trim().toLowerCase();\n let kdf: KdfType = null;\n let kdfIterations: number = null;\n try {\n const preloginResponse = await this.apiService.postPrelogin(new PreloginRequest(email));\n if (preloginResponse != null) {\n kdf = preloginResponse.kdf;\n kdfIterations = preloginResponse.kdfIterations;\n }\n } catch (e) {\n if (e == null || e.statusCode !== 404) {\n throw e;\n }\n }\n return this.cryptoService.makeKey(masterPassword, email, kdf, kdfIterations);\n }\n\n authingWithApiKey(): boolean {\n return this.clientId != null && this.clientSecret != null;\n }\n\n authingWithSso(): boolean {\n return this.code != null && this.codeVerifier != null && this.ssoRedirectUrl != null;\n }\n\n authingWithPassword(): boolean {\n return this.email != null && this.masterPasswordHash != null;\n }\n\n private async logInHelper(email: string, hashedPassword: string, localHashedPassword: string, code: string,\n codeVerifier: string, redirectUrl: string, clientId: string, clientSecret: string, key: SymmetricCryptoKey,\n twoFactorProvider?: TwoFactorProviderType, twoFactorToken?: string, remember?: boolean): Promise {\n const storedTwoFactorToken = await this.tokenService.getTwoFactorToken(email);\n const appId = await this.appIdService.getAppId();\n const deviceRequest = new DeviceRequest(appId, this.platformUtilsService);\n\n let emailPassword: string[] = [];\n let codeCodeVerifier: string[] = [];\n let clientIdClientSecret: string[] = [];\n\n if (email != null && hashedPassword != null) {\n emailPassword = [email, hashedPassword];\n } else {\n emailPassword = null;\n }\n if (code != null && codeVerifier != null && redirectUrl != null) {\n codeCodeVerifier = [code, codeVerifier, redirectUrl];\n } else {\n codeCodeVerifier = null;\n }\n if (clientId != null && clientSecret != null) {\n clientIdClientSecret = [clientId, clientSecret];\n } else {\n clientIdClientSecret = null;\n }\n\n let request: TokenRequest;\n if (twoFactorToken != null && twoFactorProvider != null) {\n request = new TokenRequest(emailPassword, codeCodeVerifier, clientIdClientSecret, twoFactorProvider,\n twoFactorToken, remember, deviceRequest);\n } else if (storedTwoFactorToken != null) {\n request = new TokenRequest(emailPassword, codeCodeVerifier, clientIdClientSecret, TwoFactorProviderType.Remember,\n storedTwoFactorToken, false, deviceRequest);\n } else {\n request = new TokenRequest(emailPassword, codeCodeVerifier, clientIdClientSecret, null,\n null, false, deviceRequest);\n }\n\n const response = await this.apiService.postIdentityToken(request);\n\n this.clearState();\n const result = new AuthResult();\n result.twoFactor = !(response as any).accessToken;\n\n if (result.twoFactor) {\n // two factor required\n const twoFactorResponse = response as IdentityTwoFactorResponse;\n this.email = email;\n this.masterPasswordHash = hashedPassword;\n this.localMasterPasswordHash = localHashedPassword;\n this.code = code;\n this.codeVerifier = codeVerifier;\n this.ssoRedirectUrl = redirectUrl;\n this.clientId = clientId;\n this.clientSecret = clientSecret;\n this.key = this.setCryptoKeys ? key : null;\n this.twoFactorProvidersData = twoFactorResponse.twoFactorProviders2;\n result.twoFactorProviders = twoFactorResponse.twoFactorProviders2;\n return result;\n }\n\n const tokenResponse = response as IdentityTokenResponse;\n result.resetMasterPassword = tokenResponse.resetMasterPassword;\n if (tokenResponse.twoFactorToken != null) {\n await this.tokenService.setTwoFactorToken(tokenResponse.twoFactorToken, email);\n }\n\n await this.tokenService.setTokens(tokenResponse.accessToken, tokenResponse.refreshToken);\n await this.userService.setInformation(this.tokenService.getUserId(), this.tokenService.getEmail(),\n tokenResponse.kdf, tokenResponse.kdfIterations);\n if (this.setCryptoKeys) {\n if (key != null) {\n await this.cryptoService.setKey(key);\n }\n if (localHashedPassword != null) {\n await this.cryptoService.setKeyHash(localHashedPassword);\n }\n\n // Skip this step during SSO new user flow. No key is returned from server.\n if (code == null || tokenResponse.key != null) {\n await this.cryptoService.setEncKey(tokenResponse.key);\n\n // User doesn't have a key pair yet (old account), let's generate one for them\n if (tokenResponse.privateKey == null) {\n try {\n const keyPair = await this.cryptoService.makeKeyPair();\n await this.apiService.postAccountKeys(new KeysRequest(keyPair[0], keyPair[1].encryptedString));\n tokenResponse.privateKey = keyPair[1].encryptedString;\n } catch (e) {\n // tslint:disable-next-line\n this.logService.error(e);\n }\n }\n\n await this.cryptoService.setEncPrivateKey(tokenResponse.privateKey);\n }\n }\n\n if (this.vaultTimeoutService != null) {\n this.vaultTimeoutService.biometricLocked = false;\n }\n this.messagingService.send('loggedIn');\n return result;\n }\n\n private clearState(): void {\n this.key = null;\n this.email = null;\n this.masterPasswordHash = null;\n this.localMasterPasswordHash = null;\n this.code = null;\n this.codeVerifier = null;\n this.ssoRedirectUrl = null;\n this.clientId = null;\n this.clientSecret = null;\n this.twoFactorProvidersData = null;\n this.selectedTwoFactorProviderType = null;\n }\n}\n","export class SelectionReadOnlyRequest {\n id: string;\n readOnly: boolean;\n hidePasswords: boolean;\n\n constructor(id: string, readOnly: boolean, hidePasswords: boolean) {\n this.id = id;\n this.readOnly = readOnly;\n this.hidePasswords = hidePasswords;\n }\n}\n","export enum DeviceType {\n Android = 0,\n iOS = 1,\n ChromeExtension = 2,\n FirefoxExtension = 3,\n OperaExtension = 4,\n EdgeExtension = 5,\n WindowsDesktop = 6,\n MacOsDesktop = 7,\n LinuxDesktop = 8,\n ChromeBrowser = 9,\n FirefoxBrowser = 10,\n OperaBrowser = 11,\n EdgeBrowser = 12,\n IEBrowser = 13,\n UnknownBrowser = 14,\n AndroidAmazon = 15,\n UWP = 16,\n SafariBrowser = 17,\n VivaldiBrowser = 18,\n VivaldiExtension = 19,\n SafariExtension = 20,\n}\n","export abstract class SettingsService {\n clearCache: () => void;\n getEquivalentDomains: () => Promise;\n setEquivalentDomains: (equivalentDomains: string[][]) => Promise;\n clear: (userId: string) => Promise;\n}\n","export enum PlanType {\n Free = 0,\n FamiliesAnnually2019 = 1,\n TeamsMonthly2019 = 2,\n TeamsAnnually2019 = 3,\n EnterpriseMonthly2019 = 4,\n EnterpriseAnnually2019 = 5,\n Custom = 6,\n FamiliesAnnually = 7,\n TeamsMonthly = 8,\n TeamsAnnually = 9,\n EnterpriseMonthly = 10,\n EnterpriseAnnually = 11,\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { PaymentMethodType } from 'jslib-common/enums/paymentMethodType';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { PaymentComponent } from './payment.component';\nimport { TaxInfoComponent } from './tax-info.component';\n\nimport { OrganizationUserStatusType } from 'jslib-common/enums/organizationUserStatusType';\nimport { OrganizationUserType } from 'jslib-common/enums/organizationUserType';\nimport { PlanType } from 'jslib-common/enums/planType';\nimport { PolicyType } from 'jslib-common/enums/policyType';\nimport { ProductType } from 'jslib-common/enums/productType';\n\nimport { OrganizationCreateRequest } from 'jslib-common/models/request/organizationCreateRequest';\nimport { OrganizationKeysRequest } from 'jslib-common/models/request/organizationKeysRequest';\nimport { OrganizationUpgradeRequest } from 'jslib-common/models/request/organizationUpgradeRequest';\n\nimport { PlanResponse } from 'jslib-common/models/response/planResponse';\n\n@Component({\n selector: 'app-organization-plans',\n templateUrl: 'organization-plans.component.html',\n})\nexport class OrganizationPlansComponent implements OnInit {\n @ViewChild(PaymentComponent) paymentComponent: PaymentComponent;\n @ViewChild(TaxInfoComponent) taxComponent: TaxInfoComponent;\n\n @Input() organizationId: string;\n @Input() showFree = true;\n @Input() showCancel = false;\n @Input() product: ProductType = ProductType.Free;\n @Input() plan: PlanType = PlanType.Free;\n @Output() onSuccess = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n loading: boolean = true;\n selfHosted: boolean = false;\n ownedBusiness: boolean = false;\n premiumAccessAddon: boolean = false;\n additionalStorage: number = 0;\n additionalSeats: number = 0;\n name: string;\n billingEmail: string;\n businessName: string;\n productTypes = ProductType;\n formPromise: Promise;\n singleOrgPolicyBlock: boolean = false;\n freeTrial: boolean = false;\n\n plans: PlanResponse[];\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService, private router: Router, private syncService: SyncService,\n private policyService: PolicyService, private userService: UserService) {\n this.selfHosted = platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n if (!this.selfHosted) {\n const plans = await this.apiService.getPlans();\n this.plans = plans.data;\n if (this.product === ProductType.Enterprise || this.product === ProductType.Teams) {\n this.ownedBusiness = true;\n }\n }\n this.loading = false;\n }\n\n get createOrganization() {\n return this.organizationId == null;\n }\n\n get selectedPlan() {\n return this.plans.find(plan => plan.type === this.plan);\n }\n\n get selectedPlanInterval() {\n return this.selectedPlan.isAnnual\n ? 'year'\n : 'month';\n }\n\n get selectableProducts() {\n let validPlans = this.plans.filter(plan => plan.type !== PlanType.Custom);\n\n if (this.ownedBusiness) {\n validPlans = validPlans.filter(plan => plan.canBeUsedByBusiness);\n }\n\n if (!this.showFree) {\n validPlans = validPlans.filter(plan => plan.product !== ProductType.Free);\n }\n\n validPlans = validPlans\n .filter(plan => !plan.legacyYear\n && !plan.disabled\n && (plan.isAnnual || plan.product === this.productTypes.Free));\n\n return validPlans;\n }\n\n get selectablePlans() {\n return this.plans.filter(plan => !plan.legacyYear && !plan.disabled && plan.product === this.product);\n }\n\n additionalStoragePriceMonthly(selectedPlan: PlanResponse) {\n if (!selectedPlan.isAnnual) {\n return selectedPlan.additionalStoragePricePerGb;\n }\n return selectedPlan.additionalStoragePricePerGb / 12;\n }\n\n seatPriceMonthly(selectedPlan: PlanResponse) {\n if (!selectedPlan.isAnnual) {\n return selectedPlan.seatPrice;\n }\n return selectedPlan.seatPrice / 12;\n }\n\n additionalStorageTotal(plan: PlanResponse): number {\n if (!plan.hasAdditionalStorageOption) {\n return 0;\n }\n\n return plan.additionalStoragePricePerGb * Math.abs(this.additionalStorage || 0);\n }\n\n seatTotal(plan: PlanResponse): number {\n if (!plan.hasAdditionalSeatsOption) {\n return 0;\n }\n\n return plan.seatPrice * Math.abs(this.additionalSeats || 0);\n }\n\n get subtotal() {\n let subTotal = this.selectedPlan.basePrice;\n if (this.selectedPlan.hasAdditionalSeatsOption && this.additionalSeats) {\n subTotal += this.seatTotal(this.selectedPlan);\n }\n if (this.selectedPlan.hasAdditionalStorageOption && this.additionalStorage) {\n subTotal += this.additionalStorageTotal(this.selectedPlan);\n }\n if (this.selectedPlan.hasPremiumAccessOption && this.premiumAccessAddon) {\n subTotal += this.selectedPlan.premiumAccessOptionPrice;\n }\n return subTotal;\n }\n\n get taxCharges() {\n return this.taxComponent != null && this.taxComponent.taxRate != null ?\n (this.taxComponent.taxRate / 100) * this.subtotal :\n 0;\n }\n\n get total() {\n return (this.subtotal + this.taxCharges) || 0;\n }\n\n changedProduct() {\n this.plan = this.selectablePlans[0].type;\n if (!this.selectedPlan.hasPremiumAccessOption) {\n this.premiumAccessAddon = false;\n }\n if (!this.selectedPlan.hasAdditionalStorageOption) {\n this.additionalStorage = 0;\n }\n if (!this.selectedPlan.hasAdditionalSeatsOption) {\n this.additionalSeats = 0;\n } else if (!this.additionalSeats && !this.selectedPlan.baseSeats &&\n this.selectedPlan.hasAdditionalSeatsOption) {\n this.additionalSeats = 1;\n }\n this.freeTrial = this.selectedPlan.trialPeriodDays != null;\n }\n\n changedOwnedBusiness() {\n if (!this.ownedBusiness || this.selectedPlan.canBeUsedByBusiness) {\n return;\n }\n this.product = ProductType.Teams;\n this.plan = PlanType.TeamsAnnually;\n }\n\n changedCountry() {\n this.paymentComponent.hideBank = this.taxComponent.taxInfo.country !== 'US';\n // Bank Account payments are only available for US customers\n if (this.paymentComponent.hideBank &&\n this.paymentComponent.method === PaymentMethodType.BankAccount) {\n this.paymentComponent.method = PaymentMethodType.Card;\n this.paymentComponent.changeMethod();\n }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n\n async submit() {\n if (this.singleOrgPolicyBlock) {\n return;\n } else {\n const policies = await this.policyService.getAll(PolicyType.SingleOrg);\n const orgs = await this.userService.getAllOrganizations();\n\n const orgsWithSingleOrgPolicy = policies\n .filter(p => p.enabled && p.type === PolicyType.SingleOrg)\n .map(p => p.organizationId);\n\n this.singleOrgPolicyBlock = orgs.some(org =>\n org.type !== OrganizationUserType.Owner &&\n org.type !== OrganizationUserType.Admin &&\n org.status !== OrganizationUserStatusType.Invited &&\n orgsWithSingleOrgPolicy.includes(org.id));\n\n if (this.singleOrgPolicyBlock) {\n return;\n }\n }\n\n let files: FileList = null;\n if (this.createOrganization && this.selfHosted) {\n const fileEl = document.getElementById('file') as HTMLInputElement;\n files = fileEl.files;\n if (files == null || files.length === 0) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('selectFile'));\n return;\n }\n }\n\n try {\n const doSubmit = async () => {\n let orgId: string = null;\n if (this.createOrganization) {\n let tokenResult: [string, PaymentMethodType] = null;\n if (!this.selfHosted && this.plan !== PlanType.Free) {\n tokenResult = await this.paymentComponent.createPaymentToken();\n }\n const shareKey = await this.cryptoService.makeShareKey();\n const key = shareKey[0].encryptedString;\n const collection = await this.cryptoService.encrypt(\n this.i18nService.t('defaultCollection'), shareKey[1]);\n const collectionCt = collection.encryptedString;\n const orgKeys = await this.cryptoService.makeKeyPair(shareKey[1]);\n\n if (this.selfHosted) {\n const fd = new FormData();\n fd.append('license', files[0]);\n fd.append('key', key);\n fd.append('collectionName', collectionCt);\n const response = await this.apiService.postOrganizationLicense(fd);\n orgId = response.id;\n\n // Org Keys live outside of the OrganizationLicense - add the keys to the org here\n const request = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n await this.apiService.postOrganizationKeys(orgId, request);\n } else {\n const request = new OrganizationCreateRequest();\n request.key = key;\n request.collectionName = collectionCt;\n request.name = this.name;\n request.billingEmail = this.billingEmail;\n request.keys = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n\n if (this.selectedPlan.type === PlanType.Free) {\n request.planType = PlanType.Free;\n } else {\n request.paymentToken = tokenResult[0];\n request.paymentMethodType = tokenResult[1];\n request.businessName = this.ownedBusiness ? this.businessName : null;\n request.additionalSeats = this.additionalSeats;\n request.additionalStorageGb = this.additionalStorage;\n request.premiumAccessAddon = this.selectedPlan.hasPremiumAccessOption &&\n this.premiumAccessAddon;\n request.planType = this.selectedPlan.type;\n request.billingAddressPostalCode = this.taxComponent.taxInfo.postalCode;\n request.billingAddressCountry = this.taxComponent.taxInfo.country;\n if (this.taxComponent.taxInfo.includeTaxId) {\n request.taxIdNumber = this.taxComponent.taxInfo.taxId;\n request.billingAddressLine1 = this.taxComponent.taxInfo.line1;\n request.billingAddressLine2 = this.taxComponent.taxInfo.line2;\n request.billingAddressCity = this.taxComponent.taxInfo.city;\n request.billingAddressState = this.taxComponent.taxInfo.state;\n }\n }\n const response = await this.apiService.postOrganization(request);\n orgId = response.id;\n }\n } else {\n const request = new OrganizationUpgradeRequest();\n request.businessName = this.ownedBusiness ? this.businessName : null;\n request.additionalSeats = this.additionalSeats;\n request.additionalStorageGb = this.additionalStorage;\n request.premiumAccessAddon = this.selectedPlan.hasPremiumAccessOption &&\n this.premiumAccessAddon;\n request.planType = this.selectedPlan.type;\n request.billingAddressCountry = this.taxComponent.taxInfo.country;\n request.billingAddressPostalCode = this.taxComponent.taxInfo.postalCode;\n\n // Retrieve org info to backfill pub/priv key if necessary\n const org = await this.userService.getOrganization(this.organizationId);\n if (!org.hasPublicAndPrivateKeys) {\n const orgShareKey = await this.cryptoService.getOrgKey(this.organizationId);\n const orgKeys = await this.cryptoService.makeKeyPair(orgShareKey);\n request.keys = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n }\n\n const result = await this.apiService.postOrganizationUpgrade(this.organizationId, request);\n if (!result.success && result.paymentIntentClientSecret != null) {\n await this.paymentComponent.handleStripeCardPayment(result.paymentIntentClientSecret, null);\n }\n orgId = this.organizationId;\n }\n\n if (orgId != null) {\n await this.apiService.refreshIdentityToken();\n await this.syncService.fullSync(true);\n if (this.createOrganization) {\n this.toasterService.popAsync('success',\n this.i18nService.t('organizationCreated'), this.i18nService.t('organizationReadyToGo'));\n } else {\n this.toasterService.popAsync('success', null, this.i18nService.t('organizationUpgraded'));\n }\n this.router.navigate(['/organizations/' + orgId]);\n }\n };\n\n this.formPromise = doSubmit();\n await this.formPromise;\n this.onSuccess.emit();\n } catch { }\n }\n\n}\n"," {{'loading' | i18n}}

{{'uploadLicenseFileOrg' | i18n}}

{{'licenseFileDesc' | i18n : 'bitwarden_organization_license.json'}}

{{'generalInformation' | i18n}}

{{'chooseYourPlan' | i18n}}

{{'users' | i18n}}

{{'userSeatsHowManyDesc' | i18n}}

{{'addons' | i18n}}

{{'userSeatsAdditionalDesc' | i18n : selectedPlan.baseSeats : (seatPriceMonthly(selectedPlan) | currency:'$')}}
{{'additionalStorageIntervalDesc' | i18n : '1 GB' : (additionalStoragePriceMonthly(selectedPlan) | currency:'$') : ('month' | i18n)}}
{{'premiumAccessDesc' | i18n : (3.33 | currency:'$') : ('month' | i18n)}}

{{'summary' | i18n}}


{{ (createOrganization ? 'paymentInformation' : 'billingInformation') | i18n}}

{{ 'planPrice' | i18n }}: {{ subtotal | currency: 'USD $' }}
{{ 'estimatedTax' | i18n }}: {{ taxCharges | currency: 'USD $' }}

{{'total' | i18n}}: {{total | currency:'USD $'}}/{{selectedPlanInterval | i18n}}

{{'paymentChargedWithTrial' | i18n : (selectedPlanInterval | i18n) }} {{'paymentCharged' | i18n : (selectedPlanInterval | i18n) }}
{{'singleOrgBlockCreateMessage' | i18n}}
","import { CardData } from '../data/cardData';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\n\nimport { CardView } from '../view/cardView';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class Card extends Domain {\n cardholderName: EncString;\n brand: EncString;\n number: EncString;\n expMonth: EncString;\n expYear: EncString;\n code: EncString;\n\n constructor(obj?: CardData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(this, obj, {\n cardholderName: null,\n brand: null,\n number: null,\n expMonth: null,\n expYear: null,\n code: null,\n }, alreadyEncrypted, []);\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return this.decryptObj(new CardView(this), {\n cardholderName: null,\n brand: null,\n number: null,\n expMonth: null,\n expYear: null,\n code: null,\n }, orgId, encKey);\n }\n\n toCardData(): CardData {\n const c = new CardData();\n this.buildDataModel(this, c, {\n cardholderName: null,\n brand: null,\n number: null,\n expMonth: null,\n expYear: null,\n code: null,\n });\n return c;\n }\n}\n","import { FieldType } from '../../enums/fieldType';\n\nimport { FieldData } from '../data/fieldData';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\n\nimport { FieldView } from '../view/fieldView';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class Field extends Domain {\n name: EncString;\n value: EncString;\n type: FieldType;\n\n constructor(obj?: FieldData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.type = obj.type;\n this.buildDomainModel(this, obj, {\n name: null,\n value: null,\n }, alreadyEncrypted, []);\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return this.decryptObj(new FieldView(this), {\n name: null,\n value: null,\n }, orgId, encKey);\n }\n\n toFieldData(): FieldData {\n const f = new FieldData();\n this.buildDataModel(this, f, {\n name: null,\n value: null,\n type: null,\n }, ['type']);\n return f;\n }\n}\n","import { IdentityData } from '../data/identityData';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nimport { IdentityView } from '../view/identityView';\n\nexport class Identity extends Domain {\n title: EncString;\n firstName: EncString;\n middleName: EncString;\n lastName: EncString;\n address1: EncString;\n address2: EncString;\n address3: EncString;\n city: EncString;\n state: EncString;\n postalCode: EncString;\n country: EncString;\n company: EncString;\n email: EncString;\n phone: EncString;\n ssn: EncString;\n username: EncString;\n passportNumber: EncString;\n licenseNumber: EncString;\n\n constructor(obj?: IdentityData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(this, obj, {\n title: null,\n firstName: null,\n middleName: null,\n lastName: null,\n address1: null,\n address2: null,\n address3: null,\n city: null,\n state: null,\n postalCode: null,\n country: null,\n company: null,\n email: null,\n phone: null,\n ssn: null,\n username: null,\n passportNumber: null,\n licenseNumber: null,\n }, alreadyEncrypted, []);\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return this.decryptObj(new IdentityView(this), {\n title: null,\n firstName: null,\n middleName: null,\n lastName: null,\n address1: null,\n address2: null,\n address3: null,\n city: null,\n state: null,\n postalCode: null,\n country: null,\n company: null,\n email: null,\n phone: null,\n ssn: null,\n username: null,\n passportNumber: null,\n licenseNumber: null,\n }, orgId, encKey);\n }\n\n toIdentityData(): IdentityData {\n const i = new IdentityData();\n this.buildDataModel(this, i, {\n title: null,\n firstName: null,\n middleName: null,\n lastName: null,\n address1: null,\n address2: null,\n address3: null,\n city: null,\n state: null,\n postalCode: null,\n country: null,\n company: null,\n email: null,\n phone: null,\n ssn: null,\n username: null,\n passportNumber: null,\n licenseNumber: null,\n });\n return i;\n }\n}\n","import { LoginUri } from './loginUri';\n\nimport { LoginData } from '../data/loginData';\n\nimport { LoginView } from '../view/loginView';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class Login extends Domain {\n uris: LoginUri[];\n username: EncString;\n password: EncString;\n passwordRevisionDate?: Date;\n totp: EncString;\n autofillOnPageLoad: boolean;\n\n constructor(obj?: LoginData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.passwordRevisionDate = obj.passwordRevisionDate != null ? new Date(obj.passwordRevisionDate) : null;\n this.autofillOnPageLoad = obj.autofillOnPageLoad;\n this.buildDomainModel(this, obj, {\n username: null,\n password: null,\n totp: null,\n }, alreadyEncrypted, []);\n\n if (obj.uris) {\n this.uris = [];\n obj.uris.forEach(u => {\n this.uris.push(new LoginUri(u, alreadyEncrypted));\n });\n }\n }\n\n async decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n const view = await this.decryptObj(new LoginView(this), {\n username: null,\n password: null,\n totp: null,\n }, orgId, encKey);\n\n if (this.uris != null) {\n view.uris = [];\n for (let i = 0; i < this.uris.length; i++) {\n const uri = await this.uris[i].decrypt(orgId, encKey);\n view.uris.push(uri);\n }\n }\n\n return view;\n }\n\n toLoginData(): LoginData {\n const l = new LoginData();\n l.passwordRevisionDate = this.passwordRevisionDate != null ? this.passwordRevisionDate.toISOString() : null;\n l.autofillOnPageLoad = this.autofillOnPageLoad;\n this.buildDataModel(this, l, {\n username: null,\n password: null,\n totp: null,\n });\n\n if (this.uris != null && this.uris.length > 0) {\n l.uris = [];\n this.uris.forEach(u => {\n l.uris.push(u.toLoginUriData());\n });\n }\n\n return l;\n }\n}\n","import { UriMatchType } from '../../enums/uriMatchType';\n\nimport { LoginUriData } from '../data/loginUriData';\n\nimport { LoginUriView } from '../view/loginUriView';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class LoginUri extends Domain {\n uri: EncString;\n match: UriMatchType;\n\n constructor(obj?: LoginUriData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.match = obj.match;\n this.buildDomainModel(this, obj, {\n uri: null,\n }, alreadyEncrypted, []);\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return this.decryptObj(new LoginUriView(this), {\n uri: null,\n }, orgId, encKey);\n }\n\n toLoginUriData(): LoginUriData {\n const u = new LoginUriData();\n this.buildDataModel(this, u, {\n uri: null,\n }, ['match']);\n return u;\n }\n}\n","import { SecureNoteType } from '../../enums/secureNoteType';\n\nimport { SecureNoteData } from '../data/secureNoteData';\n\nimport Domain from './domainBase';\n\nimport { SecureNoteView } from '../view/secureNoteView';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class SecureNote extends Domain {\n type: SecureNoteType;\n\n constructor(obj?: SecureNoteData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.type = obj.type;\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return Promise.resolve(new SecureNoteView(this));\n }\n\n toSecureNoteData(): SecureNoteData {\n const n = new SecureNoteData();\n n.type = this.type;\n return n;\n }\n}\n","import {\n Directive,\n ElementRef,\n forwardRef,\n HostListener,\n Input,\n Renderer2,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NgControl,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\n\n// ref: https://juristr.com/blog/2018/02/ng-true-value-directive/\n@Directive({\n selector: 'input[type=checkbox][appTrueFalseValue]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TrueFalseValueDirective),\n multi: true,\n },\n ],\n})\nexport class TrueFalseValueDirective implements ControlValueAccessor {\n @Input() trueValue = true;\n @Input() falseValue = false;\n\n constructor(private elementRef: ElementRef, private renderer: Renderer2) { }\n\n @HostListener('change', ['$event'])\n onHostChange(ev: any) {\n this.propagateChange(ev.target.checked ? this.trueValue : this.falseValue);\n }\n\n writeValue(obj: any): void {\n if (obj === this.trueValue) {\n this.renderer.setProperty(this.elementRef.nativeElement, 'checked', true);\n } else {\n this.renderer.setProperty(this.elementRef.nativeElement, 'checked', false);\n }\n }\n\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n registerOnTouched(fn: any): void { /* nothing */ }\n\n setDisabledState?(isDisabled: boolean): void { /* nothing */ }\n\n private propagateChange = (_: any) => { /* nothing */ };\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class SelectionReadOnlyResponse extends BaseResponse {\n id: string;\n readOnly: boolean;\n hidePasswords: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.readOnly = this.getResponseProperty('ReadOnly');\n this.hidePasswords = this.getResponseProperty('HidePasswords');\n }\n}\n","import { BaseResponse } from './baseResponse';\nimport { ProfileOrganizationResponse } from './profileOrganizationResponse';\n\nexport class ProfileResponse extends BaseResponse {\n id: string;\n name: string;\n email: string;\n emailVerified: boolean;\n masterPasswordHint: string;\n premium: boolean;\n culture: string;\n twoFactorEnabled: boolean;\n key: string;\n privateKey: string;\n securityStamp: string;\n organizations: ProfileOrganizationResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.name = this.getResponseProperty('Name');\n this.email = this.getResponseProperty('Email');\n this.emailVerified = this.getResponseProperty('EmailVerified');\n this.masterPasswordHint = this.getResponseProperty('MasterPasswordHint');\n this.premium = this.getResponseProperty('Premium');\n this.culture = this.getResponseProperty('Culture');\n this.twoFactorEnabled = this.getResponseProperty('TwoFactorEnabled');\n this.key = this.getResponseProperty('Key');\n this.privateKey = this.getResponseProperty('PrivateKey');\n this.securityStamp = this.getResponseProperty('SecurityStamp');\n\n const organizations = this.getResponseProperty('Organizations');\n if (organizations != null) {\n this.organizations = organizations.map((o: any) => new ProfileOrganizationResponse(o));\n }\n }\n}\n","import {\n Component,\n EventEmitter,\n Output,\n} from '@angular/core';\n\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { GroupingsComponent as BaseGroupingsComponent } from 'jslib-angular/components/groupings.component';\n\n@Component({\n selector: 'app-vault-groupings',\n templateUrl: 'groupings.component.html',\n})\nexport class GroupingsComponent extends BaseGroupingsComponent {\n @Output() onSearchTextChanged = new EventEmitter();\n\n searchText: string = '';\n searchPlaceholder: string = null;\n\n constructor(collectionService: CollectionService, folderService: FolderService,\n storageService: StorageService, userService: UserService) {\n super(collectionService, folderService, storageService, userService);\n }\n\n searchTextChanged() {\n this.onSearchTextChanged.emit(this.searchText);\n }\n}\n"," ","import { OrganizationData } from '../data/organizationData';\n\nimport { OrganizationUserStatusType } from '../../enums/organizationUserStatusType';\nimport { OrganizationUserType } from '../../enums/organizationUserType';\nimport { PermissionsApi } from '../api/permissionsApi';\n\n\nexport class Organization {\n id: string;\n name: string;\n status: OrganizationUserStatusType;\n type: OrganizationUserType;\n enabled: boolean;\n usePolicies: boolean;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useBusinessPortal: boolean;\n useSso: boolean;\n useResetPassword: boolean;\n selfHost: boolean;\n usersGetPremium: boolean;\n seats: number;\n maxCollections: number;\n maxStorageGb?: number;\n ssoBound: boolean;\n identifier: string;\n permissions: PermissionsApi;\n resetPasswordEnrolled: boolean;\n userId: string;\n hasPublicAndPrivateKeys: boolean;\n\n constructor(obj?: OrganizationData) {\n if (obj == null) {\n return;\n }\n\n this.id = obj.id;\n this.name = obj.name;\n this.status = obj.status;\n this.type = obj.type;\n this.enabled = obj.enabled;\n this.usePolicies = obj.usePolicies;\n this.useGroups = obj.useGroups;\n this.useDirectory = obj.useDirectory;\n this.useEvents = obj.useEvents;\n this.useTotp = obj.useTotp;\n this.use2fa = obj.use2fa;\n this.useApi = obj.useApi;\n this.useBusinessPortal = obj.useBusinessPortal;\n this.useSso = obj.useSso;\n this.useResetPassword = obj.useResetPassword;\n this.selfHost = obj.selfHost;\n this.usersGetPremium = obj.usersGetPremium;\n this.seats = obj.seats;\n this.maxCollections = obj.maxCollections;\n this.maxStorageGb = obj.maxStorageGb;\n this.ssoBound = obj.ssoBound;\n this.identifier = obj.identifier;\n this.permissions = obj.permissions;\n this.resetPasswordEnrolled = obj.resetPasswordEnrolled;\n this.userId = obj.userId;\n this.hasPublicAndPrivateKeys = obj.hasPublicAndPrivateKeys;\n }\n\n get canAccess() {\n if (this.type === OrganizationUserType.Owner) {\n return true;\n }\n return this.enabled && this.status === OrganizationUserStatusType.Confirmed;\n }\n\n get isManager() {\n return this.type === OrganizationUserType.Manager || this.type === OrganizationUserType.Owner ||\n this.type === OrganizationUserType.Admin;\n }\n\n get isAdmin() {\n return this.type === OrganizationUserType.Owner || this.type === OrganizationUserType.Admin;\n }\n\n get isOwner() {\n return this.type === OrganizationUserType.Owner;\n }\n\n get canAccessBusinessPortal() {\n return this.isAdmin || this.permissions.accessBusinessPortal;\n }\n\n get canAccessEventLogs() {\n return this.isAdmin || this.permissions.accessEventLogs;\n }\n\n get canAccessImportExport() {\n return this.isAdmin || this.permissions.accessImportExport;\n }\n\n get canAccessReports() {\n return this.isAdmin || this.permissions.accessReports;\n }\n\n get canManageAllCollections() {\n return this.isAdmin || this.permissions.manageAllCollections;\n }\n\n get canManageAssignedCollections() {\n return this.isManager || this.permissions.manageAssignedCollections;\n }\n\n get canManageGroups() {\n return this.isAdmin || this.permissions.manageGroups;\n }\n\n get canManageSso() {\n return this.isAdmin || this.permissions.manageSso;\n }\n\n get canManagePolicies() {\n return this.isAdmin || this.permissions.managePolicies;\n }\n\n get canManageUsers() {\n return this.isAdmin || this.permissions.manageUsers;\n }\n\n get canManageUsersPassword() {\n return this.isAdmin || this.permissions.manageResetPassword;\n }\n}\n","import { View } from './view';\n\nimport { SendFile } from '../domain/sendFile';\n\nexport class SendFileView implements View {\n id: string = null;\n size: string = null;\n sizeName: string = null;\n fileName: string = null;\n\n constructor(f?: SendFile) {\n if (!f) {\n return;\n }\n\n this.id = f.id;\n this.size = f.size;\n this.sizeName = f.sizeName;\n }\n\n get fileSize(): number {\n try {\n if (this.size != null) {\n return parseInt(this.size, null);\n }\n } catch { }\n return 0;\n }\n}\n","import { View } from './view';\n\nimport { SendText } from '../domain/sendText';\n\nexport class SendTextView implements View {\n text: string = null;\n hidden: boolean;\n\n constructor(t?: SendText) {\n if (!t) {\n return;\n }\n\n this.hidden = t.hidden;\n }\n\n get maskedText(): string {\n return this.text != null ? '••••••••' : null;\n }\n}\n","import {\n Component,\n Input,\n OnInit,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\nimport { Policy } from 'jslib-common/models/domain/policy';\n\nimport { OrganizationUserResetPasswordEnrollmentRequest } from 'jslib-common/models/request/organizationUserResetPasswordEnrollmentRequest';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\nimport { PolicyType } from 'jslib-common/enums/policyType';\n\n@Component({\n selector: 'app-organizations',\n templateUrl: 'organizations.component.html',\n})\nexport class OrganizationsComponent implements OnInit {\n @Input() vault = false;\n\n organizations: Organization[];\n policies: Policy[];\n loaded: boolean = false;\n actionPromise: Promise;\n\n constructor(private userService: UserService, private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService, private apiService: ApiService,\n private toasterService: ToasterService, private syncService: SyncService,\n private cryptoService: CryptoService, private policyService: PolicyService) { }\n\n async ngOnInit() {\n if (!this.vault) {\n await this.syncService.fullSync(true);\n await this.load();\n }\n }\n\n async load() {\n const orgs = await this.userService.getAllOrganizations();\n orgs.sort(Utils.getSortFunction(this.i18nService, 'name'));\n this.organizations = orgs;\n this.policies = await this.policyService.getAll(PolicyType.ResetPassword);\n this.loaded = true;\n }\n\n allowEnrollmentChanges(org: Organization): boolean {\n if (org.usePolicies && org.useResetPassword && org.hasPublicAndPrivateKeys) {\n return this.policies.some(p => p.organizationId === org.id && p.enabled);\n }\n\n return false;\n }\n\n showEnrolledStatus(org: Organization): boolean {\n return org.useResetPassword && org.resetPasswordEnrolled && this.policies.some(p => p.organizationId === org.id && p.enabled);\n }\n\n async unlinkSso(org: Organization) {\n const confirmed = await this.platformUtilsService.showDialog(\n 'Are you sure you want to unlink SSO for this organization?', org.name,\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.apiService.deleteSsoUser(org.id).then(() => {\n return this.syncService.fullSync(true);\n });\n await this.actionPromise;\n this.toasterService.popAsync('success', null, 'Unlinked SSO');\n await this.load();\n } catch { }\n }\n\n async leave(org: Organization) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('leaveOrganizationConfirmation'), org.name,\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.apiService.postLeaveOrganization(org.id).then(() => {\n return this.syncService.fullSync(true);\n });\n await this.actionPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('leftOrganization'));\n await this.load();\n } catch { }\n }\n\n async toggleResetPasswordEnrollment(org: Organization) {\n // Set variables\n let keyString: string = null;\n let toastStringRef = 'withdrawPasswordResetSuccess';\n\n // Enrolling\n if (!org.resetPasswordEnrolled) {\n // Alert user about enrollment\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('resetPasswordEnrollmentWarning'), null,\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return;\n }\n\n // Retrieve Public Key\n this.actionPromise = this.apiService.getOrganizationKeys(org.id)\n .then(async response => {\n if (response == null) {\n throw new Error(this.i18nService.t('resetPasswordOrgKeysError'));\n }\n\n const publicKey = Utils.fromB64ToArray(response.publicKey);\n\n // RSA Encrypt user's encKey.key with organization public key\n const encKey = await this.cryptoService.getEncKey();\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n keyString = encryptedKey.encryptedString;\n toastStringRef = 'enrollPasswordResetSuccess';\n\n // Create request and execute enrollment\n const request = new OrganizationUserResetPasswordEnrollmentRequest();\n request.resetPasswordKey = keyString;\n return this.apiService.putOrganizationUserResetPasswordEnrollment(org.id, org.userId, request);\n })\n .then(() => {\n return this.syncService.fullSync(true);\n });\n } else {\n // Withdrawal\n const request = new OrganizationUserResetPasswordEnrollmentRequest();\n request.resetPasswordKey = keyString;\n this.actionPromise = this.apiService.putOrganizationUserResetPasswordEnrollment(org.id, org.userId, request)\n .then(() => {\n return this.syncService.fullSync(true);\n });\n }\n\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast('success', null, this.i18nService.t(toastStringRef));\n await this.load();\n } catch { }\n }\n}\n","

{{'loading' | i18n}}

{{'noOrganizationsList' | i18n}}

{{'newOrganization' | i18n}}

{{'organizations' | i18n}} {{'loading' | i18n}}

{{'newOrganization' | i18n}}
{{'loading' | i18n}}

{{'noOrganizationsList' | i18n}}

{{'newOrganization' | i18n}}
{{o.name}} {{'organizationIsDisabled' | i18n}} {{'enrolledPasswordReset' | i18n}}
","import {\n Component,\n OnInit,\n} from '@angular/core';\n\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { TokenService } from 'jslib-common/abstractions/token.service';\n\n@Component({\n selector: 'app-navbar',\n templateUrl: 'navbar.component.html',\n})\nexport class NavbarComponent implements OnInit {\n selfHosted = false;\n name: string;\n email: string;\n\n constructor(private messagingService: MessagingService, private platformUtilsService: PlatformUtilsService,\n private tokenService: TokenService) {\n this.selfHosted = this.platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n this.name = await this.tokenService.getName();\n this.email = await this.tokenService.getEmail();\n if (this.name == null || this.name.trim() === '') {\n this.name = this.email;\n }\n }\n\n lock() {\n this.messagingService.send('lockVault');\n }\n\n logOut() {\n this.messagingService.send('logout');\n }\n}\n"," ","import {\n Component,\n OnInit,\n} from '@angular/core';\n\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\n@Component({\n selector: 'app-footer',\n templateUrl: 'footer.component.html',\n})\nexport class FooterComponent implements OnInit {\n version: string;\n year: string = '2015';\n\n constructor(private platformUtilsService: PlatformUtilsService) { }\n\n async ngOnInit() {\n this.year = new Date().getFullYear().toString();\n this.version = await this.platformUtilsService.getApplicationVersion();\n }\n}\n","
© {{year}}, Bitwarden Inc.
{{'versionNumber' | i18n : version}}
","export class OrganizationUserResetPasswordEnrollmentRequest {\n resetPasswordKey: string;\n}\n","import { PolicyData } from '../data/policyData';\n\nimport Domain from './domainBase';\n\nimport { PolicyType } from '../../enums/policyType';\n\nexport class Policy extends Domain {\n id: string;\n organizationId: string;\n type: PolicyType;\n data: any;\n enabled: boolean;\n\n constructor(obj?: PolicyData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.id = obj.id;\n this.organizationId = obj.organizationId;\n this.type = obj.type;\n this.data = obj.data;\n this.enabled = obj.enabled;\n }\n}\n","import { Directive, OnInit } from '@angular/core';\n\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { EncString } from 'jslib-common/models/domain/encString';\nimport { MasterPasswordPolicyOptions } from 'jslib-common/models/domain/masterPasswordPolicyOptions';\nimport { SymmetricCryptoKey } from 'jslib-common/models/domain/symmetricCryptoKey';\n\nimport { KdfType } from 'jslib-common/enums/kdfType';\n\n@Directive()\nexport class ChangePasswordComponent implements OnInit {\n masterPassword: string;\n masterPasswordRetype: string;\n formPromise: Promise;\n masterPasswordScore: number;\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n\n protected email: string;\n protected kdf: KdfType;\n protected kdfIterations: number;\n\n private masterPasswordStrengthTimeout: any;\n\n constructor(protected i18nService: I18nService, protected cryptoService: CryptoService,\n protected messagingService: MessagingService, protected userService: UserService,\n protected passwordGenerationService: PasswordGenerationService,\n protected platformUtilsService: PlatformUtilsService, protected policyService: PolicyService) { }\n\n async ngOnInit() {\n this.email = await this.userService.getEmail();\n this.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions();\n }\n\n getPasswordScoreAlertDisplay() {\n if (this.enforcedPolicyOptions == null) {\n return '';\n }\n\n let str: string;\n switch (this.enforcedPolicyOptions.minComplexity) {\n case 4:\n str = this.i18nService.t('strong');\n break;\n case 3:\n str = this.i18nService.t('good');\n break;\n default:\n str = this.i18nService.t('weak');\n break;\n }\n return str + ' (' + this.enforcedPolicyOptions.minComplexity + ')';\n }\n\n async submit() {\n if (!await this.strongPassword()) {\n return;\n }\n\n if (!await this.setupSubmitActions()) {\n return;\n }\n\n const email = await this.userService.getEmail();\n if (this.kdf == null) {\n this.kdf = await this.userService.getKdf();\n }\n if (this.kdfIterations == null) {\n this.kdfIterations = await this.userService.getKdfIterations();\n }\n const key = await this.cryptoService.makeKey(this.masterPassword, email.trim().toLowerCase(),\n this.kdf, this.kdfIterations);\n const masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, key);\n\n let encKey: [SymmetricCryptoKey, EncString] = null;\n const existingEncKey = await this.cryptoService.getEncKey();\n if (existingEncKey == null) {\n encKey = await this.cryptoService.makeEncKey(key);\n } else {\n encKey = await this.cryptoService.remakeEncKey(key);\n }\n\n await this.performSubmitActions(masterPasswordHash, key, encKey);\n }\n\n async setupSubmitActions(): Promise {\n // Override in sub-class\n // Can be used for additional validation and/or other processes the should occur before changing passwords\n return true;\n }\n\n async performSubmitActions(masterPasswordHash: string, key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString]) {\n // Override in sub-class\n }\n\n async strongPassword(): Promise {\n if (this.masterPassword == null || this.masterPassword === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassRequired'));\n return false;\n }\n if (this.masterPassword.length < 8) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassLength'));\n return false;\n }\n if (this.masterPassword !== this.masterPasswordRetype) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassDoesntMatch'));\n return false;\n }\n\n const strengthResult = this.passwordGenerationService.passwordStrength(this.masterPassword,\n this.getPasswordStrengthUserInput());\n\n if (this.enforcedPolicyOptions != null &&\n !this.policyService.evaluateMasterPassword(\n strengthResult.score,\n this.masterPassword,\n this.enforcedPolicyOptions)) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPasswordPolicyRequirementsNotMet'));\n return false;\n }\n\n if (strengthResult != null && strengthResult.score < 3) {\n const result = await this.platformUtilsService.showDialog(this.i18nService.t('weakMasterPasswordDesc'),\n this.i18nService.t('weakMasterPassword'), this.i18nService.t('yes'), this.i18nService.t('no'),\n 'warning');\n if (!result) {\n return false;\n }\n }\n\n return true;\n }\n\n updatePasswordStrength() {\n if (this.masterPasswordStrengthTimeout != null) {\n clearTimeout(this.masterPasswordStrengthTimeout);\n }\n this.masterPasswordStrengthTimeout = setTimeout(() => {\n const strengthResult = this.passwordGenerationService.passwordStrength(this.masterPassword,\n this.getPasswordStrengthUserInput());\n this.masterPasswordScore = strengthResult == null ? null : strengthResult.score;\n }, 300);\n }\n\n async logOut() {\n const confirmed = await this.platformUtilsService.showDialog(this.i18nService.t('logOutConfirmation'),\n this.i18nService.t('logOut'), this.i18nService.t('logOut'), this.i18nService.t('cancel'));\n if (confirmed) {\n this.messagingService.send('logout');\n }\n }\n\n private getPasswordStrengthUserInput() {\n let userInput: string[] = [];\n const atPosition = this.email.indexOf('@');\n if (atPosition > -1) {\n userInput = userInput.concat(this.email.substr(0, atPosition).trim().toLowerCase().split(/[^A-Za-z0-9]/));\n }\n return userInput;\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { OrganizationUserStatusType } from 'jslib-common/enums/organizationUserStatusType';\nimport { OrganizationUserType } from 'jslib-common/enums/organizationUserType';\nimport { SelectionReadOnlyRequest } from 'jslib-common/models/request/selectionReadOnlyRequest';\nimport { OrganizationUserUserDetailsResponse } from 'jslib-common/models/response/organizationUserResponse';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\n@Component({\n selector: 'app-entity-users',\n templateUrl: 'entity-users.component.html',\n})\nexport class EntityUsersComponent implements OnInit {\n @Input() entity: 'group' | 'collection';\n @Input() entityId: string;\n @Input() entityName: string;\n @Input() organizationId: string;\n @Output() onEditedUsers = new EventEmitter();\n\n organizationUserType = OrganizationUserType;\n organizationUserStatusType = OrganizationUserStatusType;\n\n showSelected = false;\n loading = true;\n formPromise: Promise;\n selectedCount = 0;\n searchText: string;\n\n private allUsers: OrganizationUserUserDetailsResponse[] = [];\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService) { }\n\n async ngOnInit() {\n await this.loadUsers();\n this.loading = false;\n }\n\n get users() {\n if (this.showSelected) {\n return this.allUsers.filter(u => (u as any).checked);\n } else {\n return this.allUsers;\n }\n }\n\n async loadUsers() {\n const users = await this.apiService.getOrganizationUsers(this.organizationId);\n this.allUsers = users.data.map(r => r).sort(Utils.getSortFunction(this.i18nService, 'email'));\n if (this.entity === 'group') {\n const response = await this.apiService.getGroupUsers(this.organizationId, this.entityId);\n if (response != null && users.data.length > 0) {\n response.forEach(s => {\n const user = users.data.filter(u => u.id === s);\n if (user != null && user.length > 0) {\n (user[0] as any).checked = true;\n }\n });\n }\n } else if (this.entity === 'collection') {\n const response = await this.apiService.getCollectionUsers(this.organizationId, this.entityId);\n if (response != null && users.data.length > 0) {\n response.forEach(s => {\n const user = users.data.filter(u => !u.accessAll && u.id === s.id);\n if (user != null && user.length > 0) {\n (user[0] as any).checked = true;\n (user[0] as any).readOnly = s.readOnly;\n (user[0] as any).hidePasswords = s.hidePasswords;\n }\n });\n }\n }\n\n this.allUsers.forEach(u => {\n if (this.entity === 'collection' && u.accessAll) {\n (u as any).checked = true;\n }\n if ((u as any).checked) {\n this.selectedCount++;\n }\n });\n }\n\n check(u: OrganizationUserUserDetailsResponse) {\n if (this.entity === 'collection' && u.accessAll) {\n return;\n }\n (u as any).checked = !(u as any).checked;\n this.selectedChanged(u);\n }\n\n selectedChanged(u: OrganizationUserUserDetailsResponse) {\n if ((u as any).checked) {\n this.selectedCount++;\n } else {\n if (this.entity === 'collection') {\n (u as any).readOnly = false;\n (u as any).hidePasswords = false;\n }\n this.selectedCount--;\n }\n }\n\n filterSelected(showSelected: boolean) {\n this.showSelected = showSelected;\n }\n\n async submit() {\n try {\n if (this.entity === 'group') {\n const selections = this.users.filter(u => (u as any).checked).map(u => u.id);\n this.formPromise = this.apiService.putGroupUsers(this.organizationId, this.entityId, selections);\n } else {\n const selections = this.users.filter(u => (u as any).checked && !u.accessAll)\n .map(u => new SelectionReadOnlyRequest(u.id, !!(u as any).readOnly, !!(u as any).hidePasswords));\n this.formPromise = this.apiService.putCollectionUsers(this.organizationId, this.entityId, selections);\n }\n await this.formPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('updatedUsers'));\n this.onEditedUsers.emit();\n } catch { }\n }\n}\n","

{{'userAccess' | i18n}} {{entityName}}

{{'loading' | i18n}}

{{'noUsersInList' | i18n}}
    {{'name' | i18n}}   {{'userType' | i18n}} {{'hidePasswords' | i18n}} {{'readOnly' | i18n}}
{{u.email}} {{'invited' | i18n}} {{'accepted' | i18n}} {{u.name}} {{'userAccessAllItems' | i18n}} {{'owner' | i18n}} {{'admin' | i18n}} {{'manager' | i18n}} {{'user' | i18n}} {{'custom' | i18n}}
","import { KeysRequest } from './keysRequest';\n\nexport class OrganizationKeysRequest extends KeysRequest {\n constructor(publicKey: string, encryptedPrivateKey: string) {\n super(publicKey, encryptedPrivateKey);\n }\n}\n","export class OrganizationUserBulkRequest {\n ids: string[];\n\n constructor(ids: string[]) {\n this.ids = ids == null ? [] : ids;\n }\n}\n","import {\n Component,\n Input,\n OnInit,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { EventService } from '../../services/event.service';\n\nimport { EventResponse } from 'jslib-common/models/response/eventResponse';\nimport { ListResponse } from 'jslib-common/models/response/listResponse';\n\n@Component({\n selector: 'app-entity-events',\n templateUrl: 'entity-events.component.html',\n})\nexport class EntityEventsComponent implements OnInit {\n @Input() name: string;\n @Input() entity: 'user' | 'cipher';\n @Input() entityId: string;\n @Input() organizationId: string;\n @Input() showUser = false;\n\n loading = true;\n loaded = false;\n events: any[];\n start: string;\n end: string;\n continuationToken: string;\n refreshPromise: Promise;\n morePromise: Promise;\n\n private orgUsersUserIdMap = new Map();\n private orgUsersIdMap = new Map();\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private eventService: EventService, private toasterService: ToasterService) { }\n\n async ngOnInit() {\n const defaultDates = this.eventService.getDefaultDateFilters();\n this.start = defaultDates[0];\n this.end = defaultDates[1];\n await this.load();\n }\n\n async load() {\n if (this.showUser) {\n const response = await this.apiService.getOrganizationUsers(this.organizationId);\n response.data.forEach(u => {\n const name = u.name == null || u.name.trim() === '' ? u.email : u.name;\n this.orgUsersIdMap.set(u.id, { name: name, email: u.email });\n this.orgUsersUserIdMap.set(u.userId, { name: name, email: u.email });\n });\n }\n await this.loadEvents(true);\n this.loaded = true;\n }\n\n async loadEvents(clearExisting: boolean) {\n if (this.refreshPromise != null || this.morePromise != null) {\n return;\n }\n\n let dates: string[] = null;\n try {\n dates = this.eventService.formatDateFilters(this.start, this.end);\n } catch (e) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('invalidDateRange'));\n return;\n }\n\n this.loading = true;\n let response: ListResponse;\n try {\n let promise: Promise;\n if (this.entity === 'user') {\n promise = this.apiService.getEventsOrganizationUser(this.organizationId, this.entityId,\n dates[0], dates[1], clearExisting ? null : this.continuationToken);\n } else {\n promise = this.apiService.getEventsCipher(this.entityId,\n dates[0], dates[1], clearExisting ? null : this.continuationToken);\n }\n if (clearExisting) {\n this.refreshPromise = promise;\n } else {\n this.morePromise = promise;\n }\n response = await promise;\n } catch { }\n\n this.continuationToken = response.continuationToken;\n const events = await Promise.all(response.data.map(async r => {\n const userId = r.actingUserId == null ? r.userId : r.actingUserId;\n const eventInfo = await this.eventService.getEventInfo(r);\n const user = this.showUser && userId != null && this.orgUsersUserIdMap.has(userId) ?\n this.orgUsersUserIdMap.get(userId) : null;\n return {\n message: eventInfo.message,\n appIcon: eventInfo.appIcon,\n appName: eventInfo.appName,\n userId: userId,\n userName: user != null ? user.name : this.showUser ? this.i18nService.t('unknown') : null,\n userEmail: user != null ? user.email : this.showUser ? '' : null,\n date: r.date,\n ip: r.ipAddress,\n type: r.type,\n };\n }));\n\n if (!clearExisting && this.events != null && this.events.length > 0) {\n this.events = this.events.concat(events);\n } else {\n this.events = events;\n }\n\n this.loading = false;\n this.morePromise = null;\n this.refreshPromise = null;\n }\n}\n","

{{'eventLogs' | i18n}} {{name}}

{{'loading' | i18n}}
-

{{'noEventsInList' | i18n}}
{{'timestamp' | i18n}} {{'device' | i18n}} {{'user' | i18n}} {{'event' | i18n}}
{{e.date | date:'medium'}} {{e.appName}}, {{e.ip}} {{e.userName}}
","import { BaseResponse } from '../response/baseResponse';\n\nexport class PermissionsApi extends BaseResponse {\n accessBusinessPortal: boolean;\n accessEventLogs: boolean;\n accessImportExport: boolean;\n accessReports: boolean;\n manageAllCollections: boolean;\n manageAssignedCollections: boolean;\n manageCiphers: boolean;\n manageGroups: boolean;\n manageSso: boolean;\n managePolicies: boolean;\n manageUsers: boolean;\n manageResetPassword: boolean;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return this;\n }\n this.accessBusinessPortal = this.getResponseProperty('AccessBusinessPortal');\n this.accessEventLogs = this.getResponseProperty('AccessEventLogs');\n this.accessImportExport = this.getResponseProperty('AccessImportExport');\n this.accessReports = this.getResponseProperty('AccessReports');\n this.manageAllCollections = this.getResponseProperty('ManageAllCollections');\n this.manageAssignedCollections = this.getResponseProperty('ManageAssignedCollections');\n this.manageCiphers = this.getResponseProperty('ManageCiphers');\n this.manageGroups = this.getResponseProperty('ManageGroups');\n this.manageSso = this.getResponseProperty('ManageSso');\n this.managePolicies = this.getResponseProperty('ManagePolicies');\n this.manageUsers = this.getResponseProperty('ManageUsers');\n this.manageResetPassword = this.getResponseProperty('ManageResetPassword');\n }\n}\n","import { Component } from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { PasswordVerificationRequest } from 'jslib-common/models/request/passwordVerificationRequest';\n\nimport { ApiKeyResponse } from 'jslib-common/models/response/apiKeyResponse';\n\n@Component({\n selector: 'app-api-key',\n templateUrl: 'api-key.component.html',\n})\nexport class ApiKeyComponent {\n keyType: string;\n isRotation: boolean;\n postKey: (entityId: string, request: PasswordVerificationRequest) => Promise;\n entityId: string;\n scope: string;\n grantType: string;\n apiKeyTitle: string;\n apiKeyWarning: string;\n apiKeyDescription: string;\n\n masterPassword: string;\n formPromise: Promise;\n clientId: string;\n clientSecret: string;\n\n constructor(private i18nService: I18nService, private toasterService: ToasterService,\n private cryptoService: CryptoService) { }\n\n async submit() {\n if (this.masterPassword == null || this.masterPassword === '') {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassRequired'));\n return;\n }\n\n const request = new PasswordVerificationRequest();\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n try {\n this.formPromise = this.postKey(this.entityId, request);\n const response = await this.formPromise;\n this.clientSecret = response.apiKey;\n this.clientId = `${this.keyType}.${this.entityId}`;\n } catch { }\n }\n}\n","

{{apiKeyTitle | i18n}}

{{apiKeyDescription | i18n}}

{{apiKeyWarning | i18n}}

client_id:
{{clientId}}

client_secret:
{{clientSecret}}

scope:
{{scope}}

grant_type:
{{grantType}}

","import {\n Component,\n Input,\n} from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { PasswordVerificationRequest } from 'jslib-common/models/request/passwordVerificationRequest';\n\n@Component({\n selector: 'app-purge-vault',\n templateUrl: 'purge-vault.component.html',\n})\nexport class PurgeVaultComponent {\n @Input() organizationId?: string = null;\n\n masterPassword: string;\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private cryptoService: CryptoService,\n private router: Router) { }\n\n async submit() {\n if (this.masterPassword == null || this.masterPassword === '') {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassRequired'));\n return;\n }\n\n const request = new PasswordVerificationRequest();\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n try {\n this.formPromise = this.apiService.postPurgeCiphers(request, this.organizationId);\n await this.formPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('vaultPurged'));\n if (this.organizationId != null) {\n this.router.navigate(['organizations', this.organizationId, 'vault']);\n } else {\n this.router.navigate(['vault']);\n }\n } catch { }\n }\n}\n","

{{'purgeVault' | i18n}}

{{(organizationId ? 'purgeOrgVaultDesc' : 'purgeVaultDesc') | i18n}}

{{'purgeVaultWarning' | i18n}}
","import {\n Component,\n OnInit,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { BillingResponse } from 'jslib-common/models/response/billingResponse';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { PaymentMethodType } from 'jslib-common/enums/paymentMethodType';\nimport { TransactionType } from 'jslib-common/enums/transactionType';\nimport { VerifyBankRequest } from 'jslib-common/models/request/verifyBankRequest';\n\n@Component({\n selector: 'app-user-billing',\n templateUrl: 'user-billing.component.html',\n})\nexport class UserBillingComponent implements OnInit {\n loading = false;\n firstLoaded = false;\n showAdjustPayment = false;\n showAddCredit = false;\n billing: BillingResponse;\n paymentMethodType = PaymentMethodType;\n transactionType = TransactionType;\n organizationId: string;\n verifyAmount1: number;\n verifyAmount2: number;\n\n verifyBankPromise: Promise;\n\n constructor(protected apiService: ApiService, protected i18nService: I18nService,\n protected toasterService: ToasterService, protected platformUtilsService: PlatformUtilsService) { }\n\n async ngOnInit() {\n await this.load();\n this.firstLoaded = true;\n }\n\n async load() {\n if (this.loading) {\n return;\n }\n this.loading = true;\n if (this.organizationId != null) {\n this.billing = await this.apiService.getOrganizationBilling(this.organizationId);\n } else {\n this.billing = await this.apiService.getUserBilling();\n }\n this.loading = false;\n }\n\n async verifyBank() {\n if (this.loading) {\n return;\n }\n\n try {\n const request = new VerifyBankRequest();\n request.amount1 = this.verifyAmount1;\n request.amount2 = this.verifyAmount2;\n this.verifyBankPromise = this.apiService.postOrganizationVerifyBank(this.organizationId, request);\n await this.verifyBankPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('verifiedBankAccount'));\n this.load();\n } catch { }\n }\n\n addCredit() {\n if (this.paymentSourceInApp) {\n this.platformUtilsService.showDialog(this.i18nService.t('cannotPerformInAppPurchase'),\n this.i18nService.t('addCredit'), null, null, 'warning');\n return;\n }\n this.showAddCredit = true;\n }\n\n closeAddCredit(load: boolean) {\n this.showAddCredit = false;\n if (load) {\n this.load();\n }\n }\n\n changePayment() {\n if (this.paymentSourceInApp) {\n this.platformUtilsService.showDialog(this.i18nService.t('cannotPerformInAppPurchase'),\n this.i18nService.t('changePaymentMethod'), null, null, 'warning');\n return;\n }\n this.showAdjustPayment = true;\n }\n\n closePayment(load: boolean) {\n this.showAdjustPayment = false;\n if (load) {\n this.load();\n }\n }\n\n get isCreditBalance() {\n return this.billing == null || this.billing.balance <= 0;\n }\n\n get creditOrBalance() {\n return Math.abs(this.billing != null ? this.billing.balance : 0);\n }\n\n get paymentSource() {\n return this.billing != null ? this.billing.paymentSource : null;\n }\n\n get paymentSourceInApp() {\n return this.paymentSource != null &&\n (this.paymentSource.type === PaymentMethodType.AppleInApp ||\n this.paymentSource.type === PaymentMethodType.GoogleInApp);\n }\n\n get invoices() {\n return this.billing != null ? this.billing.invoices : null;\n }\n\n get transactions() {\n return this.billing != null ? this.billing.transactions : null;\n }\n}\n","

{{'billing' | i18n}}

{{'loading' | i18n}}

{{(isCreditBalance ? 'accountCredit' : 'accountBalance') | i18n}}

{{creditOrBalance | currency:'$'}}

{{'creditAppliedDesc' | i18n}}

{{'paymentMethod' | i18n}}

{{'noPaymentMethod' | i18n}}

{{'verifyBankAccountDesc' | i18n}} {{'verifyBankAccountFailureWarning' | i18n}}

$0.
$0.

{{'inAppPurchase' | i18n}} {{paymentSource.description}}

{{'invoices' | i18n}}

{{'noInvoices' | i18n}}

{{i.date | date:'mediumDate'}} {{'invoiceNumber' | i18n : i.number}} {{i.amount | currency:'$'}} {{'paid' | i18n}} {{'unpaid' | i18n}}

{{'transactions' | i18n}}

{{'noTransactions' | i18n}}

{{t.createdDate | date:'mediumDate'}} {{'chargeNoun' | i18n}} {{'refundNoun' | i18n}} {{t.details}} {{t.amount | currency:'$'}}
* {{'chargesStatement' | i18n : 'BITWARDEN'}}
","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { PaymentMethodType } from 'jslib-common/enums/paymentMethodType';\n\nimport { BitPayInvoiceRequest } from 'jslib-common/models/request/bitPayInvoiceRequest';\n\nimport { WebConstants } from '../../services/webConstants';\n\n@Component({\n selector: 'app-add-credit',\n templateUrl: 'add-credit.component.html',\n})\nexport class AddCreditComponent implements OnInit {\n @Input() creditAmount: string;\n @Input() showOptions = true;\n @Input() method = PaymentMethodType.PayPal;\n @Input() organizationId: string;\n @Output() onAdded = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n @ViewChild('ppButtonForm', { read: ElementRef, static: true }) ppButtonFormRef: ElementRef;\n\n paymentMethodType = PaymentMethodType;\n ppButtonFormAction = WebConstants.paypal.buttonActionProduction;\n ppButtonBusinessId = WebConstants.paypal.businessIdProduction;\n ppButtonCustomField: string;\n ppLoading = false;\n subject: string;\n returnUrl: string;\n formPromise: Promise;\n\n private userId: string;\n private name: string;\n private email: string;\n\n constructor(private userService: UserService, private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService) {\n if (platformUtilsService.isDev()) {\n this.ppButtonFormAction = WebConstants.paypal.buttonActionSandbox;\n this.ppButtonBusinessId = WebConstants.paypal.businessIdSandbox;\n }\n }\n\n async ngOnInit() {\n if (this.organizationId != null) {\n if (this.creditAmount == null) {\n this.creditAmount = '20.00';\n }\n this.ppButtonCustomField = 'organization_id:' + this.organizationId;\n const org = await this.userService.getOrganization(this.organizationId);\n if (org != null) {\n this.subject = org.name;\n this.name = org.name;\n }\n } else {\n if (this.creditAmount == null) {\n this.creditAmount = '10.00';\n }\n this.userId = await this.userService.getUserId();\n this.subject = await this.userService.getEmail();\n this.email = this.subject;\n this.ppButtonCustomField = 'user_id:' + this.userId;\n }\n this.ppButtonCustomField += ',account_credit:1';\n this.returnUrl = window.location.href;\n }\n\n async submit() {\n if (this.creditAmount == null || this.creditAmount === '') {\n return;\n }\n\n if (this.method === PaymentMethodType.PayPal) {\n this.ppButtonFormRef.nativeElement.submit();\n this.ppLoading = true;\n return;\n }\n if (this.method === PaymentMethodType.BitPay) {\n try {\n const req = new BitPayInvoiceRequest();\n req.email = this.email;\n req.name = this.name;\n req.credit = true;\n req.amount = this.creditAmountNumber;\n req.organizationId = this.organizationId;\n req.userId = this.userId;\n req.returnUrl = this.returnUrl;\n this.formPromise = this.apiService.postBitPayInvoice(req);\n const bitPayUrl: string = await this.formPromise;\n this.platformUtilsService.launchUri(bitPayUrl);\n } catch { }\n return;\n }\n try {\n this.onAdded.emit();\n } catch { }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n\n formatAmount() {\n try {\n if (this.creditAmount != null && this.creditAmount !== '') {\n const floatAmount = Math.abs(parseFloat(this.creditAmount));\n if (floatAmount > 0) {\n this.creditAmount = parseFloat((Math.round(floatAmount * 100) / 100).toString())\n .toFixed(2).toString();\n return;\n }\n }\n } catch { }\n this.creditAmount = '';\n }\n\n get creditAmountNumber(): number {\n if (this.creditAmount != null && this.creditAmount !== '') {\n try {\n return parseFloat(this.creditAmount);\n } catch { }\n }\n return null;\n }\n}\n","

{{'addCredit' | i18n}}

$USD
{{'creditDelayed' | i18n}}
","import {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { PaymentRequest } from 'jslib-common/models/request/paymentRequest';\n\nimport { PaymentMethodType } from 'jslib-common/enums/paymentMethodType';\n\nimport { PaymentComponent } from './payment.component';\nimport { TaxInfoComponent } from './tax-info.component';\n\n@Component({\n selector: 'app-adjust-payment',\n templateUrl: 'adjust-payment.component.html',\n})\nexport class AdjustPaymentComponent {\n @ViewChild(PaymentComponent, { static: true }) paymentComponent: PaymentComponent;\n @ViewChild(TaxInfoComponent, { static: true }) taxInfoComponent: TaxInfoComponent;\n\n @Input() currentType?: PaymentMethodType;\n @Input() organizationId: string;\n @Output() onAdjusted = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n paymentMethodType = PaymentMethodType;\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService) { }\n\n async submit() {\n try {\n const request = new PaymentRequest();\n this.formPromise = this.paymentComponent.createPaymentToken().then(result => {\n request.paymentToken = result[0];\n request.paymentMethodType = result[1];\n request.postalCode = this.taxInfoComponent.taxInfo.postalCode;\n request.country = this.taxInfoComponent.taxInfo.country;\n if (this.organizationId == null) {\n return this.apiService.postAccountPayment(request);\n } else {\n request.taxId = this.taxInfoComponent.taxInfo.taxId;\n request.state = this.taxInfoComponent.taxInfo.state;\n request.line1 = this.taxInfoComponent.taxInfo.line1;\n request.line2 = this.taxInfoComponent.taxInfo.line2;\n request.city = this.taxInfoComponent.taxInfo.city;\n request.state = this.taxInfoComponent.taxInfo.state;\n return this.apiService.postOrganizationPayment(this.organizationId, request);\n }\n });\n await this.formPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('updatedPaymentMethod'));\n this.onAdjusted.emit();\n } catch { }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n\n changeCountry() {\n if (this.taxInfoComponent.taxInfo.country === 'US') {\n this.paymentComponent.hideBank = !this.organizationId;\n } else {\n this.paymentComponent.hideBank = true;\n if (this.paymentComponent.method === PaymentMethodType.BankAccount) {\n this.paymentComponent.method = PaymentMethodType.Card;\n this.paymentComponent.changeMethod();\n }\n }\n }\n}\n","

{{(currentType != null ? 'changePaymentMethod' : 'addPaymentMethod') | i18n}}

","import {\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\n@Component({\n selector: 'app-update-license',\n templateUrl: 'update-license.component.html',\n})\nexport class UpdateLicenseComponent {\n @Input() organizationId: string;\n @Output() onUpdated = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService) { }\n\n async submit() {\n const fileEl = document.getElementById('file') as HTMLInputElement;\n const files = fileEl.files;\n if (files == null || files.length === 0) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('selectFile'));\n return;\n }\n\n try {\n const fd = new FormData();\n fd.append('license', files[0]);\n\n let updatePromise: Promise = null;\n if (this.organizationId == null) {\n updatePromise = this.apiService.postAccountLicense(fd);\n } else {\n updatePromise = this.apiService.postOrganizationLicenseUpdate(this.organizationId, fd);\n }\n\n this.formPromise = updatePromise.then(() => {\n return this.apiService.refreshIdentityToken();\n });\n\n await this.formPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('updatedLicense'));\n this.onUpdated.emit();\n } catch { }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n}\n","
{{'licenseFileDesc' | i18n : (!organizationId ? 'bitwarden_premium_license.json' : 'bitwarden_organization_license.json')}}
","export enum ProductType {\n Free = 0,\n Families = 1,\n Teams = 2,\n Enterprise = 3,\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\n\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { StorageRequest } from 'jslib-common/models/request/storageRequest';\n\nimport { PaymentResponse } from 'jslib-common/models/response/paymentResponse';\n\nimport { PaymentComponent } from './payment.component';\n\n@Component({\n selector: 'app-adjust-storage',\n templateUrl: 'adjust-storage.component.html',\n})\nexport class AdjustStorageComponent {\n @Input() storageGbPrice = 0;\n @Input() add = true;\n @Input() organizationId: string;\n @Input() interval = 'year';\n @Output() onAdjusted = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n @ViewChild(PaymentComponent, { static: true }) paymentComponent: PaymentComponent;\n\n storageAdjustment = 0;\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private router: Router,\n private activatedRoute: ActivatedRoute) { }\n\n async submit() {\n try {\n const request = new StorageRequest();\n request.storageGbAdjustment = this.storageAdjustment;\n if (!this.add) {\n request.storageGbAdjustment *= -1;\n }\n\n let paymentFailed = false;\n const action = async () => {\n let response: Promise;\n if (this.organizationId == null) {\n response = this.formPromise = this.apiService.postAccountStorage(request);\n } else {\n response = this.formPromise = this.apiService.postOrganizationStorage(this.organizationId, request);\n }\n const result = await response;\n if (result != null && result.paymentIntentClientSecret != null) {\n try {\n await this.paymentComponent.handleStripeCardPayment(result.paymentIntentClientSecret, null);\n } catch {\n paymentFailed = true;\n }\n }\n };\n this.formPromise = action();\n await this.formPromise;\n this.onAdjusted.emit(this.storageAdjustment);\n if (paymentFailed) {\n this.toasterService.popAsync({\n body: this.i18nService.t('couldNotChargeCardPayInvoice'),\n type: 'warning',\n timeout: 10000,\n });\n this.router.navigate(['../billing'], { relativeTo: this.activatedRoute });\n } else {\n this.toasterService.popAsync('success', null,\n this.i18nService.t('adjustedStorage', request.storageGbAdjustment.toString()));\n }\n } catch { }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n\n get adjustedStorageTotal(): number {\n return this.storageGbPrice * this.storageAdjustment;\n }\n}\n","

{{(add ? 'addStorage' : 'removeStorage') | i18n}}

{{'total' | i18n}}: {{storageAdjustment || 0}} GB × {{storageGbPrice | currency:'$'}} = {{adjustedStorageTotal | currency:'$'}} /{{interval | i18n}}
{{(add ? 'storageAddNote' : 'storageRemoveNote') | i18n}}
","import { Component } from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\nimport { UpdateTwoFactorDuoRequest } from 'jslib-common/models/request/updateTwoFactorDuoRequest';\nimport { TwoFactorDuoResponse } from 'jslib-common/models/response/twoFactorDuoResponse';\n\nimport { TwoFactorBaseComponent } from './two-factor-base.component';\n\n@Component({\n selector: 'app-two-factor-duo',\n templateUrl: 'two-factor-duo.component.html',\n})\nexport class TwoFactorDuoComponent extends TwoFactorBaseComponent {\n type = TwoFactorProviderType.Duo;\n ikey: string;\n skey: string;\n host: string;\n formPromise: Promise;\n\n constructor(apiService: ApiService, i18nService: I18nService,\n toasterService: ToasterService, platformUtilsService: PlatformUtilsService) {\n super(apiService, i18nService, toasterService, platformUtilsService);\n }\n\n auth(authResponse: any) {\n super.auth(authResponse);\n this.processResponse(authResponse.response);\n }\n\n submit() {\n if (this.enabled) {\n return super.disable(this.formPromise);\n } else {\n return this.enable();\n }\n }\n\n protected enable() {\n const request = new UpdateTwoFactorDuoRequest();\n request.masterPasswordHash = this.masterPasswordHash;\n request.integrationKey = this.ikey;\n request.secretKey = this.skey;\n request.host = this.host;\n\n return super.enable(async () => {\n if (this.organizationId != null) {\n this.formPromise = this.apiService.putTwoFactorOrganizationDuo(this.organizationId, request);\n } else {\n this.formPromise = this.apiService.putTwoFactorDuo(request);\n }\n const response = await this.formPromise;\n await this.processResponse(response);\n });\n }\n\n private processResponse(response: TwoFactorDuoResponse) {\n this.ikey = response.integrationKey;\n this.skey = response.secretKey;\n this.host = response.host;\n this.enabled = response.enabled;\n }\n}\n","

{{'twoStepLogin' | i18n}} Duo

{{'twoStepLoginProviderEnabled' | i18n}} \"\" {{'twoFactorDuoIntegrationKey' | i18n}}: {{ikey}}
{{'twoFactorDuoSecretKey' | i18n}}: {{skey}}
{{'twoFactorDuoApiHostname' | i18n}}: {{host}}
\"\"

{{'twoFactorDuoDesc' | i18n}}

","import {\n Component,\n ComponentFactoryResolver,\n OnInit,\n Type,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { TwoFactorProviders } from 'jslib-common/services/auth.service';\n\nimport { PolicyType } from 'jslib-common/enums/policyType';\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\n\nimport { ModalComponent } from '../modal.component';\n\nimport { TwoFactorAuthenticatorComponent } from './two-factor-authenticator.component';\nimport { TwoFactorDuoComponent } from './two-factor-duo.component';\nimport { TwoFactorEmailComponent } from './two-factor-email.component';\nimport { TwoFactorRecoveryComponent } from './two-factor-recovery.component';\nimport { TwoFactorWebAuthnComponent } from './two-factor-webauthn.component';\nimport { TwoFactorYubiKeyComponent } from './two-factor-yubikey.component';\n\n@Component({\n selector: 'app-two-factor-setup',\n templateUrl: 'two-factor-setup.component.html',\n})\nexport class TwoFactorSetupComponent implements OnInit {\n @ViewChild('recoveryTemplate', { read: ViewContainerRef, static: true }) recoveryModalRef: ViewContainerRef;\n @ViewChild('authenticatorTemplate', { read: ViewContainerRef, static: true }) authenticatorModalRef: ViewContainerRef;\n @ViewChild('yubikeyTemplate', { read: ViewContainerRef, static: true }) yubikeyModalRef: ViewContainerRef;\n @ViewChild('duoTemplate', { read: ViewContainerRef, static: true }) duoModalRef: ViewContainerRef;\n @ViewChild('emailTemplate', { read: ViewContainerRef, static: true }) emailModalRef: ViewContainerRef;\n @ViewChild('webAuthnTemplate', { read: ViewContainerRef, static: true }) webAuthnModalRef: ViewContainerRef;\n\n organizationId: string;\n providers: any[] = [];\n canAccessPremium: boolean;\n showPolicyWarning = false;\n loading = true;\n\n private modal: ModalComponent = null;\n\n constructor(protected apiService: ApiService, protected userService: UserService,\n protected componentFactoryResolver: ComponentFactoryResolver, protected messagingService: MessagingService,\n protected policyService: PolicyService) { }\n\n async ngOnInit() {\n this.canAccessPremium = await this.userService.canAccessPremium();\n\n for (const key in TwoFactorProviders) {\n if (!TwoFactorProviders.hasOwnProperty(key)) {\n continue;\n }\n\n const p = (TwoFactorProviders as any)[key];\n if (this.filterProvider(p.type)) {\n continue;\n }\n\n this.providers.push({\n type: p.type,\n name: p.name,\n description: p.description,\n enabled: false,\n premium: p.premium,\n sort: p.sort,\n });\n }\n\n this.providers.sort((a: any, b: any) => a.sort - b.sort);\n await this.load();\n }\n\n async load() {\n this.loading = true;\n const providerList = await this.getTwoFactorProviders();\n providerList.data.forEach(p => {\n this.providers.forEach(p2 => {\n if (p.type === p2.type) {\n p2.enabled = p.enabled;\n }\n });\n });\n this.evaluatePolicies();\n this.loading = false;\n }\n\n manage(type: TwoFactorProviderType) {\n switch (type) {\n case TwoFactorProviderType.Authenticator:\n const authComp = this.openModal(this.authenticatorModalRef, TwoFactorAuthenticatorComponent);\n authComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.Authenticator);\n });\n break;\n case TwoFactorProviderType.Yubikey:\n const yubiComp = this.openModal(this.yubikeyModalRef, TwoFactorYubiKeyComponent);\n yubiComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.Yubikey);\n });\n break;\n case TwoFactorProviderType.Duo:\n const duoComp = this.openModal(this.duoModalRef, TwoFactorDuoComponent);\n duoComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.Duo);\n });\n break;\n case TwoFactorProviderType.Email:\n const emailComp = this.openModal(this.emailModalRef, TwoFactorEmailComponent);\n emailComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.Email);\n });\n break;\n case TwoFactorProviderType.WebAuthn:\n const webAuthnComp = this.openModal(this.webAuthnModalRef, TwoFactorWebAuthnComponent);\n webAuthnComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.WebAuthn);\n });\n break;\n default:\n break;\n }\n }\n\n recoveryCode() {\n this.openModal(this.recoveryModalRef, TwoFactorRecoveryComponent);\n }\n\n async premiumRequired() {\n if (!this.canAccessPremium) {\n this.messagingService.send('premiumRequired');\n return;\n }\n }\n\n protected getTwoFactorProviders() {\n return this.apiService.getTwoFactorProviders();\n }\n\n protected filterProvider(type: TwoFactorProviderType) {\n return type === TwoFactorProviderType.OrganizationDuo;\n }\n\n protected openModal(ref: ViewContainerRef, type: Type): T {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = ref.createComponent(factory).instance;\n const childComponent = this.modal.show(type, ref);\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n return childComponent;\n }\n\n protected updateStatus(enabled: boolean, type: TwoFactorProviderType) {\n if (!enabled && this.modal != null) {\n this.modal.close();\n }\n this.providers.forEach(p => {\n if (p.type === type) {\n p.enabled = enabled;\n }\n });\n this.evaluatePolicies();\n }\n\n private async evaluatePolicies() {\n if (this.organizationId == null && this.providers.filter(p => p.enabled).length === 1) {\n const policies = await this.policyService.getAll(PolicyType.TwoFactorAuthentication);\n this.showPolicyWarning = policies != null && policies.some(p => p.enabled);\n } else {\n this.showPolicyWarning = false;\n }\n }\n}\n","

{{'twoStepLogin' | i18n}}

{{'twoStepLoginDesc' | i18n}}

{{'twoStepLoginOrganizationDesc' | i18n}}

{{'twoStepLoginRecoveryWarning' | i18n}}

{{'providers' | i18n}} {{'loading' | i18n}}

{{'twoStepLoginPolicyUserWarning' | i18n}} ","import { Component } from '@angular/core';\n\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { EventService } from 'jslib-common/abstractions/event.service';\nimport { ExportService } from 'jslib-common/abstractions/export.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { ExportComponent as BaseExportComponent } from 'jslib-angular/components/export.component';\n\n@Component({\n selector: 'app-export',\n templateUrl: 'export.component.html',\n})\nexport class ExportComponent extends BaseExportComponent {\n organizationId: string;\n\n constructor(cryptoService: CryptoService, i18nService: I18nService,\n platformUtilsService: PlatformUtilsService, exportService: ExportService,\n eventService: EventService) {\n super(cryptoService, i18nService, platformUtilsService, exportService, eventService, window);\n }\n\n protected saved() {\n super.saved();\n this.masterPassword = null;\n this.platformUtilsService.showToast('success', null, this.i18nService.t('exportSuccess'));\n }\n}\n","

{{'exportVault' | i18n}}

{{'exportMasterPassword' | i18n}}

","import {\n Component,\n ComponentFactoryResolver,\n OnInit,\n} from '@angular/core';\n\nimport { AuditService } from 'jslib-common/abstractions/audit.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nimport { CipherType } from 'jslib-common/enums/cipherType';\n\nimport { CipherReportComponent } from './cipher-report.component';\n\n@Component({\n selector: 'app-exposed-passwords-report',\n templateUrl: 'exposed-passwords-report.component.html',\n})\nexport class ExposedPasswordsReportComponent extends CipherReportComponent implements OnInit {\n exposedPasswordMap = new Map();\n\n constructor(protected cipherService: CipherService, protected auditService: AuditService,\n componentFactoryResolver: ComponentFactoryResolver, messagingService: MessagingService,\n userService: UserService) {\n super(componentFactoryResolver, userService, messagingService, true);\n }\n\n ngOnInit() {\n this.checkAccess();\n }\n\n async load() {\n if (await this.checkAccess()) {\n super.load();\n }\n }\n\n async setCiphers() {\n const allCiphers = await this.getAllCiphers();\n const exposedPasswordCiphers: CipherView[] = [];\n const promises: Promise[] = [];\n allCiphers.forEach(c => {\n if (c.type !== CipherType.Login || c.login.password == null || c.login.password === '' || c.isDeleted) {\n return;\n }\n const promise = this.auditService.passwordLeaked(c.login.password).then(exposedCount => {\n if (exposedCount > 0) {\n exposedPasswordCiphers.push(c);\n this.exposedPasswordMap.set(c.id, exposedCount);\n }\n });\n promises.push(promise);\n });\n await Promise.all(promises);\n this.ciphers = exposedPasswordCiphers;\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n protected canManageCipher(c: CipherView): boolean {\n // this will only ever be false from the org view;\n return true;\n }\n}\n","

{{'exposedPasswordsReport' | i18n}}

{{'exposedPasswordsReportDesc' | i18n}}

{{'noExposedPasswords' | i18n}} {{'exposedPasswordsFoundDesc' | i18n : (ciphers.length | number)}}
{{c.name}} {{c.name}} {{'shared' | i18n}} {{'attachments' | i18n}}
{{c.subTitle}}
{{'exposedXTimes' | i18n : (exposedPasswordMap.get(c.id) | number)}}
","import { Component } from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { AuditService } from 'jslib-common/abstractions/audit.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { EventService } from 'jslib-common/abstractions/event.service';\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { TotpService } from 'jslib-common/abstractions/totp.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { CipherData } from 'jslib-common/models/data/cipherData';\nimport { Cipher } from 'jslib-common/models/domain/cipher';\nimport { Organization } from 'jslib-common/models/domain/organization';\nimport { CipherCreateRequest } from 'jslib-common/models/request/cipherCreateRequest';\nimport { CipherRequest } from 'jslib-common/models/request/cipherRequest';\n\nimport { AddEditComponent as BaseAddEditComponent } from '../../vault/add-edit.component';\n\n@Component({\n selector: 'app-org-vault-add-edit',\n templateUrl: '../../vault/add-edit.component.html',\n})\nexport class AddEditComponent extends BaseAddEditComponent {\n organization: Organization;\n originalCipher: Cipher = null;\n\n constructor(cipherService: CipherService, folderService: FolderService,\n i18nService: I18nService, platformUtilsService: PlatformUtilsService,\n auditService: AuditService, stateService: StateService,\n userService: UserService, collectionService: CollectionService,\n totpService: TotpService, passwordGenerationService: PasswordGenerationService,\n private apiService: ApiService, messagingService: MessagingService,\n eventService: EventService, policyService: PolicyService) {\n super(cipherService, folderService, i18nService, platformUtilsService, auditService, stateService,\n userService, collectionService, totpService, passwordGenerationService, messagingService,\n eventService, policyService);\n }\n\n protected allowOwnershipAssignment() {\n if (this.ownershipOptions != null && (this.ownershipOptions.length > 1 || !this.allowPersonal)) {\n if (this.organization != null) {\n return this.cloneMode && this.organization.canManageAllCollections;\n } else {\n return !this.editMode || this.cloneMode;\n }\n }\n return false;\n }\n\n protected loadCollections() {\n if (!this.organization.canManageAllCollections) {\n return super.loadCollections();\n }\n return Promise.resolve(this.collections);\n }\n\n protected async loadCipher() {\n if (!this.organization.canManageAllCollections) {\n return await super.loadCipher();\n }\n const response = await this.apiService.getCipherAdmin(this.cipherId);\n const data = new CipherData(response);\n this.originalCipher = new Cipher(data);\n return new Cipher(data);\n }\n\n protected encryptCipher() {\n if (!this.organization.canManageAllCollections) {\n return super.encryptCipher();\n }\n return this.cipherService.encrypt(this.cipher, null, this.originalCipher);\n }\n\n protected async saveCipher(cipher: Cipher) {\n if (!this.organization.canManageAllCollections || cipher.organizationId == null) {\n return super.saveCipher(cipher);\n }\n if (this.editMode && !this.cloneMode) {\n const request = new CipherRequest(cipher);\n return this.apiService.putCipherAdmin(this.cipherId, request);\n } else {\n const request = new CipherCreateRequest(cipher);\n return this.apiService.postCipherAdmin(request);\n }\n }\n\n protected async deleteCipher() {\n if (!this.organization.canManageAllCollections) {\n return super.deleteCipher();\n }\n return this.cipher.isDeleted ? this.apiService.deleteCipherAdmin(this.cipherId)\n : this.apiService.putDeleteCipherAdmin(this.cipherId);\n }\n}\n","import { AttachmentResponse } from '../response/attachmentResponse';\n\nexport class AttachmentData {\n id: string;\n url: string;\n fileName: string;\n key: string;\n size: string;\n sizeName: string;\n\n constructor(response?: AttachmentResponse) {\n if (response == null) {\n return;\n }\n this.id = response.id;\n this.url = response.url;\n this.fileName = response.fileName;\n this.key = response.key;\n this.size = response.size;\n this.sizeName = response.sizeName;\n }\n}\n","import { CardApi } from '../api/cardApi';\n\nexport class CardData {\n cardholderName: string;\n brand: string;\n number: string;\n expMonth: string;\n expYear: string;\n code: string;\n\n constructor(data?: CardApi) {\n if (data == null) {\n return;\n }\n\n this.cardholderName = data.cardholderName;\n this.brand = data.brand;\n this.number = data.number;\n this.expMonth = data.expMonth;\n this.expYear = data.expYear;\n this.code = data.code;\n }\n}\n","import { FieldType } from '../../enums/fieldType';\n\nimport { FieldApi } from '../api/fieldApi';\n\nexport class FieldData {\n type: FieldType;\n name: string;\n value: string;\n\n constructor(response?: FieldApi) {\n if (response == null) {\n return;\n }\n this.type = response.type;\n this.name = response.name;\n this.value = response.value;\n }\n}\n","import { IdentityApi } from '../api/identityApi';\n\nexport class IdentityData {\n title: string;\n firstName: string;\n middleName: string;\n lastName: string;\n address1: string;\n address2: string;\n address3: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n company: string;\n email: string;\n phone: string;\n ssn: string;\n username: string;\n passportNumber: string;\n licenseNumber: string;\n\n constructor(data?: IdentityApi) {\n if (data == null) {\n return;\n }\n\n this.title = data.title;\n this.firstName = data.firstName;\n this.middleName = data.middleName;\n this.lastName = data.lastName;\n this.address1 = data.address1;\n this.address2 = data.address2;\n this.address3 = data.address3;\n this.city = data.city;\n this.state = data.state;\n this.postalCode = data.postalCode;\n this.country = data.country;\n this.company = data.company;\n this.email = data.email;\n this.phone = data.phone;\n this.ssn = data.ssn;\n this.username = data.username;\n this.passportNumber = data.passportNumber;\n this.licenseNumber = data.licenseNumber;\n }\n}\n","import { LoginApi } from '../api/loginApi';\n\nimport { LoginUriData } from './loginUriData';\n\nexport class LoginData {\n uris: LoginUriData[];\n username: string;\n password: string;\n passwordRevisionDate: string;\n totp: string;\n autofillOnPageLoad: boolean;\n\n constructor(data?: LoginApi) {\n if (data == null) {\n return;\n }\n\n this.username = data.username;\n this.password = data.password;\n this.passwordRevisionDate = data.passwordRevisionDate;\n this.totp = data.totp;\n this.autofillOnPageLoad = data.autofillOnPageLoad;\n\n if (data.uris) {\n this.uris = data.uris.map(u => new LoginUriData(u));\n }\n }\n}\n","import { UriMatchType } from '../../enums/uriMatchType';\n\nimport { LoginUriApi } from '../api/loginUriApi';\n\nexport class LoginUriData {\n uri: string;\n match: UriMatchType = null;\n\n constructor(data?: LoginUriApi) {\n if (data == null) {\n return;\n }\n this.uri = data.uri;\n this.match = data.match;\n }\n}\n","import { SecureNoteType } from '../../enums/secureNoteType';\n\nimport { SecureNoteApi } from '../api/secureNoteApi';\n\nexport class SecureNoteData {\n type: SecureNoteType;\n\n constructor(data?: SecureNoteApi) {\n if (data == null) {\n return;\n }\n\n this.type = data.type;\n }\n}\n","import { AttachmentData } from '../data/attachmentData';\n\nimport { AttachmentView } from '../view/attachmentView';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nimport { CryptoService } from '../../abstractions/crypto.service';\n\nimport { Utils } from '../../misc/utils';\n\nexport class Attachment extends Domain {\n id: string;\n url: string;\n size: string;\n sizeName: string;\n key: EncString;\n fileName: EncString;\n\n constructor(obj?: AttachmentData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.size = obj.size;\n this.buildDomainModel(this, obj, {\n id: null,\n url: null,\n sizeName: null,\n fileName: null,\n key: null,\n }, alreadyEncrypted, ['id', 'url', 'sizeName']);\n }\n\n async decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n const view = await this.decryptObj(new AttachmentView(this), {\n fileName: null,\n }, orgId, encKey);\n\n if (this.key != null) {\n let cryptoService: CryptoService;\n const containerService = (Utils.global as any).bitwardenContainerService;\n if (containerService) {\n cryptoService = containerService.getCryptoService();\n } else {\n throw new Error('global bitwardenContainerService not initialized.');\n }\n\n try {\n const orgKey = await cryptoService.getOrgKey(orgId);\n const decValue = await cryptoService.decryptToBytes(this.key, orgKey ?? encKey);\n view.key = new SymmetricCryptoKey(decValue);\n } catch (e) {\n // TODO: error?\n }\n }\n\n return view;\n }\n\n toAttachmentData(): AttachmentData {\n const a = new AttachmentData();\n a.size = this.size;\n this.buildDataModel(this, a, {\n id: null,\n url: null,\n sizeName: null,\n fileName: null,\n key: null,\n }, ['id', 'url', 'sizeName']);\n return a;\n }\n}\n","import { View } from './view';\n\nimport { Password } from '../domain/password';\n\nexport class PasswordHistoryView implements View {\n password: string = null;\n lastUsedDate: Date = null;\n\n constructor(ph?: Password) {\n if (!ph) {\n return;\n }\n\n this.lastUsedDate = ph.lastUsedDate;\n }\n}\n","import {\n Component,\n OnInit,\n} from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { ImportOption, ImportService } from 'jslib-common/abstractions/import.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport Swal, { SweetAlertIcon } from 'sweetalert2';\n\n@Component({\n selector: 'app-import',\n templateUrl: 'import.component.html',\n})\nexport class ImportComponent implements OnInit {\n featuredImportOptions: ImportOption[];\n importOptions: ImportOption[];\n format: string = null;\n fileContents: string;\n formPromise: Promise;\n loading: boolean = false;\n\n protected organizationId: string = null;\n protected successNavigate: any[] = ['vault'];\n\n constructor(protected i18nService: I18nService, protected toasterService: ToasterService,\n protected importService: ImportService, protected router: Router,\n protected platformUtilsService: PlatformUtilsService) { }\n\n ngOnInit() {\n this.setImportOptions();\n this.importOptions.sort((a, b) => {\n if (a.name == null && b.name != null) {\n return -1;\n }\n if (a.name != null && b.name == null) {\n return 1;\n }\n if (a.name == null && b.name == null) {\n return 0;\n }\n\n return this.i18nService.collator ? this.i18nService.collator.compare(a.name, b.name) :\n a.name.localeCompare(b.name);\n });\n }\n\n async submit() {\n this.loading = true;\n\n const importer = this.importService.getImporter(this.format, this.organizationId);\n if (importer === null) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('selectFormat'));\n this.loading = false;\n return;\n }\n\n const fileEl = document.getElementById('file') as HTMLInputElement;\n const files = fileEl.files;\n if ((files == null || files.length === 0) && (this.fileContents == null || this.fileContents === '')) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('selectFile'));\n this.loading = false;\n return;\n }\n\n let fileContents = this.fileContents;\n if (files != null && files.length > 0) {\n try {\n const content = await this.getFileContents(files[0]);\n if (content != null) {\n fileContents = content;\n }\n } catch { }\n }\n\n if (fileContents == null || fileContents === '') {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('selectFile'));\n this.loading = false;\n return;\n }\n\n try {\n this.formPromise = this.importService.import(importer, fileContents, this.organizationId);\n const error = await this.formPromise;\n if (error != null) {\n this.error(error);\n this.loading = false;\n return;\n }\n this.toasterService.popAsync('success', null, this.i18nService.t('importSuccess'));\n this.router.navigate(this.successNavigate);\n } catch { }\n\n this.loading = false;\n }\n\n getFormatInstructionTitle() {\n if (this.format == null) {\n return null;\n }\n\n const results = this.featuredImportOptions.concat(this.importOptions).filter(o => o.id === this.format);\n if (results.length > 0) {\n return this.i18nService.t('instructionsFor', results[0].name);\n }\n return null;\n }\n\n protected setImportOptions() {\n this.featuredImportOptions = [{\n id: null,\n name: '-- ' + this.i18nService.t('select') + ' --',\n }, ...this.importService.featuredImportOptions];\n this.importOptions = this.importService.regularImportOptions;\n }\n\n private async error(error: Error) {\n await Swal.fire({\n heightAuto: false,\n buttonsStyling: false,\n icon: 'error' as SweetAlertIcon,\n iconHtml: ``,\n input: 'textarea',\n inputValue: error.message,\n inputAttributes: {\n 'readonly': 'true',\n },\n titleText: this.i18nService.t('importError'),\n text: this.i18nService.t('importErrorDesc'),\n showConfirmButton: true,\n confirmButtonText: this.i18nService.t('ok'),\n onOpen: popupEl => {\n popupEl.querySelector('.swal2-textarea').scrollTo(0, 0);\n },\n });\n }\n\n private getFileContents(file: File): Promise {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsText(file, 'utf-8');\n reader.onload = evt => {\n if (this.format === 'lastpasscsv' && file.type === 'text/html') {\n const parser = new DOMParser();\n const doc = parser.parseFromString((evt.target as any).result, 'text/html');\n const pre = doc.querySelector('pre');\n if (pre != null) {\n resolve(pre.textContent);\n return;\n }\n reject();\n return;\n }\n\n resolve((evt.target as any).result);\n };\n reader.onerror = () => {\n reject();\n };\n });\n }\n}\n","

{{'importData' | i18n}}

See detailed instructions on our help site at https://help.bitwarden.com/article/export-your-data/ See detailed instructions on our help site at https://help.bitwarden.com/article/import-from-lastpass/ Using the KeePassX desktop application, navigate to \"Database\" → \"Export to CSV file\" and save the CSV file. In the Avira web vault, go to \"Settings\" → \"My Data\" → \"Export data\" and save the CSV file. In the Blur web vault, click your username at the top and go to \"Settings\" → \"Export Data\", then click \"Export CSV\" for your \"Accounts\". Using the SaveInCloud desktop application, navigate to \"File\" → \"Export\" → \"As XML\" and save the XML file. Using the Padlock desktop application, click the hamburger icon in the top left corner and navigate to \"Settings\" → \"Export\" button and save the file \"As CSV\". Using the KeePass 2 desktop application, navigate to \"File\" → \"Export\" and select the \"KeePass XML (2.x)\" option. Using the Universal Password Manager desktop application, navigate to \"Database\" → \"Export\" and save the CSV file. Using the SaferPass browser extension, click the hamburger icon in the top left corner and navigate to \"Settings\". Click the \"Export accounts\" button to save the CSV file. Using the Meldium web vault, navigate to \"Settings\". Locate the \"Export data\" function and click \"Show me my data\" to save the CSV file. Log into the Keeper web vault (keepersecurity.com/vault). Navigate to \"Backup\" (top right) and find the \"Export to .csv File\" option. Click \"Export Now\" to save the CSV file. The process is exactly the same as importing from Google Chrome. See detailed instructions on our help site at https://help.bitwarden.com/article/import-from-chrome/ See detailed instructions on our help site at https://bitwarden.com/help/article/import-from-firefox/. See detailed instructions on our help site at https://help.bitwarden.com/article/import-from-1password/. Using the Password Dragon desktop application, navigate to \"File\" → \"Export\" → \"To XML\". In the dialog that pops up select \"All Rows\" and check all fields. Click the \"Export\" button and save the XML file. Using the Enpass desktop application, navigate to \"File\" → \"Export\" → \"As CSV\". Select \"OK\" to the warning alert and save the CSV file. Note that the importer only supports files exported while Enpass is set to the English language, so adjust your settings accordingly. Using the Enpass 6 desktop application, click the menu button and navigate to \"File\" → \"Export\". Select the \".json\" file format option and save the JSON file. Using the Password Safe desktop application, navigate to \"File\" → \"Export To\" → \"XML format...\" and save the XML file. Using the Dashlane desktop application, navigate to \"File\" → \"Export\" → \"Unsecured archive (readable) in JSON format\" and save the JSON file. Using the mSecure desktop application, navigate to \"File\" → \"Export\" → \"CSV File...\" and save the CSV file. Using the Sticky Password desktop application, navigate to \"Menu\" (top right) → \"Export\" → \"Export all\". Select the unencrypted format XML option and save the XML file. Using the True Key desktop application, click the gear icon (top right) and then navigate to \"App Settings\". Click the \"Export\" button, enter your password and save the CSV file. Log into the Clipperz web application (clipperz.is/app). Click the hamburger menu icon in the top right to expand the navigation bar. Navigate to \"Data\" → \"Export\". Click the \"download HTML+JSON\" button to save the HTML file. Using the RoboForm Editor desktop application, navigate to \"RoboForm\" (top left) → \"Options\" → \"Account & Data\" and click the \"Export\" button. Select all of your data, change the \"Format\" to \"CSV file\" and then click the \"Export\" button to save the CSV file. Note: RoboForm only allows you to export Logins. Other items will not be exported. Log into the Passbolt web vault and navigate to the \"Passwords\" listing. Select all of the passwords you would like to export and click the \"Export\" button at the top of the listing. Choose the \"csv (lastpass)\" export format and click the \"Export\" button. Using the Ascendo DataVault desktop application, navigate to \"Tools\" → \"Export\". In the dialog that pops up, select the \"All Items (DVX, CSV)\" option. Click the \"Ok\" button to save the CSV file. Using the Password Boss desktop application, navigate to \"File\" → \"Export data\" → \"Password Boss JSON - not encrypted\" and save the JSON file. Log into the Zoho web vault (vault.zoho.com). Navigate to \"Tools\" → \"Export Secrets\". Select \"All Secrets\" and click the \"Zoho Vault Format CSV\" button. Highlight and copy the data from the textarea. Open a text editor like Notepad and paste the data. Save the data from the text editor as zoho_export.csv. Using the SplashID Safe desktop application, click on the SplashID blue lock logo in the top right corner. Navigate to \"Export\" → \"Export as CSV\" and save the CSV file. Using the PassKeep mobile app, navigate to \"Backup/Restore\". Locate the \"CSV Backup/Restore\" section and click \"Backup to CSV\" to save the CSV file. Make sure you have python-keyring and python-gnomekeyring installed. Save the GNOME Keyring Import/Export python script to your desktop as pw_helper.py. Open terminal and run chmod +rx Desktop/pw_helper.py and then python Desktop/pw_helper.py export Desktop/my_passwords.json. Then upload the resulting my_passwords.json file here to Bitwarden. Using the Password Agent desktop application navigate to \"File\" → \"Export\", select the \"Fields to export\" button and check all of the fields, change the \"Output format\" to \"CSV\", and then click the \"Start\" button to save the CSV file. Log into the Passpack website vault and navigate to \"Settings\" → \"Export\", then click the \"Download\" button to save the CSV file. Open your Passman vault and click on \"Settings\" in the bottom left corner. In the \"Settings\" window switch to the \"Export credentials\" tab and choose \"JSON\" as the export type. Enter your vault's passphrase and click the \"Export\" button to save the JSON file. Open the Avast Passwords desktop application and navigate to \"Settings\" → \"Import/export data\". Select the \"Export\" button for the \"Export to CSV file\" option to save the CSV file. Open the Avast Passwords desktop application and navigate to \"Settings\" → \"Import/export data\". Select the \"Export\" button for the \"Export to JSON file\" option to save the JSON file. Open the F-Secure KEY desktop application and navigate to \"Settings\" → \"Export Passwords\". Select the \"Export\" button, enter your master password, and save the FSK file. Open the Kaspersky Password Manager desktop application and navigate to \"Settings\" → \"Import/Export\". Locate the \"Export to text file\" section and select the \"Export\" button to save the TXT file. Open the RememBear desktop application and navigate to \"Settings\" → \"Account\" → \"Export\". Enter your master password and select the \"Export Anyway\" button to save the CSV file. Open the PasswordWallet desktop application and navigate to \"File\" → \"Export\" → \"Visible entries to text file\". Enter your password and select the \"Ok\" button to save the TXT file. Open the Myki desktop browser extension and navigate to \"Advanced\" → \"Export Accounts\" and then scan the QR code with your mobile device. Various CSV files will then be saved to your computer's downloads folder. Export your SecureSafe password safe to a CSV file with a comma delimiter. Open the LogMeOnce browser extension, then navigate to \"Open Menu\" → \"Export To\" and select \"CSV File\" to save the CSV file. Open the BlackBerry Password Keeper application, then navigate to \"Settings\" → \"Import/Export\". Select \"Export Passwords\" and follow the instructions on screen to save the unencrypted CSV file. Open the Buttercup desktop application and unlock your vault. Right click on your vault's icon and select \"Export\" to save the CSV file. Open the Codebook desktop application and log in. Navigate to \"File\" → \"Export all\", then click \"Yes\" on the dialog and save the CSV file. Open the newest version of the Encryptr desktop application and allow all of your data to sync. Once syncing of your data is complete, the download icon in the top right corner will turn pink. Click the download icon and save the CSV file. From the Yoti browser extension, click on \"Settings\", then \"Export Saved Logins\" and save the CSV file.
","import {\n Component,\n ComponentFactoryResolver,\n OnInit,\n} from '@angular/core';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nimport { CipherType } from 'jslib-common/enums/cipherType';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\nimport { CipherReportComponent } from './cipher-report.component';\n\n@Component({\n selector: 'app-inactive-two-factor-report',\n templateUrl: 'inactive-two-factor-report.component.html',\n})\nexport class InactiveTwoFactorReportComponent extends CipherReportComponent implements OnInit {\n services = new Map();\n cipherDocs = new Map();\n\n constructor(protected cipherService: CipherService, componentFactoryResolver: ComponentFactoryResolver,\n messagingService: MessagingService, userService: UserService) {\n super(componentFactoryResolver, userService, messagingService, true);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n try {\n await this.load2fa();\n } catch { }\n if (this.services.size > 0) {\n const allCiphers = await this.getAllCiphers();\n const inactive2faCiphers: CipherView[] = [];\n const promises: Promise[] = [];\n const docs = new Map();\n allCiphers.forEach(c => {\n if (c.type !== CipherType.Login || (c.login.totp != null && c.login.totp !== '') || !c.login.hasUris ||\n c.isDeleted) {\n return;\n }\n for (let i = 0; i < c.login.uris.length; i++) {\n const u = c.login.uris[i];\n if (u.uri != null && u.uri !== '') {\n const hostname = Utils.getHostname(u.uri);\n if (hostname != null && this.services.has(hostname)) {\n if (this.services.get(hostname) != null) {\n docs.set(c.id, this.services.get(hostname));\n }\n inactive2faCiphers.push(c);\n break;\n }\n }\n }\n });\n await Promise.all(promises);\n this.ciphers = inactive2faCiphers;\n this.cipherDocs = docs;\n }\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n private async load2fa() {\n if (this.services.size > 0) {\n return;\n }\n const response = await fetch(new Request('https://2fa.directory/api/v2/totp.json'));\n if (response.status !== 200) {\n throw new Error();\n }\n const responseJson = await response.json();\n for (const categoryName in responseJson) {\n if (responseJson.hasOwnProperty(categoryName)) {\n const category = responseJson[categoryName];\n for (const serviceName in category) {\n if (category.hasOwnProperty(serviceName)) {\n const service = category[serviceName];\n if (service.url != null) {\n const hostname = Utils.getHostname(service.url);\n if (hostname != null) {\n this.services.set(hostname, service.doc);\n }\n }\n }\n }\n }\n }\n }\n}\n","

{{'inactive2faReport' | i18n}} {{'loading' | i18n}}

{{'inactive2faReportDesc' | i18n}}

{{'loading' | i18n}}
{{'noInactive2fa' | i18n}} {{'inactive2faFoundDesc' | i18n : (ciphers.length | number)}}
{{c.name}} {{'shared' | i18n}} {{'attachments' | i18n}}
{{c.subTitle}}
{{'instructions' | i18n}}
","import {\n Component,\n ComponentFactoryResolver,\n OnInit,\n} from '@angular/core';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nimport { CipherType } from 'jslib-common/enums/cipherType';\n\nimport { CipherReportComponent } from './cipher-report.component';\n\n@Component({\n selector: 'app-reused-passwords-report',\n templateUrl: 'reused-passwords-report.component.html',\n})\nexport class ReusedPasswordsReportComponent extends CipherReportComponent implements OnInit {\n passwordUseMap: Map;\n\n constructor(protected cipherService: CipherService, componentFactoryResolver: ComponentFactoryResolver,\n messagingService: MessagingService, userService: UserService) {\n super(componentFactoryResolver, userService, messagingService, true);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n const allCiphers = await this.getAllCiphers();\n const ciphersWithPasswords: CipherView[] = [];\n this.passwordUseMap = new Map();\n allCiphers.forEach(c => {\n if (c.type !== CipherType.Login || c.login.password == null || c.login.password === '' || c.isDeleted) {\n return;\n }\n ciphersWithPasswords.push(c);\n if (this.passwordUseMap.has(c.login.password)) {\n this.passwordUseMap.set(c.login.password, this.passwordUseMap.get(c.login.password) + 1);\n } else {\n this.passwordUseMap.set(c.login.password, 1);\n }\n });\n const reusedPasswordCiphers = ciphersWithPasswords.filter(c =>\n this.passwordUseMap.has(c.login.password) && this.passwordUseMap.get(c.login.password) > 1);\n this.ciphers = reusedPasswordCiphers;\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n protected canManageCipher(c: CipherView): boolean {\n // this will only ever be false from an organization view\n return true;\n }\n}\n","

{{'reusedPasswordsReport' | i18n}} {{'loading' | i18n}}

{{'reusedPasswordsReportDesc' | i18n}}

{{'loading' | i18n}}
{{'noReusedPasswords' | i18n}} {{'reusedPasswordsFoundDesc' | i18n : (ciphers.length | number)}}
{{c.name}} {{c.name}} {{'shared' | i18n}} {{'attachments' | i18n}}
{{c.subTitle}}
{{'reusedXTimes' | i18n : passwordUseMap.get(c.login.password)}}
","import {\n Component,\n ComponentFactoryResolver,\n OnInit,\n} from '@angular/core';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { CipherType } from 'jslib-common/enums/cipherType';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nimport { CipherReportComponent } from './cipher-report.component';\n\n@Component({\n selector: 'app-unsecured-websites-report',\n templateUrl: 'unsecured-websites-report.component.html',\n})\nexport class UnsecuredWebsitesReportComponent extends CipherReportComponent implements OnInit {\n constructor(protected cipherService: CipherService, componentFactoryResolver: ComponentFactoryResolver,\n messagingService: MessagingService, userService: UserService) {\n super(componentFactoryResolver, userService, messagingService, true);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n const allCiphers = await this.getAllCiphers();\n const unsecuredCiphers = allCiphers.filter(c => {\n if (c.type !== CipherType.Login || !c.login.hasUris || c.isDeleted) {\n return false;\n }\n return c.login.uris.some(u => u.uri != null && u.uri.indexOf('http://') === 0);\n });\n this.ciphers = unsecuredCiphers;\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n}\n","

{{'unsecuredWebsitesReport' | i18n}} {{'loading' | i18n}}

{{'unsecuredWebsitesReportDesc' | i18n}}

{{'loading' | i18n}}
{{'noUnsecuredWebsites' | i18n}} {{'unsecuredWebsitesFoundDesc' | i18n : (ciphers.length | number)}}
{{c.name}} {{'shared' | i18n}} {{'attachments' | i18n}}
{{c.subTitle}}
","import {\n Component,\n ComponentFactoryResolver,\n OnInit,\n} from '@angular/core';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nimport { CipherType } from 'jslib-common/enums/cipherType';\n\nimport { CipherReportComponent } from './cipher-report.component';\n\n@Component({\n selector: 'app-weak-passwords-report',\n templateUrl: 'weak-passwords-report.component.html',\n})\nexport class WeakPasswordsReportComponent extends CipherReportComponent implements OnInit {\n\n passwordStrengthMap = new Map();\n\n private passwordStrengthCache = new Map();\n\n constructor(protected cipherService: CipherService, protected passwordGenerationService: PasswordGenerationService,\n componentFactoryResolver: ComponentFactoryResolver, messagingService: MessagingService,\n userService: UserService) {\n super(componentFactoryResolver, userService, messagingService, true);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n const allCiphers = await this.getAllCiphers();\n const weakPasswordCiphers: CipherView[] = [];\n const isUserNameNotEmpty = (c: CipherView): boolean => {\n return c.login.username != null && c.login.username.trim() !== '';\n };\n const getCacheKey = (c: CipherView): string => {\n return c.login.password + '_____' + (isUserNameNotEmpty(c) ? c.login.username : '');\n };\n\n allCiphers.forEach(c => {\n if (c.type !== CipherType.Login || c.login.password == null || c.login.password === '' || c.isDeleted) {\n return;\n }\n const hasUserName = isUserNameNotEmpty(c);\n const cacheKey = getCacheKey(c);\n if (!this.passwordStrengthCache.has(cacheKey)) {\n let userInput: string[] = [];\n if (hasUserName) {\n const atPosition = c.login.username.indexOf('@');\n if (atPosition > -1) {\n userInput = userInput.concat(\n c.login.username.substr(0, atPosition).trim().toLowerCase().split(/[^A-Za-z0-9]/))\n .filter(i => i.length >= 3);\n } else {\n userInput = c.login.username.trim().toLowerCase().split(/[^A-Za-z0-9]/)\n .filter(i => i.length >= 3);\n }\n }\n const result = this.passwordGenerationService.passwordStrength(c.login.password,\n userInput.length > 0 ? userInput : null);\n this.passwordStrengthCache.set(cacheKey, result.score);\n }\n const score = this.passwordStrengthCache.get(cacheKey);\n if (score != null && score <= 2) {\n this.passwordStrengthMap.set(c.id, this.scoreKey(score));\n weakPasswordCiphers.push(c);\n }\n });\n weakPasswordCiphers.sort((a, b) => {\n return this.passwordStrengthCache.get(getCacheKey(a)) -\n this.passwordStrengthCache.get(getCacheKey(b));\n });\n this.ciphers = weakPasswordCiphers;\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n protected canManageCipher(c: CipherView): boolean {\n // this will only ever be false from the org view;\n return true;\n }\n\n private scoreKey(score: number): [string, string] {\n switch (score) {\n case 4:\n return ['strong', 'success'];\n case 3:\n return ['good', 'primary'];\n case 2:\n return ['weak', 'warning'];\n default:\n return ['veryWeak', 'danger'];\n }\n }\n}\n","

{{'weakPasswordsReport' | i18n}} {{'loading' | i18n}}

{{'weakPasswordsReportDesc' | i18n}}

{{'loading' | i18n}}
{{'noWeakPasswords' | i18n}} {{'weakPasswordsFoundDesc' | i18n : (ciphers.length | number)}}
{{c.name}} {{c.name}} {{'shared' | i18n}} {{'attachments' | i18n}}
{{c.subTitle}}
{{passwordStrengthMap.get(c.id)[0] | i18n}}
","import { Component } from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { AttachmentView } from 'jslib-common/models/view/attachmentView';\n\nimport { AttachmentsComponent as BaseAttachmentsComponent } from 'jslib-angular/components/attachments.component';\n\n@Component({\n selector: 'app-vault-attachments',\n templateUrl: 'attachments.component.html',\n})\nexport class AttachmentsComponent extends BaseAttachmentsComponent {\n viewOnly = false;\n\n constructor(cipherService: CipherService, i18nService: I18nService,\n cryptoService: CryptoService, userService: UserService,\n platformUtilsService: PlatformUtilsService, apiService: ApiService) {\n super(cipherService, i18nService, cryptoService, userService, platformUtilsService, apiService, window);\n }\n\n protected async reupload(attachment: AttachmentView) {\n if (this.showFixOldAttachments(attachment)) {\n await this.reuploadCipherAttachment(attachment, false);\n }\n }\n\n protected showFixOldAttachments(attachment: AttachmentView) {\n return attachment.key == null && this.cipher.organizationId == null;\n }\n}\n","

{{'attachments' | i18n}} {{cipher.name}}

{{a.sizeName}}

{{'newAttachment' | i18n}}

{{'maxFileSize' | i18n}}
","import { BaseResponse } from './baseResponse';\n\nexport class AttachmentResponse extends BaseResponse {\n id: string;\n url: string;\n fileName: string;\n key: string;\n size: string;\n sizeName: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.url = this.getResponseProperty('Url');\n this.fileName = this.getResponseProperty('FileName');\n this.key = this.getResponseProperty('Key');\n this.size = this.getResponseProperty('Size');\n this.sizeName = this.getResponseProperty('SizeName');\n }\n}\n","import { BaseResponse } from './baseResponse';\nimport { SelectionReadOnlyResponse } from './selectionReadOnlyResponse';\n\nexport class CollectionResponse extends BaseResponse {\n id: string;\n organizationId: string;\n name: string;\n externalId: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.organizationId = this.getResponseProperty('OrganizationId');\n this.name = this.getResponseProperty('Name');\n this.externalId = this.getResponseProperty('ExternalId');\n }\n}\n\nexport class CollectionDetailsResponse extends CollectionResponse {\n readOnly: boolean;\n\n constructor(response: any) {\n super(response);\n this.readOnly = this.getResponseProperty('ReadOnly') || false;\n }\n}\n\nexport class CollectionGroupDetailsResponse extends CollectionResponse {\n groups: SelectionReadOnlyResponse[] = [];\n\n constructor(response: any) {\n super(response);\n const groups = this.getResponseProperty('Groups');\n if (groups != null) {\n this.groups = groups.map((g: any) => new SelectionReadOnlyResponse(g));\n }\n }\n}\n","import { BaseResponse } from './baseResponse';\nimport { GlobalDomainResponse } from './globalDomainResponse';\n\nexport class DomainsResponse extends BaseResponse {\n equivalentDomains: string[][];\n globalEquivalentDomains: GlobalDomainResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.equivalentDomains = this.getResponseProperty('EquivalentDomains');\n const globalEquivalentDomains = this.getResponseProperty('GlobalEquivalentDomains');\n if (globalEquivalentDomains != null) {\n this.globalEquivalentDomains = globalEquivalentDomains.map((d: any) => new GlobalDomainResponse(d));\n } else {\n this.globalEquivalentDomains = [];\n }\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class FolderResponse extends BaseResponse {\n id: string;\n name: string;\n revisionDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.name = this.getResponseProperty('Name');\n this.revisionDate = this.getResponseProperty('RevisionDate');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { SendType } from '../../enums/sendType';\n\nimport { SendFileApi } from '../api/sendFileApi';\nimport { SendTextApi } from '../api/sendTextApi';\n\nexport class SendResponse extends BaseResponse {\n id: string;\n accessId: string;\n type: SendType;\n name: string;\n notes: string;\n file: SendFileApi;\n text: SendTextApi;\n key: string;\n maxAccessCount?: number;\n accessCount: number;\n revisionDate: string;\n expirationDate: string;\n deletionDate: string;\n password: string;\n disable: boolean;\n hideEmail: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.accessId = this.getResponseProperty('AccessId');\n this.type = this.getResponseProperty('Type');\n this.name = this.getResponseProperty('Name');\n this.notes = this.getResponseProperty('Notes');\n this.key = this.getResponseProperty('Key');\n this.maxAccessCount = this.getResponseProperty('MaxAccessCount');\n this.accessCount = this.getResponseProperty('AccessCount');\n this.revisionDate = this.getResponseProperty('RevisionDate');\n this.expirationDate = this.getResponseProperty('ExpirationDate');\n this.deletionDate = this.getResponseProperty('DeletionDate');\n this.password = this.getResponseProperty('Password');\n this.disable = this.getResponseProperty('Disabled') || false;\n this.hideEmail = this.getResponseProperty('HideEmail') || false;\n\n const text = this.getResponseProperty('Text');\n if (text != null) {\n this.text = new SendTextApi(text);\n }\n\n const file = this.getResponseProperty('File');\n if (file != null) {\n this.file = new SendFileApi(file);\n }\n }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nexport class SendFileApi extends BaseResponse {\n id: string;\n fileName: string;\n key: string;\n size: string;\n sizeName: string;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.id = this.getResponseProperty('Id');\n this.fileName = this.getResponseProperty('FileName');\n this.key = this.getResponseProperty('Key');\n this.size = this.getResponseProperty('Size');\n this.sizeName = this.getResponseProperty('SizeName');\n }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nexport class SendTextApi extends BaseResponse {\n text: string;\n hidden: boolean;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.text = this.getResponseProperty('Text');\n this.hidden = this.getResponseProperty('Hidden') || false;\n }\n}\n","import {\n Component,\n EventEmitter,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { EventService } from 'jslib-common/abstractions/event.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { SearchService } from 'jslib-common/abstractions/search.service';\nimport { TotpService } from 'jslib-common/abstractions/totp.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nimport { CiphersComponent as BaseCiphersComponent } from '../../vault/ciphers.component';\n\n@Component({\n selector: 'app-org-vault-ciphers',\n templateUrl: '../../vault/ciphers.component.html',\n})\nexport class CiphersComponent extends BaseCiphersComponent {\n @Output() onEventsClicked = new EventEmitter();\n\n organization: Organization;\n accessEvents = false;\n\n protected allCiphers: CipherView[] = [];\n\n constructor(searchService: SearchService, toasterService: ToasterService, i18nService: I18nService,\n platformUtilsService: PlatformUtilsService, cipherService: CipherService,\n private apiService: ApiService, eventService: EventService, totpService: TotpService,\n userService: UserService, passwordRepromptService: PasswordRepromptService) {\n super(searchService, toasterService, i18nService, platformUtilsService, cipherService,\n eventService, totpService, userService, passwordRepromptService);\n }\n\n async load(filter: (cipher: CipherView) => boolean = null) {\n if (this.organization.canManageAllCollections) {\n this.accessEvents = this.organization.useEvents;\n this.allCiphers = await this.cipherService.getAllFromApiForOrganization(this.organization.id);\n } else {\n this.allCiphers = (await this.cipherService.getAllDecrypted()).filter(c => c.organizationId === this.organization.id);\n }\n await this.searchService.indexCiphers(this.organization.id, this.allCiphers);\n await this.applyFilter(filter);\n this.loaded = true;\n }\n\n async applyFilter(filter: (cipher: CipherView) => boolean = null) {\n if (this.organization.canManageAllCollections) {\n await super.applyFilter(filter);\n } else {\n const f = (c: CipherView) => c.organizationId === this.organization.id && (filter == null || filter(c));\n await super.applyFilter(f);\n }\n }\n\n async search(timeout: number = null) {\n await super.search(timeout, this.allCiphers);\n }\n events(c: CipherView) {\n this.onEventsClicked.emit(c);\n }\n\n protected deleteCipher(id: string) {\n if (!this.organization.canManageAllCollections) {\n return super.deleteCipher(id, this.deleted);\n }\n return this.deleted ? this.apiService.deleteCipherAdmin(id) : this.apiService.putDeleteCipherAdmin(id);\n }\n\n protected showFixOldAttachments(c: CipherView) {\n return this.organization.canManageAllCollections && c.hasOldAttachments;\n }\n}\n","import {\n Component,\n OnDestroy,\n} from '@angular/core';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { CollectionView } from 'jslib-common/models/view/collectionView';\n\nimport { CollectionsComponent as BaseCollectionsComponent } from 'jslib-angular/components/collections.component';\n\n@Component({\n selector: 'app-vault-collections',\n templateUrl: 'collections.component.html',\n})\nexport class CollectionsComponent extends BaseCollectionsComponent implements OnDestroy {\n constructor(collectionService: CollectionService, platformUtilsService: PlatformUtilsService,\n i18nService: I18nService, cipherService: CipherService) {\n super(collectionService, platformUtilsService, i18nService, cipherService);\n }\n\n ngOnDestroy() {\n this.selectAll(false);\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n }\n\n selectAll(select: boolean) {\n this.collections.forEach(c => this.check(c, select));\n }\n}\n","

{{'collections' | i18n}} {{cipher.name}}

{{'collectionsDesc' | i18n}}

{{'collections' | i18n}}

{{'noCollectionsInList' | i18n}}
{{c.name}}
","import { Component } from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { CollectionData } from 'jslib-common/models/data/collectionData';\nimport { Collection } from 'jslib-common/models/domain/collection';\nimport { Organization } from 'jslib-common/models/domain/organization';\nimport { CollectionDetailsResponse } from 'jslib-common/models/response/collectionResponse';\nimport { CollectionView } from 'jslib-common/models/view/collectionView';\n\nimport { GroupingsComponent as BaseGroupingsComponent } from '../../vault/groupings.component';\n\n@Component({\n selector: 'app-org-vault-groupings',\n templateUrl: '../../vault/groupings.component.html',\n})\nexport class GroupingsComponent extends BaseGroupingsComponent {\n organization: Organization;\n\n constructor(collectionService: CollectionService, folderService: FolderService,\n storageService: StorageService, userService: UserService,\n private apiService: ApiService, private i18nService: I18nService) {\n super(collectionService, folderService, storageService, userService);\n }\n\n async loadCollections() {\n if (!this.organization.canManageAllCollections) {\n await super.loadCollections(this.organization.id);\n return;\n }\n\n const collections = await this.apiService.getCollections(this.organization.id);\n if (collections != null && collections.data != null && collections.data.length) {\n const collectionDomains = collections.data.map(r =>\n new Collection(new CollectionData(r as CollectionDetailsResponse)));\n this.collections = await this.collectionService.decryptMany(collectionDomains);\n } else {\n this.collections = [];\n }\n\n const unassignedCollection = new CollectionView();\n unassignedCollection.name = this.i18nService.t('unassigned');\n unassignedCollection.id = 'unassigned';\n unassignedCollection.organizationId = this.organization.id;\n unassignedCollection.readOnly = true;\n this.collections.push(unassignedCollection);\n this.nestedCollections = await this.collectionService.getAllNested(this.collections);\n }\n\n collapse(grouping: CollectionView) {\n super.collapse(grouping, 'org_');\n }\n\n isCollapsed(grouping: CollectionView) {\n return super.isCollapsed(grouping, 'org_');\n }\n}\n","import {\n Component,\n ComponentFactoryResolver,\n Input,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { ToasterService } from 'angular2-toaster';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service';\nimport { CipherRepromptType } from 'jslib-common/enums/cipherRepromptType';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\n\nimport { ModalComponent } from '../modal.component';\n\nimport { BulkDeleteComponent } from './bulk-delete.component';\nimport { BulkMoveComponent } from './bulk-move.component';\nimport { BulkRestoreComponent } from './bulk-restore.component';\nimport { BulkShareComponent } from './bulk-share.component';\nimport { CiphersComponent } from './ciphers.component';\n\n@Component({\n selector: 'app-vault-bulk-actions',\n templateUrl: 'bulk-actions.component.html',\n})\nexport class BulkActionsComponent {\n @Input() ciphersComponent: CiphersComponent;\n @Input() modal: ModalComponent;\n @Input() deleted: boolean;\n @Input() organization: Organization;\n\n @ViewChild('bulkDeleteTemplate', { read: ViewContainerRef, static: true }) bulkDeleteModalRef: ViewContainerRef;\n @ViewChild('bulkRestoreTemplate', { read: ViewContainerRef, static: true }) bulkRestoreModalRef: ViewContainerRef;\n @ViewChild('bulkMoveTemplate', { read: ViewContainerRef, static: true }) bulkMoveModalRef: ViewContainerRef;\n @ViewChild('bulkShareTemplate', { read: ViewContainerRef, static: true }) bulkShareModalRef: ViewContainerRef;\n\n constructor(private toasterService: ToasterService,\n private i18nService: I18nService,\n private componentFactoryResolver: ComponentFactoryResolver,\n private passwordRepromptService: PasswordRepromptService) { }\n\n async bulkDelete() {\n if (!await this.promptPassword()) {\n return;\n }\n\n const selectedIds = this.ciphersComponent.getSelectedIds();\n if (selectedIds.length === 0) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('nothingSelected'));\n return;\n }\n\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.bulkDeleteModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(BulkDeleteComponent, this.bulkDeleteModalRef);\n\n childComponent.permanent = this.deleted;\n childComponent.cipherIds = selectedIds;\n childComponent.organization = this.organization;\n childComponent.onDeleted.subscribe(async () => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n async bulkRestore() {\n if (!await this.promptPassword()) {\n return;\n }\n\n const selectedIds = this.ciphersComponent.getSelectedIds();\n if (selectedIds.length === 0) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('nothingSelected'));\n return;\n }\n\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.bulkRestoreModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(BulkRestoreComponent, this.bulkRestoreModalRef);\n\n childComponent.cipherIds = selectedIds;\n childComponent.onRestored.subscribe(async () => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n async bulkShare() {\n if (!await this.promptPassword()) {\n return;\n }\n\n const selectedCiphers = this.ciphersComponent.getSelected();\n if (selectedCiphers.length === 0) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('nothingSelected'));\n return;\n }\n\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.bulkShareModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(BulkShareComponent, this.bulkShareModalRef);\n\n childComponent.ciphers = selectedCiphers;\n childComponent.onShared.subscribe(async () => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n async bulkMove() {\n if (!await this.promptPassword()) {\n return;\n }\n\n const selectedIds = this.ciphersComponent.getSelectedIds();\n if (selectedIds.length === 0) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('nothingSelected'));\n return;\n }\n\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.bulkMoveModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(BulkMoveComponent, this.bulkMoveModalRef);\n\n childComponent.cipherIds = selectedIds;\n childComponent.onMoved.subscribe(async () => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n selectAll(select: boolean) {\n this.ciphersComponent.selectAll(select);\n }\n\n private async promptPassword() {\n const selectedCiphers = this.ciphersComponent.getSelected();\n const notProtected = !selectedCiphers.find(cipher => cipher.reprompt !== CipherRepromptType.None);\n\n return notProtected || await this.passwordRepromptService.showPasswordPrompt();\n }\n}\n","
","import Domain from './domainBase';\nimport { EncString } from './encString';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nimport { SendFileData } from '../data/sendFileData';\n\nimport { SendFileView } from '../view/sendFileView';\n\nexport class SendFile extends Domain {\n id: string;\n size: string;\n sizeName: string;\n fileName: EncString;\n\n constructor(obj?: SendFileData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.size = obj.size;\n this.buildDomainModel(this, obj, {\n id: null,\n sizeName: null,\n fileName: null,\n }, alreadyEncrypted, ['id', 'sizeName']);\n }\n\n async decrypt(key: SymmetricCryptoKey): Promise {\n const view = await this.decryptObj(new SendFileView(this), {\n fileName: null,\n }, null, key);\n return view;\n }\n}\n","import Domain from './domainBase';\nimport { EncString } from './encString';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nimport { SendTextData } from '../data/sendTextData';\n\nimport { SendTextView } from '../view/sendTextView';\n\nexport class SendText extends Domain {\n text: EncString;\n hidden: boolean;\n\n constructor(obj?: SendTextData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.hidden = obj.hidden;\n this.buildDomainModel(this, obj, {\n text: null,\n }, alreadyEncrypted, []);\n }\n\n decrypt(key: SymmetricCryptoKey): Promise {\n return this.decryptObj(new SendTextView(this), {\n text: null,\n }, null, key);\n }\n}\n","import { CipherRequest } from './cipherRequest';\n\nimport { Cipher } from '../domain/cipher';\n\nexport class CipherWithIdRequest extends CipherRequest {\n id: string;\n\n constructor(cipher: Cipher) {\n super(cipher);\n this.id = cipher.id;\n }\n}\n","import { Folder } from '../domain/folder';\n\nexport class FolderRequest {\n name: string;\n\n constructor(folder: Folder) {\n this.name = folder.name ? folder.name.encryptedString : null;\n }\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n} from '@angular/core';\n\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\n@Directive({\n selector: '[appSelectCopy]',\n})\nexport class SelectCopyDirective {\n constructor(private el: ElementRef, private platformUtilsService: PlatformUtilsService) { }\n\n @HostListener('copy') onCopy() {\n if (window == null) {\n return;\n }\n let copyText = '';\n const selection = window.getSelection();\n for (let i = 0; i < selection.rangeCount; i++) {\n const range = selection.getRangeAt(i);\n const text = range.toString();\n\n // The selection should only contain one line of text. In some cases however, the\n // selection contains newlines and space characters from the indentation of following\n // sibling nodes. To avoid copying passwords containing trailing newlines and spaces\n // that aren't part of the password, the selection has to be trimmed.\n let stringEndPos = text.length;\n const newLinePos = text.search(/(?:\\r\\n|\\r|\\n)/);\n if (newLinePos > -1) {\n const otherPart = text.substr(newLinePos).trim();\n if (otherPart === '') {\n stringEndPos = newLinePos;\n }\n }\n copyText += text.substring(0, stringEndPos);\n }\n this.platformUtilsService.copyToClipboard(copyText, { window: window });\n }\n}\n","import {\n Pipe,\n PipeTransform,\n} from '@angular/core';\n\n/*\n An updated pipe that sanitizes HTML, highlights numbers and special characters (in different colors each)\n and handles Unicode / Emoji characters correctly.\n*/\n@Pipe({ name: 'colorPassword' })\nexport class ColorPasswordPipe implements PipeTransform {\n transform(password: string) {\n // Regex Unicode property escapes for checking if emoji in passwords.\n const regexpEmojiPresentation = /\\p{Emoji_Presentation}/gu;\n // Convert to an array to handle cases that stings have special characters, ie: emoji.\n const passwordArray = Array.from(password);\n let colorizedPassword = '';\n for (let i = 0; i < passwordArray.length; i++) {\n let character = passwordArray[i];\n let isSpecial = false;\n // Sanitize HTML first.\n switch (character) {\n case '&':\n character = '&';\n isSpecial = true;\n break;\n case '<':\n character = '<';\n isSpecial = true;\n break;\n case '>':\n character = '>';\n isSpecial = true;\n break;\n case ' ':\n character = ' ';\n isSpecial = true;\n break;\n default:\n break;\n }\n let type = 'letter';\n if (character.match(regexpEmojiPresentation)) {\n type = 'emoji';\n } else if (isSpecial || character.match(/[^\\w ]/)) {\n type = 'special';\n } else if (character.match(/\\d/)) {\n type = 'number';\n }\n colorizedPassword += '' + character + '';\n }\n return colorizedPassword;\n }\n}\n","import { FolderResponse } from '../response/folderResponse';\n\nexport class FolderData {\n id: string;\n userId: string;\n name: string;\n revisionDate: string;\n\n constructor(response: FolderResponse, userId: string) {\n this.userId = userId;\n this.name = response.name;\n this.id = response.id;\n this.revisionDate = response.revisionDate;\n }\n}\n","import { FolderData } from '../data/folderData';\n\nimport { FolderView } from '../view/folderView';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\n\nexport class Folder extends Domain {\n id: string;\n name: EncString;\n revisionDate: Date;\n\n constructor(obj?: FolderData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(this, obj, {\n id: null,\n name: null,\n }, alreadyEncrypted, ['id']);\n\n this.revisionDate = obj.revisionDate != null ? new Date(obj.revisionDate) : null;\n }\n\n decrypt(): Promise {\n return this.decryptObj(new FolderView(this), {\n name: null,\n }, null);\n }\n}\n","import { EnvironmentService } from './environment.service';\n\nexport abstract class NotificationsService {\n init: (environmentService: EnvironmentService) => Promise;\n updateConnection: (sync?: boolean) => Promise;\n reconnectFromActivity: () => Promise;\n disconnectFromInactivity: () => Promise;\n}\n","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 418;","import {\n Component,\n OnDestroy,\n OnInit,\n} from '@angular/core';\n\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\n@Component({\n selector: 'app-frontend-layout',\n templateUrl: 'frontend-layout.component.html',\n})\nexport class FrontendLayoutComponent implements OnInit, OnDestroy {\n version: string;\n year: string = '2015';\n\n constructor(private platformUtilsService: PlatformUtilsService) { }\n\n async ngOnInit() {\n this.year = new Date().getFullYear().toString();\n this.version = await this.platformUtilsService.getApplicationVersion();\n document.body.classList.add('layout_frontend');\n }\n\n ngOnDestroy() {\n document.body.classList.remove('layout_frontend');\n }\n}\n","
© {{year}}, Bitwarden Inc.
{{'versionNumber' | i18n : version}}
","import {\n Component,\n NgZone,\n OnDestroy,\n OnInit,\n} from '@angular/core';\n\nimport { ActivatedRoute } from '@angular/router';\n\nimport { BroadcasterService } from 'jslib-angular/services/broadcaster.service';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\n\nconst BroadcasterSubscriptionId = 'OrganizationLayoutComponent';\n\n@Component({\n selector: 'app-organization-layout',\n templateUrl: 'organization-layout.component.html',\n})\nexport class OrganizationLayoutComponent implements OnInit, OnDestroy {\n organization: Organization;\n businessTokenPromise: Promise;\n private organizationId: string;\n private businessUrl: string;\n\n constructor(private route: ActivatedRoute, private userService: UserService,\n private broadcasterService: BroadcasterService, private ngZone: NgZone,\n private apiService: ApiService, private platformUtilsService: PlatformUtilsService,\n private environmentService: EnvironmentService) { }\n\n ngOnInit() {\n this.businessUrl = 'https://portal.bitwarden.com';\n if (this.environmentService.enterpriseUrl != null) {\n this.businessUrl = this.environmentService.enterpriseUrl;\n } else if (this.environmentService.baseUrl != null) {\n this.businessUrl = this.environmentService.baseUrl + '/portal';\n }\n\n document.body.classList.remove('layout_frontend');\n this.route.params.subscribe(async params => {\n this.organizationId = params.organizationId;\n await this.load();\n });\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case 'updatedOrgLicense':\n await this.load();\n break;\n }\n });\n });\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n async load() {\n this.organization = await this.userService.getOrganization(this.organizationId);\n }\n\n async goToBusinessPortal() {\n if (this.businessTokenPromise != null) {\n return;\n }\n try {\n this.businessTokenPromise = this.apiService.getEnterprisePortalSignInToken();\n const token = await this.businessTokenPromise;\n if (token != null) {\n const userId = await this.userService.getUserId();\n this.platformUtilsService.launchUri(this.businessUrl + '/login?userId=' + userId +\n '&token=' + (window as any).encodeURIComponent(token) + '&organizationId=' + this.organization.id);\n }\n } catch { }\n this.businessTokenPromise = null;\n }\n\n get showMenuBar() {\n return this.showManageTab || this.showToolsTab || this.organization.isOwner;\n }\n\n get showManageTab(): boolean {\n return this.organization.canManageUsers ||\n this.organization.canManageAssignedCollections ||\n this.organization.canManageAllCollections ||\n this.organization.canManageGroups ||\n this.organization.canManagePolicies ||\n this.organization.canAccessEventLogs;\n }\n\n get showToolsTab(): boolean {\n return this.organization.canAccessImportExport || this.organization.canAccessReports;\n }\n\n get showBusinessPortalButton(): boolean {\n return this.organization.useBusinessPortal && this.organization.canAccessBusinessPortal;\n }\n\n get toolsRoute(): string {\n return this.organization.canAccessImportExport ?\n 'tools/import' :\n 'tools/exposed-passwords-report';\n }\n\n get manageRoute(): string {\n let route: string;\n switch (true) {\n case this.organization.canManageUsers:\n route = 'manage/people';\n break;\n case this.organization.canManageAssignedCollections || this.organization.canManageAllCollections:\n route = 'manage/collections';\n break;\n case this.organization.canManageGroups:\n route = 'manage/groups';\n break;\n case this.organization.canManagePolicies:\n route = 'manage/policies';\n break;\n case this.organization.canAccessEventLogs:\n route = 'manage/events';\n break;\n }\n return route;\n }\n}\n","
{{organization.name}} {{'organization' | i18n}}
{{'organizationIsDisabled' | i18n}}
","import {\n Component,\n OnInit,\n} from '@angular/core';\n\n@Component({\n selector: 'app-user-layout',\n templateUrl: 'user-layout.component.html',\n})\nexport class UserLayoutComponent implements OnInit {\n ngOnInit() {\n document.body.classList.remove('layout_frontend');\n }\n}\n"," ","import {\n Component,\n OnInit,\n} from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport {\n Toast,\n ToasterService,\n} from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\nimport { EmergencyAccessAcceptRequest } from 'jslib-common/models/request/emergencyAccessAcceptRequest';\n\n@Component({\n selector: 'app-accept-emergency',\n templateUrl: 'accept-emergency.component.html',\n})\nexport class AcceptEmergencyComponent implements OnInit {\n loading = true;\n authed = false;\n name: string;\n email: string;\n actionPromise: Promise;\n\n constructor(private router: Router, private toasterService: ToasterService,\n private i18nService: I18nService, private route: ActivatedRoute,\n private apiService: ApiService, private userService: UserService,\n private stateService: StateService) { }\n\n ngOnInit() {\n let fired = false;\n this.route.queryParams.subscribe(async qParams => {\n if (fired) {\n return;\n }\n fired = true;\n await this.stateService.remove('emergencyInvitation');\n let error = qParams.id == null || qParams.name == null || qParams.email == null || qParams.token == null;\n let errorMessage: string = null;\n if (!error) {\n this.authed = await this.userService.isAuthenticated();\n if (this.authed) {\n const request = new EmergencyAccessAcceptRequest();\n request.token = qParams.token;\n try {\n this.actionPromise = this.apiService.postEmergencyAccessAccept(qParams.id, request);\n await this.actionPromise;\n const toast: Toast = {\n type: 'success',\n title: this.i18nService.t('inviteAccepted'),\n body: this.i18nService.t('emergencyInviteAcceptedDesc'),\n timeout: 10000,\n };\n this.toasterService.popAsync(toast);\n this.router.navigate(['/vault']);\n } catch (e) {\n error = true;\n errorMessage = e.message;\n }\n } else {\n await this.stateService.save('emergencyInvitation', qParams);\n this.email = qParams.email;\n this.name = qParams.name;\n if (this.name != null) {\n // Fix URL encoding of space issue with Angular\n this.name = this.name.replace(/\\+/g, ' ');\n }\n }\n }\n\n if (error) {\n const toast: Toast = {\n type: 'error',\n title: null,\n body: errorMessage != null ? this.i18nService.t('emergencyInviteAcceptFailedShort', errorMessage) :\n this.i18nService.t('emergencyInviteAcceptFailed'),\n timeout: 10000,\n };\n this.toasterService.popAsync(toast);\n this.router.navigate(['/']);\n }\n\n this.loading = false;\n });\n }\n}\n","
\"Bitwarden\"

{{'loading' | i18n}}

{{'emergencyAccess' | i18n}}

{{name}}

{{'acceptEmergencyAccess' | i18n}}


","import {\n Component,\n OnInit,\n} from '@angular/core';\n\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport {\n Toast,\n ToasterService,\n} from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { OrganizationUserAcceptRequest } from 'jslib-common/models/request/organizationUserAcceptRequest';\nimport { OrganizationUserResetPasswordEnrollmentRequest } from 'jslib-common/models/request/organizationUserResetPasswordEnrollmentRequest';\n\nimport { Utils } from 'jslib-common/misc/utils';\nimport { Policy } from 'jslib-common/models/domain/policy';\n\n@Component({\n selector: 'app-accept-organization',\n templateUrl: 'accept-organization.component.html',\n})\nexport class AcceptOrganizationComponent implements OnInit {\n loading = true;\n authed = false;\n orgName: string;\n email: string;\n actionPromise: Promise;\n\n constructor(private router: Router, private toasterService: ToasterService,\n private i18nService: I18nService, private route: ActivatedRoute,\n private apiService: ApiService, private userService: UserService,\n private stateService: StateService, private cryptoService: CryptoService,\n private policyService: PolicyService) { }\n\n ngOnInit() {\n let fired = false;\n this.route.queryParams.subscribe(async qParams => {\n if (fired) {\n return;\n }\n fired = true;\n await this.stateService.remove('orgInvitation');\n let error = qParams.organizationId == null || qParams.organizationUserId == null || qParams.token == null;\n let errorMessage: string = null;\n if (!error) {\n this.authed = await this.userService.isAuthenticated();\n if (this.authed) {\n const request = new OrganizationUserAcceptRequest();\n request.token = qParams.token;\n try {\n if (await this.performResetPasswordAutoEnroll(qParams)) {\n this.actionPromise = this.apiService.postOrganizationUserAccept(qParams.organizationId,\n qParams.organizationUserId, request).then(() => {\n // Retrieve Public Key\n return this.apiService.getOrganizationKeys(qParams.organizationId);\n }).then(async response => {\n if (response == null) {\n throw new Error(this.i18nService.t('resetPasswordOrgKeysError'));\n }\n\n const publicKey = Utils.fromB64ToArray(response.publicKey);\n\n // RSA Encrypt user's encKey.key with organization public key\n const encKey = await this.cryptoService.getEncKey();\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n\n // Create request and execute enrollment\n const resetRequest = new OrganizationUserResetPasswordEnrollmentRequest();\n resetRequest.resetPasswordKey = encryptedKey.encryptedString;\n\n // Get User Id\n const userId = await this.userService.getUserId();\n\n return this.apiService.putOrganizationUserResetPasswordEnrollment(qParams.organizationId, userId, resetRequest);\n });\n } else {\n this.actionPromise = this.apiService.postOrganizationUserAccept(qParams.organizationId,\n qParams.organizationUserId, request);\n }\n\n await this.actionPromise;\n const toast: Toast = {\n type: 'success',\n title: this.i18nService.t('inviteAccepted'),\n body: this.i18nService.t('inviteAcceptedDesc'),\n timeout: 10000,\n };\n this.toasterService.popAsync(toast);\n this.router.navigate(['/vault']);\n } catch (e) {\n error = true;\n errorMessage = e.message;\n }\n } else {\n await this.stateService.save('orgInvitation', qParams);\n this.email = qParams.email;\n this.orgName = qParams.organizationName;\n if (this.orgName != null) {\n // Fix URL encoding of space issue with Angular\n this.orgName = this.orgName.replace(/\\+/g, ' ');\n }\n }\n }\n\n if (error) {\n const toast: Toast = {\n type: 'error',\n title: null,\n body: errorMessage != null ? this.i18nService.t('inviteAcceptFailedShort', errorMessage) :\n this.i18nService.t('inviteAcceptFailed'),\n timeout: 10000,\n };\n this.toasterService.popAsync(toast);\n this.router.navigate(['/']);\n }\n\n this.loading = false;\n });\n }\n\n private async performResetPasswordAutoEnroll(qParams: any): Promise {\n let policyList: Policy[] = null;\n try {\n const policies = await this.apiService.getPoliciesByToken(qParams.organizationId, qParams.token,\n qParams.email, qParams.organizationUserId);\n policyList = this.policyService.mapPoliciesFromToken(policies);\n } catch { }\n\n if (policyList != null) {\n const result = this.policyService.getResetPasswordPolicyOptions(policyList, qParams.organizationId);\n // Return true if policy enabled and auto-enroll enabled\n return result[1] && result[0].autoEnrollEnabled;\n }\n\n return false;\n }\n}\n","
\"Bitwarden\"

{{'loading' | i18n}}

{{'joinOrganization' | i18n}}

{{orgName}} {{email}}

{{'joinOrganizationDesc' | i18n}}


","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { HintComponent as BaseHintComponent } from 'jslib-angular/components/hint.component';\n\n@Component({\n selector: 'app-hint',\n templateUrl: 'hint.component.html',\n})\nexport class HintComponent extends BaseHintComponent {\n constructor(router: Router, i18nService: I18nService,\n apiService: ApiService, platformUtilsService: PlatformUtilsService) {\n super(router, i18nService, apiService, platformUtilsService);\n }\n}\n","

{{'passwordHint' | i18n}}

{{'enterEmailToGetHint' | i18n}}

{{'cancel' | i18n}}
","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\nimport { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service';\n\nimport { RouterService } from '../services/router.service';\n\nimport { LockComponent as BaseLockComponent } from 'jslib-angular/components/lock.component';\n\n@Component({\n selector: 'app-lock',\n templateUrl: 'lock.component.html',\n})\nexport class LockComponent extends BaseLockComponent {\n constructor(router: Router, i18nService: I18nService,\n platformUtilsService: PlatformUtilsService, messagingService: MessagingService,\n userService: UserService, cryptoService: CryptoService,\n storageService: StorageService, vaultTimeoutService: VaultTimeoutService,\n environmentService: EnvironmentService, private routerService: RouterService,\n stateService: StateService, apiService: ApiService) {\n super(router, i18nService, platformUtilsService, messagingService, userService, cryptoService,\n storageService, vaultTimeoutService, environmentService, stateService, apiService);\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n this.onSuccessfulSubmit = () => {\n const previousUrl = this.routerService.getPreviousUrl();\n if (previousUrl !== '/' && previousUrl.indexOf('lock') === -1) {\n this.successRoute = previousUrl;\n }\n this.router.navigate([this.successRoute]);\n };\n }\n}\n","

{{'yourVaultIsLocked' | i18n}}

{{'loggedInAsEmailOn' | i18n : email : webVaultHostname}}

","import { Component } from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { CryptoFunctionService } from 'jslib-common/abstractions/cryptoFunction.service';\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\n\nimport { LoginComponent as BaseLoginComponent } from 'jslib-angular/components/login.component';\n\nimport { Policy } from 'jslib-common/models/domain/policy';\n\n@Component({\n selector: 'app-login',\n templateUrl: 'login.component.html',\n})\nexport class LoginComponent extends BaseLoginComponent {\n\n showResetPasswordAutoEnrollWarning = false;\n\n constructor(authService: AuthService, router: Router,\n i18nService: I18nService, private route: ActivatedRoute,\n storageService: StorageService, stateService: StateService,\n platformUtilsService: PlatformUtilsService, environmentService: EnvironmentService,\n passwordGenerationService: PasswordGenerationService, cryptoFunctionService: CryptoFunctionService,\n private apiService: ApiService, private policyService: PolicyService) {\n super(authService, router,\n platformUtilsService, i18nService,\n stateService, environmentService,\n passwordGenerationService, cryptoFunctionService,\n storageService);\n this.onSuccessfulLoginNavigate = this.goAfterLogIn;\n }\n\n async ngOnInit() {\n const queryParamsSub = this.route.queryParams.subscribe(async qParams => {\n if (qParams.email != null && qParams.email.indexOf('@') > -1) {\n this.email = qParams.email;\n }\n if (qParams.premium != null) {\n this.stateService.save('loginRedirect', { route: '/settings/premium' });\n } else if (qParams.org != null) {\n this.stateService.save('loginRedirect',\n { route: '/settings/create-organization', qParams: { plan: qParams.org } });\n }\n await super.ngOnInit();\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n\n const invite = await this.stateService.get('orgInvitation');\n if (invite != null) {\n let policyList: Policy[] = null;\n try {\n const policies = await this.apiService.getPoliciesByToken(invite.organizationId, invite.token,\n invite.email, invite.organizationUserId);\n policyList = this.policyService.mapPoliciesFromToken(policies);\n } catch { }\n\n if (policyList != null) {\n const result = this.policyService.getResetPasswordPolicyOptions(policyList, invite.organizationId);\n // Set to true if policy enabled and auto-enroll enabled\n this.showResetPasswordAutoEnrollWarning = result[1] && result[0].autoEnrollEnabled;\n }\n }\n }\n\n async goAfterLogIn() {\n const orgInvite = await this.stateService.get('orgInvitation');\n const emergencyInvite = await this.stateService.get('emergencyInvitation');\n if (orgInvite != null) {\n this.router.navigate(['accept-organization'], { queryParams: orgInvite });\n } else if (emergencyInvite != null) {\n this.router.navigate(['accept-emergency'], { queryParams: emergencyInvite });\n } else {\n const loginRedirect = await this.stateService.get('loginRedirect');\n if (loginRedirect != null) {\n this.router.navigate([loginRedirect.route], { queryParams: loginRedirect.qParams });\n await this.stateService.remove('loginRedirect');\n } else {\n this.router.navigate([this.successRoute]);\n }\n }\n }\n}\n","

{{'loginOrCreateNewAccount' | i18n}}

{{'resetPasswordAutoEnrollInviteWarning' | i18n}}
{{'getMasterPasswordHint' | i18n}}

{{'createAccount' | i18n}}
","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { DeleteRecoverRequest } from 'jslib-common/models/request/deleteRecoverRequest';\n\n@Component({\n selector: 'app-recover-delete',\n templateUrl: 'recover-delete.component.html',\n})\nexport class RecoverDeleteComponent {\n email: string;\n formPromise: Promise;\n\n constructor(private router: Router, private apiService: ApiService,\n private toasterService: ToasterService, private i18nService: I18nService) {\n }\n\n async submit() {\n try {\n const request = new DeleteRecoverRequest();\n request.email = this.email.trim().toLowerCase();\n this.formPromise = this.apiService.postAccountRecoverDelete(request);\n await this.formPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('deleteRecoverEmailSent'));\n this.router.navigate(['/']);\n } catch { }\n }\n}\n","

{{'deleteAccount' | i18n}}

{{'deleteRecoverDesc' | i18n}}


{{'cancel' | i18n}}
","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { TwoFactorRecoveryRequest } from 'jslib-common/models/request/twoFactorRecoveryRequest';\n\n@Component({\n selector: 'app-recover-two-factor',\n templateUrl: 'recover-two-factor.component.html',\n})\nexport class RecoverTwoFactorComponent {\n email: string;\n masterPassword: string;\n recoveryCode: string;\n formPromise: Promise;\n\n constructor(private router: Router, private apiService: ApiService,\n private toasterService: ToasterService, private i18nService: I18nService,\n private cryptoService: CryptoService, private authService: AuthService) { }\n\n async submit() {\n try {\n const request = new TwoFactorRecoveryRequest();\n request.recoveryCode = this.recoveryCode.replace(/\\s/g, '').toLowerCase();\n request.email = this.email.trim().toLowerCase();\n const key = await this.authService.makePreloginKey(this.masterPassword, request.email);\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, key);\n this.formPromise = this.apiService.postTwoFactorRecover(request);\n await this.formPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('twoStepRecoverDisabled'));\n this.router.navigate(['/']);\n } catch { }\n }\n}\n","

{{'recoverAccountTwoStep' | i18n}}

{{'recoverAccountTwoStepDesc' | i18n}} {{'learnMore' | i18n}}


{{'cancel' | i18n}}
","import { Component } from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\n\nimport { RegisterComponent as BaseRegisterComponent } from 'jslib-angular/components/register.component';\n\nimport { MasterPasswordPolicyOptions } from 'jslib-common/models/domain/masterPasswordPolicyOptions';\nimport { Policy } from 'jslib-common/models/domain/policy';\n\nimport { PolicyData } from 'jslib-common/models/data/policyData';\nimport { ReferenceEventRequest } from 'jslib-common/models/request/referenceEventRequest';\n\n@Component({\n selector: 'app-register',\n templateUrl: 'register.component.html',\n})\nexport class RegisterComponent extends BaseRegisterComponent {\n showCreateOrgMessage = false;\n layout = '';\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n\n private policies: Policy[];\n\n constructor(authService: AuthService, router: Router,\n i18nService: I18nService, cryptoService: CryptoService,\n apiService: ApiService, private route: ActivatedRoute,\n stateService: StateService, platformUtilsService: PlatformUtilsService,\n passwordGenerationService: PasswordGenerationService, private policyService: PolicyService) {\n super(authService, router, i18nService, cryptoService, apiService, stateService, platformUtilsService,\n passwordGenerationService);\n }\n\n getPasswordScoreAlertDisplay() {\n if (this.enforcedPolicyOptions == null) {\n return '';\n }\n\n let str: string;\n switch (this.enforcedPolicyOptions.minComplexity) {\n case 4:\n str = this.i18nService.t('strong');\n break;\n case 3:\n str = this.i18nService.t('good');\n break;\n default:\n str = this.i18nService.t('weak');\n break;\n }\n return str + ' (' + this.enforcedPolicyOptions.minComplexity + ')';\n }\n\n async ngOnInit() {\n const queryParamsSub = this.route.queryParams.subscribe(qParams => {\n this.referenceData = new ReferenceEventRequest();\n if (qParams.email != null && qParams.email.indexOf('@') > -1) {\n this.email = qParams.email;\n }\n if (qParams.premium != null) {\n this.stateService.save('loginRedirect', { route: '/settings/premium' });\n } else if (qParams.org != null) {\n this.showCreateOrgMessage = true;\n this.referenceData.flow = qParams.org;\n this.stateService.save('loginRedirect',\n { route: '/settings/create-organization', qParams: { plan: qParams.org } });\n }\n if (qParams.layout != null) {\n this.layout = this.referenceData.layout = qParams.layout;\n }\n if (qParams.reference != null) {\n this.referenceData.id = qParams.reference;\n } else {\n this.referenceData.id = ('; ' + document.cookie).split('; reference=').pop().split(';').shift();\n }\n if (this.referenceData.id === '') {\n this.referenceData.id = null;\n }\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n const invite = await this.stateService.get('orgInvitation');\n if (invite != null) {\n try {\n const policies = await this.apiService.getPoliciesByToken(invite.organizationId, invite.token,\n invite.email, invite.organizationUserId);\n if (policies.data != null) {\n const policiesData = policies.data.map(p => new PolicyData(p));\n this.policies = policiesData.map(p => new Policy(p));\n }\n } catch { }\n }\n\n if (this.policies != null) {\n this.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions(this.policies);\n }\n }\n\n async submit() {\n if (this.enforcedPolicyOptions != null &&\n !this.policyService.evaluateMasterPassword(this.masterPasswordScore, this.masterPassword,\n this.enforcedPolicyOptions)) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPasswordPolicyRequirementsNotMet'));\n return;\n }\n\n await super.submit();\n }\n}\n","

Companies globally trust Bitwarden for password management.

Start your 7-day free trial!

Quickly deploy your organization

Use Bitwarden across all platforms

Collaborate and share securely

\"Wired\"
\"Bitwarden has become a popular choice among open-source software advocates. After using it for a few months, I can see why.\" - February 2020

Enterprise 3 layout

Enterprise 4 layout

{{'createAccount' | i18n}}

{{'createOrganizationCreatePersonalAccount' | i18n}}
{{'emailAddressDesc' | i18n}}
{{'yourNameDesc' | i18n}}
{{'masterPasswordPolicyInEffect' | i18n}}
  • 0\"> {{'policyInEffectMinComplexity' | i18n : getPasswordScoreAlertDisplay()}}
  • 0\"> {{'policyInEffectMinLength' | i18n : enforcedPolicyOptions?.minLength.toString()}}
  • {{'policyInEffectUppercase' | i18n}}
  • {{'policyInEffectLowercase' | i18n}}
  • {{'policyInEffectNumbers' | i18n}}
  • {{'policyInEffectSpecial' | i18n : '!@#$%^&*'}}
{{'masterPassDesc' | i18n}}
{{'masterPassHintDesc' | i18n}}

{{'cancel' | i18n}}
","import { Component } from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport {\n SetPasswordComponent as BaseSetPasswordComponent,\n} from 'jslib-angular/components/set-password.component';\n\n@Component({\n selector: 'app-set-password',\n templateUrl: 'set-password.component.html',\n})\nexport class SetPasswordComponent extends BaseSetPasswordComponent {\n constructor(apiService: ApiService, i18nService: I18nService,\n cryptoService: CryptoService, messagingService: MessagingService,\n userService: UserService, passwordGenerationService: PasswordGenerationService,\n platformUtilsService: PlatformUtilsService, policyService: PolicyService, router: Router,\n syncService: SyncService, route: ActivatedRoute) {\n super(i18nService, cryptoService, messagingService, userService, passwordGenerationService,\n platformUtilsService, policyService, router, apiService, syncService, route);\n }\n}\n","

{{'setMasterPassword' | i18n}}

{{'loading' | i18n}}
{{'ssoCompleteRegistration' | i18n}}
{{'masterPasswordPolicyInEffect' | i18n}}
  • 0\"> {{'policyInEffectMinComplexity' | i18n : getPasswordScoreAlertDisplay()}}
  • 0\"> {{'policyInEffectMinLength' | i18n : enforcedPolicyOptions?.minLength.toString()}}
  • {{'policyInEffectUppercase' | i18n}}
  • {{'policyInEffectLowercase' | i18n}}
  • {{'policyInEffectNumbers' | i18n}}
  • {{'policyInEffectSpecial' | i18n : '!@#$%^&*'}}
{{'masterPassDesc' | i18n}}
{{'masterPassHintDesc' | i18n}}

","import { Component } from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { CryptoFunctionService } from 'jslib-common/abstractions/cryptoFunction.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\n\nimport { SsoComponent as BaseSsoComponent } from 'jslib-angular/components/sso.component';\n\nconst IdentifierStorageKey = 'ssoOrgIdentifier';\n\n@Component({\n selector: 'app-sso',\n templateUrl: 'sso.component.html',\n})\nexport class SsoComponent extends BaseSsoComponent {\n constructor(authService: AuthService, router: Router,\n i18nService: I18nService, route: ActivatedRoute,\n storageService: StorageService, stateService: StateService,\n platformUtilsService: PlatformUtilsService, apiService: ApiService,\n cryptoFunctionService: CryptoFunctionService,\n passwordGenerationService: PasswordGenerationService) {\n super(authService, router, i18nService, route, storageService, stateService, platformUtilsService,\n apiService, cryptoFunctionService, passwordGenerationService);\n this.redirectUri = window.location.origin + '/sso-connector.html';\n this.clientId = 'web';\n }\n\n async ngOnInit() {\n super.ngOnInit();\n const queryParamsSub = this.route.queryParams.subscribe(async qParams => {\n if (qParams.identifier != null) {\n this.identifier = qParams.identifier;\n } else {\n const storedIdentifier = await this.storageService.get(IdentifierStorageKey);\n if (storedIdentifier != null) {\n this.identifier = storedIdentifier;\n }\n }\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n }\n\n async submit() {\n await this.storageService.save(IdentifierStorageKey, this.identifier);\n if (this.clientId === 'browser') {\n document.cookie = `ssoHandOffMessage=${this.i18nService.t('ssoHandOff')};SameSite=strict`;\n }\n super.submit();\n }\n}\n","
{{'loading' | i18n}}

{{'ssoLogInWithOrgIdentifier' | i18n}}


{{'cancel' | i18n}}
","import { Directive } from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { CryptoFunctionService } from 'jslib-common/abstractions/cryptoFunction.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\n\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\nimport { AuthResult } from 'jslib-common/models/domain/authResult';\n\n@Directive()\nexport class SsoComponent {\n identifier: string;\n loggingIn = false;\n\n formPromise: Promise;\n initiateSsoFormPromise: Promise;\n onSuccessfulLogin: () => Promise;\n onSuccessfulLoginNavigate: () => Promise;\n onSuccessfulLoginTwoFactorNavigate: () => Promise;\n onSuccessfulLoginChangePasswordNavigate: () => Promise;\n\n protected twoFactorRoute = '2fa';\n protected successRoute = 'lock';\n protected changePasswordRoute = 'set-password';\n protected clientId: string;\n protected redirectUri: string;\n protected state: string;\n protected codeChallenge: string;\n\n constructor(protected authService: AuthService, protected router: Router,\n protected i18nService: I18nService, protected route: ActivatedRoute,\n protected storageService: StorageService, protected stateService: StateService,\n protected platformUtilsService: PlatformUtilsService, protected apiService: ApiService,\n protected cryptoFunctionService: CryptoFunctionService,\n protected passwordGenerationService: PasswordGenerationService) { }\n\n async ngOnInit() {\n const queryParamsSub = this.route.queryParams.subscribe(async qParams => {\n if (qParams.code != null && qParams.state != null) {\n const codeVerifier = await this.storageService.get(ConstantsService.ssoCodeVerifierKey);\n const state = await this.storageService.get(ConstantsService.ssoStateKey);\n await this.storageService.remove(ConstantsService.ssoCodeVerifierKey);\n await this.storageService.remove(ConstantsService.ssoStateKey);\n if (qParams.code != null && codeVerifier != null && state != null && this.checkState(state, qParams.state)) {\n await this.logIn(qParams.code, codeVerifier, this.getOrgIdentiferFromState(qParams.state));\n }\n } else if (qParams.clientId != null && qParams.redirectUri != null && qParams.state != null &&\n qParams.codeChallenge != null) {\n this.redirectUri = qParams.redirectUri;\n this.state = qParams.state;\n this.codeChallenge = qParams.codeChallenge;\n this.clientId = qParams.clientId;\n }\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n }\n\n async submit(returnUri?: string, includeUserIdentifier?: boolean) {\n this.initiateSsoFormPromise = this.preValidate();\n if (await this.initiateSsoFormPromise) {\n const authorizeUrl = await this.buildAuthorizeUrl(returnUri, includeUserIdentifier);\n this.platformUtilsService.launchUri(authorizeUrl, { sameWindow: true });\n }\n }\n\n async preValidate(): Promise {\n if (this.identifier == null || this.identifier === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('ssoValidationFailed'),\n this.i18nService.t('ssoIdentifierRequired'));\n return false;\n }\n return await this.apiService.preValidateSso(this.identifier);\n }\n\n protected async buildAuthorizeUrl(returnUri?: string, includeUserIdentifier?: boolean): Promise {\n let codeChallenge = this.codeChallenge;\n let state = this.state;\n\n const passwordOptions: any = {\n type: 'password',\n length: 64,\n uppercase: true,\n lowercase: true,\n numbers: true,\n special: false,\n };\n\n if (codeChallenge == null) {\n const codeVerifier = await this.passwordGenerationService.generatePassword(passwordOptions);\n const codeVerifierHash = await this.cryptoFunctionService.hash(codeVerifier, 'sha256');\n codeChallenge = Utils.fromBufferToUrlB64(codeVerifierHash);\n await this.storageService.save(ConstantsService.ssoCodeVerifierKey, codeVerifier);\n }\n\n if (state == null) {\n state = await this.passwordGenerationService.generatePassword(passwordOptions);\n if (returnUri) {\n state += `_returnUri='${returnUri}'`;\n }\n }\n\n // Add Organization Identifier to state\n state += `_identifier=${this.identifier}`;\n\n // Save state (regardless of new or existing)\n await this.storageService.save(ConstantsService.ssoStateKey, state);\n\n let authorizeUrl = this.apiService.identityBaseUrl + '/connect/authorize?' +\n 'client_id=' + this.clientId + '&redirect_uri=' + encodeURIComponent(this.redirectUri) + '&' +\n 'response_type=code&scope=api offline_access&' +\n 'state=' + state + '&code_challenge=' + codeChallenge + '&' +\n 'code_challenge_method=S256&response_mode=query&' +\n 'domain_hint=' + encodeURIComponent(this.identifier);\n\n if (includeUserIdentifier) {\n const userIdentifier = await this.apiService.getSsoUserIdentifier();\n authorizeUrl += `&user_identifier=${encodeURIComponent(userIdentifier)}`;\n }\n\n return authorizeUrl;\n }\n\n private async logIn(code: string, codeVerifier: string, orgIdFromState: string) {\n this.loggingIn = true;\n try {\n this.formPromise = this.authService.logInSso(code, codeVerifier, this.redirectUri);\n const response = await this.formPromise;\n if (response.twoFactor) {\n if (this.onSuccessfulLoginTwoFactorNavigate != null) {\n this.onSuccessfulLoginTwoFactorNavigate();\n } else {\n this.router.navigate([this.twoFactorRoute], {\n queryParams: {\n identifier: orgIdFromState,\n sso: 'true',\n },\n });\n }\n } else if (response.resetMasterPassword) {\n if (this.onSuccessfulLoginChangePasswordNavigate != null) {\n this.onSuccessfulLoginChangePasswordNavigate();\n } else {\n this.router.navigate([this.changePasswordRoute], {\n queryParams: {\n identifier: orgIdFromState,\n },\n });\n }\n } else {\n const disableFavicon = await this.storageService.get(ConstantsService.disableFaviconKey);\n await this.stateService.save(ConstantsService.disableFaviconKey, !!disableFavicon);\n if (this.onSuccessfulLogin != null) {\n this.onSuccessfulLogin();\n }\n if (this.onSuccessfulLoginNavigate != null) {\n this.onSuccessfulLoginNavigate();\n } else {\n this.router.navigate([this.successRoute]);\n }\n }\n } catch { }\n this.loggingIn = false;\n }\n\n private getOrgIdentiferFromState(state: string): string {\n if (state === null || state === undefined) {\n return null;\n }\n\n const stateSplit = state.split('_identifier=');\n return stateSplit.length > 1 ? stateSplit[1] : null;\n }\n\n private checkState(state: string, checkState: string): boolean {\n if (state === null || state === undefined) {\n return false;\n }\n if (checkState === null || checkState === undefined) {\n return false;\n }\n\n const stateSplit = state.split('_identifier=');\n const checkStateSplit = checkState.split('_identifier=');\n return stateSplit[0] === checkStateSplit[0];\n }\n}\n","import {\n Component,\n ComponentFactoryResolver,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\n\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { TwoFactorOptionsComponent } from './two-factor-options.component';\n\nimport { ModalComponent } from '../modal.component';\n\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\n\nimport { TwoFactorComponent as BaseTwoFactorComponent } from 'jslib-angular/components/two-factor.component';\n\n@Component({\n selector: 'app-two-factor',\n templateUrl: 'two-factor.component.html',\n})\nexport class TwoFactorComponent extends BaseTwoFactorComponent {\n @ViewChild('twoFactorOptions', { read: ViewContainerRef, static: true }) twoFactorOptionsModal: ViewContainerRef;\n\n constructor(authService: AuthService, router: Router,\n i18nService: I18nService, apiService: ApiService,\n platformUtilsService: PlatformUtilsService, stateService: StateService,\n environmentService: EnvironmentService, private componentFactoryResolver: ComponentFactoryResolver,\n storageService: StorageService, route: ActivatedRoute) {\n super(authService, router, i18nService, apiService, platformUtilsService, window, environmentService,\n stateService, storageService, route);\n this.onSuccessfulLoginNavigate = this.goAfterLogIn;\n }\n\n anotherMethod() {\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n const modal = this.twoFactorOptionsModal.createComponent(factory).instance;\n const childComponent = modal.show(TwoFactorOptionsComponent,\n this.twoFactorOptionsModal);\n\n childComponent.onProviderSelected.subscribe(async (provider: TwoFactorProviderType) => {\n modal.close();\n this.selectedProviderType = provider;\n await this.init();\n });\n childComponent.onRecoverSelected.subscribe(() => {\n modal.close();\n });\n }\n\n async goAfterLogIn() {\n const orgInvite = await this.stateService.get('orgInvitation');\n const emergencyInvite = await this.stateService.get('emergencyInvitation');\n if (orgInvite != null) {\n this.router.navigate(['accept-organization'], { queryParams: orgInvite });\n } else if (emergencyInvite != null) {\n this.router.navigate(['accept-emergency'], { queryParams: emergencyInvite });\n } else {\n const loginRedirect = await this.stateService.get('loginRedirect');\n if (loginRedirect != null) {\n this.router.navigate([loginRedirect.route], { queryParams: loginRedirect.qParams });\n await this.stateService.remove('loginRedirect');\n } else {\n this.router.navigate([this.successRoute], {\n queryParams: {\n identifier: this.identifier,\n },\n });\n }\n }\n }\n}\n","

{{title}}

{{'enterVerificationCodeApp' | i18n}}

{{'enterVerificationCodeEmail' | i18n : twoFactorEmail}}

{{'sendVerificationCodeEmailAgain' | i18n}}

{{'insertYubiKey' | i18n}}

\"\"

{{'noTwoStepProviders' | i18n}}

{{'noTwoStepProviders2' | i18n}}


{{'cancel' | i18n}}
","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport {\n TwoFactorOptionsComponent as BaseTwoFactorOptionsComponent,\n} from 'jslib-angular/components/two-factor-options.component';\n\n@Component({\n selector: 'app-two-factor-options',\n templateUrl: 'two-factor-options.component.html',\n})\nexport class TwoFactorOptionsComponent extends BaseTwoFactorOptionsComponent {\n constructor(authService: AuthService, router: Router,\n i18nService: I18nService, platformUtilsService: PlatformUtilsService) {\n super(authService, router, i18nService, platformUtilsService, window);\n }\n}\n"," ","import { PasswordVerificationRequest } from './passwordVerificationRequest';\n\nexport class TwoFactorEmailRequest extends PasswordVerificationRequest {\n email: string;\n\n constructor(email: string, masterPasswordHash: string) {\n super();\n this.masterPasswordHash = masterPasswordHash;\n this.email = email;\n }\n}\n","import { TwoFactorProviderType } from '../../enums/twoFactorProviderType';\n\nexport class AuthResult {\n twoFactor: boolean = false;\n resetMasterPassword: boolean = false;\n twoFactorProviders: Map = null;\n}\n","import {\n Component,\n OnInit,\n} from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { VerifyEmailRequest } from 'jslib-common/models/request/verifyEmailRequest';\n\n@Component({\n selector: 'app-verify-email-token',\n templateUrl: 'verify-email-token.component.html',\n})\nexport class VerifyEmailTokenComponent implements OnInit {\n constructor(private router: Router, private toasterService: ToasterService,\n private i18nService: I18nService, private route: ActivatedRoute,\n private apiService: ApiService, private userService: UserService) { }\n\n ngOnInit() {\n let fired = false;\n this.route.queryParams.subscribe(async qParams => {\n if (fired) {\n return;\n }\n fired = true;\n if (qParams.userId != null && qParams.token != null) {\n try {\n await this.apiService.postAccountVerifyEmailToken(\n new VerifyEmailRequest(qParams.userId, qParams.token));\n const authed = await this.userService.isAuthenticated();\n if (authed) {\n await this.apiService.refreshIdentityToken();\n }\n this.toasterService.popAsync('success', null, this.i18nService.t('emailVerified'));\n this.router.navigate(['/']);\n return;\n } catch { }\n }\n this.toasterService.popAsync('error', null, this.i18nService.t('emailVerifiedFailed'));\n this.router.navigate(['/']);\n });\n }\n}\n","
\"Bitwarden\"

{{'loading' | i18n}}

","import {\n Component,\n OnInit,\n} from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { VerifyDeleteRecoverRequest } from 'jslib-common/models/request/verifyDeleteRecoverRequest';\n\n@Component({\n selector: 'app-verify-recover-delete',\n templateUrl: 'verify-recover-delete.component.html',\n})\nexport class VerifyRecoverDeleteComponent implements OnInit {\n email: string;\n formPromise: Promise;\n\n private userId: string;\n private token: string;\n\n constructor(private router: Router, private apiService: ApiService,\n private toasterService: ToasterService, private i18nService: I18nService,\n private route: ActivatedRoute) {\n }\n\n ngOnInit() {\n let fired = false;\n this.route.queryParams.subscribe(async qParams => {\n if (fired) {\n return;\n }\n fired = true;\n if (qParams.userId != null && qParams.token != null && qParams.email != null) {\n this.userId = qParams.userId;\n this.token = qParams.token;\n this.email = qParams.email;\n } else {\n this.router.navigate(['/']);\n }\n });\n }\n\n async submit() {\n try {\n const request = new VerifyDeleteRecoverRequest(this.userId, this.token);\n this.formPromise = this.apiService.postAccountRecoverDeleteToken(request);\n await this.formPromise;\n this.toasterService.popAsync('success', this.i18nService.t('accountDeleted'),\n this.i18nService.t('accountDeletedDesc'));\n this.router.navigate(['/']);\n } catch { }\n }\n}\n","

{{'deleteAccount' | i18n}}

{{'deleteAccountWarning' | i18n}}

{{email}}

{{'deleteRecoverConfirmDesc' | i18n}}


{{'cancel' | i18n}}
","import {\n Component,\n ComponentFactoryResolver,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { SearchService } from 'jslib-common/abstractions/search.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { CollectionData } from 'jslib-common/models/data/collectionData';\nimport { Collection } from 'jslib-common/models/domain/collection';\nimport {\n CollectionDetailsResponse,\n CollectionResponse,\n} from 'jslib-common/models/response/collectionResponse';\nimport { ListResponse } from 'jslib-common/models/response/listResponse';\nimport { CollectionView } from 'jslib-common/models/view/collectionView';\n\nimport { ModalComponent } from '../../modal.component';\nimport { CollectionAddEditComponent } from './collection-add-edit.component';\nimport { EntityUsersComponent } from './entity-users.component';\n\n@Component({\n selector: 'app-org-manage-collections',\n templateUrl: 'collections.component.html',\n})\nexport class CollectionsComponent implements OnInit {\n @ViewChild('addEdit', { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef;\n @ViewChild('usersTemplate', { read: ViewContainerRef, static: true }) usersModalRef: ViewContainerRef;\n\n loading = true;\n organizationId: string;\n collections: CollectionView[];\n pagedCollections: CollectionView[];\n searchText: string;\n\n protected didScroll = false;\n protected pageSize = 100;\n\n private pagedCollectionsCount = 0;\n private modal: ModalComponent = null;\n\n constructor(private apiService: ApiService, private route: ActivatedRoute,\n private collectionService: CollectionService, private componentFactoryResolver: ComponentFactoryResolver,\n private toasterService: ToasterService, private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService, private userService: UserService,\n private searchService: SearchService) { }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organizationId = params.organizationId;\n await this.load();\n const queryParamsSub = this.route.queryParams.subscribe(async qParams => {\n this.searchText = qParams.search;\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n });\n }\n\n async load() {\n const organization = await this.userService.getOrganization(this.organizationId);\n let response: ListResponse;\n if (organization.canManageAllCollections) {\n response = await this.apiService.getCollections(this.organizationId);\n } else {\n response = await this.apiService.getUserCollections();\n }\n const collections = response.data.filter(c => c.organizationId === this.organizationId).map(r =>\n new Collection(new CollectionData(r as CollectionDetailsResponse)));\n this.collections = await this.collectionService.decryptMany(collections);\n this.resetPaging();\n this.loading = false;\n }\n\n loadMore() {\n if (!this.collections || this.collections.length <= this.pageSize) {\n return;\n }\n const pagedLength = this.pagedCollections.length;\n let pagedSize = this.pageSize;\n if (pagedLength === 0 && this.pagedCollectionsCount > this.pageSize) {\n pagedSize = this.pagedCollectionsCount;\n }\n if (this.collections.length > pagedLength) {\n this.pagedCollections =\n this.pagedCollections.concat(this.collections.slice(pagedLength, pagedLength + pagedSize));\n }\n this.pagedCollectionsCount = this.pagedCollections.length;\n this.didScroll = this.pagedCollections.length > this.pageSize;\n }\n\n edit(collection: CollectionView) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.addEditModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n CollectionAddEditComponent, this.addEditModalRef);\n\n childComponent.organizationId = this.organizationId;\n childComponent.collectionId = collection != null ? collection.id : null;\n childComponent.onSavedCollection.subscribe(() => {\n this.modal.close();\n this.load();\n });\n childComponent.onDeletedCollection.subscribe(() => {\n this.modal.close();\n this.removeCollection(collection);\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n add() {\n this.edit(null);\n }\n\n async delete(collection: CollectionView) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('deleteCollectionConfirmation'), collection.name,\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n await this.apiService.deleteCollection(this.organizationId, collection.id);\n this.toasterService.popAsync('success', null, this.i18nService.t('deletedCollectionId', collection.name));\n this.removeCollection(collection);\n } catch { }\n }\n\n users(collection: CollectionView) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.usersModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n EntityUsersComponent, this.usersModalRef);\n\n childComponent.organizationId = this.organizationId;\n childComponent.entity = 'collection';\n childComponent.entityId = collection.id;\n childComponent.entityName = collection.name;\n\n childComponent.onEditedUsers.subscribe(() => {\n this.load();\n this.modal.close();\n });\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n async resetPaging() {\n this.pagedCollections = [];\n this.loadMore();\n }\n\n isSearching() {\n return this.searchService.isSearchable(this.searchText);\n }\n\n isPaging() {\n const searching = this.isSearching();\n if (searching && this.didScroll) {\n this.resetPaging();\n }\n return !searching && this.collections && this.collections.length > this.pageSize;\n }\n\n private removeCollection(collection: CollectionView) {\n const index = this.collections.indexOf(collection);\n if (index > -1) {\n this.collections.splice(index, 1);\n this.resetPaging();\n }\n }\n}\n","

{{'collections' | i18n}}

{{'loading' | i18n}}

{{'noCollectionsInList' | i18n}}

{{c.name}}
","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { EncString } from 'jslib-common/models/domain/encString';\nimport { SymmetricCryptoKey } from 'jslib-common/models/domain/symmetricCryptoKey';\nimport { CollectionRequest } from 'jslib-common/models/request/collectionRequest';\nimport { SelectionReadOnlyRequest } from 'jslib-common/models/request/selectionReadOnlyRequest';\nimport { GroupResponse } from 'jslib-common/models/response/groupResponse';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\n@Component({\n selector: 'app-collection-add-edit',\n templateUrl: 'collection-add-edit.component.html',\n})\nexport class CollectionAddEditComponent implements OnInit {\n @Input() collectionId: string;\n @Input() organizationId: string;\n @Output() onSavedCollection = new EventEmitter();\n @Output() onDeletedCollection = new EventEmitter();\n\n loading = true;\n editMode: boolean = false;\n accessGroups: boolean = false;\n title: string;\n name: string;\n externalId: string;\n groups: GroupResponse[] = [];\n formPromise: Promise;\n deletePromise: Promise;\n\n private orgKey: SymmetricCryptoKey;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService, private userService: UserService) { }\n\n async ngOnInit() {\n const organization = await this.userService.getOrganization(this.organizationId);\n this.accessGroups = organization.useGroups;\n this.editMode = this.loading = this.collectionId != null;\n if (this.accessGroups) {\n const groupsResponse = await this.apiService.getGroups(this.organizationId);\n this.groups = groupsResponse.data.map(r => r).sort(Utils.getSortFunction(this.i18nService, 'name'));\n }\n this.orgKey = await this.cryptoService.getOrgKey(this.organizationId);\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t('editCollection');\n try {\n const collection = await this.apiService.getCollectionDetails(this.organizationId, this.collectionId);\n this.name = await this.cryptoService.decryptToUtf8(new EncString(collection.name), this.orgKey);\n this.externalId = collection.externalId;\n if (collection.groups != null && this.groups.length > 0) {\n collection.groups.forEach(s => {\n const group = this.groups.filter(g => !g.accessAll && g.id === s.id);\n if (group != null && group.length > 0) {\n (group[0] as any).checked = true;\n (group[0] as any).readOnly = s.readOnly;\n (group[0] as any).hidePasswords = s.hidePasswords;\n }\n });\n }\n } catch { }\n } else {\n this.title = this.i18nService.t('addCollection');\n }\n\n this.groups.forEach(g => {\n if (g.accessAll) {\n (g as any).checked = true;\n }\n });\n\n this.loading = false;\n }\n\n check(g: GroupResponse, select?: boolean) {\n if (g.accessAll) {\n return;\n }\n (g as any).checked = select == null ? !(g as any).checked : select;\n if (!(g as any).checked) {\n (g as any).readOnly = false;\n (g as any).hidePasswords = false;\n }\n }\n\n selectAll(select: boolean) {\n this.groups.forEach(g => this.check(g, select));\n }\n\n async submit() {\n if (this.orgKey == null) {\n throw new Error('No encryption key for this organization.');\n }\n\n const request = new CollectionRequest();\n request.name = (await this.cryptoService.encrypt(this.name, this.orgKey)).encryptedString;\n request.externalId = this.externalId;\n request.groups = this.groups.filter(g => (g as any).checked && !g.accessAll)\n .map(g => new SelectionReadOnlyRequest(g.id, !!(g as any).readOnly, !!(g as any).hidePasswords));\n\n try {\n if (this.editMode) {\n this.formPromise = this.apiService.putCollection(this.organizationId, this.collectionId, request);\n } else {\n this.formPromise = this.apiService.postCollection(this.organizationId, request);\n }\n await this.formPromise;\n this.toasterService.popAsync('success', null,\n this.i18nService.t(this.editMode ? 'editedCollectionId' : 'createdCollectionId', this.name));\n this.onSavedCollection.emit();\n } catch { }\n }\n\n async delete() {\n if (!this.editMode) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('deleteCollectionConfirmation'), this.name,\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.apiService.deleteCollection(this.organizationId, this.collectionId);\n await this.deletePromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('deletedCollectionId', this.name));\n this.onDeletedCollection.emit();\n } catch { }\n }\n}\n","

{{title}}

{{'loading' | i18n}}
{{'externalIdDesc' | i18n}}

{{'groupAccess' | i18n}}

{{'noGroupsInList' | i18n}}
  {{'name' | i18n}} {{'hidePasswords' | i18n}} {{'readOnly' | i18n}}
{{g.name}} {{'groupAccessAllItems' | i18n}}
","import { Collection } from '../domain/collection';\n\nimport { SelectionReadOnlyRequest } from './selectionReadOnlyRequest';\n\nexport class CollectionRequest {\n name: string;\n externalId: string;\n groups: SelectionReadOnlyRequest[] = [];\n\n constructor(collection?: Collection) {\n if (collection == null) {\n return;\n }\n this.name = collection.name ? collection.name.encryptedString : null;\n this.externalId = collection.externalId;\n }\n}\n","import {\n Component,\n OnInit,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { ExportService } from 'jslib-common/abstractions/export.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { EventResponse } from 'jslib-common/models/response/eventResponse';\nimport { ListResponse } from 'jslib-common/models/response/listResponse';\nimport { EventView } from 'jslib-common/models/view/eventView';\n\nimport { EventService } from '../../services/event.service';\n\n@Component({\n selector: 'app-org-events',\n templateUrl: 'events.component.html',\n})\nexport class EventsComponent implements OnInit {\n loading = true;\n loaded = false;\n organizationId: string;\n events: EventView[];\n start: string;\n end: string;\n dirtyDates: boolean = true;\n continuationToken: string;\n refreshPromise: Promise;\n exportPromise: Promise;\n morePromise: Promise;\n\n private orgUsersUserIdMap = new Map();\n private orgUsersIdMap = new Map();\n\n constructor(private apiService: ApiService, private route: ActivatedRoute, private eventService: EventService,\n private i18nService: I18nService, private toasterService: ToasterService, private userService: UserService,\n private exportService: ExportService, private platformUtilsService: PlatformUtilsService,\n private router: Router) { }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organizationId = params.organizationId;\n const organization = await this.userService.getOrganization(this.organizationId);\n if (organization == null || !organization.useEvents) {\n this.router.navigate(['/organizations', this.organizationId]);\n return;\n }\n const defaultDates = this.eventService.getDefaultDateFilters();\n this.start = defaultDates[0];\n this.end = defaultDates[1];\n await this.load();\n });\n }\n\n async load() {\n const response = await this.apiService.getOrganizationUsers(this.organizationId);\n response.data.forEach(u => {\n const name = u.name == null || u.name.trim() === '' ? u.email : u.name;\n this.orgUsersIdMap.set(u.id, { name: name, email: u.email });\n this.orgUsersUserIdMap.set(u.userId, { name: name, email: u.email });\n });\n await this.loadEvents(true);\n this.loaded = true;\n }\n\n async exportEvents() {\n if (this.appApiPromiseUnfulfilled() || this.dirtyDates) {\n return;\n }\n\n this.loading = true;\n\n const dates = this.parseDates();\n if (dates == null) {\n return;\n }\n\n try {\n this.exportPromise = this.export(dates[0], dates[1]);\n\n await this.exportPromise;\n } catch { }\n\n this.exportPromise = null;\n this.loading = false;\n }\n\n async loadEvents(clearExisting: boolean) {\n if (this.appApiPromiseUnfulfilled()) {\n return;\n }\n\n const dates = this.parseDates();\n if (dates == null) {\n return;\n }\n\n this.loading = true;\n let events: EventView[] = [];\n try {\n const promise = this.loadAndParseEvents(dates[0], dates[1], clearExisting ? null : this.continuationToken);\n if (clearExisting) {\n this.refreshPromise = promise;\n } else {\n this.morePromise = promise;\n }\n const result = await promise;\n this.continuationToken = result.continuationToken;\n events = result.events;\n } catch { }\n\n if (!clearExisting && this.events != null && this.events.length > 0) {\n this.events = this.events.concat(events);\n } else {\n this.events = events;\n }\n\n this.dirtyDates = false;\n this.loading = false;\n this.morePromise = null;\n this.refreshPromise = null;\n }\n\n private async export(start: string, end: string) {\n let continuationToken = this.continuationToken;\n let events = [].concat(this.events);\n\n while (continuationToken != null) {\n const result = await this.loadAndParseEvents(start, end, continuationToken);\n continuationToken = result.continuationToken;\n events = events.concat(result.events);\n }\n\n const data = await this.exportService.getEventExport(events);\n const fileName = this.exportService.getFileName('org-events', 'csv');\n this.platformUtilsService.saveFile(window, data, { type: 'text/plain' }, fileName);\n }\n\n private async loadAndParseEvents(startDate: string, endDate: string, continuationToken: string) {\n const response = await this.apiService.getEventsOrganization(this.organizationId, startDate, endDate,\n continuationToken);\n\n const events = await Promise.all(response.data.map(async r => {\n const userId = r.actingUserId == null ? r.userId : r.actingUserId;\n const eventInfo = await this.eventService.getEventInfo(r);\n const user = userId != null && this.orgUsersUserIdMap.has(userId) ?\n this.orgUsersUserIdMap.get(userId) : null;\n return new EventView({\n message: eventInfo.message,\n humanReadableMessage: eventInfo.humanReadableMessage,\n appIcon: eventInfo.appIcon,\n appName: eventInfo.appName,\n userId: userId,\n userName: user != null ? user.name : this.i18nService.t('unknown'),\n userEmail: user != null ? user.email : '',\n date: r.date,\n ip: r.ipAddress,\n type: r.type,\n });\n }));\n return { continuationToken: response.continuationToken, events: events };\n }\n\n private parseDates() {\n let dates: string[] = null;\n try {\n dates = this.eventService.formatDateFilters(this.start, this.end);\n } catch (e) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('invalidDateRange'));\n return null;\n }\n return dates;\n }\n\n private appApiPromiseUnfulfilled() {\n return this.refreshPromise != null || this.morePromise != null || this.exportPromise != null;\n }\n}\n","

{{'eventLogs' | i18n}}

-
{{'loading' | i18n}}

{{'noEventsInList' | i18n}}

{{'timestamp' | i18n}} {{'device' | i18n}} {{'user' | i18n}} {{'event' | i18n}}
{{e.date | date:'medium'}} {{e.appName}}, {{e.ip}} {{e.userName}}
","import {\n Component,\n ComponentFactoryResolver,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { SearchService } from 'jslib-common/abstractions/search.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { GroupResponse } from 'jslib-common/models/response/groupResponse';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\nimport { ModalComponent } from '../../modal.component';\nimport { EntityUsersComponent } from './entity-users.component';\nimport { GroupAddEditComponent } from './group-add-edit.component';\n\n@Component({\n selector: 'app-org-groups',\n templateUrl: 'groups.component.html',\n})\nexport class GroupsComponent implements OnInit {\n @ViewChild('addEdit', { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef;\n @ViewChild('usersTemplate', { read: ViewContainerRef, static: true }) usersModalRef: ViewContainerRef;\n\n loading = true;\n organizationId: string;\n groups: GroupResponse[];\n pagedGroups: GroupResponse[];\n searchText: string;\n\n protected didScroll = false;\n protected pageSize = 100;\n\n private pagedGroupsCount = 0;\n private modal: ModalComponent = null;\n\n constructor(private apiService: ApiService, private route: ActivatedRoute,\n private i18nService: I18nService, private componentFactoryResolver: ComponentFactoryResolver,\n private toasterService: ToasterService, private platformUtilsService: PlatformUtilsService,\n private userService: UserService, private router: Router,\n private searchService: SearchService) { }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organizationId = params.organizationId;\n const organization = await this.userService.getOrganization(this.organizationId);\n if (organization == null || !organization.useGroups) {\n this.router.navigate(['/organizations', this.organizationId]);\n return;\n }\n await this.load();\n const queryParamsSub = this.route.queryParams.subscribe(async qParams => {\n this.searchText = qParams.search;\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n });\n }\n\n async load() {\n const response = await this.apiService.getGroups(this.organizationId);\n const groups = response.data != null && response.data.length > 0 ? response.data : [];\n groups.sort(Utils.getSortFunction(this.i18nService, 'name'));\n this.groups = groups;\n this.resetPaging();\n this.loading = false;\n }\n\n loadMore() {\n if (!this.groups || this.groups.length <= this.pageSize) {\n return;\n }\n const pagedLength = this.pagedGroups.length;\n let pagedSize = this.pageSize;\n if (pagedLength === 0 && this.pagedGroupsCount > this.pageSize) {\n pagedSize = this.pagedGroupsCount;\n }\n if (this.groups.length > pagedLength) {\n this.pagedGroups = this.pagedGroups.concat(this.groups.slice(pagedLength, pagedLength + pagedSize));\n }\n this.pagedGroupsCount = this.pagedGroups.length;\n this.didScroll = this.pagedGroups.length > this.pageSize;\n }\n\n edit(group: GroupResponse) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.addEditModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n GroupAddEditComponent, this.addEditModalRef);\n\n childComponent.organizationId = this.organizationId;\n childComponent.groupId = group != null ? group.id : null;\n childComponent.onSavedGroup.subscribe(() => {\n this.modal.close();\n this.load();\n });\n childComponent.onDeletedGroup.subscribe(() => {\n this.modal.close();\n this.removeGroup(group);\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n add() {\n this.edit(null);\n }\n\n async delete(group: GroupResponse) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('deleteGroupConfirmation'), group.name,\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n await this.apiService.deleteGroup(this.organizationId, group.id);\n this.toasterService.popAsync('success', null, this.i18nService.t('deletedGroupId', group.name));\n this.removeGroup(group);\n } catch { }\n }\n\n users(group: GroupResponse) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.usersModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n EntityUsersComponent, this.usersModalRef);\n\n childComponent.organizationId = this.organizationId;\n childComponent.entity = 'group';\n childComponent.entityId = group.id;\n childComponent.entityName = group.name;\n\n childComponent.onEditedUsers.subscribe(() => {\n this.modal.close();\n });\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n async resetPaging() {\n this.pagedGroups = [];\n this.loadMore();\n }\n\n isSearching() {\n return this.searchService.isSearchable(this.searchText);\n }\n\n isPaging() {\n const searching = this.isSearching();\n if (searching && this.didScroll) {\n this.resetPaging();\n }\n return !searching && this.groups && this.groups.length > this.pageSize;\n }\n\n private removeGroup(group: GroupResponse) {\n const index = this.groups.indexOf(group);\n if (index > -1) {\n this.groups.splice(index, 1);\n this.resetPaging();\n }\n }\n}\n","

{{'groups' | i18n}}

{{'loading' | i18n}}

{{'noGroupsInList' | i18n}}

{{g.name}}
","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { CollectionData } from 'jslib-common/models/data/collectionData';\nimport { Collection } from 'jslib-common/models/domain/collection';\nimport { GroupRequest } from 'jslib-common/models/request/groupRequest';\nimport { SelectionReadOnlyRequest } from 'jslib-common/models/request/selectionReadOnlyRequest';\nimport { CollectionDetailsResponse } from 'jslib-common/models/response/collectionResponse';\nimport { CollectionView } from 'jslib-common/models/view/collectionView';\n\n@Component({\n selector: 'app-group-add-edit',\n templateUrl: 'group-add-edit.component.html',\n})\nexport class GroupAddEditComponent implements OnInit {\n @Input() groupId: string;\n @Input() organizationId: string;\n @Output() onSavedGroup = new EventEmitter();\n @Output() onDeletedGroup = new EventEmitter();\n\n loading = true;\n editMode: boolean = false;\n title: string;\n name: string;\n externalId: string;\n access: 'all' | 'selected' = 'selected';\n collections: CollectionView[] = [];\n formPromise: Promise;\n deletePromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private collectionService: CollectionService,\n private platformUtilsService: PlatformUtilsService) { }\n\n async ngOnInit() {\n this.editMode = this.loading = this.groupId != null;\n await this.loadCollections();\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t('editGroup');\n try {\n const group = await this.apiService.getGroupDetails(this.organizationId, this.groupId);\n this.access = group.accessAll ? 'all' : 'selected';\n this.name = group.name;\n this.externalId = group.externalId;\n if (group.collections != null && this.collections != null) {\n group.collections.forEach(s => {\n const collection = this.collections.filter(c => c.id === s.id);\n if (collection != null && collection.length > 0) {\n (collection[0] as any).checked = true;\n collection[0].readOnly = s.readOnly;\n collection[0].hidePasswords = s.hidePasswords;\n }\n });\n }\n } catch { }\n } else {\n this.title = this.i18nService.t('addGroup');\n }\n\n this.loading = false;\n }\n\n async loadCollections() {\n const response = await this.apiService.getCollections(this.organizationId);\n const collections = response.data.map(r =>\n new Collection(new CollectionData(r as CollectionDetailsResponse)));\n this.collections = await this.collectionService.decryptMany(collections);\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n if (!(c as any).checked) {\n c.readOnly = false;\n }\n }\n\n selectAll(select: boolean) {\n this.collections.forEach(c => this.check(c, select));\n }\n\n async submit() {\n const request = new GroupRequest();\n request.name = this.name;\n request.externalId = this.externalId;\n request.accessAll = this.access === 'all';\n if (!request.accessAll) {\n request.collections = this.collections.filter(c => (c as any).checked)\n .map(c => new SelectionReadOnlyRequest(c.id, !!c.readOnly, !!c.hidePasswords));\n }\n\n try {\n if (this.editMode) {\n this.formPromise = this.apiService.putGroup(this.organizationId, this.groupId, request);\n } else {\n this.formPromise = this.apiService.postGroup(this.organizationId, request);\n }\n await this.formPromise;\n this.toasterService.popAsync('success', null,\n this.i18nService.t(this.editMode ? 'editedGroupId' : 'createdGroupId', this.name));\n this.onSavedGroup.emit();\n } catch { }\n }\n\n async delete() {\n if (!this.editMode) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('deleteGroupConfirmation'), this.name,\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.apiService.deleteGroup(this.organizationId, this.groupId);\n await this.deletePromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('deletedGroupId', this.name));\n this.onDeletedGroup.emit();\n } catch { }\n }\n}\n","

{{title}}

{{'loading' | i18n}}
{{'externalIdDesc' | i18n}}

{{'accessControl' | i18n}}

{{'noCollectionsInList' | i18n}}
  {{'name' | i18n}} {{'hidePasswords' | i18n}} {{'readOnly' | i18n}}
{{c.name}}
","import {\n Component,\n OnInit,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\n\n@Component({\n selector: 'app-org-manage',\n templateUrl: 'manage.component.html',\n})\nexport class ManageComponent implements OnInit {\n organization: Organization;\n accessPolicies = false;\n accessGroups = false;\n accessEvents = false;\n\n constructor(private route: ActivatedRoute, private userService: UserService) { }\n\n ngOnInit() {\n this.route.parent.params.subscribe(async params => {\n this.organization = await this.userService.getOrganization(params.organizationId);\n this.accessPolicies = this.organization.usePolicies;\n this.accessEvents = this.organization.useEvents;\n this.accessGroups = this.organization.useGroups;\n });\n }\n}\n"," ","import {\n Component,\n ComponentFactoryResolver,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\n\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ValidationService } from 'jslib-angular/services/validation.service';\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { SearchService } from 'jslib-common/abstractions/search.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { OrganizationKeysRequest } from 'jslib-common/models/request/organizationKeysRequest';\nimport { OrganizationUserBulkRequest } from 'jslib-common/models/request/organizationUserBulkRequest';\nimport { OrganizationUserConfirmRequest } from 'jslib-common/models/request/organizationUserConfirmRequest';\n\nimport { ListResponse } from 'jslib-common/models/response/listResponse';\nimport { OrganizationUserBulkResponse } from 'jslib-common/models/response/organizationUserBulkResponse';\nimport { OrganizationUserUserDetailsResponse } from 'jslib-common/models/response/organizationUserResponse';\n\nimport { OrganizationUserStatusType } from 'jslib-common/enums/organizationUserStatusType';\nimport { OrganizationUserType } from 'jslib-common/enums/organizationUserType';\nimport { PolicyType } from 'jslib-common/enums/policyType';\n\nimport { SearchPipe } from 'jslib-angular/pipes/search.pipe';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\nimport { ModalComponent } from '../../modal.component';\nimport { BulkConfirmComponent } from './bulk/bulk-confirm.component';\nimport { BulkRemoveComponent } from './bulk/bulk-remove.component';\nimport { BulkStatusComponent } from './bulk/bulk-status.component';\nimport { EntityEventsComponent } from './entity-events.component';\nimport { ResetPasswordComponent } from './reset-password.component';\nimport { UserAddEditComponent } from './user-add-edit.component';\nimport { UserConfirmComponent } from './user-confirm.component';\nimport { UserGroupsComponent } from './user-groups.component';\n\nconst MaxCheckedCount = 500;\n\n@Component({\n selector: 'app-org-people',\n templateUrl: 'people.component.html',\n})\nexport class PeopleComponent implements OnInit {\n @ViewChild('addEdit', { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef;\n @ViewChild('groupsTemplate', { read: ViewContainerRef, static: true }) groupsModalRef: ViewContainerRef;\n @ViewChild('eventsTemplate', { read: ViewContainerRef, static: true }) eventsModalRef: ViewContainerRef;\n @ViewChild('confirmTemplate', { read: ViewContainerRef, static: true }) confirmModalRef: ViewContainerRef;\n @ViewChild('resetPasswordTemplate', { read: ViewContainerRef, static: true }) resetPasswordModalRef: ViewContainerRef;\n @ViewChild('bulkStatusTemplate', { read: ViewContainerRef, static: true }) bulkStatusModalRef: ViewContainerRef;\n @ViewChild('bulkConfirmTemplate', { read: ViewContainerRef, static: true }) bulkConfirmModalRef: ViewContainerRef;\n @ViewChild('bulkRemoveTemplate', { read: ViewContainerRef, static: true }) bulkRemoveModalRef: ViewContainerRef;\n\n loading = true;\n organizationId: string;\n users: OrganizationUserUserDetailsResponse[];\n pagedUsers: OrganizationUserUserDetailsResponse[];\n searchText: string;\n status: OrganizationUserStatusType = null;\n statusMap = new Map();\n organizationUserType = OrganizationUserType;\n organizationUserStatusType = OrganizationUserStatusType;\n actionPromise: Promise;\n accessEvents = false;\n accessGroups = false;\n canResetPassword = false; // User permission (admin/custom)\n orgUseResetPassword = false; // Org plan ability\n orgHasKeys = false; // Org public/private keys\n orgResetPasswordPolicyEnabled = false;\n callingUserType: OrganizationUserType = null;\n\n protected didScroll = false;\n protected pageSize = 100;\n\n private pagedUsersCount = 0;\n private modal: ModalComponent = null;\n private allUsers: OrganizationUserUserDetailsResponse[];\n\n constructor(private apiService: ApiService, private route: ActivatedRoute,\n private i18nService: I18nService, private componentFactoryResolver: ComponentFactoryResolver,\n private platformUtilsService: PlatformUtilsService, private toasterService: ToasterService,\n private cryptoService: CryptoService, private userService: UserService, private router: Router,\n private storageService: StorageService, private searchService: SearchService,\n private validationService: ValidationService, private policyService: PolicyService,\n private searchPipe: SearchPipe) { }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organizationId = params.organizationId;\n const organization = await this.userService.getOrganization(this.organizationId);\n if (!organization.canManageUsers) {\n this.router.navigate(['../collections'], { relativeTo: this.route });\n return;\n }\n this.accessEvents = organization.useEvents;\n this.accessGroups = organization.useGroups;\n this.canResetPassword = organization.canManageUsersPassword;\n this.orgUseResetPassword = organization.useResetPassword;\n this.callingUserType = organization.type;\n\n // Backfill pub/priv key if necessary\n if (!organization.hasPublicAndPrivateKeys) {\n const orgShareKey = await this.cryptoService.getOrgKey(this.organizationId);\n const orgKeys = await this.cryptoService.makeKeyPair(orgShareKey);\n const request = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n const response = await this.apiService.postOrganizationKeys(this.organizationId, request);\n if (response != null) {\n this.orgHasKeys = response.publicKey != null && response.privateKey != null;\n } else {\n throw new Error(this.i18nService.t('resetPasswordOrgKeysError'));\n }\n } else {\n this.orgHasKeys = true;\n }\n\n await this.load();\n\n const queryParamsSub = this.route.queryParams.subscribe(async qParams => {\n this.searchText = qParams.search;\n if (qParams.viewEvents != null) {\n const user = this.users.filter(u => u.id === qParams.viewEvents);\n if (user.length > 0 && user[0].status === OrganizationUserStatusType.Confirmed) {\n this.events(user[0]);\n }\n }\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n });\n }\n\n async load() {\n const response = await this.apiService.getOrganizationUsers(this.organizationId);\n this.statusMap.clear();\n this.allUsers = response.data != null && response.data.length > 0 ? response.data : [];\n this.allUsers.sort(Utils.getSortFunction(this.i18nService, 'email'));\n this.allUsers.forEach(u => {\n if (!this.statusMap.has(u.status)) {\n this.statusMap.set(u.status, [u]);\n } else {\n this.statusMap.get(u.status).push(u);\n }\n });\n this.filter(this.status);\n const policies = await this.policyService.getAll(PolicyType.ResetPassword);\n this.orgResetPasswordPolicyEnabled = policies.some(p => p.organizationId === this.organizationId && p.enabled);\n this.loading = false;\n }\n\n allowResetPassword(orgUser: OrganizationUserUserDetailsResponse): boolean {\n // Hierarchy check\n let callingUserHasPermission = false;\n\n switch (this.callingUserType) {\n case OrganizationUserType.Owner:\n callingUserHasPermission = true;\n break;\n case OrganizationUserType.Admin:\n callingUserHasPermission = orgUser.type !== OrganizationUserType.Owner;\n break;\n case OrganizationUserType.Custom:\n callingUserHasPermission = orgUser.type !== OrganizationUserType.Owner\n && orgUser.type !== OrganizationUserType.Admin;\n break;\n }\n\n // Final\n return this.canResetPassword && callingUserHasPermission && this.orgUseResetPassword && this.orgHasKeys\n && orgUser.resetPasswordEnrolled && this.orgResetPasswordPolicyEnabled\n && orgUser.status === OrganizationUserStatusType.Confirmed;\n }\n\n showEnrolledStatus(orgUser: OrganizationUserUserDetailsResponse): boolean {\n return this.orgUseResetPassword && orgUser.resetPasswordEnrolled && this.orgResetPasswordPolicyEnabled;\n }\n\n filter(status: OrganizationUserStatusType) {\n this.status = status;\n if (this.status != null) {\n this.users = this.statusMap.get(this.status);\n } else {\n this.users = this.allUsers;\n }\n // Reset checkbox selecton\n this.selectAll(false);\n this.resetPaging();\n }\n\n loadMore() {\n if (!this.users || this.users.length <= this.pageSize) {\n return;\n }\n const pagedLength = this.pagedUsers.length;\n let pagedSize = this.pageSize;\n if (pagedLength === 0 && this.pagedUsersCount > this.pageSize) {\n pagedSize = this.pagedUsersCount;\n }\n if (this.users.length > pagedLength) {\n this.pagedUsers = this.pagedUsers.concat(this.users.slice(pagedLength, pagedLength + pagedSize));\n }\n this.pagedUsersCount = this.pagedUsers.length;\n this.didScroll = this.pagedUsers.length > this.pageSize;\n }\n\n get allCount() {\n return this.allUsers != null ? this.allUsers.length : 0;\n }\n\n get invitedCount() {\n return this.statusMap.has(OrganizationUserStatusType.Invited) ?\n this.statusMap.get(OrganizationUserStatusType.Invited).length : 0;\n }\n\n get acceptedCount() {\n return this.statusMap.has(OrganizationUserStatusType.Accepted) ?\n this.statusMap.get(OrganizationUserStatusType.Accepted).length : 0;\n }\n\n get confirmedCount() {\n return this.statusMap.has(OrganizationUserStatusType.Confirmed) ?\n this.statusMap.get(OrganizationUserStatusType.Confirmed).length : 0;\n }\n\n get showConfirmUsers(): boolean {\n return this.allUsers != null && this.statusMap != null && this.allUsers.length > 1 &&\n this.confirmedCount > 0 && this.confirmedCount < 3 && this.acceptedCount > 0;\n }\n\n get showBulkConfirmUsers(): boolean {\n return this.acceptedCount > 0;\n }\n\n edit(user: OrganizationUserUserDetailsResponse) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.addEditModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n UserAddEditComponent, this.addEditModalRef);\n\n childComponent.name = user != null ? user.name || user.email : null;\n childComponent.organizationId = this.organizationId;\n childComponent.organizationUserId = user != null ? user.id : null;\n childComponent.onSavedUser.subscribe(() => {\n this.modal.close();\n this.load();\n });\n childComponent.onDeletedUser.subscribe(() => {\n this.modal.close();\n this.removeUser(user);\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n invite() {\n this.edit(null);\n }\n\n groups(user: OrganizationUserUserDetailsResponse) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.groupsModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n UserGroupsComponent, this.groupsModalRef);\n\n childComponent.name = user != null ? user.name || user.email : null;\n childComponent.organizationId = this.organizationId;\n childComponent.organizationUserId = user != null ? user.id : null;\n childComponent.onSavedUser.subscribe(() => {\n this.modal.close();\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n async remove(user: OrganizationUserUserDetailsResponse) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('removeUserConfirmation'), user.name || user.email,\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n this.actionPromise = this.apiService.deleteOrganizationUser(this.organizationId, user.id);\n try {\n await this.actionPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('removedUserId', user.name || user.email));\n this.removeUser(user);\n } catch (e) {\n this.validationService.showError(e);\n }\n this.actionPromise = null;\n }\n\n async reinvite(user: OrganizationUserUserDetailsResponse) {\n if (this.actionPromise != null) {\n return;\n }\n\n this.actionPromise = this.apiService.postOrganizationUserReinvite(this.organizationId, user.id);\n try {\n await this.actionPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('hasBeenReinvited', user.name || user.email));\n } catch (e) {\n this.validationService.showError(e);\n }\n this.actionPromise = null;\n }\n\n async bulkRemove() {\n if (this.actionPromise != null) {\n return;\n }\n\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.bulkRemoveModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(BulkRemoveComponent, this.bulkRemoveModalRef);\n\n childComponent.organizationId = this.organizationId;\n childComponent.users = this.getCheckedUsers();\n\n this.modal.onClosed.subscribe(async () => {\n await this.load();\n this.modal = null;\n });\n }\n\n async bulkReinvite() {\n if (this.actionPromise != null) {\n return;\n }\n\n const users = this.getCheckedUsers();\n const filteredUsers = users.filter(u => u.status === OrganizationUserStatusType.Invited);\n\n if (filteredUsers.length <= 0) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('noSelectedUsersApplicable'));\n return;\n }\n\n\n try {\n const request = new OrganizationUserBulkRequest(filteredUsers.map(user => user.id));\n const response = this.apiService.postManyOrganizationUserReinvite(this.organizationId, request);\n this.showBulkStatus(users, filteredUsers, response, this.i18nService.t('bulkReinviteMessage'));\n } catch (e) {\n this.validationService.showError(e);\n }\n this.actionPromise = null;\n }\n\n async bulkConfirm() {\n if (this.actionPromise != null) {\n return;\n }\n\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.bulkConfirmModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(BulkConfirmComponent, this.bulkConfirmModalRef);\n\n childComponent.organizationId = this.organizationId;\n childComponent.users = this.getCheckedUsers();\n\n this.modal.onClosed.subscribe(async () => {\n await this.load();\n this.modal = null;\n });\n }\n\n async confirm(user: OrganizationUserUserDetailsResponse) {\n function updateUser(self: PeopleComponent) {\n user.status = OrganizationUserStatusType.Confirmed;\n const mapIndex = self.statusMap.get(OrganizationUserStatusType.Accepted).indexOf(user);\n if (mapIndex > -1) {\n self.statusMap.get(OrganizationUserStatusType.Accepted).splice(mapIndex, 1);\n self.statusMap.get(OrganizationUserStatusType.Confirmed).push(user);\n }\n }\n\n const confirmUser = async (publicKey: Uint8Array) => {\n try {\n this.actionPromise = this.doConfirmation(user, publicKey);\n await this.actionPromise;\n updateUser(this);\n this.toasterService.popAsync('success', null, this.i18nService.t('hasBeenConfirmed', user.name || user.email));\n } catch (e) {\n this.validationService.showError(e);\n throw e;\n } finally {\n this.actionPromise = null;\n }\n };\n\n if (this.actionPromise != null) {\n return;\n }\n\n const autoConfirm = await this.storageService.get(ConstantsService.autoConfirmFingerprints);\n if (autoConfirm == null || !autoConfirm) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.confirmModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n UserConfirmComponent, this.confirmModalRef);\n\n childComponent.name = user != null ? user.name || user.email : null;\n childComponent.organizationId = this.organizationId;\n childComponent.organizationUserId = user != null ? user.id : null;\n childComponent.userId = user != null ? user.userId : null;\n childComponent.onConfirmedUser.subscribe(async (publicKey: Uint8Array) => {\n try {\n await confirmUser(publicKey);\n this.modal.close();\n } catch (e) {\n // tslint:disable-next-line\n console.error('Handled exception:', e);\n }\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n return;\n }\n\n try {\n const publicKeyResponse = await this.apiService.getUserPublicKey(user.userId);\n const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n try {\n // tslint:disable-next-line\n console.log('User\\'s fingerprint: ' +\n (await this.cryptoService.getFingerprint(user.userId, publicKey.buffer)).join('-'));\n } catch { }\n await confirmUser(publicKey);\n } catch (e) {\n // tslint:disable-next-line\n console.error('Handled exception:', e);\n }\n }\n\n async events(user: OrganizationUserUserDetailsResponse) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.eventsModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n EntityEventsComponent, this.eventsModalRef);\n\n childComponent.name = user.name || user.email;\n childComponent.organizationId = this.organizationId;\n childComponent.entityId = user.id;\n childComponent.showUser = false;\n childComponent.entity = 'user';\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n async resetPaging() {\n this.pagedUsers = [];\n this.loadMore();\n }\n\n isSearching() {\n return this.searchService.isSearchable(this.searchText);\n }\n\n isPaging() {\n const searching = this.isSearching();\n if (searching && this.didScroll) {\n this.resetPaging();\n }\n return !searching && this.users && this.users.length > this.pageSize;\n }\n\n async resetPassword(user: OrganizationUserUserDetailsResponse) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.resetPasswordModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n ResetPasswordComponent, this.resetPasswordModalRef);\n\n childComponent.name = user != null ? user.name || user.email : null;\n childComponent.email = user != null ? user.email : null;\n childComponent.organizationId = this.organizationId;\n childComponent.id = user != null ? user.id : null;\n\n childComponent.onPasswordReset.subscribe(() => {\n this.modal.close();\n this.load();\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n checkUser(user: OrganizationUserUserDetailsResponse, select?: boolean) {\n (user as any).checked = select == null ? !(user as any).checked : select;\n }\n\n selectAll(select: boolean) {\n if (select) {\n this.selectAll(false);\n }\n\n const filteredUsers = this.searchPipe.transform(this.users, this.searchText, 'name', 'email', 'id');\n\n const selectCount = select && filteredUsers.length > MaxCheckedCount\n ? MaxCheckedCount\n : filteredUsers.length;\n for (let i = 0; i < selectCount; i++) {\n this.checkUser(filteredUsers[i], select);\n }\n }\n\n private async showBulkStatus(users: OrganizationUserUserDetailsResponse[], filteredUsers: OrganizationUserUserDetailsResponse[],\n request: Promise>, successfullMessage: string) {\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.bulkStatusModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n BulkStatusComponent, this.bulkStatusModalRef);\n\n childComponent.loading = true;\n\n // Workaround to handle closing the modal shortly after it has been opened\n let close = false;\n this.modal.onShown.subscribe(() => {\n if (close) {\n this.modal.close();\n }\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n\n try {\n const response = await request;\n\n if (this.modal) {\n const keyedErrors: any = response.data.filter(r => r.error !== '').reduce((a, x) => ({ ...a, [x.id]: x.error }), {});\n const keyedFilteredUsers: any = filteredUsers.reduce((a, x) => ({ ...a, [x.id]: x }), {});\n\n childComponent.users = users.map(user => {\n let message = keyedErrors[user.id] ?? successfullMessage;\n if (!keyedFilteredUsers.hasOwnProperty(user.id)) {\n message = this.i18nService.t('bulkFilteredMessage');\n }\n\n return {\n user: user,\n error: keyedErrors.hasOwnProperty(user.id),\n message: message,\n };\n });\n childComponent.loading = false;\n }\n } catch {\n close = true;\n if (this.modal) {\n this.modal.close();\n }\n }\n }\n\n private async doConfirmation(user: OrganizationUserUserDetailsResponse, publicKey: Uint8Array) {\n const orgKey = await this.cryptoService.getOrgKey(this.organizationId);\n const key = await this.cryptoService.rsaEncrypt(orgKey.key, publicKey.buffer);\n const request = new OrganizationUserConfirmRequest();\n request.key = key.encryptedString;\n await this.apiService.postOrganizationUserConfirm(this.organizationId, user.id, request);\n }\n\n private removeUser(user: OrganizationUserUserDetailsResponse) {\n let index = this.users.indexOf(user);\n if (index > -1) {\n this.users.splice(index, 1);\n this.resetPaging();\n }\n if (this.statusMap.has(OrganizationUserStatusType.Accepted)) {\n index = this.statusMap.get(OrganizationUserStatusType.Accepted).indexOf(user);\n if (index > -1) {\n this.statusMap.get(OrganizationUserStatusType.Accepted).splice(index, 1);\n }\n }\n if (this.statusMap.has(OrganizationUserStatusType.Invited)) {\n index = this.statusMap.get(OrganizationUserStatusType.Invited).indexOf(user);\n if (index > -1) {\n this.statusMap.get(OrganizationUserStatusType.Invited).splice(index, 1);\n }\n }\n if (this.statusMap.has(OrganizationUserStatusType.Confirmed)) {\n index = this.statusMap.get(OrganizationUserStatusType.Confirmed).indexOf(user);\n if (index > -1) {\n this.statusMap.get(OrganizationUserStatusType.Confirmed).splice(index, 1);\n }\n }\n }\n\n private getCheckedUsers() {\n return this.users.filter(u => (u as any).checked);\n }\n}\n","

{{'people' | i18n}}

{{'loading' | i18n}}

{{'noUsersInList' | i18n}}

{{'usersNeedConfirmed' | i18n}}
{{u.email}} {{'invited' | i18n}} {{'accepted' | i18n}} {{u.name}} {{'userUsingTwoStep' | i18n}} {{'enrolledPasswordReset' | i18n}} {{'owner' | i18n}} {{'admin' | i18n}} {{'manager' | i18n}} {{'user' | i18n}} {{'custom' | i18n}}
","import {\n Component,\n Input,\n OnInit,\n} from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { OrganizationUserBulkConfirmRequest } from 'jslib-common/models/request/organizationUserBulkConfirmRequest';\nimport { OrganizationUserBulkRequest } from 'jslib-common/models/request/organizationUserBulkRequest';\n\nimport { OrganizationUserUserDetailsResponse } from 'jslib-common/models/response/organizationUserResponse';\n\nimport { OrganizationUserStatusType } from 'jslib-common/enums/organizationUserStatusType';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\n@Component({\n selector: 'app-bulk-confirm',\n templateUrl: 'bulk-confirm.component.html',\n})\nexport class BulkConfirmComponent implements OnInit {\n\n @Input() organizationId: string;\n @Input() users: OrganizationUserUserDetailsResponse[];\n\n excludedUsers: OrganizationUserUserDetailsResponse[];\n filteredUsers: OrganizationUserUserDetailsResponse[];\n publicKeys: Map = new Map();\n fingerprints: Map = new Map();\n statuses: Map = new Map();\n\n loading: boolean = true;\n done: boolean = false;\n error: string;\n\n constructor(private cryptoService: CryptoService, private apiService: ApiService,\n private i18nService: I18nService) { }\n\n async ngOnInit() {\n this.excludedUsers = this.users.filter(user => user.status !== OrganizationUserStatusType.Accepted);\n this.filteredUsers = this.users.filter(user => user.status === OrganizationUserStatusType.Accepted);\n\n if (this.filteredUsers.length <= 0) {\n this.done = true;\n }\n\n const request = new OrganizationUserBulkRequest(this.filteredUsers.map(user => user.id));\n const response = await this.apiService.postOrganizationUsersPublicKey(this.organizationId, request);\n\n for (const entry of response.data) {\n const publicKey = Utils.fromB64ToArray(entry.key);\n const fingerprint = await this.cryptoService.getFingerprint(entry.id, publicKey.buffer);\n if (fingerprint != null) {\n this.publicKeys.set(entry.id, publicKey);\n this.fingerprints.set(entry.id, fingerprint.join('-'));\n }\n }\n\n this.loading = false;\n }\n\n async submit() {\n this.loading = true;\n try {\n const orgKey = await this.cryptoService.getOrgKey(this.organizationId);\n const userIdsWithKeys: any[] = [];\n for (const user of this.filteredUsers) {\n const publicKey = this.publicKeys.get(user.id);\n if (publicKey == null) {\n continue;\n }\n const key = await this.cryptoService.rsaEncrypt(orgKey.key, publicKey.buffer);\n userIdsWithKeys.push({\n id: user.id,\n key: key.encryptedString,\n });\n }\n const request = new OrganizationUserBulkConfirmRequest(userIdsWithKeys);\n const response = await this.apiService.postOrganizationUserBulkConfirm(this.organizationId, request);\n\n response.data.forEach(entry => {\n const error = entry.error !== '' ? entry.error : this.i18nService.t('bulkConfirmMessage');\n this.statuses.set(entry.id, error);\n });\n\n this.done = true;\n } catch (e) {\n this.error = e.message;\n }\n this.loading = false;\n }\n}\n","

{{'confirmUsers' | i18n}}

{{'loading' | i18n}}
{{'noSelectedUsersApplicable' | i18n}} {{error}}

{{'fingerprintEnsureIntegrityVerify' | i18n}} {{'learnMore' | i18n}}

{{'user' | i18n}} {{'fingerprint' | i18n}}
{{user.email}} {{user.name}} {{fingerprints.get(user.id)}}
{{user.email}} {{user.name}} {{'bulkFilteredMessage' | i18n}}
{{'user' | i18n}} {{'status' | i18n}}
{{user.email}} {{user.name}} {{statuses.get(user.id)}} {{'bulkFilteredMessage' | i18n}}
","import {\n Component,\n Input,\n} from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { OrganizationUserBulkRequest } from 'jslib-common/models/request/organizationUserBulkRequest';\n\nimport { OrganizationUserUserDetailsResponse } from 'jslib-common/models/response/organizationUserResponse';\n\n@Component({\n selector: 'app-bulk-remove',\n templateUrl: 'bulk-remove.component.html',\n})\nexport class BulkRemoveComponent {\n\n @Input() organizationId: string;\n @Input() users: OrganizationUserUserDetailsResponse[];\n\n statuses: Map = new Map();\n\n loading: boolean = false;\n done: boolean = false;\n error: string;\n\n constructor(private apiService: ApiService, private i18nService: I18nService) { }\n\n async submit() {\n this.loading = true;\n try {\n const request = new OrganizationUserBulkRequest(this.users.map(user => user.id));\n const response = await this.apiService.deleteManyOrganizationUsers(this.organizationId, request);\n\n response.data.forEach(entry => {\n const error = entry.error !== '' ? entry.error : this.i18nService.t('bulkRemovedMessage');\n this.statuses.set(entry.id, error);\n });\n this.done = true;\n } catch (e) {\n this.error = e.message;\n }\n\n this.loading = false;\n }\n}\n","

{{'removeUsers' | i18n}}

{{'loading' | i18n}}
{{'noSelectedUsersApplicable' | i18n}} {{error}} 0 && !error\"> {{'removeUsersWarning' | i18n}}
{{'user' | i18n}}
{{user.email}} {{user.name}}
{{'user' | i18n}} {{'status' | i18n}}
{{user.email}} {{user.name}} {{statuses.get(user.id)}} {{'bulkFilteredMessage' | i18n}}
","import { Component } from '@angular/core';\n\nimport { OrganizationUserUserDetailsResponse } from 'jslib-common/models/response/organizationUserResponse';\n\ntype BulkStatusEntry = {\n user: OrganizationUserUserDetailsResponse,\n error: boolean,\n message: string,\n};\n\n@Component({\n selector: 'app-bulk-status',\n templateUrl: 'bulk-status.component.html',\n})\nexport class BulkStatusComponent {\n\n users: BulkStatusEntry[];\n loading: boolean = false;\n\n}\n","

{{'bulkConfirmStatus' | i18n}}

{{'loading' | i18n}}
{{'user' | i18n}} {{'status' | i18n}}
{{item.user.email}} {{item.user.name}} {{item.message}} {{item.message}}
","import {\n AfterViewInit,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\n\nimport { EncString } from 'jslib-common/models/domain/encString';\nimport { MasterPasswordPolicyOptions } from 'jslib-common/models/domain/masterPasswordPolicyOptions';\nimport { SymmetricCryptoKey } from 'jslib-common/models/domain/symmetricCryptoKey';\nimport { OrganizationUserResetPasswordRequest } from 'jslib-common/models/request/organizationUserResetPasswordRequest';\n\n@Component({\n selector: 'app-reset-password',\n templateUrl: 'reset-password.component.html',\n})\nexport class ResetPasswordComponent implements OnInit {\n @Input() name: string;\n @Input() email: string;\n @Input() id: string;\n @Input() organizationId: string;\n @Output() onPasswordReset = new EventEmitter();\n\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n newPassword: string = null;\n showPassword: boolean = false;\n masterPasswordScore: number;\n formPromise: Promise;\n private newPasswordStrengthTimeout: any;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService, private passwordGenerationService: PasswordGenerationService,\n private policyService: PolicyService, private cryptoService: CryptoService) { }\n\n async ngOnInit() {\n // Get Enforced Policy Options\n this.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions();\n }\n\n get loggedOutWarningName() {\n return this.name != null ? this.name : this.i18nService.t('thisUser');\n }\n\n getPasswordScoreAlertDisplay() {\n if (this.enforcedPolicyOptions == null) {\n return '';\n }\n\n let str: string;\n switch (this.enforcedPolicyOptions.minComplexity) {\n case 4:\n str = this.i18nService.t('strong');\n break;\n case 3:\n str = this.i18nService.t('good');\n break;\n default:\n str = this.i18nService.t('weak');\n break;\n }\n return str + ' (' + this.enforcedPolicyOptions.minComplexity + ')';\n }\n\n async generatePassword() {\n const options = (await this.passwordGenerationService.getOptions())[0];\n this.newPassword = await this.passwordGenerationService.generatePassword(options);\n this.updatePasswordStrength();\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n document.getElementById('newPassword').focus();\n }\n\n copy(value: string) {\n if (value == null) {\n return;\n }\n\n this.platformUtilsService.copyToClipboard(value, { window: window });\n this.platformUtilsService.showToast('info', null,\n this.i18nService.t('valueCopied', this.i18nService.t('password')));\n }\n\n async submit() {\n // Validation\n if (this.newPassword == null || this.newPassword === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassRequired'));\n return false;\n }\n\n if (this.newPassword.length < 8) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassLength'));\n return false;\n }\n\n if (this.enforcedPolicyOptions != null &&\n !this.policyService.evaluateMasterPassword(this.masterPasswordScore, this.newPassword,\n this.enforcedPolicyOptions)) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPasswordPolicyRequirementsNotMet'));\n return;\n }\n\n if (this.masterPasswordScore < 3) {\n const result = await this.platformUtilsService.showDialog(this.i18nService.t('weakMasterPasswordDesc'),\n this.i18nService.t('weakMasterPassword'), this.i18nService.t('yes'), this.i18nService.t('no'),\n 'warning');\n if (!result) {\n return false;\n }\n }\n\n // Get user Information (kdf type, kdf iterations, resetPasswordKey, private key) and change password\n try {\n this.formPromise = this.apiService.getOrganizationUserResetPasswordDetails(this.organizationId, this.id)\n .then(async response => {\n if (response == null) {\n throw new Error(this.i18nService.t('resetPasswordDetailsError'));\n }\n\n const kdfType = response.kdf;\n const kdfIterations = response.kdfIterations;\n const resetPasswordKey = response.resetPasswordKey;\n const encryptedPrivateKey = response.encryptedPrivateKey;\n\n // Decrypt Organization's encrypted Private Key with org key\n const orgSymKey = await this.cryptoService.getOrgKey(this.organizationId);\n const decPrivateKey = await this.cryptoService.decryptToBytes(new EncString(encryptedPrivateKey), orgSymKey);\n\n // Decrypt User's Reset Password Key to get EncKey\n const decValue = await this.cryptoService.rsaDecrypt(resetPasswordKey, decPrivateKey);\n const userEncKey = new SymmetricCryptoKey(decValue);\n\n // Create new key and hash new password\n const newKey = await this.cryptoService.makeKey(this.newPassword, this.email.trim().toLowerCase(),\n kdfType, kdfIterations);\n const newPasswordHash = await this.cryptoService.hashPassword(this.newPassword, newKey);\n\n // Create new encKey for the User\n const newEncKey = await this.cryptoService.remakeEncKey(newKey, userEncKey);\n\n // Create request\n const request = new OrganizationUserResetPasswordRequest();\n request.key = newEncKey[1].encryptedString;\n request.newMasterPasswordHash = newPasswordHash;\n\n // Change user's password\n return this.apiService.putOrganizationUserResetPassword(this.organizationId, this.id, request);\n });\n\n await this.formPromise;\n this.platformUtilsService.showToast('success', null, this.i18nService.t('resetPasswordSuccess'));\n this.onPasswordReset.emit();\n } catch { }\n }\n\n updatePasswordStrength() {\n if (this.newPasswordStrengthTimeout != null) {\n clearTimeout(this.newPasswordStrengthTimeout);\n }\n this.newPasswordStrengthTimeout = setTimeout(() => {\n const strengthResult = this.passwordGenerationService.passwordStrength(this.newPassword,\n this.getPasswordStrengthUserInput());\n this.masterPasswordScore = strengthResult == null ? null : strengthResult.score;\n }, 300);\n }\n\n private getPasswordStrengthUserInput() {\n let userInput: string[] = [];\n const atPosition = this.email.indexOf('@');\n if (atPosition > -1) {\n userInput = userInput.concat(this.email.substr(0, atPosition).trim().toLowerCase().split(/[^A-Za-z0-9]/));\n }\n if (this.name != null && this.name !== '') {\n userInput = userInput.concat(this.name.trim().toLowerCase().split(' '));\n }\n return userInput;\n }\n}\n","

{{'resetPassword' | i18n}} {{name}}

{{'resetPasswordLoggedOutWarning' | i18n: loggedOutWarningName}} {{'resetPasswordMasterPasswordPolicyInEffect' | i18n}}
  • 0\"> {{'policyInEffectMinComplexity' | i18n : getPasswordScoreAlertDisplay()}}
  • 0\"> {{'policyInEffectMinLength' | i18n : enforcedPolicyOptions?.minLength.toString()}}
  • {{'policyInEffectUppercase' | i18n}}
  • {{'policyInEffectLowercase' | i18n}}
  • {{'policyInEffectNumbers' | i18n}}
  • {{'policyInEffectSpecial' | i18n : '!@#$%^&*'}}
","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { CollectionData } from 'jslib-common/models/data/collectionData';\nimport { Collection } from 'jslib-common/models/domain/collection';\nimport { OrganizationUserInviteRequest } from 'jslib-common/models/request/organizationUserInviteRequest';\nimport { OrganizationUserUpdateRequest } from 'jslib-common/models/request/organizationUserUpdateRequest';\nimport { SelectionReadOnlyRequest } from 'jslib-common/models/request/selectionReadOnlyRequest';\nimport { CollectionDetailsResponse } from 'jslib-common/models/response/collectionResponse';\nimport { CollectionView } from 'jslib-common/models/view/collectionView';\n\nimport { OrganizationUserType } from 'jslib-common/enums/organizationUserType';\nimport { PermissionsApi } from 'jslib-common/models/api/permissionsApi';\n\n@Component({\n selector: 'app-user-add-edit',\n templateUrl: 'user-add-edit.component.html',\n})\nexport class UserAddEditComponent implements OnInit {\n @Input() name: string;\n @Input() organizationUserId: string;\n @Input() organizationId: string;\n @Output() onSavedUser = new EventEmitter();\n @Output() onDeletedUser = new EventEmitter();\n\n loading = true;\n editMode: boolean = false;\n title: string;\n emails: string;\n type: OrganizationUserType = OrganizationUserType.User;\n permissions = new PermissionsApi();\n showCustom = false;\n access: 'all' | 'selected' = 'selected';\n collections: CollectionView[] = [];\n formPromise: Promise;\n deletePromise: Promise;\n organizationUserType = OrganizationUserType;\n\n get customUserTypeSelected(): boolean {\n return this.type === OrganizationUserType.Custom;\n }\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private collectionService: CollectionService,\n private platformUtilsService: PlatformUtilsService) { }\n\n async ngOnInit() {\n this.editMode = this.loading = this.organizationUserId != null;\n await this.loadCollections();\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t('editUser');\n try {\n const user = await this.apiService.getOrganizationUser(this.organizationId, this.organizationUserId);\n this.access = user.accessAll ? 'all' : 'selected';\n this.type = user.type;\n if (user.type === OrganizationUserType.Custom) {\n this.permissions = user.permissions;\n }\n if (user.collections != null && this.collections != null) {\n user.collections.forEach(s => {\n const collection = this.collections.filter(c => c.id === s.id);\n if (collection != null && collection.length > 0) {\n (collection[0] as any).checked = true;\n collection[0].readOnly = s.readOnly;\n collection[0].hidePasswords = s.hidePasswords;\n }\n });\n }\n } catch { }\n } else {\n this.title = this.i18nService.t('inviteUser');\n }\n\n this.loading = false;\n }\n\n async loadCollections() {\n const response = await this.apiService.getCollections(this.organizationId);\n const collections = response.data.map(r =>\n new Collection(new CollectionData(r as CollectionDetailsResponse)));\n this.collections = await this.collectionService.decryptMany(collections);\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n if (!(c as any).checked) {\n c.readOnly = false;\n }\n }\n\n selectAll(select: boolean) {\n this.collections.forEach(c => this.check(c, select));\n }\n\n setRequestPermissions(p: PermissionsApi, clearPermissions: boolean) {\n p.accessBusinessPortal = clearPermissions ?\n false :\n this.permissions.accessBusinessPortal;\n p.accessEventLogs = this.permissions.accessEventLogs = clearPermissions ?\n false :\n this.permissions.accessEventLogs;\n p.accessImportExport = clearPermissions ?\n false :\n this.permissions.accessImportExport;\n p.accessReports = clearPermissions ?\n false :\n this.permissions.accessReports;\n p.manageAllCollections = clearPermissions ?\n false :\n this.permissions.manageAllCollections;\n p.manageAssignedCollections = clearPermissions ?\n false :\n this.permissions.manageAssignedCollections;\n p.manageGroups = clearPermissions ?\n false :\n this.permissions.manageGroups;\n p.manageSso = clearPermissions ?\n false :\n this.permissions.manageSso;\n p.managePolicies = clearPermissions ?\n false :\n this.permissions.managePolicies;\n p.manageUsers = clearPermissions ?\n false :\n this.permissions.manageUsers;\n p.manageResetPassword = clearPermissions ?\n false :\n this.permissions.manageResetPassword;\n return p;\n }\n\n handleDependentPermissions() {\n // Manage Password Reset must have Manage Users enabled\n if (this.permissions.manageResetPassword && !this.permissions.manageUsers) {\n this.permissions.manageUsers = true;\n (document.getElementById('manageUsers') as HTMLInputElement).checked = true;\n this.platformUtilsService.showToast('info', null, this.i18nService.t('resetPasswordManageUsers'));\n }\n }\n\n async submit() {\n let collections: SelectionReadOnlyRequest[] = null;\n if (this.access !== 'all') {\n collections = this.collections.filter(c => (c as any).checked)\n .map(c => new SelectionReadOnlyRequest(c.id, !!c.readOnly, !!c.hidePasswords));\n }\n\n try {\n if (this.editMode) {\n const request = new OrganizationUserUpdateRequest();\n request.accessAll = this.access === 'all';\n request.type = this.type;\n request.collections = collections;\n request.permissions = this.setRequestPermissions(request.permissions ?? new PermissionsApi(), request.type !== OrganizationUserType.Custom);\n this.formPromise = this.apiService.putOrganizationUser(this.organizationId, this.organizationUserId,\n request);\n } else {\n const request = new OrganizationUserInviteRequest();\n request.emails = this.emails.trim().split(/\\s*,\\s*/);\n request.accessAll = this.access === 'all';\n request.type = this.type;\n request.permissions = this.setRequestPermissions(request.permissions ?? new PermissionsApi(), request.type !== OrganizationUserType.Custom);\n request.collections = collections;\n this.formPromise = this.apiService.postOrganizationUserInvite(this.organizationId, request);\n }\n await this.formPromise;\n this.toasterService.popAsync('success', null,\n this.i18nService.t(this.editMode ? 'editedUserId' : 'invitedUsers', this.name));\n this.onSavedUser.emit();\n } catch { }\n }\n\n async delete() {\n if (!this.editMode) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('removeUserConfirmation'), this.name,\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.apiService.deleteOrganizationUser(this.organizationId, this.organizationUserId);\n await this.deletePromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('removedUserId', this.name));\n this.onDeletedUser.emit();\n } catch { }\n }\n\n}\n","

{{title}} {{name}}

{{'loading' | i18n}}

{{'inviteUserDesc' | i18n}}

{{'inviteMultipleEmailDesc' | i18n : '20'}}

{{'userType' | i18n}}

{{'permissions' | i18n}}



{{'accessControl' | i18n}}

{{'noCollectionsInList' | i18n}}
  {{'name' | i18n}} {{'hidePasswords' | i18n}} {{'readOnly' | i18n}}
{{c.name}}
","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\n@Component({\n selector: 'app-user-confirm',\n templateUrl: 'user-confirm.component.html',\n})\nexport class UserConfirmComponent implements OnInit {\n @Input() name: string;\n @Input() userId: string;\n @Input() organizationUserId: string;\n @Input() organizationId: string;\n @Output() onConfirmedUser = new EventEmitter();\n\n dontAskAgain = false;\n loading = true;\n fingerprint: string;\n\n private publicKey: Uint8Array = null;\n\n constructor(private apiService: ApiService, private cryptoService: CryptoService,\n private storageService: StorageService) { }\n\n async ngOnInit() {\n try {\n const publicKeyResponse = await this.apiService.getUserPublicKey(this.userId);\n if (publicKeyResponse != null) {\n this.publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n const fingerprint = await this.cryptoService.getFingerprint(this.userId, this.publicKey.buffer);\n if (fingerprint != null) {\n this.fingerprint = fingerprint.join('-');\n }\n }\n } catch { }\n this.loading = false;\n }\n\n async submit() {\n if (this.loading) {\n return;\n }\n\n if (this.dontAskAgain) {\n await this.storageService.save(ConstantsService.autoConfirmFingerprints, true);\n }\n\n this.onConfirmedUser.emit(this.publicKey);\n }\n}\n","

{{'confirmUser' | i18n}} {{name}}

{{'fingerprintEnsureIntegrityVerify' | i18n}} {{'learnMore' | i18n}}

{{fingerprint}}

","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { OrganizationUserUpdateGroupsRequest } from 'jslib-common/models/request/organizationUserUpdateGroupsRequest';\nimport { GroupResponse } from 'jslib-common/models/response/groupResponse';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\n@Component({\n selector: 'app-user-groups',\n templateUrl: 'user-groups.component.html',\n})\nexport class UserGroupsComponent implements OnInit {\n @Input() name: string;\n @Input() organizationUserId: string;\n @Input() organizationId: string;\n @Output() onSavedUser = new EventEmitter();\n\n loading = true;\n groups: GroupResponse[] = [];\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService) { }\n\n async ngOnInit() {\n const groupsResponse = await this.apiService.getGroups(this.organizationId);\n const groups = groupsResponse.data.map(r => r);\n groups.sort(Utils.getSortFunction(this.i18nService, 'name'));\n this.groups = groups;\n\n try {\n const userGroups = await this.apiService.getOrganizationUserGroups(\n this.organizationId, this.organizationUserId);\n if (userGroups != null && this.groups != null) {\n userGroups.forEach(ug => {\n const group = this.groups.filter(g => g.id === ug);\n if (group != null && group.length > 0) {\n (group[0] as any).checked = true;\n }\n });\n }\n } catch { }\n\n this.loading = false;\n }\n\n check(g: GroupResponse, select?: boolean) {\n (g as any).checked = select == null ? !(g as any).checked : select;\n if (!(g as any).checked) {\n (g as any).readOnly = false;\n }\n }\n\n selectAll(select: boolean) {\n this.groups.forEach(g => this.check(g, select));\n }\n\n async submit() {\n const request = new OrganizationUserUpdateGroupsRequest();\n request.groupIds = this.groups.filter(g => (g as any).checked).map(g => g.id);\n\n try {\n this.formPromise = this.apiService.putOrganizationUserGroups(this.organizationId, this.organizationUserId,\n request);\n await this.formPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('editedGroupsForUser', this.name));\n this.onSavedUser.emit();\n } catch { }\n }\n}\n","

{{'groupAccess' | i18n}} {{name}}

{{'loading' | i18n}}

{{'groupAccessUserDesc' | i18n}}

{{'noGroupsInList' | i18n}}
{{g.name}}
","import {\n Component,\n ComponentFactoryResolver,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { PolicyType } from 'jslib-common/enums/policyType';\n\nimport { EnvironmentService } from 'jslib-common/abstractions';\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { PolicyResponse } from 'jslib-common/models/response/policyResponse';\n\nimport { ModalComponent } from '../../modal.component';\n\nimport { PolicyEditComponent } from './policy-edit.component';\n\n@Component({\n selector: 'app-org-policies',\n templateUrl: 'policies.component.html',\n})\nexport class PoliciesComponent implements OnInit {\n @ViewChild('editTemplate', { read: ViewContainerRef, static: true }) editModalRef: ViewContainerRef;\n\n loading = true;\n organizationId: string;\n policies: any[];\n\n // Remove when removing deprecation warning\n enterpriseTokenPromise: Promise;\n userCanAccessBusinessPortal = false;\n\n private enterpriseUrl: string;\n\n private modal: ModalComponent = null;\n private orgPolicies: PolicyResponse[];\n private policiesEnabledMap: Map = new Map();\n\n constructor(private apiService: ApiService, private route: ActivatedRoute,\n private i18nService: I18nService, private componentFactoryResolver: ComponentFactoryResolver,\n private platformUtilsService: PlatformUtilsService, private userService: UserService,\n private router: Router, private environmentService: EnvironmentService) { }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organizationId = params.organizationId;\n const organization = await this.userService.getOrganization(this.organizationId);\n if (organization == null || !organization.usePolicies) {\n this.router.navigate(['/organizations', this.organizationId]);\n return;\n }\n this.userCanAccessBusinessPortal = organization.canAccessBusinessPortal;\n this.policies = [\n {\n name: this.i18nService.t('twoStepLogin'),\n description: this.i18nService.t('twoStepLoginPolicyDesc'),\n type: PolicyType.TwoFactorAuthentication,\n enabled: false,\n display: true,\n },\n {\n name: this.i18nService.t('masterPass'),\n description: this.i18nService.t('masterPassPolicyDesc'),\n type: PolicyType.MasterPassword,\n enabled: false,\n display: true,\n },\n {\n name: this.i18nService.t('passwordGenerator'),\n description: this.i18nService.t('passwordGeneratorPolicyDesc'),\n type: PolicyType.PasswordGenerator,\n enabled: false,\n display: true,\n },\n {\n name: this.i18nService.t('singleOrg'),\n description: this.i18nService.t('singleOrgDesc'),\n type: PolicyType.SingleOrg,\n enabled: false,\n display: true,\n },\n {\n name: this.i18nService.t('requireSso'),\n description: this.i18nService.t('requireSsoPolicyDesc'),\n type: PolicyType.RequireSso,\n enabled: false,\n display: organization.useSso,\n },\n {\n name: this.i18nService.t('personalOwnership'),\n description: this.i18nService.t('personalOwnershipPolicyDesc'),\n type: PolicyType.PersonalOwnership,\n enabled: false,\n display: true,\n },\n {\n name: this.i18nService.t('disableSend'),\n description: this.i18nService.t('disableSendPolicyDesc'),\n type: PolicyType.DisableSend,\n enabled: false,\n display: true,\n },\n {\n name: this.i18nService.t('sendOptions'),\n description: this.i18nService.t('sendOptionsPolicyDesc'),\n type: PolicyType.SendOptions,\n enabled: false,\n display: true,\n }, {\n name: this.i18nService.t('resetPasswordPolicy'),\n description: this.i18nService.t('resetPasswordPolicyDescription'),\n type: PolicyType.ResetPassword,\n enabled: false,\n display: organization.useResetPassword,\n },\n ];\n await this.load();\n\n // Handle policies component launch from Event message\n const queryParamsSub = this.route.queryParams.subscribe(async qParams => {\n if (qParams.policyId != null) {\n const policyIdFromEvents: string = qParams.policyId;\n for (const orgPolicy of this.orgPolicies) {\n if (orgPolicy.id === policyIdFromEvents) {\n for (let i = 0; i < this.policies.length; i++) {\n if (this.policies[i].type === orgPolicy.type) {\n this.edit(this.policies[i]);\n break;\n }\n }\n break;\n }\n }\n }\n\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n });\n\n // Remove when removing deprecation warning\n this.enterpriseUrl = 'https://portal.bitwarden.com';\n if (this.environmentService.enterpriseUrl != null) {\n this.enterpriseUrl = this.environmentService.enterpriseUrl;\n } else if (this.environmentService.baseUrl != null) {\n this.enterpriseUrl = this.environmentService.baseUrl + '/portal';\n }\n }\n\n async load() {\n const response = await this.apiService.getPolicies(this.organizationId);\n this.orgPolicies = response.data != null && response.data.length > 0 ? response.data : [];\n this.orgPolicies.forEach(op => {\n this.policiesEnabledMap.set(op.type, op.enabled);\n });\n this.policies.forEach(p => {\n p.enabled = this.policiesEnabledMap.has(p.type) && this.policiesEnabledMap.get(p.type);\n });\n this.loading = false;\n }\n\n edit(p: any) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.editModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n PolicyEditComponent, this.editModalRef);\n\n childComponent.name = p.name;\n childComponent.description = p.description;\n childComponent.type = p.type;\n childComponent.organizationId = this.organizationId;\n childComponent.policiesEnabledMap = this.policiesEnabledMap;\n childComponent.onSavedPolicy.subscribe(() => {\n this.modal.close();\n this.load();\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n\n // Remove when removing deprecation warning\n async goToEnterprisePortal() {\n if (this.enterpriseTokenPromise != null) {\n return;\n }\n try {\n this.enterpriseTokenPromise = this.apiService.getEnterprisePortalSignInToken();\n const token = await this.enterpriseTokenPromise;\n if (token != null) {\n const userId = await this.userService.getUserId();\n this.platformUtilsService.launchUri(this.enterpriseUrl + '/login?userId=' + userId +\n '&token=' + (window as any).encodeURIComponent(token) + '&organizationId=' + this.organizationId);\n }\n } catch { }\n this.enterpriseTokenPromise = null;\n }\n}\n","

{{'webPoliciesDeprecationWarning' | i18n}}

{{'policies' | i18n}}

{{'loading' | i18n}}
{{p.name}} {{'enabled' | i18n}} {{p.description}}
","// Using index.ts is deprecated, please do not extend\nexport { ApiService } from './api.service';\nexport { AppIdService } from './appId.service';\nexport { AuditService } from './audit.service';\nexport { AuthService } from './auth.service';\nexport { CipherService } from './cipher.service';\nexport { CollectionService } from './collection.service';\nexport { CryptoService } from './crypto.service';\nexport { EnvironmentService } from './environment.service';\nexport { FolderService } from './folder.service';\nexport { I18nService } from './i18n.service';\nexport { LogService } from './log.service';\nexport { MessagingService } from './messaging.service';\nexport { PasswordGenerationService } from './passwordGeneration.service';\nexport { PlatformUtilsService } from './platformUtils.service';\nexport { SearchService } from './search.service';\nexport { SettingsService } from './settings.service';\nexport { StorageService } from './storage.service';\nexport { StateService } from './state.service';\nexport { SyncService } from './sync.service';\nexport { TokenService } from './token.service';\nexport { TotpService } from './totp.service';\nexport { UserService } from './user.service';\nexport { VaultTimeoutService } from './vaultTimeout.service';\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { PolicyType } from 'jslib-common/enums/policyType';\n\nimport { PolicyRequest } from 'jslib-common/models/request/policyRequest';\n\nimport { PolicyResponse } from 'jslib-common/models/response/policyResponse';\n\n@Component({\n selector: 'app-policy-edit',\n templateUrl: 'policy-edit.component.html',\n})\nexport class PolicyEditComponent implements OnInit {\n @Input() name: string;\n @Input() description: string;\n @Input() type: PolicyType;\n @Input() organizationId: string;\n @Input() policiesEnabledMap: Map = new Map();\n @Output() onSavedPolicy = new EventEmitter();\n\n policyType = PolicyType;\n loading = true;\n enabled = false;\n formPromise: Promise;\n passwordScores: any[];\n defaultTypes: any[];\n\n // Master password\n masterPassMinComplexity?: number = null;\n masterPassMinLength?: number;\n masterPassRequireUpper?: number;\n masterPassRequireLower?: number;\n masterPassRequireNumbers?: number;\n masterPassRequireSpecial?: number;\n\n // Password generator\n passGenDefaultType?: string;\n passGenMinLength?: number;\n passGenUseUpper?: boolean;\n passGenUseLower?: boolean;\n passGenUseNumbers?: boolean;\n passGenUseSpecial?: boolean;\n passGenMinNumbers?: number;\n passGenMinSpecial?: number;\n passGenMinNumberWords?: number;\n passGenCapitalize?: boolean;\n passGenIncludeNumber?: boolean;\n\n // Send options\n sendDisableHideEmail?: boolean;\n\n // Reset Password\n resetPasswordAutoEnroll?: boolean;\n\n private policy: PolicyResponse;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService) {\n this.passwordScores = [\n { name: '-- ' + i18nService.t('select') + ' --', value: null },\n { name: i18nService.t('weak') + ' (0)', value: 0 },\n { name: i18nService.t('weak') + ' (1)', value: 1 },\n { name: i18nService.t('weak') + ' (2)', value: 2 },\n { name: i18nService.t('good') + ' (3)', value: 3 },\n { name: i18nService.t('strong') + ' (4)', value: 4 },\n ];\n this.defaultTypes = [\n { name: i18nService.t('userPreference'), value: null },\n { name: i18nService.t('password'), value: 'password' },\n { name: i18nService.t('passphrase'), value: 'passphrase' },\n ];\n }\n\n async ngOnInit() {\n await this.load();\n this.loading = false;\n }\n\n async load() {\n try {\n this.policy = await this.apiService.getPolicy(this.organizationId, this.type);\n\n if (this.policy != null) {\n this.enabled = this.policy.enabled;\n if (this.policy.data != null) {\n switch (this.type) {\n case PolicyType.PasswordGenerator:\n this.passGenDefaultType = this.policy.data.defaultType;\n this.passGenMinLength = this.policy.data.minLength;\n this.passGenUseUpper = this.policy.data.useUpper;\n this.passGenUseLower = this.policy.data.useLower;\n this.passGenUseNumbers = this.policy.data.useNumbers;\n this.passGenUseSpecial = this.policy.data.useSpecial;\n this.passGenMinNumbers = this.policy.data.minNumbers;\n this.passGenMinSpecial = this.policy.data.minSpecial;\n this.passGenMinNumberWords = this.policy.data.minNumberWords;\n this.passGenCapitalize = this.policy.data.capitalize;\n this.passGenIncludeNumber = this.policy.data.includeNumber;\n break;\n case PolicyType.MasterPassword:\n this.masterPassMinComplexity = this.policy.data.minComplexity;\n this.masterPassMinLength = this.policy.data.minLength;\n this.masterPassRequireUpper = this.policy.data.requireUpper;\n this.masterPassRequireLower = this.policy.data.requireLower;\n this.masterPassRequireNumbers = this.policy.data.requireNumbers;\n this.masterPassRequireSpecial = this.policy.data.requireSpecial;\n break;\n case PolicyType.SendOptions:\n this.sendDisableHideEmail = this.policy.data.disableHideEmail;\n break;\n case PolicyType.ResetPassword:\n this.resetPasswordAutoEnroll = this.policy.data.autoEnrollEnabled;\n break;\n default:\n break;\n }\n }\n }\n } catch (e) {\n if (e.statusCode === 404) {\n this.enabled = false;\n } else {\n throw e;\n }\n }\n }\n\n async submit() {\n if (this.preValidate()) {\n const request = new PolicyRequest();\n request.enabled = this.enabled;\n request.type = this.type;\n request.data = null;\n switch (this.type) {\n case PolicyType.PasswordGenerator:\n request.data = {\n defaultType: this.passGenDefaultType,\n minLength: this.passGenMinLength || null,\n useUpper: this.passGenUseUpper,\n useLower: this.passGenUseLower,\n useNumbers: this.passGenUseNumbers,\n useSpecial: this.passGenUseSpecial,\n minNumbers: this.passGenMinNumbers || null,\n minSpecial: this.passGenMinSpecial || null,\n minNumberWords: this.passGenMinNumberWords || null,\n capitalize: this.passGenCapitalize,\n includeNumber: this.passGenIncludeNumber,\n };\n break;\n case PolicyType.MasterPassword:\n request.data = {\n minComplexity: this.masterPassMinComplexity || null,\n minLength: this.masterPassMinLength || null,\n requireUpper: this.masterPassRequireUpper,\n requireLower: this.masterPassRequireLower,\n requireNumbers: this.masterPassRequireNumbers,\n requireSpecial: this.masterPassRequireSpecial,\n };\n break;\n case PolicyType.SendOptions:\n request.data = {\n disableHideEmail: this.sendDisableHideEmail,\n };\n break;\n case PolicyType.ResetPassword:\n request.data = {\n autoEnrollEnabled: this.resetPasswordAutoEnroll,\n };\n break;\n default:\n break;\n }\n try {\n this.formPromise = this.apiService.putPolicy(this.organizationId, this.type, request);\n await this.formPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('editedPolicyId', this.name));\n this.onSavedPolicy.emit();\n } catch { }\n }\n }\n\n get checkboxDesc(): string {\n return this.type === PolicyType.PersonalOwnership ? this.i18nService.t('personalOwnershipCheckboxDesc') :\n this.i18nService.t('enabled');\n }\n\n private preValidate(): boolean {\n switch (this.type) {\n case PolicyType.RequireSso:\n // Don't need prevalidation checks if submitting to disable\n if (!this.enabled) {\n return true;\n }\n // Have SingleOrg policy enabled?\n if (!(this.policiesEnabledMap.has(PolicyType.SingleOrg)\n && this.policiesEnabledMap.get(PolicyType.SingleOrg))) {\n this.toasterService.popAsync('error', null, this.i18nService.t('requireSsoPolicyReqError'));\n return false;\n }\n return true;\n\n case PolicyType.SingleOrg:\n // Don't need prevalidation checks if submitting to enable\n if (this.enabled) {\n return true;\n }\n // If RequireSso Policy is enabled prevent submittal\n if (this.policiesEnabledMap.has(PolicyType.RequireSso)\n && this.policiesEnabledMap.get(PolicyType.RequireSso)) {\n this.toasterService.popAsync('error', null, this.i18nService.t('disableRequireSsoError'));\n return false;\n }\n return true;\n\n default:\n return true;\n }\n }\n}\n","

{{'editPolicy' | i18n}} - {{name}}

{{'loading' | i18n}}

{{description}}

{{'twoStepLoginPolicyWarning' | i18n}} {{'singleOrgPolicyWarning' | i18n}} {{'requireSsoPolicyReq' | i18n}} {{'requireSsoExemption' | i18n}} {{'personalOwnershipExemption' | i18n}} {{'disableSendExemption' | i18n}} {{'sendOptionsExemption' | i18n}} {{'resetPasswordPolicyWarning' | i18n}}

{{'password' | i18n}}

{{'passphrase' | i18n}}

{{'options' | i18n}}

{{'resetPasswordPolicyAutoEnroll' | i18n}}

{{'resetPasswordPolicyAutoEnrollDescription' | i18n}}

{{'resetPasswordPolicyAutoEnrollWarning' | i18n}}
","import {\n Component,\n ComponentFactoryResolver,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { ActivatedRoute } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\n\nimport { OrganizationKeysRequest } from 'jslib-common/models/request/organizationKeysRequest';\nimport { OrganizationUpdateRequest } from 'jslib-common/models/request/organizationUpdateRequest';\n\nimport { OrganizationResponse } from 'jslib-common/models/response/organizationResponse';\n\nimport { ModalComponent } from '../../modal.component';\n\nimport { ApiKeyComponent } from '../../settings/api-key.component';\nimport { PurgeVaultComponent } from '../../settings/purge-vault.component';\nimport { TaxInfoComponent } from '../../settings/tax-info.component';\n\nimport { DeleteOrganizationComponent } from './delete-organization.component';\n\n@Component({\n selector: 'app-org-account',\n templateUrl: 'account.component.html',\n})\nexport class AccountComponent {\n @ViewChild('deleteOrganizationTemplate', { read: ViewContainerRef, static: true }) deleteModalRef: ViewContainerRef;\n @ViewChild('purgeOrganizationTemplate', { read: ViewContainerRef, static: true }) purgeModalRef: ViewContainerRef;\n @ViewChild('apiKeyTemplate', { read: ViewContainerRef, static: true }) apiKeyModalRef: ViewContainerRef;\n @ViewChild('rotateApiKeyTemplate', { read: ViewContainerRef, static: true }) rotateApiKeyModalRef: ViewContainerRef;\n @ViewChild(TaxInfoComponent) taxInfo: TaxInfoComponent;\n\n selfHosted = false;\n loading = true;\n canUseApi = false;\n org: OrganizationResponse;\n formPromise: Promise;\n taxFormPromise: Promise;\n\n private organizationId: string;\n private modal: ModalComponent = null;\n\n constructor(private componentFactoryResolver: ComponentFactoryResolver,\n private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private route: ActivatedRoute,\n private syncService: SyncService, private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService) { }\n\n async ngOnInit() {\n this.selfHosted = this.platformUtilsService.isSelfHost();\n this.route.parent.parent.params.subscribe(async params => {\n this.organizationId = params.organizationId;\n try {\n this.org = await this.apiService.getOrganization(this.organizationId);\n this.canUseApi = this.org.useApi;\n } catch { }\n });\n this.loading = false;\n }\n\n async submit() {\n try {\n const request = new OrganizationUpdateRequest();\n request.name = this.org.name;\n request.businessName = this.org.businessName;\n request.billingEmail = this.org.billingEmail;\n request.identifier = this.org.identifier;\n\n // Backfill pub/priv key if necessary\n if (!this.org.hasPublicAndPrivateKeys) {\n const orgShareKey = await this.cryptoService.getOrgKey(this.organizationId);\n const orgKeys = await this.cryptoService.makeKeyPair(orgShareKey);\n request.keys = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n }\n\n this.formPromise = this.apiService.putOrganization(this.organizationId, request).then(() => {\n return this.syncService.fullSync(true);\n });\n await this.formPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('organizationUpdated'));\n } catch { }\n }\n\n async submitTaxInfo() {\n this.taxFormPromise = this.taxInfo.submitTaxInfo();\n await this.taxFormPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('taxInfoUpdated'));\n }\n\n deleteOrganization() {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.deleteModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n DeleteOrganizationComponent, this.deleteModalRef);\n childComponent.organizationId = this.organizationId;\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n purgeVault() {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.purgeModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(PurgeVaultComponent, this.purgeModalRef);\n childComponent.organizationId = this.organizationId;\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n viewApiKey() {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.apiKeyModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(ApiKeyComponent, this.apiKeyModalRef);\n childComponent.keyType = 'organization';\n childComponent.entityId = this.organizationId;\n childComponent.postKey = this.apiService.postOrganizationApiKey.bind(this.apiService);\n childComponent.scope = 'api.organization';\n childComponent.grantType = 'client_credentials';\n childComponent.apiKeyTitle = 'apiKey';\n childComponent.apiKeyWarning = 'apiKeyWarning';\n childComponent.apiKeyDescription = 'apiKeyDesc';\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n rotateApiKey() {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.rotateApiKeyModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(ApiKeyComponent, this.rotateApiKeyModalRef);\n childComponent.keyType = 'organization';\n childComponent.isRotation = true;\n childComponent.entityId = this.organizationId;\n childComponent.postKey = this.apiService.postOrganizationRotateApiKey.bind(this.apiService);\n childComponent.scope = 'api.organization';\n childComponent.grantType = 'client_credentials';\n childComponent.apiKeyTitle = 'apiKey';\n childComponent.apiKeyWarning = 'apiKeyWarning';\n childComponent.apiKeyDescription = 'apiKeyRotateDesc';\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n}\n","

{{'myOrganization' | i18n}}

{{'loading' | i18n}}

{{'apiKey' | i18n}}

{{'apiKeyDesc' | i18n}} {{'learnMore' | i18n}}

{{'taxInformation' | i18n}}

{{'taxInformationDesc' | i18n}}

{{'loading' | i18n}}

{{'dangerZone' | i18n}}

{{'dangerZoneDesc' | i18n}}

","import { TaxInfoUpdateRequest } from './taxInfoUpdateRequest';\n\nexport class OrganizationTaxInfoUpdateRequest extends TaxInfoUpdateRequest {\n taxId: string;\n line1: string;\n line2: string;\n city: string;\n state: string;\n}\n","export class TaxInfoUpdateRequest {\n country: string;\n postalCode: string;\n}\n","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { PasswordVerificationRequest } from 'jslib-common/models/request/passwordVerificationRequest';\n\n@Component({\n selector: 'app-delete-organization',\n templateUrl: 'delete-organization.component.html',\n})\nexport class DeleteOrganizationComponent {\n organizationId: string;\n\n masterPassword: string;\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private cryptoService: CryptoService,\n private router: Router) { }\n\n async submit() {\n if (this.masterPassword == null || this.masterPassword === '') {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassRequired'));\n return;\n }\n\n const request = new PasswordVerificationRequest();\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n try {\n this.formPromise = this.apiService.deleteOrganization(this.organizationId, request);\n await this.formPromise;\n this.toasterService.popAsync('success', this.i18nService.t('organizationDeleted'),\n this.i18nService.t('organizationDeletedDesc'));\n this.router.navigate(['/']);\n } catch { }\n }\n}\n","

{{'deleteOrganization' | i18n}}

{{'deleteOrganizationDesc' | i18n}}

{{'deleteOrganizationWarning' | i18n}}
","import {\n Component,\n OnInit,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { UserBillingComponent } from '../../settings/user-billing.component';\n\n@Component({\n selector: 'app-org-billing',\n templateUrl: '../../settings/user-billing.component.html',\n})\nexport class OrganizationBillingComponent extends UserBillingComponent implements OnInit {\n constructor(apiService: ApiService, i18nService: I18nService, toasterService: ToasterService,\n private route: ActivatedRoute, platformUtilsService: PlatformUtilsService) {\n super(apiService, i18nService, toasterService, platformUtilsService);\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organizationId = params.organizationId;\n await this.load();\n this.firstLoaded = true;\n });\n }\n}\n","export class WebConstants {\n static readonly stripeTestKey = 'pk_test_KPoCfZXu7mznb9uSCPZ2JpTD';\n static readonly stripeLiveKey = 'pk_live_bpN0P37nMxrMQkcaHXtAybJk';\n static readonly btSandboxKey = 'sandbox_r72q8jq6_9pnxkwm75f87sdc2';\n static readonly btProductionKey = 'production_qfbsv8kc_njj2zjtyngtjmbjd';\n static readonly paypal = {\n businessIdProduction: '4ZDA7DLUUJGMN',\n businessIdSandbox: 'AD3LAUZSNVPJY',\n buttonActionProduction: 'https://www.paypal.com/cgi-bin/webscr',\n buttonActionSandbox: 'https://www.sandbox.paypal.com/cgi-bin/webscr',\n };\n}\n","import {\n Component,\n OnInit,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { OrganizationSubscriptionResponse } from 'jslib-common/models/response/organizationSubscriptionResponse';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { PlanType } from 'jslib-common/enums/planType';\n\n@Component({\n selector: 'app-org-subscription',\n templateUrl: 'organization-subscription.component.html',\n})\nexport class OrganizationSubscriptionComponent implements OnInit {\n loading = false;\n firstLoaded = false;\n organizationId: string;\n adjustSeatsAdd = true;\n showAdjustSeats = false;\n adjustStorageAdd = true;\n showAdjustStorage = false;\n showUpdateLicense = false;\n showDownloadLicense = false;\n showChangePlan = false;\n sub: OrganizationSubscriptionResponse;\n selfHosted = false;\n\n cancelPromise: Promise;\n reinstatePromise: Promise;\n\n constructor(private apiService: ApiService, private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService, private toasterService: ToasterService,\n private messagingService: MessagingService, private route: ActivatedRoute) {\n this.selfHosted = platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organizationId = params.organizationId;\n await this.load();\n this.firstLoaded = true;\n });\n }\n\n async load() {\n if (this.loading) {\n return;\n }\n this.loading = true;\n this.sub = await this.apiService.getOrganizationSubscription(this.organizationId);\n this.loading = false;\n }\n\n async reinstate() {\n if (this.loading) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(this.i18nService.t('reinstateConfirmation'),\n this.i18nService.t('reinstateSubscription'), this.i18nService.t('yes'), this.i18nService.t('cancel'));\n if (!confirmed) {\n return;\n }\n\n try {\n this.reinstatePromise = this.apiService.postOrganizationReinstate(this.organizationId);\n await this.reinstatePromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('reinstated'));\n this.load();\n } catch { }\n }\n\n async cancel() {\n if (this.loading) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(this.i18nService.t('cancelConfirmation'),\n this.i18nService.t('cancelSubscription'), this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return;\n }\n\n try {\n this.cancelPromise = this.apiService.postOrganizationCancel(this.organizationId);\n await this.cancelPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('canceledSubscription'));\n this.load();\n } catch { }\n }\n\n async changePlan() {\n if (this.subscription == null && this.sub.planType === PlanType.Free) {\n this.showChangePlan = !this.showChangePlan;\n return;\n }\n const contactSupport = await this.platformUtilsService.showDialog(this.i18nService.t('changeBillingPlanDesc'),\n this.i18nService.t('changeBillingPlan'), this.i18nService.t('contactSupport'), this.i18nService.t('close'));\n if (contactSupport) {\n this.platformUtilsService.launchUri('https://bitwarden.com/contact');\n }\n }\n\n closeChangePlan(changed: boolean) {\n this.showChangePlan = false;\n }\n\n downloadLicense() {\n this.showDownloadLicense = !this.showDownloadLicense;\n }\n\n closeDownloadLicense() {\n this.showDownloadLicense = false;\n }\n\n updateLicense() {\n if (this.loading) {\n return;\n }\n this.showUpdateLicense = true;\n }\n\n closeUpdateLicense(updated: boolean) {\n this.showUpdateLicense = false;\n if (updated) {\n this.load();\n this.messagingService.send('updatedOrgLicense');\n }\n }\n\n adjustSeats(add: boolean) {\n this.adjustSeatsAdd = add;\n this.showAdjustSeats = true;\n }\n\n closeSeats(load: boolean) {\n this.showAdjustSeats = false;\n if (load) {\n this.load();\n }\n }\n\n adjustStorage(add: boolean) {\n this.adjustStorageAdd = add;\n this.showAdjustStorage = true;\n }\n\n closeStorage(load: boolean) {\n this.showAdjustStorage = false;\n if (load) {\n this.load();\n }\n }\n\n get isExpired() {\n return this.sub != null && this.sub.expiration != null &&\n new Date(this.sub.expiration) < new Date();\n }\n\n get subscriptionMarkedForCancel() {\n return this.subscription != null && !this.subscription.cancelled && this.subscription.cancelAtEndDate;\n }\n\n get subscription() {\n return this.sub != null ? this.sub.subscription : null;\n }\n\n get nextInvoice() {\n return this.sub != null ? this.sub.upcomingInvoice : null;\n }\n\n get storagePercentage() {\n return this.sub != null && this.sub.maxStorageGb ?\n +(100 * (this.sub.storageGb / this.sub.maxStorageGb)).toFixed(2) : 0;\n }\n\n get storageProgressWidth() {\n return this.storagePercentage < 5 ? 5 : 0;\n }\n\n get billingInterval() {\n const monthly = !this.sub.plan.isAnnual;\n return monthly ? 'month' : 'year';\n }\n\n get storageGbPrice() {\n return this.sub.plan.additionalStoragePricePerGb;\n }\n\n get seatPrice() {\n return this.sub.plan.seatPrice;\n }\n\n get canAdjustSeats() {\n return this.sub.plan.hasAdditionalSeatsOption;\n }\n\n get canDownloadLicense() {\n return (this.sub.planType !== PlanType.Free && this.subscription == null) ||\n (this.subscription != null && !this.subscription.cancelled);\n }\n}\n","

{{'subscription' | i18n}} {{'loading' | i18n}}

{{'loading' | i18n}} {{'subscriptionCanceled' | i18n}}

{{'subscriptionPendingCanceled' | i18n}}

{{'billingPlan' | i18n}}
{{sub.plan.name}}
{{'expiration' | i18n}}
{{sub.expiration | date:'mediumDate'}} {{'licenseIsExpired' | i18n}}
{{'neverExpires' | i18n}}
{{'billingPlan' | i18n}}
{{sub.plan.name}}
{{'status' | i18n}}
{{subscription.status || '-'}} {{'pendingCancellation' | i18n}}
{{'nextCharge' | i18n}}
{{nextInvoice ? ((nextInvoice.date | date: 'mediumDate') + ', ' + (nextInvoice.amount | currency:'$')) : '-'}}
{{'details' | i18n}}
{{i.name}} {{i.quantity > 1 ? '×' + i.quantity : ''}} @ {{i.amount | currency:'$'}} {{(i.quantity * i.amount) | currency:'$'}} /{{i.interval | i18n}}
{{'manageSubscription' | i18n}}

{{'updateLicense' | i18n}}

{{'userSeats' | i18n}}

{{'subscriptionUserSeats' | i18n : sub.seats}}

{{'storage' | i18n}}

{{'subscriptionStorage' | i18n : sub.maxStorageGb || 0 : sub.storageName || '0 MB'}}

{{(storagePercentage / 100) | percent}}
","import {\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { PlanType } from 'jslib-common/enums/planType';\nimport { ProductType } from 'jslib-common/enums/productType';\n\n@Component({\n selector: 'app-change-plan',\n templateUrl: 'change-plan.component.html',\n})\nexport class ChangePlanComponent {\n @Input() organizationId: string;\n @Output() onChanged = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n formPromise: Promise;\n defaultUpgradePlan: PlanType = PlanType.FamiliesAnnually;\n defaultUpgradeProduct: ProductType = ProductType.Families;\n\n constructor(private apiService: ApiService, private platformUtilsService: PlatformUtilsService) { }\n\n async submit() {\n try {\n this.onChanged.emit();\n } catch { }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n}\n","

{{'changeBillingPlan' | i18n}}

{{'changeBillingPlanUpgrade' | i18n}}

","import {\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\n@Component({\n selector: 'app-download-license',\n templateUrl: 'download-license.component.html',\n})\nexport class DownloadLicenseComponent {\n @Input() organizationId: string;\n @Output() onDownloaded = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n installationId: string;\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private platformUtilsService: PlatformUtilsService) { }\n\n async submit() {\n if (this.installationId == null || this.installationId === '') {\n return;\n }\n\n try {\n this.formPromise = this.apiService.getOrganizationLicense(this.organizationId, this.installationId);\n const license = await this.formPromise;\n const licenseString = JSON.stringify(license, null, 2);\n this.platformUtilsService.saveFile(window, licenseString, null, 'bitwarden_organization_license.json');\n this.onDownloaded.emit();\n } catch { }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n}\n","

{{'downloadLicense' | i18n}}

","import {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\n\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { SeatRequest } from 'jslib-common/models/request/seatRequest';\n\nimport { PaymentComponent } from '../../settings/payment.component';\n\n@Component({\n selector: 'app-adjust-seats',\n templateUrl: 'adjust-seats.component.html',\n})\nexport class AdjustSeatsComponent {\n @Input() seatPrice = 0;\n @Input() add = true;\n @Input() organizationId: string;\n @Input() interval = 'year';\n @Output() onAdjusted = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n @ViewChild(PaymentComponent, { static: true }) paymentComponent: PaymentComponent;\n\n seatAdjustment = 0;\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private router: Router,\n private activatedRoute: ActivatedRoute) { }\n\n async submit() {\n try {\n const request = new SeatRequest();\n request.seatAdjustment = this.seatAdjustment;\n if (!this.add) {\n request.seatAdjustment *= -1;\n }\n\n let paymentFailed = false;\n const action = async () => {\n const result = await this.apiService.postOrganizationSeat(this.organizationId, request);\n if (result != null && result.paymentIntentClientSecret != null) {\n try {\n await this.paymentComponent.handleStripeCardPayment(result.paymentIntentClientSecret, null);\n } catch {\n paymentFailed = true;\n }\n }\n };\n this.formPromise = action();\n await this.formPromise;\n this.onAdjusted.emit(this.seatAdjustment);\n if (paymentFailed) {\n this.toasterService.popAsync({\n body: this.i18nService.t('couldNotChargeCardPayInvoice'),\n type: 'warning',\n timeout: 10000,\n });\n this.router.navigate(['../billing'], { relativeTo: this.activatedRoute });\n } else {\n this.toasterService.popAsync('success', null,\n this.i18nService.t('adjustedSeats', request.seatAdjustment.toString()));\n }\n } catch { }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n\n get adjustedSeatTotal(): number {\n return this.seatAdjustment * this.seatPrice;\n }\n}\n","

{{(add ? 'addSeats' : 'removeSeats') | i18n}}

{{'total' | i18n}}: {{seatAdjustment || 0}} × {{seatPrice | currency:'$'}} = {{adjustedSeatTotal | currency:'$'}} /{{interval | i18n}}
{{(add ? 'seatsAddNote' : 'seatsRemoveNote') | i18n}}
","import { Component } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\n@Component({\n selector: 'app-org-settings',\n templateUrl: 'settings.component.html',\n})\nexport class SettingsComponent {\n access2fa = false;\n selfHosted: boolean;\n\n constructor(private route: ActivatedRoute, private userService: UserService,\n private platformUtilsService: PlatformUtilsService) { }\n\n ngOnInit() {\n this.route.parent.params.subscribe(async params => {\n this.selfHosted = await this.platformUtilsService.isSelfHost();\n const organization = await this.userService.getOrganization(params.organizationId);\n this.access2fa = organization.use2fa;\n });\n }\n}\n"," ","import {\n Component,\n ComponentFactoryResolver,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\n\nimport { TwoFactorDuoComponent } from '../../settings/two-factor-duo.component';\nimport { TwoFactorSetupComponent as BaseTwoFactorSetupComponent } from '../../settings/two-factor-setup.component';\n\n@Component({\n selector: 'app-two-factor-setup',\n templateUrl: '../../settings/two-factor-setup.component.html',\n})\nexport class TwoFactorSetupComponent extends BaseTwoFactorSetupComponent {\n constructor(apiService: ApiService, userService: UserService,\n componentFactoryResolver: ComponentFactoryResolver, messagingService: MessagingService,\n policyService: PolicyService, private route: ActivatedRoute) {\n super(apiService, userService, componentFactoryResolver, messagingService, policyService);\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organizationId = params.organizationId;\n await super.ngOnInit();\n });\n }\n\n manage(type: TwoFactorProviderType) {\n switch (type) {\n case TwoFactorProviderType.OrganizationDuo:\n const duoComp = this.openModal(this.duoModalRef, TwoFactorDuoComponent);\n duoComp.type = TwoFactorProviderType.OrganizationDuo;\n duoComp.organizationId = this.organizationId;\n duoComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.OrganizationDuo);\n });\n break;\n default:\n break;\n }\n }\n\n protected getTwoFactorProviders() {\n return this.apiService.getTwoFactorOrganizationProviders(this.organizationId);\n }\n\n protected filterProvider(type: TwoFactorProviderType) {\n return type !== TwoFactorProviderType.OrganizationDuo;\n }\n}\n","import {\n Component,\n OnDestroy,\n OnInit,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { UpdateTwoFactorAuthenticatorRequest } from 'jslib-common/models/request/updateTwoFactorAuthenticatorRequest';\nimport { TwoFactorAuthenticatorResponse } from 'jslib-common/models/response/twoFactorAuthenticatorResponse';\n\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\n\nimport { TwoFactorBaseComponent } from './two-factor-base.component';\n\n@Component({\n selector: 'app-two-factor-authenticator',\n templateUrl: 'two-factor-authenticator.component.html',\n})\nexport class TwoFactorAuthenticatorComponent extends TwoFactorBaseComponent implements OnInit, OnDestroy {\n type = TwoFactorProviderType.Authenticator;\n key: string;\n token: string;\n formPromise: Promise;\n\n private qrScript: HTMLScriptElement;\n\n constructor(apiService: ApiService, i18nService: I18nService,\n toasterService: ToasterService, private userService: UserService,\n platformUtilsService: PlatformUtilsService) {\n super(apiService, i18nService, toasterService, platformUtilsService);\n this.qrScript = window.document.createElement('script');\n this.qrScript.src = 'scripts/qrious.min.js';\n this.qrScript.async = true;\n }\n\n ngOnInit() {\n window.document.body.appendChild(this.qrScript);\n }\n\n ngOnDestroy() {\n window.document.body.removeChild(this.qrScript);\n }\n\n auth(authResponse: any) {\n super.auth(authResponse);\n return this.processResponse(authResponse.response);\n }\n\n submit() {\n if (this.enabled) {\n return super.disable(this.formPromise);\n } else {\n return this.enable();\n }\n }\n\n protected enable() {\n const request = new UpdateTwoFactorAuthenticatorRequest();\n request.masterPasswordHash = this.masterPasswordHash;\n request.token = this.token;\n request.key = this.key;\n\n return super.enable(async () => {\n this.formPromise = this.apiService.putTwoFactorAuthenticator(request);\n const response = await this.formPromise;\n await this.processResponse(response);\n });\n }\n\n private async processResponse(response: TwoFactorAuthenticatorResponse) {\n this.token = null;\n this.enabled = response.enabled;\n this.key = response.key;\n const email = await this.userService.getEmail();\n window.setTimeout(() => {\n const qr = new (window as any).QRious({\n element: document.getElementById('qr'),\n value: 'otpauth://totp/Bitwarden:' + encodeURIComponent(email) +\n '?secret=' + encodeURIComponent(this.key) + '&issuer=Bitwarden',\n size: 160,\n });\n }, 100);\n }\n}\n","

{{'twoStepLogin' | i18n}} {{'authenticatorAppTitle' | i18n}}

\"\"

{{'twoStepAuthenticatorDesc' | i18n}}

1. {{'twoStepAuthenticatorDownloadApp' | i18n}}

{{'twoStepLoginProviderEnabled' | i18n}}

{{'twoStepAuthenticatorReaddDesc' | i18n}}
\"\"

{{'twoStepAuthenticatorNeedApp' | i18n}}

{{'twoStepAuthenticatorAppsRecommended' | i18n}}

2. {{'twoStepAuthenticatorScanCode' | i18n}}



{{key}}

","import { Component } from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { TwoFactorEmailRequest } from 'jslib-common/models/request/twoFactorEmailRequest';\n\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\nimport { UpdateTwoFactorEmailRequest } from 'jslib-common/models/request/updateTwoFactorEmailRequest';\nimport { TwoFactorEmailResponse } from 'jslib-common/models/response/twoFactorEmailResponse';\n\nimport { TwoFactorBaseComponent } from './two-factor-base.component';\n\n@Component({\n selector: 'app-two-factor-email',\n templateUrl: 'two-factor-email.component.html',\n})\nexport class TwoFactorEmailComponent extends TwoFactorBaseComponent {\n type = TwoFactorProviderType.Email;\n email: string;\n token: string;\n sentEmail: string;\n formPromise: Promise;\n emailPromise: Promise;\n\n constructor(apiService: ApiService, i18nService: I18nService,\n toasterService: ToasterService, platformUtilsService: PlatformUtilsService,\n private userService: UserService) {\n super(apiService, i18nService, toasterService, platformUtilsService);\n }\n\n auth(authResponse: any) {\n super.auth(authResponse);\n return this.processResponse(authResponse.response);\n }\n\n submit() {\n if (this.enabled) {\n return super.disable(this.formPromise);\n } else {\n return this.enable();\n }\n }\n\n async sendEmail() {\n try {\n const request = new TwoFactorEmailRequest(this.email, this.masterPasswordHash);\n this.emailPromise = this.apiService.postTwoFactorEmailSetup(request);\n await this.emailPromise;\n this.sentEmail = this.email;\n } catch { }\n }\n\n protected enable() {\n const request = new UpdateTwoFactorEmailRequest();\n request.masterPasswordHash = this.masterPasswordHash;\n request.email = this.email;\n request.token = this.token;\n\n return super.enable(async () => {\n this.formPromise = this.apiService.putTwoFactorEmail(request);\n const response = await this.formPromise;\n await this.processResponse(response);\n });\n }\n\n private async processResponse(response: TwoFactorEmailResponse) {\n this.token = null;\n this.email = response.email;\n this.enabled = response.enabled;\n if (!this.enabled && (this.email == null || this.email === '')) {\n this.email = await this.userService.getEmail();\n }\n }\n}\n","

{{'twoStepLogin' | i18n}} {{'emailTitle' | i18n}}

{{'twoStepLoginProviderEnabled' | i18n}} {{'email' | i18n}}: {{email}}

{{'twoFactorEmailDesc' | i18n}} \"\"

{{'verificationCodeEmailSent' | i18n : sentEmail}}
","import { Component } from '@angular/core';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { TwoFactorRecoverResponse } from 'jslib-common/models/response/twoFactorRescoverResponse';\n\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\n\n@Component({\n selector: 'app-two-factor-recovery',\n templateUrl: 'two-factor-recovery.component.html',\n})\nexport class TwoFactorRecoveryComponent {\n type = -1;\n code: string;\n authed: boolean;\n twoFactorProviderType = TwoFactorProviderType;\n\n constructor(private i18nService: I18nService) { }\n\n auth(authResponse: any) {\n this.authed = true;\n this.processResponse(authResponse.response);\n }\n\n print() {\n const w = window.open();\n w.document.write('
' +\n '

' + this.i18nService.t('twoFactorRecoveryYourCode') + ':

' +\n '' +\n this.code + '
' +\n '

' + new Date() + '

');\n w.onafterprint = () => w.close();\n w.print();\n }\n\n private formatString(s: string) {\n if (s == null) {\n return null;\n }\n return s.replace(/(.{4})/g, '$1 ').trim().toUpperCase();\n }\n\n private processResponse(response: TwoFactorRecoverResponse) {\n this.code = this.formatString(response.code);\n }\n}\n","

{{'twoStepLogin' | i18n}} {{'recoveryCodeTitle' | i18n}}

{{'twoFactorRecoveryYourCode' | i18n}}:

{{code}}
{{'twoFactorRecoveryNoCode' | i18n}}
","import {\n Component,\n NgZone,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\n\nimport { PasswordVerificationRequest } from 'jslib-common/models/request/passwordVerificationRequest';\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from 'jslib-common/models/request/updateTwoFactorWebAuthnDeleteRequest';\nimport { UpdateTwoFactorWebAuthnRequest } from 'jslib-common/models/request/updateTwoFactorWebAuthnRequest';\nimport {\n ChallengeResponse,\n TwoFactorWebAuthnResponse,\n} from 'jslib-common/models/response/twoFactorWebAuthnResponse';\n\nimport { TwoFactorBaseComponent } from './two-factor-base.component';\n\n@Component({\n selector: 'app-two-factor-webauthn',\n templateUrl: 'two-factor-webauthn.component.html',\n})\nexport class TwoFactorWebAuthnComponent extends TwoFactorBaseComponent {\n type = TwoFactorProviderType.WebAuthn;\n name: string;\n keys: any[];\n keyIdAvailable: number = null;\n keysConfiguredCount = 0;\n webAuthnError: boolean;\n webAuthnListening: boolean;\n webAuthnResponse: PublicKeyCredential;\n challengePromise: Promise;\n formPromise: Promise;\n\n constructor(apiService: ApiService, i18nService: I18nService,\n toasterService: ToasterService, platformUtilsService: PlatformUtilsService,\n private ngZone: NgZone) {\n super(apiService, i18nService, toasterService, platformUtilsService);\n }\n\n auth(authResponse: any) {\n super.auth(authResponse);\n this.processResponse(authResponse.response);\n }\n\n submit() {\n if (this.webAuthnResponse == null || this.keyIdAvailable == null) {\n // Should never happen.\n return Promise.reject();\n }\n const request = new UpdateTwoFactorWebAuthnRequest();\n request.masterPasswordHash = this.masterPasswordHash;\n request.deviceResponse = this.webAuthnResponse;\n request.id = this.keyIdAvailable;\n request.name = this.name;\n\n return super.enable(async () => {\n this.formPromise = this.apiService.putTwoFactorWebAuthn(request);\n const response = await this.formPromise;\n await this.processResponse(response);\n });\n }\n\n disable() {\n return super.disable(this.formPromise);\n }\n\n async remove(key: any) {\n if (this.keysConfiguredCount <= 1 || key.removePromise != null) {\n return;\n }\n const name = key.name != null ? key.name : this.i18nService.t('webAuthnkeyX', key.id);\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('removeU2fConfirmation'), name,\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return;\n }\n const request = new UpdateTwoFactorWebAuthnDeleteRequest();\n request.id = key.id;\n request.masterPasswordHash = this.masterPasswordHash;\n try {\n key.removePromise = this.apiService.deleteTwoFactorWebAuthn(request);\n const response = await key.removePromise;\n key.removePromise = null;\n await this.processResponse(response);\n } catch { }\n }\n\n async readKey() {\n if (this.keyIdAvailable == null) {\n return;\n }\n const request = new PasswordVerificationRequest();\n request.masterPasswordHash = this.masterPasswordHash;\n try {\n this.challengePromise = this.apiService.getTwoFactorWebAuthnChallenge(request);\n const challenge = await this.challengePromise;\n this.readDevice(challenge);\n } catch { }\n }\n\n private readDevice(webAuthnChallenge: ChallengeResponse) {\n // tslint:disable-next-line\n console.log('listening for key...');\n this.resetWebAuthn(true);\n\n navigator.credentials.create({\n publicKey: webAuthnChallenge,\n }).then((data: PublicKeyCredential) => {\n this.ngZone.run(() => {\n this.webAuthnListening = false;\n this.webAuthnResponse = data;\n });\n }).catch(err => {\n // tslint:disable-next-line\n console.error(err);\n this.resetWebAuthn(false);\n // TODO: Should we display the actual error?\n this.webAuthnError = true;\n });\n }\n\n private resetWebAuthn(listening = false) {\n this.webAuthnResponse = null;\n this.webAuthnError = false;\n this.webAuthnListening = listening;\n }\n\n private processResponse(response: TwoFactorWebAuthnResponse) {\n this.resetWebAuthn();\n this.keys = [];\n this.keyIdAvailable = null;\n this.name = null;\n this.keysConfiguredCount = 0;\n for (let i = 1; i <= 5; i++) {\n if (response.keys != null) {\n const key = response.keys.filter(k => k.id === i);\n if (key.length > 0) {\n this.keysConfiguredCount++;\n this.keys.push({\n id: i, name: key[0].name,\n configured: true,\n migrated: key[0].migrated,\n removePromise: null,\n });\n continue;\n }\n }\n this.keys.push({ id: i, name: null, configured: false, removePromise: null });\n if (this.keyIdAvailable == null) {\n this.keyIdAvailable = i;\n }\n }\n this.enabled = response.enabled;\n }\n}\n","

{{'twoStepLogin' | i18n}} {{'webAuthnTitle' | i18n}}

{{'twoStepLoginProviderEnabled' | i18n}}

{{'twoFactorWebAuthnWarning' | i18n}}

  • {{'twoFactorWebAuthnSupportWeb' | i18n}}
\"\"
  • {{'webAuthnkeyX' | i18n : i + 1}} {{k.name}} {{'webAuthnMigrated' | i18n}} 1 && k.configured\"> - {{'remove' | i18n}}

{{'twoFactorWebAuthnAdd' | i18n}}:

  1. {{'twoFactorU2fGiveName' | i18n}}
  2. {{'twoFactorU2fPlugInReadKey' | i18n}}
  3. {{'twoFactorU2fTouchButton' | i18n}}
  4. {{'twoFactorU2fSaveForm' | i18n}}
{{'twoFactorU2fWaiting' | i18n}}... {{'twoFactorU2fClickSave' | i18n}} {{'twoFactorU2fProblemReadingTryAgain' | i18n}}
","import { Component } from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { UpdateTwoFactorYubioOtpRequest } from 'jslib-common/models/request/updateTwoFactorYubioOtpRequest';\nimport { TwoFactorYubiKeyResponse } from 'jslib-common/models/response/twoFactorYubiKeyResponse';\n\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\n\nimport { TwoFactorBaseComponent } from './two-factor-base.component';\n\n@Component({\n selector: 'app-two-factor-yubikey',\n templateUrl: 'two-factor-yubikey.component.html',\n})\nexport class TwoFactorYubiKeyComponent extends TwoFactorBaseComponent {\n type = TwoFactorProviderType.Yubikey;\n keys: any[];\n nfc = false;\n\n formPromise: Promise;\n disablePromise: Promise;\n\n constructor(apiService: ApiService, i18nService: I18nService,\n toasterService: ToasterService, platformUtilsService: PlatformUtilsService) {\n super(apiService, i18nService, toasterService, platformUtilsService);\n }\n\n auth(authResponse: any) {\n super.auth(authResponse);\n this.processResponse(authResponse.response);\n }\n\n submit() {\n const request = new UpdateTwoFactorYubioOtpRequest();\n request.masterPasswordHash = this.masterPasswordHash;\n request.key1 = this.keys != null && this.keys.length > 0 ? this.keys[0].key : null;\n request.key2 = this.keys != null && this.keys.length > 1 ? this.keys[1].key : null;\n request.key3 = this.keys != null && this.keys.length > 2 ? this.keys[2].key : null;\n request.key4 = this.keys != null && this.keys.length > 3 ? this.keys[3].key : null;\n request.key5 = this.keys != null && this.keys.length > 4 ? this.keys[4].key : null;\n request.nfc = this.nfc;\n\n return super.enable(async () => {\n this.formPromise = this.apiService.putTwoFactorYubiKey(request);\n const response = await this.formPromise;\n await this.processResponse(response);\n this.toasterService.popAsync('success', null, this.i18nService.t('yubikeysUpdated'));\n });\n }\n\n disable() {\n return super.disable(this.disablePromise);\n }\n\n remove(key: any) {\n key.existingKey = null;\n key.key = null;\n }\n\n private processResponse(response: TwoFactorYubiKeyResponse) {\n this.enabled = response.enabled;\n this.keys = [\n { key: response.key1, existingKey: this.padRight(response.key1) },\n { key: response.key2, existingKey: this.padRight(response.key2) },\n { key: response.key3, existingKey: this.padRight(response.key3) },\n { key: response.key4, existingKey: this.padRight(response.key4) },\n { key: response.key5, existingKey: this.padRight(response.key5) },\n ];\n this.nfc = response.nfc || !response.enabled;\n }\n\n private padRight(str: string, character = '•', size = 44) {\n if (str == null || character == null || str.length >= size) {\n return str;\n }\n const max = (size - str.length) / character.length;\n for (let i = 0; i < max; i++) {\n str += character;\n }\n return str;\n }\n}\n","

{{'twoStepLogin' | i18n}} YubiKey

{{'twoStepLoginProviderEnabled' | i18n}}

{{'twoFactorYubikeyWarning' | i18n}}

  • {{'twoFactorYubikeySupportUsb' | i18n}}
  • {{'twoFactorYubikeySupportMobile' | i18n}}
\"\"

{{'twoFactorYubikeyAdd' | i18n}}:

  1. {{'twoFactorYubikeyPlugIn' | i18n}}
  2. {{'twoFactorYubikeySelectKey' | i18n}}
  3. {{'twoFactorYubikeyTouchButton' | i18n}}
  4. {{'twoFactorYubikeySaveForm' | i18n}}

{{k.existingKey}}
{{'nfcSupport' | i18n}}
{{'twoFactorYubikeySupportsNfcDesc' | i18n}}
","import { Component } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { EventService } from 'jslib-common/abstractions/event.service';\nimport { ExportService } from 'jslib-common/abstractions/export.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { ExportComponent as BaseExportComponent } from '../../tools/export.component';\n\nimport { EventType } from 'jslib-common/enums/eventType';\n\n@Component({\n selector: 'app-org-export',\n templateUrl: '../../tools/export.component.html',\n})\nexport class ExportComponent extends BaseExportComponent {\n constructor(cryptoService: CryptoService, i18nService: I18nService,\n platformUtilsService: PlatformUtilsService, exportService: ExportService,\n eventService: EventService, private route: ActivatedRoute) {\n super(cryptoService, i18nService, platformUtilsService, exportService, eventService);\n }\n\n ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organizationId = params.organizationId;\n });\n }\n\n getExportData() {\n return this.exportService.getOrganizationExport(this.organizationId, this.format);\n }\n\n getFileName() {\n return super.getFileName('org');\n }\n\n async collectEvent(): Promise {\n // TODO\n // await this.eventService.collect(EventType.Organization_ClientExportedVault);\n }\n}\n","import {\n Component,\n ComponentFactoryResolver,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { AuditService } from 'jslib-common/abstractions/audit.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport {\n ExposedPasswordsReportComponent as BaseExposedPasswordsReportComponent,\n} from '../../tools/exposed-passwords-report.component';\n\nimport { Cipher } from 'jslib-common/models/domain/cipher';\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\n@Component({\n selector: 'app-exposed-passwords-report',\n templateUrl: '../../tools/exposed-passwords-report.component.html',\n})\nexport class ExposedPasswordsReportComponent extends BaseExposedPasswordsReportComponent {\n manageableCiphers: Cipher[];\n\n constructor(cipherService: CipherService, auditService: AuditService,\n componentFactoryResolver: ComponentFactoryResolver, messagingService: MessagingService,\n userService: UserService, private route: ActivatedRoute) {\n super(cipherService, auditService, componentFactoryResolver, messagingService, userService);\n }\n\n ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organization = await this.userService.getOrganization(params.organizationId);\n this.manageableCiphers = await this.cipherService.getAll();\n super.ngOnInit();\n });\n }\n\n getAllCiphers(): Promise {\n return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n }\n\n canManageCipher(c: CipherView): boolean {\n return this.manageableCiphers.some(x => x.id === c.id);\n }\n}\n","import { PasswordHistoryResponse } from '../response/passwordHistoryResponse';\n\nexport class PasswordHistoryData {\n password: string;\n lastUsedDate: string;\n\n constructor(response?: PasswordHistoryResponse) {\n if (response == null) {\n return;\n }\n\n this.password = response.password;\n this.lastUsedDate = response.lastUsedDate;\n }\n}\n","import { View } from './view';\n\nimport { Attachment } from '../domain/attachment';\nimport { SymmetricCryptoKey } from '../domain/symmetricCryptoKey';\n\nexport class AttachmentView implements View {\n id: string = null;\n url: string = null;\n size: string = null;\n sizeName: string = null;\n fileName: string = null;\n key: SymmetricCryptoKey = null;\n\n constructor(a?: Attachment) {\n if (!a) {\n return;\n }\n\n this.id = a.id;\n this.url = a.url;\n this.size = a.size;\n this.sizeName = a.sizeName;\n }\n\n get fileSize(): number {\n try {\n if (this.size != null) {\n return parseInt(this.size, null);\n }\n } catch { }\n return 0;\n }\n}\n","import { PasswordHistoryData } from '../data/passwordHistoryData';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\n\nimport { PasswordHistoryView } from '../view/passwordHistoryView';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class Password extends Domain {\n password: EncString;\n lastUsedDate: Date;\n\n constructor(obj?: PasswordHistoryData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(this, obj, {\n password: null,\n }, alreadyEncrypted);\n this.lastUsedDate = new Date(obj.lastUsedDate);\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return this.decryptObj(new PasswordHistoryView(this), {\n password: null,\n }, orgId, encKey);\n }\n\n toPasswordHistoryData(): PasswordHistoryData {\n const ph = new PasswordHistoryData();\n ph.lastUsedDate = this.lastUsedDate.toISOString();\n this.buildDataModel(this, ph, {\n password: null,\n });\n return ph;\n }\n}\n","import { CipherRequest } from './cipherRequest';\n\nimport { Cipher } from '../domain/cipher';\n\nexport class CipherCreateRequest {\n cipher: CipherRequest;\n collectionIds: string[];\n\n constructor(cipher: Cipher) {\n this.cipher = new CipherRequest(cipher);\n this.collectionIds = cipher.collectionIds;\n }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nexport class CardApi extends BaseResponse {\n cardholderName: string;\n brand: string;\n number: string;\n expMonth: string;\n expYear: string;\n code: string;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.cardholderName = this.getResponseProperty('CardholderName');\n this.brand = this.getResponseProperty('Brand');\n this.number = this.getResponseProperty('Number');\n this.expMonth = this.getResponseProperty('ExpMonth');\n this.expYear = this.getResponseProperty('ExpYear');\n this.code = this.getResponseProperty('Code');\n }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nimport { FieldType } from '../../enums/fieldType';\n\nexport class FieldApi extends BaseResponse {\n name: string;\n value: string;\n type: FieldType;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.type = this.getResponseProperty('Type');\n this.name = this.getResponseProperty('Name');\n this.value = this.getResponseProperty('Value');\n }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nexport class IdentityApi extends BaseResponse {\n title: string;\n firstName: string;\n middleName: string;\n lastName: string;\n address1: string;\n address2: string;\n address3: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n company: string;\n email: string;\n phone: string;\n ssn: string;\n username: string;\n passportNumber: string;\n licenseNumber: string;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.title = this.getResponseProperty('Title');\n this.firstName = this.getResponseProperty('FirstName');\n this.middleName = this.getResponseProperty('MiddleName');\n this.lastName = this.getResponseProperty('LastName');\n this.address1 = this.getResponseProperty('Address1');\n this.address2 = this.getResponseProperty('Address2');\n this.address3 = this.getResponseProperty('Address3');\n this.city = this.getResponseProperty('City');\n this.state = this.getResponseProperty('State');\n this.postalCode = this.getResponseProperty('PostalCode');\n this.country = this.getResponseProperty('Country');\n this.company = this.getResponseProperty('Company');\n this.email = this.getResponseProperty('Email');\n this.phone = this.getResponseProperty('Phone');\n this.ssn = this.getResponseProperty('SSN');\n this.username = this.getResponseProperty('Username');\n this.passportNumber = this.getResponseProperty('PassportNumber');\n this.licenseNumber = this.getResponseProperty('LicenseNumber');\n }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nimport { LoginUriApi } from './loginUriApi';\n\nexport class LoginApi extends BaseResponse {\n uris: LoginUriApi[];\n username: string;\n password: string;\n passwordRevisionDate: string;\n totp: string;\n autofillOnPageLoad: boolean;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.username = this.getResponseProperty('Username');\n this.password = this.getResponseProperty('Password');\n this.passwordRevisionDate = this.getResponseProperty('PasswordRevisionDate');\n this.totp = this.getResponseProperty('Totp');\n this.autofillOnPageLoad = this.getResponseProperty('AutofillOnPageLoad');\n\n const uris = this.getResponseProperty('Uris');\n if (uris != null) {\n this.uris = uris.map((u: any) => new LoginUriApi(u));\n }\n }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nimport { UriMatchType } from '../../enums/uriMatchType';\n\nexport class LoginUriApi extends BaseResponse {\n uri: string;\n match: UriMatchType = null;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.uri = this.getResponseProperty('Uri');\n const match = this.getResponseProperty('Match');\n this.match = match != null ? match : null;\n }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nimport { SecureNoteType } from '../../enums/secureNoteType';\n\nexport class SecureNoteApi extends BaseResponse {\n type: SecureNoteType;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.type = this.getResponseProperty('Type');\n }\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n Input,\n} from '@angular/core';\n\n@Directive({\n selector: '[appFallbackSrc]',\n})\nexport class FallbackSrcDirective {\n @Input('appFallbackSrc') appFallbackSrc: string;\n\n constructor(private el: ElementRef) {\n }\n\n @HostListener('error') onError() {\n this.el.nativeElement.src = this.appFallbackSrc;\n }\n}\n","import { Component } from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { ImportService } from 'jslib-common/abstractions/import.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { ImportComponent as BaseImportComponent } from '../../tools/import.component';\n\n@Component({\n selector: 'app-org-import',\n templateUrl: '../../tools/import.component.html',\n})\nexport class ImportComponent extends BaseImportComponent {\n organizationName: string;\n\n constructor(i18nService: I18nService, toasterService: ToasterService,\n importService: ImportService, router: Router, private route: ActivatedRoute,\n platformUtilsService: PlatformUtilsService,\n private userService: UserService) {\n super(i18nService, toasterService, importService, router, platformUtilsService);\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organizationId = params.organizationId;\n this.successNavigate = ['organizations', this.organizationId, 'vault'];\n super.ngOnInit();\n });\n const organization = await this.userService.getOrganization(this.organizationId);\n this.organizationName = organization.name;\n }\n\n async submit() {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('importWarning', this.organizationName),\n this.i18nService.t('warning'), this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return;\n }\n super.submit();\n }\n}\n","import {\n Component,\n ComponentFactoryResolver,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport {\n InactiveTwoFactorReportComponent as BaseInactiveTwoFactorReportComponent,\n} from '../../tools/inactive-two-factor-report.component';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\n@Component({\n selector: 'app-inactive-two-factor-report',\n templateUrl: '../../tools/inactive-two-factor-report.component.html',\n})\nexport class InactiveTwoFactorReportComponent extends BaseInactiveTwoFactorReportComponent {\n constructor(cipherService: CipherService, componentFactoryResolver: ComponentFactoryResolver,\n messagingService: MessagingService, userService: UserService,\n private route: ActivatedRoute) {\n super(cipherService, componentFactoryResolver, messagingService, userService);\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organization = await this.userService.getOrganization(params.organizationId);\n await super.ngOnInit();\n });\n }\n\n getAllCiphers(): Promise {\n return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n }\n}\n","import {\n Component,\n ComponentFactoryResolver,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { Cipher } from 'jslib-common/models/domain/cipher';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nimport {\n ReusedPasswordsReportComponent as BaseReusedPasswordsReportComponent,\n} from '../../tools/reused-passwords-report.component';\n\n@Component({\n selector: 'app-reused-passwords-report',\n templateUrl: '../../tools/reused-passwords-report.component.html',\n})\nexport class ReusedPasswordsReportComponent extends BaseReusedPasswordsReportComponent {\n manageableCiphers: Cipher[];\n\n constructor(cipherService: CipherService, componentFactoryResolver: ComponentFactoryResolver,\n messagingService: MessagingService, userService: UserService,\n private route: ActivatedRoute) {\n super(cipherService, componentFactoryResolver, messagingService, userService);\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organization = await this.userService.getOrganization(params.organizationId);\n this.manageableCiphers = await this.cipherService.getAll();\n await super.ngOnInit();\n });\n }\n\n getAllCiphers(): Promise {\n return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n }\n\n canManageCipher(c: CipherView): boolean {\n return this.manageableCiphers.some(x => x.id === c.id);\n }\n}\n","import { Component } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\n\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\n@Component({\n selector: 'app-org-tools',\n templateUrl: 'tools.component.html',\n})\nexport class ToolsComponent {\n organization: Organization;\n accessReports = false;\n loading = true;\n\n constructor(private route: ActivatedRoute, private userService: UserService,\n private messagingService: MessagingService) { }\n\n ngOnInit() {\n this.route.parent.params.subscribe(async params => {\n this.organization = await this.userService.getOrganization(params.organizationId);\n // TODO: Maybe we want to just make sure they are not on a free plan? Just compare useTotp for now\n // since all paid plans include useTotp\n this.accessReports = this.organization.useTotp;\n this.loading = false;\n });\n }\n\n upgradeOrganization() {\n this.messagingService.send('upgradeOrganization', { organizationId: this.organization.id });\n }\n}\n"," ","import {\n Component,\n ComponentFactoryResolver,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport {\n UnsecuredWebsitesReportComponent as BaseUnsecuredWebsitesReportComponent,\n} from '../../tools/unsecured-websites-report.component';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\n@Component({\n selector: 'app-unsecured-websites-report',\n templateUrl: '../../tools/unsecured-websites-report.component.html',\n})\nexport class UnsecuredWebsitesReportComponent extends BaseUnsecuredWebsitesReportComponent {\n constructor(cipherService: CipherService, componentFactoryResolver: ComponentFactoryResolver,\n messagingService: MessagingService, userService: UserService,\n private route: ActivatedRoute) {\n super(cipherService, componentFactoryResolver, messagingService, userService);\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organization = await this.userService.getOrganization(params.organizationId);\n await super.ngOnInit();\n });\n }\n\n getAllCiphers(): Promise {\n return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n }\n}\n","import {\n Component,\n ComponentFactoryResolver,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { Cipher } from 'jslib-common/models/domain/cipher';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nimport {\n WeakPasswordsReportComponent as BaseWeakPasswordsReportComponent,\n} from '../../tools/weak-passwords-report.component';\n\n@Component({\n selector: 'app-weak-passwords-report',\n templateUrl: '../../tools/weak-passwords-report.component.html',\n})\nexport class WeakPasswordsReportComponent extends BaseWeakPasswordsReportComponent {\n manageableCiphers: Cipher[];\n\n constructor(cipherService: CipherService, passwordGenerationService: PasswordGenerationService,\n componentFactoryResolver: ComponentFactoryResolver, messagingService: MessagingService,\n userService: UserService, private route: ActivatedRoute) {\n super(cipherService, passwordGenerationService, componentFactoryResolver, messagingService, userService);\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async params => {\n this.organization = await this.userService.getOrganization(params.organizationId);\n this.manageableCiphers = await this.cipherService.getAll();\n await super.ngOnInit();\n });\n }\n\n getAllCiphers(): Promise {\n return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n }\n\n canManageCipher(c: CipherView): boolean {\n return this.manageableCiphers.some(x => x.id === c.id);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ComponentFactoryResolver,\n NgZone,\n OnDestroy,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { BroadcasterService } from 'jslib-angular/services/broadcaster.service';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nimport { CipherType } from 'jslib-common/enums/cipherType';\n\nimport { ModalComponent } from '../../modal.component';\n\nimport { EntityEventsComponent } from '../manage/entity-events.component';\nimport { AddEditComponent } from './add-edit.component';\nimport { AttachmentsComponent } from './attachments.component';\nimport { CiphersComponent } from './ciphers.component';\nimport { CollectionsComponent } from './collections.component';\nimport { GroupingsComponent } from './groupings.component';\n\nconst BroadcasterSubscriptionId = 'OrgVaultComponent';\n\n@Component({\n selector: 'app-org-vault',\n templateUrl: 'vault.component.html',\n})\nexport class VaultComponent implements OnInit, OnDestroy {\n @ViewChild(GroupingsComponent, { static: true }) groupingsComponent: GroupingsComponent;\n @ViewChild(CiphersComponent, { static: true }) ciphersComponent: CiphersComponent;\n @ViewChild('attachments', { read: ViewContainerRef, static: true }) attachmentsModalRef: ViewContainerRef;\n @ViewChild('cipherAddEdit', { read: ViewContainerRef, static: true }) cipherAddEditModalRef: ViewContainerRef;\n @ViewChild('collections', { read: ViewContainerRef, static: true }) collectionsModalRef: ViewContainerRef;\n @ViewChild('eventsTemplate', { read: ViewContainerRef, static: true }) eventsModalRef: ViewContainerRef;\n\n organization: Organization;\n collectionId: string = null;\n type: CipherType = null;\n deleted: boolean = false;\n trashCleanupWarning: string = null;\n\n modal: ModalComponent = null;\n\n constructor(private route: ActivatedRoute, private userService: UserService,\n private router: Router, private changeDetectorRef: ChangeDetectorRef,\n private syncService: SyncService, private i18nService: I18nService,\n private componentFactoryResolver: ComponentFactoryResolver, private messagingService: MessagingService,\n private broadcasterService: BroadcasterService, private ngZone: NgZone,\n private platformUtilsService: PlatformUtilsService) { }\n\n ngOnInit() {\n this.trashCleanupWarning = this.i18nService.t(\n this.platformUtilsService.isSelfHost() ? 'trashCleanupWarningSelfHosted' : 'trashCleanupWarning'\n );\n\n const queryParams = this.route.parent.params.subscribe(async params => {\n this.organization = await this.userService.getOrganization(params.organizationId);\n this.groupingsComponent.organization = this.organization;\n this.ciphersComponent.organization = this.organization;\n\n const queryParamsSub = this.route.queryParams.subscribe(async qParams => {\n this.ciphersComponent.searchText = this.groupingsComponent.searchText = qParams.search;\n if (!this.organization.canManageAllCollections) {\n await this.syncService.fullSync(false);\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case 'syncCompleted':\n if (message.successfully) {\n await Promise.all([\n this.groupingsComponent.load(),\n this.ciphersComponent.refresh(),\n ]);\n this.changeDetectorRef.detectChanges();\n }\n break;\n }\n });\n });\n }\n await this.groupingsComponent.load();\n\n if (qParams == null) {\n this.groupingsComponent.selectedAll = true;\n await this.ciphersComponent.reload();\n } else {\n if (qParams.deleted) {\n this.groupingsComponent.selectedTrash = true;\n await this.filterDeleted(true);\n } else if (qParams.type) {\n const t = parseInt(qParams.type, null);\n this.groupingsComponent.selectedType = t;\n await this.filterCipherType(t, true);\n } else if (qParams.collectionId) {\n this.groupingsComponent.selectedCollectionId = qParams.collectionId;\n await this.filterCollection(qParams.collectionId, true);\n } else {\n this.groupingsComponent.selectedAll = true;\n await this.ciphersComponent.reload();\n }\n }\n\n if (qParams.viewEvents != null) {\n const cipher = this.ciphersComponent.ciphers.filter(c => c.id === qParams.viewEvents);\n if (cipher.length > 0) {\n this.viewEvents(cipher[0]);\n }\n }\n\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n\n if (queryParams != null) {\n queryParams.unsubscribe();\n }\n });\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n async clearGroupingFilters() {\n this.ciphersComponent.showAddNew = true;\n this.ciphersComponent.deleted = false;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchVault');\n await this.ciphersComponent.applyFilter();\n this.clearFilters();\n this.go();\n }\n\n async filterCipherType(type: CipherType, load = false) {\n this.ciphersComponent.showAddNew = true;\n this.ciphersComponent.deleted = false;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchType');\n const filter = (c: CipherView) => c.type === type;\n if (load) {\n await this.ciphersComponent.reload(filter);\n } else {\n await this.ciphersComponent.applyFilter(filter);\n }\n this.clearFilters();\n this.type = type;\n this.go();\n }\n\n async filterCollection(collectionId: string, load = false) {\n this.ciphersComponent.showAddNew = true;\n this.ciphersComponent.deleted = false;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchCollection');\n const filter = (c: CipherView) => {\n if (collectionId === 'unassigned') {\n return c.collectionIds == null || c.collectionIds.length === 0;\n } else {\n return c.collectionIds != null && c.collectionIds.indexOf(collectionId) > -1;\n }\n };\n if (load) {\n await this.ciphersComponent.reload(filter);\n } else {\n await this.ciphersComponent.applyFilter(filter);\n }\n this.clearFilters();\n this.collectionId = collectionId;\n this.go();\n }\n\n async filterDeleted(load: boolean = false) {\n this.ciphersComponent.showAddNew = false;\n this.ciphersComponent.deleted = true;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchTrash');\n if (load) {\n await this.ciphersComponent.reload(null, true);\n } else {\n await this.ciphersComponent.applyFilter(null);\n }\n this.clearFilters();\n this.deleted = true;\n this.go();\n }\n\n filterSearchText(searchText: string) {\n this.ciphersComponent.searchText = searchText;\n this.ciphersComponent.search(200);\n }\n\n editCipherAttachments(cipher: CipherView) {\n if (this.organization.maxStorageGb == null || this.organization.maxStorageGb === 0) {\n this.messagingService.send('upgradeOrganization', { organizationId: cipher.organizationId });\n return;\n }\n\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.attachmentsModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(AttachmentsComponent, this.attachmentsModalRef);\n\n childComponent.organization = this.organization;\n childComponent.cipherId = cipher.id;\n let madeAttachmentChanges = false;\n childComponent.onUploadedAttachment.subscribe(() => madeAttachmentChanges = true);\n childComponent.onDeletedAttachment.subscribe(() => madeAttachmentChanges = true);\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n if (madeAttachmentChanges) {\n await this.ciphersComponent.refresh();\n }\n madeAttachmentChanges = false;\n });\n }\n\n editCipherCollections(cipher: CipherView) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.collectionsModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(CollectionsComponent, this.collectionsModalRef);\n\n if (this.organization.canManageAllCollections) {\n childComponent.collectionIds = cipher.collectionIds;\n childComponent.collections = this.groupingsComponent.collections.filter(c => !c.readOnly);\n }\n childComponent.organization = this.organization;\n childComponent.cipherId = cipher.id;\n childComponent.onSavedCollections.subscribe(async () => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n addCipher() {\n const component = this.editCipher(null);\n component.organizationId = this.organization.id;\n component.type = this.type;\n if (this.organization.canManageAllCollections) {\n component.collections = this.groupingsComponent.collections.filter(c => !c.readOnly);\n }\n if (this.collectionId != null) {\n component.collectionIds = [this.collectionId];\n }\n }\n\n editCipher(cipher: CipherView) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.cipherAddEditModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(AddEditComponent, this.cipherAddEditModalRef);\n\n childComponent.organization = this.organization;\n childComponent.cipherId = cipher == null ? null : cipher.id;\n childComponent.onSavedCipher.subscribe(async (c: CipherView) => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n childComponent.onDeletedCipher.subscribe(async (c: CipherView) => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n childComponent.onRestoredCipher.subscribe(async (c: CipherView) => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n\n return childComponent;\n }\n\n cloneCipher(cipher: CipherView) {\n const component = this.editCipher(cipher);\n component.cloneMode = true;\n component.organizationId = this.organization.id;\n if (this.organization.canManageAllCollections) {\n component.collections = this.groupingsComponent.collections.filter(c => !c.readOnly);\n }\n // Regardless of Admin state, the collection Ids need to passed manually as they are not assigned value\n // in the add-edit componenet\n component.collectionIds = cipher.collectionIds;\n }\n\n async viewEvents(cipher: CipherView) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.eventsModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n EntityEventsComponent, this.eventsModalRef);\n\n childComponent.name = cipher.name;\n childComponent.organizationId = this.organization.id;\n childComponent.entityId = cipher.id;\n childComponent.showUser = true;\n childComponent.entity = 'cipher';\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n private clearFilters() {\n this.collectionId = null;\n this.type = null;\n this.deleted = false;\n }\n\n private go(queryParams: any = null) {\n if (queryParams == null) {\n queryParams = {\n type: this.type,\n collectionId: this.collectionId,\n deleted: this.deleted ? true : null,\n };\n }\n\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: queryParams,\n replaceUrl: true,\n });\n }\n}\n","

{{'vault' | i18n}} {{'loading' | i18n}}

{{trashCleanupWarning}}
","import { Component } from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { CipherData } from 'jslib-common/models/data/cipherData';\nimport { Cipher } from 'jslib-common/models/domain/cipher';\nimport { Organization } from 'jslib-common/models/domain/organization';\n\nimport { AttachmentView } from 'jslib-common/models/view/attachmentView';\n\nimport { AttachmentsComponent as BaseAttachmentsComponent } from '../../vault/attachments.component';\n\n@Component({\n selector: 'app-org-vault-attachments',\n templateUrl: '../../vault/attachments.component.html',\n})\nexport class AttachmentsComponent extends BaseAttachmentsComponent {\n viewOnly = false;\n organization: Organization;\n\n constructor(cipherService: CipherService, i18nService: I18nService,\n cryptoService: CryptoService, userService: UserService,\n platformUtilsService: PlatformUtilsService, apiService: ApiService) {\n super(cipherService, i18nService, cryptoService, userService, platformUtilsService, apiService);\n }\n\n protected async reupload(attachment: AttachmentView) {\n if (this.organization.canManageAllCollections && this.showFixOldAttachments(attachment)) {\n await super.reuploadCipherAttachment(attachment, true);\n }\n }\n\n protected async loadCipher() {\n if (!this.organization.canManageAllCollections) {\n return await super.loadCipher();\n }\n const response = await this.apiService.getCipherAdmin(this.cipherId);\n return new Cipher(new CipherData(response));\n }\n\n protected saveCipherAttachment(file: File) {\n return this.cipherService.saveAttachmentWithServer(this.cipherDomain, file, this.organization.canManageAllCollections);\n }\n\n protected deleteCipherAttachment(attachmentId: string) {\n if (!this.organization.canManageAllCollections) {\n return super.deleteCipherAttachment(attachmentId);\n }\n return this.apiService.deleteCipherAttachmentAdmin(this.cipherId, attachmentId);\n }\n\n protected showFixOldAttachments(attachment: AttachmentView) {\n return attachment.key == null && this.organization.canManageAllCollections;\n }\n}\n","import {\n Directive,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { Cipher } from 'jslib-common/models/domain/cipher';\nimport { ErrorResponse } from 'jslib-common/models/response';\n\nimport { AttachmentView } from 'jslib-common/models/view/attachmentView';\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\n@Directive()\nexport class AttachmentsComponent implements OnInit {\n @Input() cipherId: string;\n @Output() onUploadedAttachment = new EventEmitter();\n @Output() onDeletedAttachment = new EventEmitter();\n @Output() onReuploadedAttachment = new EventEmitter();\n\n cipher: CipherView;\n cipherDomain: Cipher;\n hasUpdatedKey: boolean;\n canAccessAttachments: boolean;\n formPromise: Promise;\n deletePromises: { [id: string]: Promise; } = {};\n reuploadPromises: { [id: string]: Promise; } = {};\n emergencyAccessId?: string = null;\n\n constructor(protected cipherService: CipherService, protected i18nService: I18nService,\n protected cryptoService: CryptoService, protected userService: UserService,\n protected platformUtilsService: PlatformUtilsService, protected apiService: ApiService,\n protected win: Window) { }\n\n async ngOnInit() {\n await this.init();\n }\n\n async submit() {\n if (!this.hasUpdatedKey) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('updateKey'));\n return;\n }\n\n const fileEl = document.getElementById('file') as HTMLInputElement;\n const files = fileEl.files;\n if (files == null || files.length === 0) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('selectFile'));\n return;\n }\n\n if (files[0].size > 524288000) { // 500 MB\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('maxFileSize'));\n return;\n }\n\n try {\n this.formPromise = this.saveCipherAttachment(files[0]);\n this.cipherDomain = await this.formPromise;\n this.cipher = await this.cipherDomain.decrypt();\n this.platformUtilsService.showToast('success', null, this.i18nService.t('attachmentSaved'));\n this.onUploadedAttachment.emit();\n } catch { }\n\n // reset file input\n // ref: https://stackoverflow.com/a/20552042\n fileEl.type = '';\n fileEl.type = 'file';\n fileEl.value = '';\n }\n\n async delete(attachment: AttachmentView) {\n if (this.deletePromises[attachment.id] != null) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('deleteAttachmentConfirmation'), this.i18nService.t('deleteAttachment'),\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return;\n }\n\n try {\n this.deletePromises[attachment.id] = this.deleteCipherAttachment(attachment.id);\n await this.deletePromises[attachment.id];\n this.platformUtilsService.showToast('success', null, this.i18nService.t('deletedAttachment'));\n const i = this.cipher.attachments.indexOf(attachment);\n if (i > -1) {\n this.cipher.attachments.splice(i, 1);\n }\n } catch { }\n\n this.deletePromises[attachment.id] = null;\n this.onDeletedAttachment.emit();\n }\n\n async download(attachment: AttachmentView) {\n const a = (attachment as any);\n if (a.downloading) {\n return;\n }\n\n if (!this.canAccessAttachments) {\n this.platformUtilsService.showToast('error', this.i18nService.t('premiumRequired'),\n this.i18nService.t('premiumRequiredDesc'));\n return;\n }\n\n let url: string;\n try {\n const attachmentDownloadResponse = await this.apiService.getAttachmentData(this.cipher.id, attachment.id,\n this.emergencyAccessId);\n url = attachmentDownloadResponse.url;\n } catch (e) {\n if (e instanceof ErrorResponse && (e as ErrorResponse).statusCode === 404) {\n url = attachment.url;\n } else if (e instanceof ErrorResponse) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n } else {\n throw e;\n }\n }\n\n a.downloading = true;\n const response = await fetch(new Request(url, { cache: 'no-store' }));\n if (response.status !== 200) {\n this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred'));\n a.downloading = false;\n return;\n }\n\n try {\n const buf = await response.arrayBuffer();\n const key = attachment.key != null ? attachment.key :\n await this.cryptoService.getOrgKey(this.cipher.organizationId);\n const decBuf = await this.cryptoService.decryptFromBytes(buf, key);\n this.platformUtilsService.saveFile(this.win, decBuf, null, attachment.fileName);\n } catch (e) {\n this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred'));\n }\n\n a.downloading = false;\n }\n\n protected async init() {\n this.cipherDomain = await this.loadCipher();\n this.cipher = await this.cipherDomain.decrypt();\n\n this.hasUpdatedKey = await this.cryptoService.hasEncKey();\n const canAccessPremium = await this.userService.canAccessPremium();\n this.canAccessAttachments = canAccessPremium || this.cipher.organizationId != null;\n\n if (!this.canAccessAttachments) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('premiumRequiredDesc'), this.i18nService.t('premiumRequired'),\n this.i18nService.t('learnMore'), this.i18nService.t('cancel'));\n if (confirmed) {\n this.platformUtilsService.launchUri('https://vault.bitwarden.com/#/?premium=purchase');\n }\n } else if (!this.hasUpdatedKey) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('updateKey'), this.i18nService.t('featureUnavailable'),\n this.i18nService.t('learnMore'), this.i18nService.t('cancel'), 'warning');\n if (confirmed) {\n this.platformUtilsService.launchUri('https://help.bitwarden.com/article/update-encryption-key/');\n }\n }\n }\n\n protected async reuploadCipherAttachment(attachment: AttachmentView, admin: boolean) {\n const a = (attachment as any);\n if (attachment.key != null || a.downloading || this.reuploadPromises[attachment.id] != null) {\n return;\n }\n\n try {\n this.reuploadPromises[attachment.id] = Promise.resolve().then(async () => {\n // 1. Download\n a.downloading = true;\n const response = await fetch(new Request(attachment.url, { cache: 'no-store' }));\n if (response.status !== 200) {\n this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred'));\n a.downloading = false;\n return;\n }\n\n try {\n // 2. Resave\n const buf = await response.arrayBuffer();\n const key = attachment.key != null ? attachment.key :\n await this.cryptoService.getOrgKey(this.cipher.organizationId);\n const decBuf = await this.cryptoService.decryptFromBytes(buf, key);\n this.cipherDomain = await this.cipherService.saveAttachmentRawWithServer(\n this.cipherDomain, attachment.fileName, decBuf, admin);\n this.cipher = await this.cipherDomain.decrypt();\n\n // 3. Delete old\n this.deletePromises[attachment.id] = this.deleteCipherAttachment(attachment.id);\n await this.deletePromises[attachment.id];\n const foundAttachment = this.cipher.attachments.filter(a2 => a2.id === attachment.id);\n if (foundAttachment.length > 0) {\n const i = this.cipher.attachments.indexOf(foundAttachment[0]);\n if (i > -1) {\n this.cipher.attachments.splice(i, 1);\n }\n }\n\n this.platformUtilsService.showToast('success', null, this.i18nService.t('attachmentSaved'));\n this.onReuploadedAttachment.emit();\n } catch (e) {\n this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred'));\n }\n\n a.downloading = false;\n });\n await this.reuploadPromises[attachment.id];\n } catch { }\n }\n\n protected loadCipher() {\n return this.cipherService.get(this.cipherId);\n }\n\n protected saveCipherAttachment(file: File) {\n return this.cipherService.saveAttachmentWithServer(this.cipherDomain, file);\n }\n\n protected deleteCipherAttachment(attachmentId: string) {\n return this.cipherService.deleteAttachmentWithServer(this.cipher.id, attachmentId);\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class GlobalDomainResponse extends BaseResponse {\n type: number;\n domains: string[];\n excluded: boolean;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty('Type');\n this.domains = this.getResponseProperty('Domains');\n this.excluded = this.getResponseProperty('Excluded');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { KdfType } from '../../enums/kdfType';\n\nexport class IdentityTokenResponse extends BaseResponse {\n accessToken: string;\n expiresIn: number;\n refreshToken: string;\n tokenType: string;\n\n resetMasterPassword: boolean;\n privateKey: string;\n key: string;\n twoFactorToken: string;\n kdf: KdfType;\n kdfIterations: number;\n\n constructor(response: any) {\n super(response);\n this.accessToken = response.access_token;\n this.expiresIn = response.expires_in;\n this.refreshToken = response.refresh_token;\n this.tokenType = response.token_type;\n\n this.resetMasterPassword = this.getResponseProperty('ResetMasterPassword');\n this.privateKey = this.getResponseProperty('PrivateKey');\n this.key = this.getResponseProperty('Key');\n this.twoFactorToken = this.getResponseProperty('TwoFactorToken');\n this.kdf = this.getResponseProperty('Kdf');\n this.kdfIterations = this.getResponseProperty('KdfIterations');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { TwoFactorProviderType } from '../../enums/twoFactorProviderType';\n\nexport class IdentityTwoFactorResponse extends BaseResponse {\n twoFactorProviders: TwoFactorProviderType[];\n twoFactorProviders2 = new Map();\n\n constructor(response: any) {\n super(response);\n this.twoFactorProviders = this.getResponseProperty('TwoFactorProviders');\n const twoFactorProviders2 = this.getResponseProperty('TwoFactorProviders2');\n if (twoFactorProviders2 != null) {\n for (const prop in twoFactorProviders2) {\n if (twoFactorProviders2.hasOwnProperty(prop)) {\n this.twoFactorProviders2.set(parseInt(prop, null), twoFactorProviders2[prop]);\n }\n }\n }\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class KeysResponse extends BaseResponse {\n privateKey: string;\n publicKey: string;\n\n constructor(response: any) {\n super(response);\n this.privateKey = this.getResponseProperty('PrivateKey');\n this.publicKey = this.getResponseProperty('PublicKey');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class ListResponse extends BaseResponse {\n data: T[];\n continuationToken: string;\n\n constructor(response: any, t: new (dataResponse: any) => T) {\n super(response);\n const data = this.getResponseProperty('Data');\n this.data = data == null ? [] : data.map((dr: any) => new t(dr));\n this.continuationToken = this.getResponseProperty('ContinuationToken');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { OrganizationUserStatusType } from '../../enums/organizationUserStatusType';\nimport { OrganizationUserType } from '../../enums/organizationUserType';\nimport { PermissionsApi } from '../api/permissionsApi';\n\nexport class ProfileOrganizationResponse extends BaseResponse {\n id: string;\n name: string;\n usePolicies: boolean;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useBusinessPortal: boolean;\n useSso: boolean;\n useResetPassword: boolean;\n selfHost: boolean;\n usersGetPremium: boolean;\n seats: number;\n maxCollections: number;\n maxStorageGb?: number;\n key: string;\n hasPublicAndPrivateKeys: boolean;\n status: OrganizationUserStatusType;\n type: OrganizationUserType;\n enabled: boolean;\n ssoBound: boolean;\n identifier: string;\n permissions: PermissionsApi;\n resetPasswordEnrolled: boolean;\n userId: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.name = this.getResponseProperty('Name');\n this.usePolicies = this.getResponseProperty('UsePolicies');\n this.useGroups = this.getResponseProperty('UseGroups');\n this.useDirectory = this.getResponseProperty('UseDirectory');\n this.useEvents = this.getResponseProperty('UseEvents');\n this.useTotp = this.getResponseProperty('UseTotp');\n this.use2fa = this.getResponseProperty('Use2fa');\n this.useApi = this.getResponseProperty('UseApi');\n this.useBusinessPortal = this.getResponseProperty('UseBusinessPortal');\n this.useSso = this.getResponseProperty('UseSso');\n this.useResetPassword = this.getResponseProperty('UseResetPassword');\n this.selfHost = this.getResponseProperty('SelfHost');\n this.usersGetPremium = this.getResponseProperty('UsersGetPremium');\n this.seats = this.getResponseProperty('Seats');\n this.maxCollections = this.getResponseProperty('MaxCollections');\n this.maxStorageGb = this.getResponseProperty('MaxStorageGb');\n this.key = this.getResponseProperty('Key');\n this.hasPublicAndPrivateKeys = this.getResponseProperty('HasPublicAndPrivateKeys');\n this.status = this.getResponseProperty('Status');\n this.type = this.getResponseProperty('Type');\n this.enabled = this.getResponseProperty('Enabled');\n this.ssoBound = this.getResponseProperty('SsoBound');\n this.identifier = this.getResponseProperty('Identifier');\n this.permissions = new PermissionsApi(this.getResponseProperty('permissions'));\n this.resetPasswordEnrolled = this.getResponseProperty('ResetPasswordEnrolled');\n this.userId = this.getResponseProperty('UserId');\n }\n}\n","import { BaseResponse } from './baseResponse';\nimport { CipherResponse } from './cipherResponse';\nimport { CollectionDetailsResponse } from './collectionResponse';\nimport { DomainsResponse } from './domainsResponse';\nimport { FolderResponse } from './folderResponse';\nimport { PolicyResponse } from './policyResponse';\nimport { ProfileResponse } from './profileResponse';\nimport { SendResponse } from './sendResponse';\n\nexport class SyncResponse extends BaseResponse {\n profile?: ProfileResponse;\n folders: FolderResponse[] = [];\n collections: CollectionDetailsResponse[] = [];\n ciphers: CipherResponse[] = [];\n domains?: DomainsResponse;\n policies?: PolicyResponse[] = [];\n sends: SendResponse[] = [];\n\n constructor(response: any) {\n super(response);\n\n const profile = this.getResponseProperty('Profile');\n if (profile != null) {\n this.profile = new ProfileResponse(profile);\n }\n\n const folders = this.getResponseProperty('Folders');\n if (folders != null) {\n this.folders = folders.map((f: any) => new FolderResponse(f));\n }\n\n const collections = this.getResponseProperty('Collections');\n if (collections != null) {\n this.collections = collections.map((c: any) => new CollectionDetailsResponse(c));\n }\n\n const ciphers = this.getResponseProperty('Ciphers');\n if (ciphers != null) {\n this.ciphers = ciphers.map((c: any) => new CipherResponse(c));\n }\n\n const domains = this.getResponseProperty('Domains');\n if (domains != null) {\n this.domains = new DomainsResponse(domains);\n }\n\n const policies = this.getResponseProperty('Policies');\n if (policies != null) {\n this.policies = policies.map((p: any) => new PolicyResponse(p));\n }\n\n const sends = this.getResponseProperty('Sends');\n if (sends != null) {\n this.sends = sends.map((s: any) => new SendResponse(s));\n }\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { PolicyType } from '../../enums/policyType';\n\nexport class PolicyResponse extends BaseResponse {\n id: string;\n organizationId: string;\n type: PolicyType;\n data: any;\n enabled: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.organizationId = this.getResponseProperty('OrganizationId');\n this.type = this.getResponseProperty('Type');\n this.data = this.getResponseProperty('Data');\n this.enabled = this.getResponseProperty('Enabled');\n }\n}\n","import { Component } from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { CipherData } from 'jslib-common/models/data/cipherData';\nimport { Cipher } from 'jslib-common/models/domain/cipher';\nimport { Organization } from 'jslib-common/models/domain/organization';\nimport { CipherCollectionsRequest } from 'jslib-common/models/request/cipherCollectionsRequest';\n\nimport { CollectionsComponent as BaseCollectionsComponent } from '../../vault/collections.component';\n\n@Component({\n selector: 'app-org-vault-collections',\n templateUrl: '../../vault/collections.component.html',\n})\nexport class CollectionsComponent extends BaseCollectionsComponent {\n organization: Organization;\n\n constructor(collectionService: CollectionService, platformUtilsService: PlatformUtilsService,\n i18nService: I18nService, cipherService: CipherService,\n private apiService: ApiService) {\n super(collectionService, platformUtilsService, i18nService, cipherService);\n this.allowSelectNone = true;\n }\n\n protected async loadCipher() {\n if (!this.organization.canManageAllCollections) {\n return await super.loadCipher();\n }\n const response = await this.apiService.getCipherAdmin(this.cipherId);\n return new Cipher(new CipherData(response));\n }\n\n protected loadCipherCollections() {\n if (!this.organization.canManageAllCollections) {\n return super.loadCipherCollections();\n }\n return this.collectionIds;\n }\n\n protected loadCollections() {\n if (!this.organization.canManageAllCollections) {\n return super.loadCollections();\n }\n return Promise.resolve(this.collections);\n }\n\n protected saveCollections() {\n if (this.organization.canManageAllCollections) {\n const request = new CipherCollectionsRequest(this.cipherDomain.collectionIds);\n return this.apiService.putCipherCollectionsAdmin(this.cipherId, request);\n } else {\n return super.saveCollections();\n }\n }\n}\n","export class CipherCollectionsRequest {\n collectionIds: string[];\n\n constructor(collectionIds: string[]) {\n this.collectionIds = collectionIds == null ? [] : collectionIds;\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\nimport { CipherBulkDeleteRequest } from 'jslib-common/models/request/cipherBulkDeleteRequest';\n\n@Component({\n selector: 'app-vault-bulk-delete',\n templateUrl: 'bulk-delete.component.html',\n})\nexport class BulkDeleteComponent {\n @Input() cipherIds: string[] = [];\n @Input() permanent: boolean = false;\n @Input() organization: Organization;\n @Output() onDeleted = new EventEmitter();\n\n formPromise: Promise;\n\n constructor(private cipherService: CipherService, private toasterService: ToasterService,\n private i18nService: I18nService, private apiService: ApiService) { }\n\n async submit() {\n if (!this.organization || !this.organization.canManageAllCollections) {\n await this.deleteCiphers();\n } else {\n await this.deleteCiphersAdmin();\n }\n\n await this.formPromise;\n\n this.onDeleted.emit();\n this.toasterService.popAsync('success', null, this.i18nService.t(this.permanent ? 'permanentlyDeletedItems'\n : 'deletedItems'));\n }\n\n private async deleteCiphers() {\n if (this.permanent) {\n this.formPromise = await this.cipherService.deleteManyWithServer(this.cipherIds);\n } else {\n this.formPromise = await this.cipherService.softDeleteManyWithServer(this.cipherIds);\n }\n }\n\n private async deleteCiphersAdmin() {\n const deleteRequest = new CipherBulkDeleteRequest(this.cipherIds, this.organization.id);\n if (this.permanent) {\n this.formPromise = await this.apiService.deleteManyCiphersAdmin(deleteRequest);\n } else {\n this.formPromise = await this.apiService.putDeleteManyCiphersAdmin(deleteRequest);\n }\n }\n}\n","

{{(permanent ? 'permanentlyDeleteSelected' : 'deleteSelected') | i18n}}

{{(permanent ? 'permanentlyDeleteSelectedItemsDesc' : 'deleteSelectedItemsDesc') | i18n: cipherIds.length}}
","export class CipherBulkDeleteRequest {\n ids: string[];\n organizationId: string;\n\n constructor(ids: string[], organizationId?: string) {\n this.ids = ids == null ? [] : ids;\n this.organizationId = organizationId;\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { FolderView } from 'jslib-common/models/view/folderView';\n\n@Component({\n selector: 'app-vault-bulk-move',\n templateUrl: 'bulk-move.component.html',\n})\nexport class BulkMoveComponent implements OnInit {\n @Input() cipherIds: string[] = [];\n @Output() onMoved = new EventEmitter();\n\n folderId: string = null;\n folders: FolderView[] = [];\n formPromise: Promise;\n\n constructor(private cipherService: CipherService, private toasterService: ToasterService,\n private i18nService: I18nService, private folderService: FolderService) { }\n\n async ngOnInit() {\n this.folders = await this.folderService.getAllDecrypted();\n this.folderId = this.folders[0].id;\n }\n\n async submit() {\n this.formPromise = this.cipherService.moveManyWithServer(this.cipherIds, this.folderId);\n await this.formPromise;\n this.onMoved.emit();\n this.toasterService.popAsync('success', null, this.i18nService.t('movedItems'));\n }\n}\n","

{{'moveSelected' | i18n}}

{{'moveSelectedItemsDesc' | i18n: cipherIds.length}}

","import {\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\n@Component({\n selector: 'app-vault-bulk-restore',\n templateUrl: 'bulk-restore.component.html',\n})\nexport class BulkRestoreComponent {\n @Input() cipherIds: string[] = [];\n @Output() onRestored = new EventEmitter();\n\n formPromise: Promise;\n\n constructor(private cipherService: CipherService, private toasterService: ToasterService,\n private i18nService: I18nService) { }\n\n async submit() {\n this.formPromise = this.cipherService.restoreManyWithServer(this.cipherIds);\n await this.formPromise;\n this.onRestored.emit();\n this.toasterService.popAsync('success', null, this.i18nService.t('restoredItems'));\n }\n}\n","

{{'restoreSelected' | i18n}}

{{'restoreSelectedItemsDesc' | i18n: cipherIds.length}}
","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { CipherView } from 'jslib-common/models/view';\nimport { CollectionView } from 'jslib-common/models/view/collectionView';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\n\n@Component({\n selector: 'app-vault-bulk-share',\n templateUrl: 'bulk-share.component.html',\n})\nexport class BulkShareComponent implements OnInit {\n @Input() ciphers: CipherView[] = [];\n @Input() organizationId: string;\n @Output() onShared = new EventEmitter();\n\n nonShareableCount = 0;\n collections: CollectionView[] = [];\n organizations: Organization[] = [];\n shareableCiphers: CipherView[] = [];\n formPromise: Promise;\n\n private writeableCollections: CollectionView[] = [];\n\n constructor(private cipherService: CipherService, private toasterService: ToasterService,\n private i18nService: I18nService, private collectionService: CollectionService,\n private userService: UserService) { }\n\n async ngOnInit() {\n this.shareableCiphers = this.ciphers.filter(c => !c.hasOldAttachments && c.organizationId == null);\n this.nonShareableCount = this.ciphers.length - this.shareableCiphers.length;\n const allCollections = await this.collectionService.getAllDecrypted();\n this.writeableCollections = allCollections.filter(c => !c.readOnly);\n this.organizations = await this.userService.getAllOrganizations();\n if (this.organizationId == null && this.organizations.length > 0) {\n this.organizationId = this.organizations[0].id;\n }\n this.filterCollections();\n }\n\n ngOnDestroy() {\n this.selectAll(false);\n }\n\n filterCollections() {\n this.selectAll(false);\n if (this.organizationId == null || this.writeableCollections.length === 0) {\n this.collections = [];\n } else {\n this.collections = this.writeableCollections.filter(c => c.organizationId === this.organizationId);\n }\n }\n\n async submit() {\n const checkedCollectionIds = this.collections.filter(c => (c as any).checked).map(c => c.id);\n try {\n this.formPromise = this.cipherService.shareManyWithServer(this.shareableCiphers, this.organizationId,\n checkedCollectionIds);\n await this.formPromise;\n this.onShared.emit();\n this.toasterService.popAsync('success', null, this.i18nService.t('sharedItems'));\n } catch { }\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n }\n\n selectAll(select: boolean) {\n const collections = select ? this.collections : this.writeableCollections;\n collections.forEach(c => this.check(c, select));\n }\n\n get canSave() {\n if (this.shareableCiphers != null && this.shareableCiphers.length > 0 && this.collections != null) {\n for (let i = 0; i < this.collections.length; i++) {\n if ((this.collections[i] as any).checked) {\n return true;\n }\n }\n }\n return false;\n }\n}\n","

{{'shareSelected' | i18n}}

{{'shareManyDesc' | i18n}}

{{'shareSelectedItemsCountDesc' | i18n: this.ciphers.length : shareableCiphers.length : nonShareableCount}}

{{'collections' | i18n}}

{{'noCollectionsInList' | i18n}}
{{c.name}}
","import {\n Component,\n OnInit,\n} from '@angular/core';\n\nimport { ActivatedRoute } from '@angular/router';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { CryptoFunctionService } from 'jslib-common/abstractions/cryptoFunction.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\nimport { SendAccess } from 'jslib-common/models/domain/sendAccess';\nimport { SymmetricCryptoKey } from 'jslib-common/models/domain/symmetricCryptoKey';\n\nimport { SendAccessView } from 'jslib-common/models/view/sendAccessView';\n\nimport { SendType } from 'jslib-common/enums/sendType';\nimport { SendAccessRequest } from 'jslib-common/models/request/sendAccessRequest';\nimport { ErrorResponse } from 'jslib-common/models/response/errorResponse';\n\nimport { SendAccessResponse } from 'jslib-common/models/response/sendAccessResponse';\n\n@Component({\n selector: 'app-send-access',\n templateUrl: 'access.component.html',\n})\nexport class AccessComponent implements OnInit {\n send: SendAccessView;\n sendType = SendType;\n downloading = false;\n loading = true;\n passwordRequired = false;\n formPromise: Promise;\n password: string;\n showText = false;\n unavailable = false;\n error = false;\n hideEmail = false;\n\n private id: string;\n private key: string;\n private decKey: SymmetricCryptoKey;\n private accessRequest: SendAccessRequest;\n\n constructor(private i18nService: I18nService, private cryptoFunctionService: CryptoFunctionService,\n private apiService: ApiService, private platformUtilsService: PlatformUtilsService,\n private route: ActivatedRoute, private cryptoService: CryptoService) {\n }\n\n get sendText() {\n if (this.send == null || this.send.text == null) {\n return null;\n }\n return this.showText ? this.send.text.text : this.send.text.maskedText;\n }\n\n get expirationDate() {\n if (this.send == null || this.send.expirationDate == null) {\n return null;\n }\n return this.send.expirationDate;\n }\n\n get creatorIdentifier() {\n if (this.send == null || this.send.creatorIdentifier == null) {\n return null;\n }\n return this.send.creatorIdentifier;\n }\n\n ngOnInit() {\n this.route.params.subscribe(async params => {\n this.id = params.sendId;\n this.key = params.key;\n if (this.key == null || this.id == null) {\n return;\n }\n await this.load();\n });\n }\n\n async download() {\n if (this.send == null || this.decKey == null) {\n return;\n }\n\n if (this.downloading) {\n return;\n }\n\n\n const downloadData = await this.apiService.getSendFileDownloadData(this.send, this.accessRequest);\n\n if (Utils.isNullOrWhitespace(downloadData.url)) {\n this.platformUtilsService.showToast('error', null, this.i18nService.t('missingSendFile'));\n return;\n }\n\n this.downloading = true;\n const response = await fetch(new Request(downloadData.url, { cache: 'no-store' }));\n if (response.status !== 200) {\n this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred'));\n this.downloading = false;\n return;\n }\n\n try {\n const buf = await response.arrayBuffer();\n const decBuf = await this.cryptoService.decryptFromBytes(buf, this.decKey);\n this.platformUtilsService.saveFile(window, decBuf, null, this.send.file.fileName);\n } catch (e) {\n this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred'));\n }\n\n this.downloading = false;\n }\n\n copyText() {\n this.platformUtilsService.copyToClipboard(this.send.text.text);\n this.platformUtilsService.showToast('success', null,\n this.i18nService.t('valueCopied', this.i18nService.t('sendTypeText')));\n }\n\n toggleText() {\n this.showText = !this.showText;\n }\n\n async load() {\n this.unavailable = false;\n this.error = false;\n this.hideEmail = false;\n const keyArray = Utils.fromUrlB64ToArray(this.key);\n this.accessRequest = new SendAccessRequest();\n if (this.password != null) {\n const passwordHash = await this.cryptoFunctionService.pbkdf2(this.password, keyArray, 'sha256', 100000);\n this.accessRequest.password = Utils.fromBufferToB64(passwordHash);\n }\n try {\n let sendResponse: SendAccessResponse = null;\n if (this.loading) {\n sendResponse = await this.apiService.postSendAccess(this.id, this.accessRequest);\n } else {\n this.formPromise = this.apiService.postSendAccess(this.id, this.accessRequest);\n sendResponse = await this.formPromise;\n }\n this.passwordRequired = false;\n const sendAccess = new SendAccess(sendResponse);\n this.decKey = await this.cryptoService.makeSendKey(keyArray);\n this.send = await sendAccess.decrypt(this.decKey);\n this.showText = this.send.text != null ? !this.send.text.hidden : true;\n } catch (e) {\n if (e instanceof ErrorResponse) {\n if (e.statusCode === 401) {\n this.passwordRequired = true;\n } else if (e.statusCode === 404) {\n this.unavailable = true;\n } else {\n this.error = true;\n }\n }\n }\n this.loading = false;\n this.hideEmail = this.creatorIdentifier == null && !this.passwordRequired && !this.loading && !this.unavailable;\n }\n}\n","

Bitwarden Send

{{'sendCreatorIdentifier' | i18n: creatorIdentifier }}

{{'viewSendHiddenEmailWarning' | i18n }} {{'learnMore' | i18n}}.
{{'loading' | i18n}}

{{'sendProtectedPassword' | i18n}}

{{'sendProtectedPasswordDontKnow' | i18n}}

{{'sendAccessUnavailable' | i18n}}
{{'unexpectedError' | i18n}}

{{send.name}}


{{'sendHiddenByDefault' | i18n}}

{{send.file.fileName}}

Expires: {{expirationDate | date: 'medium'}}

{{'sendAccessTaglineProductDesc' | i18n}}
{{'sendAccessTaglineLearnMore' | i18n}} Bitwarden Send {{'sendAccessTaglineOr' | i18n}} {{'sendAccessTaglineSignUp' | i18n}} {{'sendAccessTaglineTryToday' | i18n}}

","import {\n Component,\n ComponentFactoryResolver,\n NgZone,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { SendView } from 'jslib-common/models/view/sendView';\n\nimport { SendComponent as BaseSendComponent } from 'jslib-angular/components/send/send.component';\n\nimport { AddEditComponent } from './add-edit.component';\n\nimport { ModalComponent } from '../modal.component';\n\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { SearchService } from 'jslib-common/abstractions/search.service';\nimport { SendService } from 'jslib-common/abstractions/send.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { BroadcasterService } from 'jslib-angular/services/broadcaster.service';\n\nconst BroadcasterSubscriptionId = 'SendComponent';\n\n@Component({\n selector: 'app-send',\n templateUrl: 'send.component.html',\n})\nexport class SendComponent extends BaseSendComponent {\n @ViewChild('sendAddEdit', { read: ViewContainerRef, static: true }) sendAddEditModalRef: ViewContainerRef;\n\n modal: ModalComponent = null;\n\n constructor(sendService: SendService, i18nService: I18nService,\n platformUtilsService: PlatformUtilsService, environmentService: EnvironmentService,\n ngZone: NgZone, searchService: SearchService, policyService: PolicyService, userService: UserService,\n private componentFactoryResolver: ComponentFactoryResolver, private broadcasterService: BroadcasterService) {\n super(sendService, i18nService, platformUtilsService, environmentService, ngZone, searchService,\n policyService, userService);\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n await this.load();\n\n // Broadcaster subscription - load if sync completes in the background\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case 'syncCompleted':\n if (message.successfully) {\n await this.load();\n }\n break;\n }\n });\n });\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n addSend() {\n if (this.disableSend) {\n return;\n }\n\n const component = this.editSend(null);\n component.type = this.type;\n }\n\n editSend(send: SendView) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.sendAddEditModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n AddEditComponent, this.sendAddEditModalRef);\n\n childComponent.sendId = send == null ? null : send.id;\n childComponent.onSavedSend.subscribe(async (s: SendView) => {\n this.modal.close();\n await this.load();\n });\n childComponent.onDeletedSend.subscribe(async (s: SendView) => {\n this.modal.close();\n await this.load();\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n\n return childComponent;\n }\n}\n","
{{'sendDisabled' | i18n}}
{{'sendDisabledWarning' | i18n}}

{{'send' | i18n}} {{'loading' | i18n}}

{{s.name}} {{'disabled' | i18n}} {{'password' | i18n}} {{'maxAccessCountReached' | i18n}} {{'expired' | i18n}} {{'pendingDeletion' | i18n}}
{{s.deletionDate | date:'medium'}}
{{'loading' | i18n}}

{{'noSendsInList' | i18n}}

","import { DatePipe } from '@angular/common';\n\nimport { Component } from '@angular/core';\n\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { SendService } from 'jslib-common/abstractions/send.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { AddEditComponent as BaseAddEditComponent } from 'jslib-angular/components/send/add-edit.component';\n\n@Component({\n selector: 'app-send-add-edit',\n templateUrl: 'add-edit.component.html',\n})\nexport class AddEditComponent extends BaseAddEditComponent {\n constructor(i18nService: I18nService, platformUtilsService: PlatformUtilsService,\n environmentService: EnvironmentService, datePipe: DatePipe,\n sendService: SendService, userService: UserService,\n messagingService: MessagingService, policyService: PolicyService) {\n super(i18nService, platformUtilsService, environmentService, datePipe, sendService, userService,\n messagingService, policyService);\n }\n\n async copyLinkToClipboard(link: string): Promise {\n // Copy function on web depends on the modal being open or not. Since this event occurs during a transition\n // of the modal closing we need to add a small delay to make sure state of the DOM is consistent.\n return new Promise(resolve => {\n window.setTimeout(() => resolve(super.copyLinkToClipboard(link)), 500);\n });\n }\n}\n","

{{title}}

{{'sendDisabledWarning' | i18n}} {{'sendOptionsPolicyInEffect' | i18n}}
  • {{'sendDisableHideEmailInEffect' | i18n}}
{{'sendNameDesc' | i18n}}
{{'sendTextDesc' | i18n}}
{{'file' | i18n}} {{send.file.fileName}} ({{send.file.sizeName}})
{{'sendFileDesc' | i18n}} {{'maxFileSize' | i18n}}

{{'share' | i18n}}

{{'options' | i18n}}

{{'deletionDateDesc' | i18n}}
{{'clear' | i18n}}
{{'expirationDateDesc' | i18n}}
{{'maxAccessCountDesc' | i18n}}
{{'sendPasswordDesc' | i18n}}
{{'sendNotesDesc' | i18n}}
","import { SendType } from '../../enums/sendType';\nimport { Utils } from '../../misc/utils';\n\nimport { Send } from '../domain/send';\nimport { SymmetricCryptoKey } from '../domain/symmetricCryptoKey';\n\nimport { SendFileView } from './sendFileView';\nimport { SendTextView } from './sendTextView';\nimport { View } from './view';\n\nexport class SendView implements View {\n id: string = null;\n accessId: string = null;\n name: string = null;\n notes: string = null;\n key: ArrayBuffer;\n cryptoKey: SymmetricCryptoKey;\n type: SendType = null;\n text = new SendTextView();\n file = new SendFileView();\n maxAccessCount?: number = null;\n accessCount: number = 0;\n revisionDate: Date = null;\n deletionDate: Date = null;\n expirationDate: Date = null;\n password: string = null;\n disabled: boolean = false;\n hideEmail: boolean = false;\n\n constructor(s?: Send) {\n if (!s) {\n return;\n }\n\n this.id = s.id;\n this.accessId = s.accessId;\n this.type = s.type;\n this.maxAccessCount = s.maxAccessCount;\n this.accessCount = s.accessCount;\n this.revisionDate = s.revisionDate;\n this.deletionDate = s.deletionDate;\n this.expirationDate = s.expirationDate;\n this.disabled = s.disabled;\n this.password = s.password;\n this.hideEmail = s.hideEmail;\n }\n\n get urlB64Key(): string {\n return Utils.fromBufferToUrlB64(this.key);\n }\n\n get maxAccessCountReached(): boolean {\n if (this.maxAccessCount == null) {\n return false;\n }\n return this.accessCount >= this.maxAccessCount;\n }\n\n get expired(): boolean {\n if (this.expirationDate == null) {\n return false;\n }\n return this.expirationDate <= new Date();\n }\n\n get pendingDelete(): boolean {\n return this.deletionDate <= new Date();\n }\n}\n","import {\n Component,\n ComponentFactoryResolver,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { ModalComponent } from '../modal.component';\nimport { ApiKeyComponent } from './api-key.component';\nimport { DeauthorizeSessionsComponent } from './deauthorize-sessions.component';\nimport { DeleteAccountComponent } from './delete-account.component';\nimport { PurgeVaultComponent } from './purge-vault.component';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\n@Component({\n selector: 'app-account',\n templateUrl: 'account.component.html',\n})\nexport class AccountComponent {\n @ViewChild('deauthorizeSessionsTemplate', { read: ViewContainerRef, static: true }) deauthModalRef: ViewContainerRef;\n @ViewChild('purgeVaultTemplate', { read: ViewContainerRef, static: true }) purgeModalRef: ViewContainerRef;\n @ViewChild('deleteAccountTemplate', { read: ViewContainerRef, static: true }) deleteModalRef: ViewContainerRef;\n @ViewChild('viewUserApiKeyTemplate', { read: ViewContainerRef, static: true }) viewUserApiKeyModalRef: ViewContainerRef;\n @ViewChild('rotateUserApiKeyTemplate', { read: ViewContainerRef, static: true }) rotateUserApiKeyModalRef: ViewContainerRef;\n\n private modal: ModalComponent = null;\n\n constructor(private componentFactoryResolver: ComponentFactoryResolver, private apiService: ApiService,\n private userService: UserService) { }\n\n deauthorizeSessions() {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.deauthModalRef.createComponent(factory).instance;\n this.modal.show(DeauthorizeSessionsComponent, this.deauthModalRef);\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n purgeVault() {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.purgeModalRef.createComponent(factory).instance;\n this.modal.show(PurgeVaultComponent, this.purgeModalRef);\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n deleteAccount() {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.deleteModalRef.createComponent(factory).instance;\n this.modal.show(DeleteAccountComponent, this.deleteModalRef);\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n async viewUserApiKey() {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.viewUserApiKeyModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(ApiKeyComponent, this.viewUserApiKeyModalRef);\n childComponent.keyType = 'user';\n childComponent.entityId = await this.userService.getUserId();\n childComponent.postKey = this.apiService.postUserApiKey.bind(this.apiService);\n childComponent.scope = 'api';\n childComponent.grantType = 'client_credentials';\n childComponent.apiKeyTitle = 'apiKey';\n childComponent.apiKeyWarning = 'userApiKeyWarning';\n childComponent.apiKeyDescription = 'userApiKeyDesc';\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n async rotateUserApiKey() {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.rotateUserApiKeyModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(ApiKeyComponent, this.rotateUserApiKeyModalRef);\n childComponent.keyType = 'user';\n childComponent.isRotation = true;\n childComponent.entityId = await this.userService.getUserId();\n childComponent.postKey = this.apiService.postUserRotateApiKey.bind(this.apiService);\n childComponent.scope = 'api';\n childComponent.grantType = 'client_credentials';\n childComponent.apiKeyTitle = 'apiKey';\n childComponent.apiKeyWarning = 'userApiKeyWarning';\n childComponent.apiKeyDescription = 'apiKeyRotateDesc';\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n}\n","

{{'myAccount' | i18n}}

{{'changeEmail' | i18n}}

{{'changeMasterPassword' | i18n}}

{{'encKeySettings' | i18n}}

{{'apiKey' | i18n}}

{{'userApiKeyDesc' | i18n}}

{{'dangerZone' | i18n}}

{{'dangerZoneDesc' | i18n}}

","import { Component } from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\n\nimport { PasswordVerificationRequest } from 'jslib-common/models/request/passwordVerificationRequest';\n\n@Component({\n selector: 'app-deauthorize-sessions',\n templateUrl: 'deauthorize-sessions.component.html',\n})\nexport class DeauthorizeSessionsComponent {\n masterPassword: string;\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private cryptoService: CryptoService,\n private messagingService: MessagingService) { }\n\n async submit() {\n if (this.masterPassword == null || this.masterPassword === '') {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassRequired'));\n return;\n }\n\n const request = new PasswordVerificationRequest();\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n try {\n this.formPromise = this.apiService.postSecurityStamp(request);\n await this.formPromise;\n this.toasterService.popAsync('success', this.i18nService.t('sessionsDeauthorized'),\n this.i18nService.t('logBackIn'));\n this.messagingService.send('logout');\n } catch { }\n }\n}\n","

{{'deauthorizeSessions' | i18n}}

{{'deauthorizeSessionsDesc' | i18n}}

{{'deauthorizeSessionsWarning' | i18n}}
","import { Component } from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\n\nimport { PasswordVerificationRequest } from 'jslib-common/models/request/passwordVerificationRequest';\n\n@Component({\n selector: 'app-delete-account',\n templateUrl: 'delete-account.component.html',\n})\nexport class DeleteAccountComponent {\n masterPassword: string;\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private cryptoService: CryptoService,\n private messagingService: MessagingService) { }\n\n async submit() {\n if (this.masterPassword == null || this.masterPassword === '') {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassRequired'));\n return;\n }\n\n const request = new PasswordVerificationRequest();\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n try {\n this.formPromise = this.apiService.deleteAccount(request);\n await this.formPromise;\n this.toasterService.popAsync('success', this.i18nService.t('accountDeleted'),\n this.i18nService.t('accountDeletedDesc'));\n this.messagingService.send('logout');\n } catch { }\n }\n}\n","

{{'deleteAccount' | i18n}}

{{'deleteAccountDesc' | i18n}}

{{'deleteAccountWarning' | i18n}}
","import {\n Component,\n OnInit,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { UpdateProfileRequest } from 'jslib-common/models/request/updateProfileRequest';\n\nimport { ProfileResponse } from 'jslib-common/models/response/profileResponse';\n\n@Component({\n selector: 'app-profile',\n templateUrl: 'profile.component.html',\n})\nexport class ProfileComponent implements OnInit {\n loading = true;\n profile: ProfileResponse;\n fingerprint: string;\n\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private userService: UserService,\n private cryptoService: CryptoService) { }\n\n async ngOnInit() {\n this.profile = await this.apiService.getProfile();\n this.loading = false;\n const fingerprint = await this.cryptoService.getFingerprint(await this.userService.getUserId());\n if (fingerprint != null) {\n this.fingerprint = fingerprint.join('-');\n }\n }\n\n async submit() {\n try {\n const request = new UpdateProfileRequest(this.profile.name, this.profile.masterPasswordHint);\n this.formPromise = this.apiService.putProfile(request);\n await this.formPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('accountUpdated'));\n } catch { }\n }\n}\n","
{{'loading' | i18n}}

{{'yourAccountsFingerprint' | i18n}}:
{{fingerprint}}

","import {\n Component,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { EmailRequest } from 'jslib-common/models/request/emailRequest';\nimport { EmailTokenRequest } from 'jslib-common/models/request/emailTokenRequest';\n\n@Component({\n selector: 'app-change-email',\n templateUrl: 'change-email.component.html',\n})\nexport class ChangeEmailComponent {\n masterPassword: string;\n newEmail: string;\n token: string;\n tokenSent = false;\n\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private cryptoService: CryptoService,\n private messagingService: MessagingService, private userService: UserService) { }\n\n async submit() {\n const hasEncKey = await this.cryptoService.hasEncKey();\n if (!hasEncKey) {\n this.toasterService.popAsync('error', null, this.i18nService.t('updateKey'));\n return;\n }\n\n this.newEmail = this.newEmail.trim().toLowerCase();\n if (!this.tokenSent) {\n const request = new EmailTokenRequest();\n request.newEmail = this.newEmail;\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n try {\n this.formPromise = this.apiService.postEmailToken(request);\n await this.formPromise;\n this.tokenSent = true;\n } catch { }\n } else {\n const request = new EmailRequest();\n request.token = this.token;\n request.newEmail = this.newEmail;\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n const kdf = await this.userService.getKdf();\n const kdfIterations = await this.userService.getKdfIterations();\n const newKey = await this.cryptoService.makeKey(this.masterPassword, this.newEmail, kdf, kdfIterations);\n request.newMasterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, newKey);\n const newEncKey = await this.cryptoService.remakeEncKey(newKey);\n request.key = newEncKey[1].encryptedString;\n try {\n this.formPromise = this.apiService.postEmail(request);\n await this.formPromise;\n this.reset();\n this.toasterService.popAsync('success', this.i18nService.t('emailChanged'),\n this.i18nService.t('logBackIn'));\n this.messagingService.send('logout');\n } catch { }\n }\n }\n\n reset() {\n this.token = this.newEmail = this.masterPassword = null;\n this.tokenSent = false;\n }\n}\n","

{{'changeEmailDesc' | i18n : newEmail}}

{{'loggedOutWarning' | i18n}}
","import { PasswordVerificationRequest } from './passwordVerificationRequest';\n\nexport class EmailTokenRequest extends PasswordVerificationRequest {\n newEmail: string;\n masterPasswordHash: string;\n}\n","import { Component } from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport {\n ChangePasswordComponent as BaseChangePasswordComponent,\n} from 'jslib-angular/components/change-password.component';\n\nimport { EmergencyAccessStatusType } from 'jslib-common/enums/emergencyAccessStatusType';\nimport { Utils } from 'jslib-common/misc/utils';\n\nimport { EncString } from 'jslib-common/models/domain/encString';\nimport { SymmetricCryptoKey } from 'jslib-common/models/domain/symmetricCryptoKey';\n\nimport { CipherWithIdRequest } from 'jslib-common/models/request/cipherWithIdRequest';\nimport { EmergencyAccessUpdateRequest } from 'jslib-common/models/request/emergencyAccessUpdateRequest';\nimport { FolderWithIdRequest } from 'jslib-common/models/request/folderWithIdRequest';\nimport { OrganizationUserResetPasswordEnrollmentRequest } from 'jslib-common/models/request/organizationUserResetPasswordEnrollmentRequest';\nimport { PasswordRequest } from 'jslib-common/models/request/passwordRequest';\nimport { UpdateKeyRequest } from 'jslib-common/models/request/updateKeyRequest';\n\n@Component({\n selector: 'app-change-password',\n templateUrl: 'change-password.component.html',\n})\nexport class ChangePasswordComponent extends BaseChangePasswordComponent {\n rotateEncKey = false;\n currentMasterPassword: string;\n\n constructor(i18nService: I18nService,\n cryptoService: CryptoService, messagingService: MessagingService,\n userService: UserService, passwordGenerationService: PasswordGenerationService,\n platformUtilsService: PlatformUtilsService, policyService: PolicyService,\n private folderService: FolderService, private cipherService: CipherService,\n private syncService: SyncService, private apiService: ApiService) {\n super(i18nService, cryptoService, messagingService, userService, passwordGenerationService,\n platformUtilsService, policyService);\n }\n\n async rotateEncKeyClicked() {\n if (this.rotateEncKey) {\n const ciphers = await this.cipherService.getAllDecrypted();\n let hasOldAttachments = false;\n if (ciphers != null) {\n for (let i = 0; i < ciphers.length; i++) {\n if (ciphers[i].organizationId == null && ciphers[i].hasOldAttachments) {\n hasOldAttachments = true;\n break;\n }\n }\n }\n\n if (hasOldAttachments) {\n const learnMore = await this.platformUtilsService.showDialog(\n this.i18nService.t('oldAttachmentsNeedFixDesc'), null,\n this.i18nService.t('learnMore'), this.i18nService.t('close'), 'warning');\n if (learnMore) {\n this.platformUtilsService.launchUri(\n 'https://help.bitwarden.com/article/attachments/#fixing-old-attachments');\n }\n this.rotateEncKey = false;\n return;\n }\n\n const result = await this.platformUtilsService.showDialog(\n this.i18nService.t('updateEncryptionKeyWarning') + ' ' +\n this.i18nService.t('updateEncryptionKeyExportWarning') + ' ' +\n this.i18nService.t('rotateEncKeyConfirmation'), this.i18nService.t('rotateEncKeyTitle'),\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!result) {\n this.rotateEncKey = false;\n }\n }\n }\n\n async submit() {\n const hasEncKey = await this.cryptoService.hasEncKey();\n if (!hasEncKey) {\n this.platformUtilsService.showToast('error', null, this.i18nService.t('updateKey'));\n return;\n }\n\n await super.submit();\n }\n\n async setupSubmitActions() {\n if (this.currentMasterPassword == null || this.currentMasterPassword === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassRequired'));\n return false;\n }\n\n if (this.rotateEncKey) {\n await this.syncService.fullSync(true);\n }\n\n return super.setupSubmitActions();\n }\n\n async performSubmitActions(newMasterPasswordHash: string, newKey: SymmetricCryptoKey,\n newEncKey: [SymmetricCryptoKey, EncString]) {\n const request = new PasswordRequest();\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.currentMasterPassword, null);\n request.newMasterPasswordHash = newMasterPasswordHash;\n request.key = newEncKey[1].encryptedString;\n\n try {\n if (this.rotateEncKey) {\n this.formPromise = this.apiService.postPassword(request).then(() => {\n return this.updateKey(newKey, request.newMasterPasswordHash);\n });\n } else {\n this.formPromise = this.apiService.postPassword(request);\n }\n\n await this.formPromise;\n\n this.platformUtilsService.showToast('success', this.i18nService.t('masterPasswordChanged'),\n this.i18nService.t('logBackIn'));\n this.messagingService.send('logout');\n } catch {\n this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred'));\n }\n }\n\n private async updateKey(key: SymmetricCryptoKey, masterPasswordHash: string) {\n const encKey = await this.cryptoService.makeEncKey(key);\n const privateKey = await this.cryptoService.getPrivateKey();\n let encPrivateKey: EncString = null;\n if (privateKey != null) {\n encPrivateKey = await this.cryptoService.encrypt(privateKey, encKey[0]);\n }\n const request = new UpdateKeyRequest();\n request.privateKey = encPrivateKey != null ? encPrivateKey.encryptedString : null;\n request.key = encKey[1].encryptedString;\n request.masterPasswordHash = masterPasswordHash;\n\n const folders = await this.folderService.getAllDecrypted();\n for (let i = 0; i < folders.length; i++) {\n if (folders[i].id == null) {\n continue;\n }\n const folder = await this.folderService.encrypt(folders[i], encKey[0]);\n request.folders.push(new FolderWithIdRequest(folder));\n }\n\n const ciphers = await this.cipherService.getAllDecrypted();\n for (let i = 0; i < ciphers.length; i++) {\n if (ciphers[i].organizationId != null) {\n continue;\n }\n\n const cipher = await this.cipherService.encrypt(ciphers[i], encKey[0]);\n request.ciphers.push(new CipherWithIdRequest(cipher));\n }\n\n await this.apiService.postAccountKey(request);\n\n await this.updateEmergencyAccesses(encKey[0]);\n\n await this.updateAllResetPasswordKeys(encKey[0]);\n }\n\n private async updateEmergencyAccesses(encKey: SymmetricCryptoKey) {\n const emergencyAccess = await this.apiService.getEmergencyAccessTrusted();\n const allowedStatuses = [\n EmergencyAccessStatusType.Confirmed,\n EmergencyAccessStatusType.RecoveryInitiated,\n EmergencyAccessStatusType.RecoveryApproved,\n ];\n\n const filteredAccesses = emergencyAccess.data.filter(d => allowedStatuses.includes(d.status));\n\n for (const details of filteredAccesses) {\n const publicKeyResponse = await this.apiService.getUserPublicKey(details.granteeId);\n const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n\n const updateRequest = new EmergencyAccessUpdateRequest();\n updateRequest.type = details.type;\n updateRequest.waitTimeDays = details.waitTimeDays;\n updateRequest.keyEncrypted = encryptedKey.encryptedString;\n\n await this.apiService.putEmergencyAccess(details.id, updateRequest);\n }\n }\n\n private async updateAllResetPasswordKeys(encKey: SymmetricCryptoKey) {\n const orgs = await this.userService.getAllOrganizations();\n\n for (const org of orgs) {\n // If not already enrolled, skip\n if (!org.resetPasswordEnrolled) {\n continue;\n }\n\n // Retrieve public key\n const response = await this.apiService.getOrganizationKeys(org.id);\n const publicKey = Utils.fromB64ToArray(response?.publicKey);\n\n // Re-enroll - encrpyt user's encKey.key with organization public key\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n\n // Create/Execute request\n const request = new OrganizationUserResetPasswordEnrollmentRequest();\n request.resetPasswordKey = encryptedKey.encryptedString;\n\n await this.apiService.putOrganizationUserResetPasswordEnrollment(org.id, org.userId, request);\n }\n }\n}\n","{{'loggedOutWarning' | i18n}} {{'masterPasswordPolicyInEffect' | i18n}}
  • 0\"> {{'policyInEffectMinComplexity' | i18n : getPasswordScoreAlertDisplay()}}
  • 0\"> {{'policyInEffectMinLength' | i18n : enforcedPolicyOptions?.minLength.toString()}}
  • {{'policyInEffectUppercase' | i18n}}
  • {{'policyInEffectLowercase' | i18n}}
  • {{'policyInEffectNumbers' | i18n}}
  • {{'policyInEffectSpecial' | i18n : '!@#$%^&*'}}
","export enum EmergencyAccessStatusType {\n Invited = 0,\n Accepted = 1,\n Confirmed = 2,\n RecoveryInitiated = 3,\n RecoveryApproved = 4,\n}\n","import { EmergencyAccessType } from '../../enums/emergencyAccessType';\n\nexport class EmergencyAccessUpdateRequest {\n type: EmergencyAccessType;\n waitTimeDays: number;\n keyEncrypted?: string;\n}\n","import { FolderRequest } from './folderRequest';\n\nimport { Folder } from '../domain/folder';\n\nexport class FolderWithIdRequest extends FolderRequest {\n id: string;\n\n constructor(folder: Folder) {\n super(folder);\n this.id = folder.id;\n }\n}\n","import { PasswordVerificationRequest } from './passwordVerificationRequest';\n\nexport class PasswordRequest extends PasswordVerificationRequest {\n newMasterPasswordHash: string;\n key: string;\n}\n","import { CipherWithIdRequest } from './cipherWithIdRequest';\nimport { FolderWithIdRequest } from './folderWithIdRequest';\n\nexport class UpdateKeyRequest {\n ciphers: CipherWithIdRequest[] = [];\n folders: FolderWithIdRequest[] = [];\n masterPasswordHash: string;\n privateKey: string;\n key: string;\n}\n","import {\n Component,\n OnInit,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { KdfRequest } from 'jslib-common/models/request/kdfRequest';\n\nimport { KdfType } from 'jslib-common/enums/kdfType';\n\n@Component({\n selector: 'app-change-kdf',\n templateUrl: 'change-kdf.component.html',\n})\nexport class ChangeKdfComponent implements OnInit {\n masterPassword: string;\n kdfIterations: number;\n kdf = KdfType.PBKDF2_SHA256;\n kdfOptions: any[] = [];\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private cryptoService: CryptoService,\n private messagingService: MessagingService, private userService: UserService) {\n this.kdfOptions = [\n { name: 'PBKDF2 SHA-256', value: KdfType.PBKDF2_SHA256 },\n ];\n }\n\n async ngOnInit() {\n this.kdf = await this.userService.getKdf();\n this.kdfIterations = await this.userService.getKdfIterations();\n }\n\n async submit() {\n const hasEncKey = await this.cryptoService.hasEncKey();\n if (!hasEncKey) {\n this.toasterService.popAsync('error', null, this.i18nService.t('updateKey'));\n return;\n }\n\n const request = new KdfRequest();\n request.kdf = this.kdf;\n request.kdfIterations = this.kdfIterations;\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n const email = await this.userService.getEmail();\n const newKey = await this.cryptoService.makeKey(this.masterPassword, email, this.kdf, this.kdfIterations);\n request.newMasterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, newKey);\n const newEncKey = await this.cryptoService.remakeEncKey(newKey);\n request.key = newEncKey[1].encryptedString;\n try {\n this.formPromise = this.apiService.postAccountKdf(request);\n await this.formPromise;\n this.toasterService.popAsync('success', this.i18nService.t('encKeySettingsChanged'),\n this.i18nService.t('logBackIn'));\n this.messagingService.send('logout');\n } catch { }\n }\n}\n","{{'loggedOutWarning' | i18n}}

{{'kdfIterationsDesc' | i18n : (100000 | number)}}

{{'warning' | i18n}}: {{'kdfIterationsWarning' | i18n : (50000 | number)}}
","import {\n Component,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { PlanType } from 'jslib-common/enums/planType';\nimport { ProductType } from 'jslib-common/enums/productType';\n\nimport { OrganizationPlansComponent } from './organization-plans.component';\n\n@Component({\n selector: 'app-create-organization',\n templateUrl: 'create-organization.component.html',\n})\nexport class CreateOrganizationComponent implements OnInit {\n @ViewChild(OrganizationPlansComponent, { static: true }) orgPlansComponent: OrganizationPlansComponent;\n\n constructor(private route: ActivatedRoute) { }\n\n ngOnInit() {\n const queryParamsSub = this.route.queryParams.subscribe(async qParams => {\n if (qParams.plan === 'families') {\n this.orgPlansComponent.plan = PlanType.FamiliesAnnually;\n this.orgPlansComponent.product = ProductType.Families;\n } else if (qParams.plan === 'teams') {\n this.orgPlansComponent.plan = PlanType.TeamsAnnually;\n this.orgPlansComponent.product = ProductType.Teams;\n } else if (qParams.plan === 'enterprise') {\n this.orgPlansComponent.plan = PlanType.EnterpriseAnnually;\n this.orgPlansComponent.product = ProductType.Enterprise;\n }\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n }\n}\n","

{{'newOrganization' | i18n}}

{{'newOrganizationDesc' | i18n}}

","import {\n Component,\n OnInit,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { UpdateDomainsRequest } from 'jslib-common/models/request/updateDomainsRequest';\n\n@Component({\n selector: 'app-domain-rules',\n templateUrl: 'domain-rules.component.html',\n})\nexport class DomainRulesComponent implements OnInit {\n loading = true;\n custom: string[] = [];\n global: any[] = [];\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService) { }\n\n async ngOnInit() {\n const response = await this.apiService.getSettingsDomains();\n this.loading = false;\n if (response.equivalentDomains != null) {\n this.custom = response.equivalentDomains.map(d => d.join(', '));\n }\n if (response.globalEquivalentDomains != null) {\n this.global = response.globalEquivalentDomains.map(d => {\n return {\n domains: d.domains.join(', '),\n excluded: d.excluded,\n key: d.type,\n };\n });\n }\n }\n\n toggleExcluded(globalDomain: any) {\n globalDomain.excluded = !globalDomain.excluded;\n }\n\n customize(globalDomain: any) {\n globalDomain.excluded = true;\n this.custom.push(globalDomain.domains);\n }\n\n remove(index: number) {\n this.custom.splice(index, 1);\n }\n\n add() {\n this.custom.push('');\n }\n\n async submit() {\n const request = new UpdateDomainsRequest();\n request.excludedGlobalEquivalentDomains = this.global.filter(d => d.excluded)\n .map(d => d.key);\n if (request.excludedGlobalEquivalentDomains.length === 0) {\n request.excludedGlobalEquivalentDomains = null;\n }\n request.equivalentDomains = this.custom.filter(d => d != null && d.trim() !== '')\n .map(d => d.split(',').map(d2 => d2.trim()));\n if (request.equivalentDomains.length === 0) {\n request.equivalentDomains = null;\n }\n\n try {\n this.formPromise = this.apiService.putSettingsDomains(request);\n await this.formPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('domainsUpdated'));\n } catch { }\n }\n\n indexTrackBy(index: number, obj: any): any {\n return index;\n }\n}\n","

{{'domainRules' | i18n}}

{{'domainRulesDesc' | i18n}}

{{'customEqDomains' | i18n}}

{{'loading' | i18n}}

{{'newCustomDomainDesc' | i18n}}

{{'globalEqDomains' | i18n}}

{{'loading' | i18n}}

0\">
{{d.domains}}
","import {\n Component,\n OnInit,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\nimport { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service';\n\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\n@Component({\n selector: 'app-options',\n templateUrl: 'options.component.html',\n})\nexport class OptionsComponent implements OnInit {\n vaultTimeout: number = null;\n vaultTimeoutAction: string = 'lock';\n disableIcons: boolean;\n enableGravatars: boolean;\n enableFullWidth: boolean;\n locale: string;\n vaultTimeouts: any[];\n localeOptions: any[];\n\n private startingLocale: string;\n\n constructor(private storageService: StorageService, private stateService: StateService,\n private i18nService: I18nService, private toasterService: ToasterService,\n private vaultTimeoutService: VaultTimeoutService, private platformUtilsService: PlatformUtilsService,\n private messagingService: MessagingService) {\n this.vaultTimeouts = [\n { name: i18nService.t('oneMinute'), value: 1 },\n { name: i18nService.t('fiveMinutes'), value: 5 },\n { name: i18nService.t('fifteenMinutes'), value: 15 },\n { name: i18nService.t('thirtyMinutes'), value: 30 },\n { name: i18nService.t('oneHour'), value: 60 },\n { name: i18nService.t('fourHours'), value: 240 },\n { name: i18nService.t('onRefresh'), value: -1 },\n ];\n if (this.platformUtilsService.isDev()) {\n this.vaultTimeouts.push({ name: i18nService.t('never'), value: null });\n }\n\n const localeOptions: any[] = [];\n i18nService.supportedTranslationLocales.forEach(locale => {\n let name = locale;\n if (i18nService.localeNames.has(locale)) {\n name += (' - ' + i18nService.localeNames.get(locale));\n }\n localeOptions.push({ name: name, value: locale });\n });\n localeOptions.sort(Utils.getSortFunction(i18nService, 'name'));\n localeOptions.splice(0, 0, { name: i18nService.t('default'), value: null });\n this.localeOptions = localeOptions;\n }\n\n async ngOnInit() {\n this.vaultTimeout = await this.storageService.get(ConstantsService.vaultTimeoutKey);\n this.vaultTimeoutAction = await this.storageService.get(ConstantsService.vaultTimeoutActionKey);\n this.disableIcons = await this.storageService.get(ConstantsService.disableFaviconKey);\n this.enableGravatars = await this.storageService.get('enableGravatars');\n this.enableFullWidth = await this.storageService.get('enableFullWidth');\n this.locale = this.startingLocale = await this.storageService.get(ConstantsService.localeKey);\n }\n\n async submit() {\n await this.vaultTimeoutService.setVaultTimeoutOptions(this.vaultTimeout != null ? this.vaultTimeout : null,\n this.vaultTimeoutAction);\n await this.storageService.save(ConstantsService.disableFaviconKey, this.disableIcons);\n await this.stateService.save(ConstantsService.disableFaviconKey, this.disableIcons);\n await this.storageService.save('enableGravatars', this.enableGravatars);\n await this.stateService.save('enableGravatars', this.enableGravatars);\n await this.storageService.save('enableFullWidth', this.enableFullWidth);\n this.messagingService.send('setFullWidth');\n await this.storageService.save(ConstantsService.localeKey, this.locale);\n if (this.locale !== this.startingLocale) {\n window.location.reload();\n } else {\n this.toasterService.popAsync('success', null, this.i18nService.t('optionsUpdated'));\n }\n }\n\n async vaultTimeoutActionChanged(newValue: string) {\n if (newValue === 'logOut') {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('vaultTimeoutLogOutConfirmation'),\n this.i18nService.t('vaultTimeoutLogOutConfirmationTitle'),\n this.i18nService.t('yes'), this.i18nService.t('cancel'), 'warning');\n if (!confirmed) {\n this.vaultTimeoutAction = 'lock';\n return;\n }\n }\n this.vaultTimeoutAction = newValue;\n }\n}\n","

{{'options' | i18n}}

{{'optionsDesc' | i18n}}

{{'vaultTimeoutDesc' | i18n}}
{{'languageDesc' | i18n}}
{{'disableIconsDesc' | i18n}}
{{'enableGravatarsDesc' | i18n}}
{{'enableFullWidthDesc' | i18n}}
","import {\n AfterContentInit,\n Component,\n Input,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { CryptoFunctionService } from 'jslib-common/abstractions/cryptoFunction.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\n\nimport { SsoComponent } from 'jslib-angular/components/sso.component';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\n\n@Component({\n selector: 'app-link-sso',\n templateUrl: 'link-sso.component.html',\n})\nexport class LinkSsoComponent extends SsoComponent implements AfterContentInit {\n @Input() organization: Organization;\n returnUri: string = '/settings/organizations';\n\n constructor(platformUtilsService: PlatformUtilsService, i18nService: I18nService,\n apiService: ApiService, authService: AuthService,\n router: Router, route: ActivatedRoute,\n cryptoFunctionService: CryptoFunctionService, passwordGenerationService: PasswordGenerationService,\n storageService: StorageService, stateService: StateService) {\n super(authService, router,\n i18nService, route,\n storageService, stateService,\n platformUtilsService, apiService,\n cryptoFunctionService, passwordGenerationService);\n\n this.returnUri = '/settings/organizations';\n this.redirectUri = window.location.origin + '/sso-connector.html';\n this.clientId = 'web';\n }\n\n async ngAfterContentInit() {\n this.identifier = this.organization.identifier;\n }\n}\n"," {{'linkSso' | i18n}} ","import {\n Component,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\nimport { TokenService } from 'jslib-common/abstractions/token.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { PaymentComponent } from './payment.component';\nimport { TaxInfoComponent } from './tax-info.component';\n\n@Component({\n selector: 'app-premium',\n templateUrl: 'premium.component.html',\n})\nexport class PremiumComponent implements OnInit {\n @ViewChild(PaymentComponent) paymentComponent: PaymentComponent;\n @ViewChild(TaxInfoComponent) taxInfoComponent: TaxInfoComponent;\n\n canAccessPremium = false;\n selfHosted = false;\n premiumPrice = 10;\n storageGbPrice = 4;\n additionalStorage = 0;\n\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, platformUtilsService: PlatformUtilsService,\n private tokenService: TokenService, private router: Router,\n private messagingService: MessagingService, private syncService: SyncService,\n private userService: UserService) {\n this.selfHosted = platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n this.canAccessPremium = await this.userService.canAccessPremium();\n const premium = await this.tokenService.getPremium();\n if (premium) {\n this.router.navigate(['/settings/subscription']);\n return;\n }\n }\n\n async submit() {\n let files: FileList = null;\n if (this.selfHosted) {\n const fileEl = document.getElementById('file') as HTMLInputElement;\n files = fileEl.files;\n if (files == null || files.length === 0) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('selectFile'));\n return;\n }\n }\n\n try {\n if (this.selfHosted) {\n if (!this.tokenService.getEmailVerified()) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('verifyEmailFirst'));\n return;\n }\n\n const fd = new FormData();\n fd.append('license', files[0]);\n this.formPromise = this.apiService.postAccountLicense(fd).then(() => {\n return this.finalizePremium();\n });\n } else {\n this.formPromise = this.paymentComponent.createPaymentToken().then(result => {\n const fd = new FormData();\n fd.append('paymentMethodType', result[1].toString());\n if (result[0] != null) {\n fd.append('paymentToken', result[0]);\n }\n fd.append('additionalStorageGb', (this.additionalStorage || 0).toString());\n fd.append('country', this.taxInfoComponent.taxInfo.country);\n fd.append('postalCode', this.taxInfoComponent.taxInfo.postalCode);\n return this.apiService.postPremium(fd);\n }).then(paymentResponse => {\n if (!paymentResponse.success && paymentResponse.paymentIntentClientSecret != null) {\n return this.paymentComponent.handleStripeCardPayment(paymentResponse.paymentIntentClientSecret,\n () => this.finalizePremium());\n } else {\n return this.finalizePremium();\n }\n });\n }\n await this.formPromise;\n } catch { }\n }\n\n async finalizePremium() {\n await this.apiService.refreshIdentityToken();\n await this.syncService.fullSync(true);\n this.toasterService.popAsync('success', null, this.i18nService.t('premiumUpdated'));\n this.messagingService.send('purchasedPremium');\n this.router.navigate(['/settings/subscription']);\n }\n\n get additionalStorageTotal(): number {\n return this.storageGbPrice * Math.abs(this.additionalStorage || 0);\n }\n\n get subtotal(): number {\n return this.premiumPrice + this.additionalStorageTotal;\n }\n\n get taxCharges(): number {\n return this.taxInfoComponent != null && this.taxInfoComponent.taxRate != null ?\n (this.taxInfoComponent.taxRate / 100) * this.subtotal :\n 0;\n }\n\n get total(): number {\n return (this.subtotal + this.taxCharges) || 0;\n }\n}\n","

{{'goPremium' | i18n}}

{{'alreadyPremiumFromOrg' | i18n}}

{{'premiumUpgradeUnlockFeatures' | i18n}}

  • {{'premiumSignUpStorage' | i18n}}
  • {{'premiumSignUpTwoStep' | i18n}}
  • {{'premiumSignUpEmergency' |i18n}}
  • {{'premiumSignUpReports' | i18n}}
  • {{'premiumSignUpTotp' | i18n}}
  • {{'premiumSignUpSupport' | i18n}}
  • {{'premiumSignUpFuture' | i18n}}

{{'premiumPrice' | i18n : (premiumPrice | currency:'$')}}

{{'purchasePremium' | i18n}}

{{'uploadLicenseFilePremium' | i18n}}

{{'licenseFileDesc' | i18n : 'bitwarden_premium_license.json'}}

{{'addons' | i18n}}

{{'additionalStorageIntervalDesc' | i18n : '1 GB' : (storageGbPrice | currency:'$') : ('year' | i18n)}}

{{'summary' | i18n}}

{{'premiumMembership' | i18n}}: {{premiumPrice | currency:'$'}}
{{'additionalStorageGb' | i18n}}: {{additionalStorage || 0}} GB × {{storageGbPrice | currency:'$'}} = {{additionalStorageTotal | currency:'$'}}

{{'paymentInformation' | i18n}}

{{ 'planPrice' | i18n }}: {{ subtotal | currency: 'USD $' }}
{{ 'estimatedTax' | i18n }}: {{ taxCharges | currency: 'USD $' }}

{{'total' | i18n}}: {{total | currency:'USD $'}}/{{'year' | i18n}}

{{'paymentChargedAnnually' | i18n}}
","import {\n Component,\n NgZone,\n OnDestroy,\n OnInit,\n} from '@angular/core';\n\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { TokenService } from 'jslib-common/abstractions/token.service';\n\nimport { BroadcasterService } from 'jslib-angular/services/broadcaster.service';\n\nconst BroadcasterSubscriptionId = 'SettingsComponent';\n\n@Component({\n selector: 'app-settings',\n templateUrl: 'settings.component.html',\n})\nexport class SettingsComponent implements OnInit, OnDestroy {\n premium: boolean;\n selfHosted: boolean;\n\n constructor(private tokenService: TokenService, private broadcasterService: BroadcasterService,\n private ngZone: NgZone, private platformUtilsService: PlatformUtilsService) { }\n\n async ngOnInit() {\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, async (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case 'purchasedPremium':\n await this.load();\n break;\n default:\n }\n });\n });\n\n this.selfHosted = await this.platformUtilsService.isSelfHost();\n await this.load();\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n async load() {\n this.premium = await this.tokenService.getPremium();\n }\n}\n"," ","import {\n Component,\n OnInit,\n} from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { SubscriptionResponse } from 'jslib-common/models/response/subscriptionResponse';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { TokenService } from 'jslib-common/abstractions/token.service';\n\n@Component({\n selector: 'app-user-subscription',\n templateUrl: 'user-subscription.component.html',\n})\nexport class UserSubscriptionComponent implements OnInit {\n loading = false;\n firstLoaded = false;\n adjustStorageAdd = true;\n showAdjustStorage = false;\n showUpdateLicense = false;\n sub: SubscriptionResponse;\n selfHosted = false;\n\n cancelPromise: Promise;\n reinstatePromise: Promise;\n\n constructor(private tokenService: TokenService, private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService, private i18nService: I18nService,\n private toasterService: ToasterService, private router: Router) {\n this.selfHosted = platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n await this.load();\n this.firstLoaded = true;\n }\n\n async load() {\n if (this.loading) {\n return;\n }\n\n if (this.tokenService.getPremium()) {\n this.loading = true;\n this.sub = await this.apiService.getUserSubscription();\n } else {\n this.router.navigate(['/settings/premium']);\n return;\n }\n\n this.loading = false;\n }\n\n async reinstate() {\n if (this.loading) {\n return;\n }\n\n if (this.usingInAppPurchase) {\n this.platformUtilsService.showDialog(this.i18nService.t('manageSubscriptionFromStore'),\n this.i18nService.t('cancelSubscription'), null, null, 'warning');\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(this.i18nService.t('reinstateConfirmation'),\n this.i18nService.t('reinstateSubscription'), this.i18nService.t('yes'), this.i18nService.t('cancel'));\n if (!confirmed) {\n return;\n }\n\n try {\n this.reinstatePromise = this.apiService.postReinstatePremium();\n await this.reinstatePromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('reinstated'));\n this.load();\n } catch { }\n }\n\n async cancel() {\n if (this.loading) {\n return;\n }\n\n if (this.usingInAppPurchase) {\n this.platformUtilsService.showDialog(this.i18nService.t('manageSubscriptionFromStore'),\n this.i18nService.t('cancelSubscription'), null, null, 'warning');\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(this.i18nService.t('cancelConfirmation'),\n this.i18nService.t('cancelSubscription'), this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return;\n }\n\n try {\n this.cancelPromise = this.apiService.postCancelPremium();\n await this.cancelPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('canceledSubscription'));\n this.load();\n } catch { }\n }\n\n downloadLicense() {\n if (this.loading) {\n return;\n }\n\n const licenseString = JSON.stringify(this.sub.license, null, 2);\n this.platformUtilsService.saveFile(window, licenseString, null, 'bitwarden_premium_license.json');\n }\n\n updateLicense() {\n if (this.loading) {\n return;\n }\n this.showUpdateLicense = true;\n }\n\n closeUpdateLicense(load: boolean) {\n this.showUpdateLicense = false;\n if (load) {\n this.load();\n }\n }\n\n adjustStorage(add: boolean) {\n if (this.usingInAppPurchase) {\n this.platformUtilsService.showDialog(this.i18nService.t('cannotPerformInAppPurchase'),\n this.i18nService.t(add ? 'addStorage' : 'removeStorage'), null, null, 'warning');\n return;\n }\n this.adjustStorageAdd = add;\n this.showAdjustStorage = true;\n }\n\n closeStorage(load: boolean) {\n this.showAdjustStorage = false;\n if (load) {\n this.load();\n }\n }\n\n get subscriptionMarkedForCancel() {\n return this.subscription != null && !this.subscription.cancelled && this.subscription.cancelAtEndDate;\n }\n\n get subscription() {\n return this.sub != null ? this.sub.subscription : null;\n }\n\n get nextInvoice() {\n return this.sub != null ? this.sub.upcomingInvoice : null;\n }\n\n get storagePercentage() {\n return this.sub != null && this.sub.maxStorageGb ?\n +(100 * (this.sub.storageGb / this.sub.maxStorageGb)).toFixed(2) : 0;\n }\n\n get storageProgressWidth() {\n return this.storagePercentage < 5 ? 5 : 0;\n }\n\n get usingInAppPurchase() {\n return this.sub != null ? this.sub.usingInAppPurchase : false;\n }\n}\n","

{{'premiumMembership' | i18n}} {{'loading' | i18n}}

{{'loading' | i18n}} {{'subscriptionCanceled' | i18n}}

{{'subscriptionPendingCanceled' | i18n}}

{{'expiration' | i18n}}
{{sub.expiration | date:'mediumDate'}}
{{'neverExpires' | i18n}}
{{'status' | i18n}}
{{(subscription && subscription.status) || '-'}} {{'pendingCancellation' | i18n}}
{{'nextCharge' | i18n}}
{{nextInvoice ? ((nextInvoice.date | date: 'mediumDate') + ', ' + (nextInvoice.amount | currency:'$')) : '-'}}
{{'details' | i18n}}
{{i.name}} {{i.quantity > 1 ? '×' + i.quantity : ''}} @ {{i.amount | currency:'$'}} {{(i.quantity * i.amount) | currency:'$'}} /{{i.interval | i18n}}
{{'manageSubscription' | i18n}}

{{'updateLicense' | i18n}}

{{'storage' | i18n}}

{{'subscriptionStorage' | i18n : sub.maxStorageGb || 0 : sub.storageName || '0 MB'}}

{{(storagePercentage / 100) | percent}}
","import {\n Component,\n OnInit,\n} from '@angular/core';\n\nimport { AuditService } from 'jslib-common/abstractions/audit.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\nimport { BreachAccountResponse } from 'jslib-common/models/response/breachAccountResponse';\n\n@Component({\n selector: 'app-breach-report',\n templateUrl: 'breach-report.component.html',\n})\nexport class BreachReportComponent implements OnInit {\n error = false;\n username: string;\n checkedUsername: string;\n breachedAccounts: BreachAccountResponse[] = [];\n formPromise: Promise;\n\n constructor(private auditService: AuditService, private userService: UserService) { }\n\n async ngOnInit() {\n this.username = await this.userService.getEmail();\n }\n\n async submit() {\n this.error = false;\n this.username = this.username.toLowerCase();\n try {\n this.formPromise = this.auditService.breachedAccounts(this.username);\n this.breachedAccounts = await this.formPromise;\n } catch {\n this.error = true;\n }\n this.checkedUsername = this.username;\n }\n}\n","

{{'dataBreachReport' | i18n}}

{{'breachDesc' | i18n}}

{{'breachCheckUsernameEmail' | i18n}}

{{'reportError' | i18n}}...

{{'breachUsernameNotFound' | i18n : checkedUsername}} {{'breachUsernameFound' | i18n : checkedUsername : breachedAccounts.length}}
  • \"\"

    {{a.title}}

    {{'compromisedData' | i18n}}:

    • {{d}}
    {{'website' | i18n}}
    {{a.domain}}
    {{'affectedUsers' | i18n}}
    {{a.pwnCount | number}}
    {{'breachOccurred' | i18n}}
    {{a.breachDate | date: 'mediumDate'}}
    {{'breachReported' | i18n}}
    {{a.addedDate | date: 'mediumDate'}}
","import {\n Component,\n ComponentFactoryResolver,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport {\n PasswordGeneratorComponent as BasePasswordGeneratorComponent,\n} from 'jslib-angular/components/password-generator.component';\n\nimport { ModalComponent } from '../modal.component';\nimport { PasswordGeneratorHistoryComponent } from './password-generator-history.component';\n\n@Component({\n selector: 'app-password-generator',\n templateUrl: 'password-generator.component.html',\n})\nexport class PasswordGeneratorComponent extends BasePasswordGeneratorComponent {\n @ViewChild('historyTemplate', { read: ViewContainerRef, static: true }) historyModalRef: ViewContainerRef;\n\n private modal: ModalComponent = null;\n\n constructor(passwordGenerationService: PasswordGenerationService, platformUtilsService: PlatformUtilsService,\n i18nService: I18nService, private componentFactoryResolver: ComponentFactoryResolver) {\n super(passwordGenerationService, platformUtilsService, i18nService, window);\n }\n\n history() {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.historyModalRef.createComponent(factory).instance;\n this.modal.show(PasswordGeneratorHistoryComponent, this.historyModalRef);\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n lengthChanged() {\n document.getElementById('length').focus();\n }\n\n minNumberChanged() {\n document.getElementById('min-number').focus();\n }\n\n minSpecialChanged() {\n document.getElementById('min-special').focus();\n }\n}\n","

{{'passwordGenerator' | i18n}}

{{'passwordGeneratorPolicyInEffect' | i18n}}
","import { Component } from '@angular/core';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport {\n PasswordGeneratorHistoryComponent as BasePasswordGeneratorHistoryComponent,\n} from 'jslib-angular/components/password-generator-history.component';\n\n@Component({\n selector: 'app-password-generator-history',\n templateUrl: 'password-generator-history.component.html',\n})\nexport class PasswordGeneratorHistoryComponent extends BasePasswordGeneratorHistoryComponent {\n constructor(passwordGenerationService: PasswordGenerationService, platformUtilsService: PlatformUtilsService,\n i18nService: I18nService) {\n super(passwordGenerationService, platformUtilsService, i18nService, window);\n }\n}\n","

{{'passwordHistory' | i18n}}

  • {{h.date | date:'medium'}}
{{'noPasswordsInList' | i18n}}
","import {\n Component,\n OnInit,\n} from '@angular/core';\n\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\n@Component({\n selector: 'app-tools',\n templateUrl: 'tools.component.html',\n})\nexport class ToolsComponent implements OnInit {\n canAccessPremium = false;\n\n constructor(private userService: UserService, private messagingService: MessagingService) { }\n\n async ngOnInit() {\n this.canAccessPremium = await this.userService.canAccessPremium();\n }\n\n premiumRequired() {\n if (!this.canAccessPremium) {\n this.messagingService.send('premiumRequired');\n return;\n }\n }\n}\n"," ","import {\n ChangeDetectorRef,\n Component,\n ComponentFactoryResolver,\n NgZone,\n OnDestroy,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { CipherType } from 'jslib-common/enums/cipherType';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nimport { ModalComponent } from '../modal.component';\n\nimport { OrganizationsComponent } from '../settings/organizations.component';\nimport { UpdateKeyComponent } from '../settings/update-key.component';\nimport { AddEditComponent } from './add-edit.component';\nimport { AttachmentsComponent } from './attachments.component';\nimport { CiphersComponent } from './ciphers.component';\nimport { CollectionsComponent } from './collections.component';\nimport { FolderAddEditComponent } from './folder-add-edit.component';\nimport { GroupingsComponent } from './groupings.component';\nimport { ShareComponent } from './share.component';\n\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\nimport { TokenService } from 'jslib-common/abstractions/token.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { BroadcasterService } from 'jslib-angular/services/broadcaster.service';\n\nconst BroadcasterSubscriptionId = 'VaultComponent';\n\n@Component({\n selector: 'app-vault',\n templateUrl: 'vault.component.html',\n})\nexport class VaultComponent implements OnInit, OnDestroy {\n @ViewChild(GroupingsComponent, { static: true }) groupingsComponent: GroupingsComponent;\n @ViewChild(CiphersComponent, { static: true }) ciphersComponent: CiphersComponent;\n @ViewChild(OrganizationsComponent, { static: true }) organizationsComponent: OrganizationsComponent;\n @ViewChild('attachments', { read: ViewContainerRef, static: true }) attachmentsModalRef: ViewContainerRef;\n @ViewChild('folderAddEdit', { read: ViewContainerRef, static: true }) folderAddEditModalRef: ViewContainerRef;\n @ViewChild('cipherAddEdit', { read: ViewContainerRef, static: true }) cipherAddEditModalRef: ViewContainerRef;\n @ViewChild('share', { read: ViewContainerRef, static: true }) shareModalRef: ViewContainerRef;\n @ViewChild('collections', { read: ViewContainerRef, static: true }) collectionsModalRef: ViewContainerRef;\n @ViewChild('updateKeyTemplate', { read: ViewContainerRef, static: true }) updateKeyModalRef: ViewContainerRef;\n\n favorites: boolean = false;\n type: CipherType = null;\n folderId: string = null;\n collectionId: string = null;\n showVerifyEmail = false;\n showBrowserOutdated = false;\n showUpdateKey = false;\n showPremiumCallout = false;\n deleted: boolean = false;\n trashCleanupWarning: string = null;\n\n modal: ModalComponent = null;\n\n constructor(private syncService: SyncService, private route: ActivatedRoute,\n private router: Router, private changeDetectorRef: ChangeDetectorRef,\n private i18nService: I18nService, private componentFactoryResolver: ComponentFactoryResolver,\n private tokenService: TokenService, private cryptoService: CryptoService,\n private messagingService: MessagingService, private userService: UserService,\n private platformUtilsService: PlatformUtilsService, private broadcasterService: BroadcasterService,\n private ngZone: NgZone) { }\n\n async ngOnInit() {\n this.showVerifyEmail = !(await this.tokenService.getEmailVerified());\n this.showBrowserOutdated = window.navigator.userAgent.indexOf('MSIE') !== -1;\n this.trashCleanupWarning = this.i18nService.t(\n this.platformUtilsService.isSelfHost() ? 'trashCleanupWarningSelfHosted' : 'trashCleanupWarning'\n );\n\n const queryParamsSub = this.route.queryParams.subscribe(async params => {\n await this.syncService.fullSync(false);\n\n this.showUpdateKey = !(await this.cryptoService.hasEncKey());\n const canAccessPremium = await this.userService.canAccessPremium();\n this.showPremiumCallout = !this.showVerifyEmail && !canAccessPremium &&\n !this.platformUtilsService.isSelfHost();\n\n await Promise.all([\n this.groupingsComponent.load(),\n this.organizationsComponent.load(),\n ]);\n\n if (params == null) {\n this.groupingsComponent.selectedAll = true;\n await this.ciphersComponent.reload();\n } else {\n if (params.deleted) {\n this.groupingsComponent.selectedTrash = true;\n await this.filterDeleted();\n } else if (params.favorites) {\n this.groupingsComponent.selectedFavorites = true;\n await this.filterFavorites();\n } else if (params.type) {\n const t = parseInt(params.type, null);\n this.groupingsComponent.selectedType = t;\n await this.filterCipherType(t);\n } else if (params.folderId) {\n this.groupingsComponent.selectedFolder = true;\n this.groupingsComponent.selectedFolderId = params.folderId;\n await this.filterFolder(params.folderId);\n } else if (params.collectionId) {\n this.groupingsComponent.selectedCollectionId = params.collectionId;\n await this.filterCollection(params.collectionId);\n } else {\n this.groupingsComponent.selectedAll = true;\n await this.ciphersComponent.reload();\n }\n }\n\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case 'syncCompleted':\n if (message.successfully) {\n await Promise.all([\n this.groupingsComponent.load(),\n this.organizationsComponent.load(),\n this.ciphersComponent.load(this.ciphersComponent.filter),\n ]);\n this.changeDetectorRef.detectChanges();\n }\n break;\n }\n });\n });\n\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n async clearGroupingFilters() {\n this.ciphersComponent.showAddNew = true;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchVault');\n await this.ciphersComponent.reload();\n this.clearFilters();\n this.go();\n }\n\n async filterFavorites() {\n this.ciphersComponent.showAddNew = true;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchFavorites');\n await this.ciphersComponent.reload(c => c.favorite);\n this.clearFilters();\n this.favorites = true;\n this.go();\n }\n\n async filterDeleted() {\n this.ciphersComponent.showAddNew = false;\n this.ciphersComponent.deleted = true;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchTrash');\n await this.ciphersComponent.reload(null, true);\n this.clearFilters();\n this.deleted = true;\n this.go();\n }\n\n async filterCipherType(type: CipherType) {\n this.ciphersComponent.showAddNew = true;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchType');\n await this.ciphersComponent.reload(c => c.type === type);\n this.clearFilters();\n this.type = type;\n this.go();\n }\n\n async filterFolder(folderId: string) {\n this.ciphersComponent.showAddNew = true;\n folderId = folderId === 'none' ? null : folderId;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchFolder');\n await this.ciphersComponent.reload(c => c.folderId === folderId);\n this.clearFilters();\n this.folderId = folderId == null ? 'none' : folderId;\n this.go();\n }\n\n async filterCollection(collectionId: string) {\n this.ciphersComponent.showAddNew = true;\n this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchCollection');\n await this.ciphersComponent.reload(c => c.collectionIds != null &&\n c.collectionIds.indexOf(collectionId) > -1);\n this.clearFilters();\n this.collectionId = collectionId;\n this.go();\n }\n\n filterSearchText(searchText: string) {\n this.ciphersComponent.searchText = searchText;\n this.ciphersComponent.search(200);\n }\n\n async editCipherAttachments(cipher: CipherView) {\n const canAccessPremium = await this.userService.canAccessPremium();\n if (cipher.organizationId == null && !canAccessPremium) {\n this.messagingService.send('premiumRequired');\n return;\n } else if (cipher.organizationId != null) {\n const org = await this.userService.getOrganization(cipher.organizationId);\n if (org != null && (org.maxStorageGb == null || org.maxStorageGb === 0)) {\n this.messagingService.send('upgradeOrganization', { organizationId: cipher.organizationId });\n return;\n }\n }\n\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.attachmentsModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(AttachmentsComponent, this.attachmentsModalRef);\n\n childComponent.cipherId = cipher.id;\n let madeAttachmentChanges = false;\n childComponent.onUploadedAttachment.subscribe(() => madeAttachmentChanges = true);\n childComponent.onDeletedAttachment.subscribe(() => madeAttachmentChanges = true);\n childComponent.onReuploadedAttachment.subscribe(() => madeAttachmentChanges = true);\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n if (madeAttachmentChanges) {\n await this.ciphersComponent.refresh();\n }\n madeAttachmentChanges = false;\n });\n }\n\n shareCipher(cipher: CipherView) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.shareModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(ShareComponent, this.shareModalRef);\n\n childComponent.cipherId = cipher.id;\n childComponent.onSharedCipher.subscribe(async () => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n editCipherCollections(cipher: CipherView) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.collectionsModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(CollectionsComponent, this.collectionsModalRef);\n\n childComponent.cipherId = cipher.id;\n childComponent.onSavedCollections.subscribe(async () => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n async addFolder() {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.folderAddEditModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n FolderAddEditComponent, this.folderAddEditModalRef);\n\n childComponent.folderId = null;\n childComponent.onSavedFolder.subscribe(async () => {\n this.modal.close();\n await this.groupingsComponent.loadFolders();\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n async editFolder(folderId: string) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.folderAddEditModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n FolderAddEditComponent, this.folderAddEditModalRef);\n\n childComponent.folderId = folderId;\n childComponent.onSavedFolder.subscribe(async () => {\n this.modal.close();\n await this.groupingsComponent.loadFolders();\n });\n childComponent.onDeletedFolder.subscribe(async () => {\n this.modal.close();\n await this.groupingsComponent.loadFolders();\n await this.filterFolder('none');\n this.groupingsComponent.selectedFolderId = null;\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n addCipher() {\n const component = this.editCipher(null);\n component.type = this.type;\n component.folderId = this.folderId === 'none' ? null : this.folderId;\n if (this.collectionId != null) {\n const collection = this.groupingsComponent.collections.filter(c => c.id === this.collectionId);\n if (collection.length > 0) {\n component.organizationId = collection[0].organizationId;\n component.collectionIds = [this.collectionId];\n }\n }\n }\n\n editCipher(cipher: CipherView) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.cipherAddEditModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n AddEditComponent, this.cipherAddEditModalRef);\n\n childComponent.cipherId = cipher == null ? null : cipher.id;\n childComponent.onSavedCipher.subscribe(async (c: CipherView) => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n childComponent.onDeletedCipher.subscribe(async (c: CipherView) => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n childComponent.onRestoredCipher.subscribe(async (c: CipherView) => {\n this.modal.close();\n await this.ciphersComponent.refresh();\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n\n return childComponent;\n }\n\n cloneCipher(cipher: CipherView) {\n const component = this.editCipher(cipher);\n component.cloneMode = true;\n }\n\n updateKey() {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.updateKeyModalRef.createComponent(factory).instance;\n this.modal.show(UpdateKeyComponent, this.updateKeyModalRef);\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n private clearFilters() {\n this.folderId = null;\n this.collectionId = null;\n this.favorites = false;\n this.type = null;\n this.deleted = false;\n }\n\n private go(queryParams: any = null) {\n if (queryParams == null) {\n queryParams = {\n favorites: this.favorites ? true : null,\n type: this.type,\n folderId: this.folderId,\n collectionId: this.collectionId,\n deleted: this.deleted ? true : null,\n };\n }\n\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: queryParams,\n replaceUrl: true,\n });\n }\n}\n","

{{'myVault' | i18n}} {{'loading' | i18n}}

{{trashCleanupWarning}}
{{'updateKeyTitle' | i18n}}

{{'updateEncryptionKeyShortDesc' | i18n}}

{{'updateBrowser' | i18n}}

{{'updateBrowserDesc' | i18n}}

{{'updateBrowser' | i18n}}
{{'goPremium' | i18n}}

{{'premiumUpgradeUnlockFeatures' | i18n}}

{{'goPremium' | i18n}}
{{'organizations' | i18n}}
","import { Component } from '@angular/core';\n\nimport {\n Toast,\n ToasterService,\n} from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\n\nimport { EncString } from 'jslib-common/models/domain/encString';\n\nimport { CipherWithIdRequest } from 'jslib-common/models/request/cipherWithIdRequest';\nimport { FolderWithIdRequest } from 'jslib-common/models/request/folderWithIdRequest';\nimport { UpdateKeyRequest } from 'jslib-common/models/request/updateKeyRequest';\n\n@Component({\n selector: 'app-update-key',\n templateUrl: 'update-key.component.html',\n})\nexport class UpdateKeyComponent {\n masterPassword: string;\n formPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService, private cryptoService: CryptoService,\n private messagingService: MessagingService, private syncService: SyncService,\n private folderService: FolderService, private cipherService: CipherService) { }\n\n async submit() {\n const hasEncKey = await this.cryptoService.hasEncKey();\n if (hasEncKey) {\n return;\n }\n\n if (this.masterPassword == null || this.masterPassword === '') {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassRequired'));\n return;\n }\n\n try {\n this.formPromise = this.makeRequest().then(request => {\n return this.apiService.postAccountKey(request);\n });\n await this.formPromise;\n const toast: Toast = {\n type: 'success',\n title: this.i18nService.t('keyUpdated'),\n body: this.i18nService.t('logBackInOthersToo'),\n timeout: 15000,\n };\n this.toasterService.popAsync(toast);\n this.messagingService.send('logout');\n } catch { }\n }\n\n private async makeRequest(): Promise {\n const key = await this.cryptoService.getKey();\n const encKey = await this.cryptoService.makeEncKey(key);\n const privateKey = await this.cryptoService.getPrivateKey();\n let encPrivateKey: EncString = null;\n if (privateKey != null) {\n encPrivateKey = await this.cryptoService.encrypt(privateKey, encKey[0]);\n }\n const request = new UpdateKeyRequest();\n request.privateKey = encPrivateKey != null ? encPrivateKey.encryptedString : null;\n request.key = encKey[1].encryptedString;\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n\n await this.syncService.fullSync(true);\n\n const folders = await this.folderService.getAllDecrypted();\n for (let i = 0; i < folders.length; i++) {\n if (folders[i].id == null) {\n continue;\n }\n const folder = await this.folderService.encrypt(folders[i], encKey[0]);\n request.folders.push(new FolderWithIdRequest(folder));\n }\n\n const ciphers = await this.cipherService.getAllDecrypted();\n for (let i = 0; i < ciphers.length; i++) {\n if (ciphers[i].organizationId != null) {\n continue;\n }\n const cipher = await this.cipherService.encrypt(ciphers[i], encKey[0]);\n request.ciphers.push(new CipherWithIdRequest(cipher));\n }\n\n return request;\n }\n}\n","

{{'updateEncryptionKey' | i18n}}

{{'updateEncryptionKeyShortDesc' | i18n}} {{'updateEncryptionKeyDesc' | i18n}} {{'learnMore' | i18n}}

{{'updateEncryptionKeyWarning' | i18n}}
","import { Component } from '@angular/core';\n\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport {\n FolderAddEditComponent as BaseFolderAddEditComponent,\n} from 'jslib-angular/components/folder-add-edit.component';\n\n@Component({\n selector: 'app-folder-add-edit',\n templateUrl: 'folder-add-edit.component.html',\n})\nexport class FolderAddEditComponent extends BaseFolderAddEditComponent {\n constructor(folderService: FolderService, i18nService: I18nService,\n platformUtilsService: PlatformUtilsService) {\n super(folderService, i18nService, platformUtilsService);\n }\n}\n","

{{title}}

","import {\n Component,\n OnDestroy,\n} from '@angular/core';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { CollectionView } from 'jslib-common/models/view/collectionView';\n\nimport { ShareComponent as BaseShareComponent } from 'jslib-angular/components/share.component';\n\n@Component({\n selector: 'app-vault-share',\n templateUrl: 'share.component.html',\n})\nexport class ShareComponent extends BaseShareComponent implements OnDestroy {\n constructor(collectionService: CollectionService, platformUtilsService: PlatformUtilsService,\n i18nService: I18nService, userService: UserService,\n cipherService: CipherService) {\n super(collectionService, platformUtilsService, i18nService, userService, cipherService);\n }\n\n ngOnDestroy() {\n this.selectAll(false);\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n }\n\n selectAll(select: boolean) {\n const collections = select ? this.collections : this.writeableCollections;\n collections.forEach(c => this.check(c, select));\n }\n}\n","

{{'share' | i18n}} {{cipher.name}}

{{'noOrganizationsList' | i18n}}

{{'shareDesc' | i18n}}

{{'collections' | i18n}}

{{'noCollectionsInList' | i18n}}
{{c.name}}
{{'newOrganization' | i18n}}
","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-send-info',\n templateUrl: 'send-info.component.html',\n})\nexport class SendInfoComponent { }\n","
{{'sendVaultCardProductDesc' | i18n}} {{'sendVaultCardLearnMore' | i18n}}, {{'sendVaultCardSee' | i18n}} {{'sendVaultCardHowItWorks' | i18n}}, {{'sendVaultCardOr' | i18n}} {{'sendVaultCardTryItNow' | i18n}}.
","import { Component } from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\n@Component({\n selector: 'app-verify-email',\n templateUrl: 'verify-email.component.html',\n})\nexport class VerifyEmailComponent {\n actionPromise: Promise;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService) { }\n\n async send() {\n if (this.actionPromise != null) {\n return;\n }\n try {\n this.actionPromise = this.apiService.postAccountVerifyEmail();\n await this.actionPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('checkInboxForVerification'));\n } catch { }\n this.actionPromise = null;\n }\n}\n","
{{'verifyEmail' | i18n}}

{{'verifyEmailDesc' | i18n}}

","import { Injectable } from '@angular/core';\nimport {\n ActivatedRouteSnapshot,\n CanActivate,\n Router,\n} from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\n@Injectable()\nexport class OrganizationGuardService implements CanActivate {\n constructor(private userService: UserService, private router: Router,\n private toasterService: ToasterService, private i18nService: I18nService) { }\n\n async canActivate(route: ActivatedRouteSnapshot) {\n const org = await this.userService.getOrganization(route.params.organizationId);\n if (org == null) {\n this.router.navigate(['/']);\n return false;\n }\n if (!org.isOwner && !org.enabled) {\n this.toasterService.popAsync('error', null, this.i18nService.t('organizationIsDisabled'));\n this.router.navigate(['/']);\n return false;\n }\n\n return true;\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n ActivatedRouteSnapshot,\n CanActivate,\n Router,\n} from '@angular/router';\n\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { Permissions } from 'jslib-common/enums/permissions';\n\n@Injectable()\nexport class OrganizationTypeGuardService implements CanActivate {\n constructor(private userService: UserService, private router: Router) { }\n\n async canActivate(route: ActivatedRouteSnapshot) {\n const org = await this.userService.getOrganization(route.params.organizationId);\n const permissions = route.data == null ? null : route.data.permissions as Permissions[];\n\n if (\n (permissions.indexOf(Permissions.AccessBusinessPortal) !== -1 && org.canAccessBusinessPortal) ||\n (permissions.indexOf(Permissions.AccessEventLogs) !== -1 && org.canAccessEventLogs) ||\n (permissions.indexOf(Permissions.AccessImportExport) !== -1 && org.canAccessImportExport) ||\n (permissions.indexOf(Permissions.AccessReports) !== -1 && org.canAccessReports) ||\n (permissions.indexOf(Permissions.ManageAllCollections) !== -1 && org.canManageAllCollections) ||\n (permissions.indexOf(Permissions.ManageAssignedCollections) !== -1 && org.canManageAssignedCollections) ||\n (permissions.indexOf(Permissions.ManageGroups) !== -1 && org.canManageGroups) ||\n (permissions.indexOf(Permissions.ManageOrganization) !== -1 && org.isOwner) ||\n (permissions.indexOf(Permissions.ManagePolicies) !== -1 && org.canManagePolicies) ||\n (permissions.indexOf(Permissions.ManageUsers) !== -1 && org.canManageUsers) ||\n (permissions.indexOf(Permissions.ManageUsersPassword) !== -1 && org.canManageUsersPassword)\n ) {\n return true;\n }\n\n this.router.navigate(['/organizations', org.id]);\n return false;\n }\n}\n","export enum Permissions {\n AccessBusinessPortal,\n AccessEventLogs,\n AccessImportExport,\n AccessReports,\n ManageAllCollections,\n ManageAssignedCollections,\n ManageGroups,\n ManageOrganization,\n ManagePolicies,\n ManageUsers,\n ManageUsersPassword,\n}\n","import { Injectable } from '@angular/core';\nimport {\n ActivatedRouteSnapshot,\n CanActivate,\n Router,\n RouterStateSnapshot,\n} from '@angular/router';\n\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\nimport { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service';\n\n@Injectable()\nexport class AuthGuardService implements CanActivate {\n constructor(private vaultTimeoutService: VaultTimeoutService, private userService: UserService,\n private router: Router, private messagingService: MessagingService) { }\n\n async canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot) {\n const isAuthed = await this.userService.isAuthenticated();\n if (!isAuthed) {\n this.messagingService.send('authBlocked');\n return false;\n }\n\n const locked = await this.vaultTimeoutService.isLocked();\n if (locked) {\n if (routerState != null) {\n this.messagingService.send('lockedUrl', { url: routerState.url });\n }\n this.router.navigate(['lock'], { queryParams: { promptBiometric: true }});\n return false;\n }\n\n return true;\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n CanActivate,\n Router,\n} from '@angular/router';\n\nimport { UserService } from 'jslib-common/abstractions/user.service';\nimport { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service';\n\n@Injectable()\nexport class LockGuardService implements CanActivate {\n\n protected homepage = 'vault';\n constructor(private vaultTimeoutService: VaultTimeoutService, private userService: UserService,\n private router: Router) { }\n\n async canActivate() {\n const isAuthed = await this.userService.isAuthenticated();\n if (isAuthed) {\n const locked = await this.vaultTimeoutService.isLocked();\n if (locked) {\n return true;\n } else {\n this.router.navigate([this.homepage]);\n return false;\n }\n }\n\n this.router.navigate(['']);\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n ActivatedRouteSnapshot,\n CanActivate,\n Router,\n} from '@angular/router';\n\nimport { UserService } from 'jslib-common/abstractions/user.service';\nimport { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service';\n\n@Injectable()\nexport class UnauthGuardService implements CanActivate {\n\n protected homepage = 'vault';\n constructor(private vaultTimeoutService: VaultTimeoutService, private userService: UserService,\n private router: Router) { }\n\n async canActivate() {\n const isAuthed = await this.userService.isAuthenticated();\n if (isAuthed) {\n const locked = await this.vaultTimeoutService.isLocked();\n if (locked) {\n this.router.navigate(['lock']);\n } else {\n this.router.navigate([this.homepage]);\n }\n return false;\n }\n\n return true;\n }\n}\n","import {\n Component,\n ComponentFactoryResolver,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\n\nimport { CipherData } from 'jslib-common/models/data';\nimport { Cipher, SymmetricCryptoKey } from 'jslib-common/models/domain';\nimport { EmergencyAccessViewResponse } from 'jslib-common/models/response/emergencyAccessResponse';\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nimport { ModalComponent } from '../modal.component';\n\nimport { EmergencyAccessAttachmentsComponent } from './emergency-access-attachments.component';\nimport { EmergencyAddEditComponent } from './emergency-add-edit.component';\n\n@Component({\n selector: 'emergency-access-view',\n templateUrl: 'emergency-access-view.component.html',\n})\nexport class EmergencyAccessViewComponent implements OnInit {\n @ViewChild('cipherAddEdit', { read: ViewContainerRef, static: true }) cipherAddEditModalRef: ViewContainerRef;\n @ViewChild('attachments', { read: ViewContainerRef, static: true }) attachmentsModalRef: ViewContainerRef;\n\n id: string;\n ciphers: CipherView[] = [];\n\n private modal: ModalComponent = null;\n\n constructor(private cipherService: CipherService, private cryptoService: CryptoService,\n private componentFactoryResolver: ComponentFactoryResolver, private router: Router,\n private route: ActivatedRoute, private apiService: ApiService) { }\n\n ngOnInit() {\n this.route.params.subscribe(qParams => {\n if (qParams.id == null) {\n return this.router.navigate(['settings/emergency-access']);\n }\n\n this.id = qParams.id;\n\n this.load();\n });\n }\n\n selectCipher(cipher: CipherView) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.cipherAddEditModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(EmergencyAddEditComponent, this.cipherAddEditModalRef);\n\n childComponent.cipherId = cipher == null ? null : cipher.id;\n childComponent.cipher = cipher;\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n\n return childComponent;\n }\n\n async load() {\n const response = await this.apiService.postEmergencyAccessView(this.id);\n this.ciphers = await this.getAllCiphers(response);\n }\n\n async viewAttachments(cipher: CipherView) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.attachmentsModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(EmergencyAccessAttachmentsComponent, this.attachmentsModalRef);\n\n childComponent.cipher = cipher;\n childComponent.emergencyAccessId = this.id;\n\n this.modal.onClosed.subscribe(async () => {\n this.modal = null;\n });\n }\n\n protected async getAllCiphers(response: EmergencyAccessViewResponse): Promise {\n const ciphers = response.ciphers;\n\n const decCiphers: CipherView[] = [];\n const oldKeyBuffer = await this.cryptoService.rsaDecrypt(response.keyEncrypted);\n const oldEncKey = new SymmetricCryptoKey(oldKeyBuffer);\n\n const promises: any[] = [];\n ciphers.forEach(cipherResponse => {\n const cipherData = new CipherData(cipherResponse);\n const cipher = new Cipher(cipherData);\n promises.push(cipher.decrypt(oldEncKey).then(c => decCiphers.push(c)));\n });\n\n await Promise.all(promises);\n decCiphers.sort(this.cipherService.getLocaleSortingFunction());\n\n return decCiphers;\n }\n}\n","

{{'vault' | i18n}}

{{c.name}} {{'shared' | i18n}} {{'attachments' | i18n}}
{{c.subTitle}}
","import { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class EncryptedObject {\n iv: ArrayBuffer;\n data: ArrayBuffer;\n mac: ArrayBuffer;\n key: SymmetricCryptoKey;\n}\n","export class EnvironmentUrls {\n base: string;\n api: string;\n identity: string;\n events: string;\n}\n","export class GeneratedPasswordHistory {\n password: string;\n date: number;\n\n constructor(password: string, date: number) {\n this.password = password;\n this.date = date;\n }\n}\n","import { Component } from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { AttachmentView } from 'jslib-common/models/view/attachmentView';\n\nimport { AttachmentsComponent as BaseAttachmentsComponent } from 'jslib-angular/components/attachments.component';\n\n@Component({\n selector: 'emergency-access-attachments',\n templateUrl: '../vault/attachments.component.html',\n})\nexport class EmergencyAccessAttachmentsComponent extends BaseAttachmentsComponent {\n viewOnly = true;\n canAccessAttachments = true;\n\n constructor(cipherService: CipherService, i18nService: I18nService,\n cryptoService: CryptoService, userService: UserService,\n platformUtilsService: PlatformUtilsService, apiService: ApiService) {\n super(cipherService, i18nService, cryptoService, userService, platformUtilsService, apiService, window);\n }\n\n protected async init() {\n // Do nothing since cipher is already decoded\n }\n\n protected showFixOldAttachments(attachment: AttachmentView) {\n return false;\n }\n}\n","import { Component } from '@angular/core';\n\nimport { AuditService } from 'jslib-common/abstractions/audit.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { EventService } from 'jslib-common/abstractions/event.service';\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { TotpService } from 'jslib-common/abstractions/totp.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { Cipher } from 'jslib-common/models/domain/cipher';\n\nimport { AddEditComponent as BaseAddEditComponent } from '../vault/add-edit.component';\n\n@Component({\n selector: 'app-org-vault-add-edit',\n templateUrl: '../vault/add-edit.component.html',\n})\nexport class EmergencyAddEditComponent extends BaseAddEditComponent {\n originalCipher: Cipher = null;\n viewOnly = true;\n\n constructor(cipherService: CipherService, folderService: FolderService,\n i18nService: I18nService, platformUtilsService: PlatformUtilsService,\n auditService: AuditService, stateService: StateService,\n userService: UserService, collectionService: CollectionService,\n totpService: TotpService, passwordGenerationService: PasswordGenerationService,\n messagingService: MessagingService, eventService: EventService, policyService: PolicyService) {\n super(cipherService, folderService, i18nService, platformUtilsService, auditService, stateService,\n userService, collectionService, totpService, passwordGenerationService, messagingService,\n eventService, policyService);\n }\n\n async load() {\n this.title = this.i18nService.t('viewItem');\n }\n\n protected async loadCipher() {\n return Promise.resolve(this.originalCipher);\n }\n}\n","import { Component, ComponentFactoryResolver, OnInit, ViewChild, ViewContainerRef } from '@angular/core';\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { EmergencyAccessStatusType } from 'jslib-common/enums/emergencyAccessStatusType';\nimport { EmergencyAccessType } from 'jslib-common/enums/emergencyAccessType';\nimport { Utils } from 'jslib-common/misc/utils';\nimport { EmergencyAccessConfirmRequest } from 'jslib-common/models/request/emergencyAccessConfirmRequest';\nimport { EmergencyAccessGranteeDetailsResponse, EmergencyAccessGrantorDetailsResponse } from 'jslib-common/models/response/emergencyAccessResponse';\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\nimport { ModalComponent } from '../modal.component';\nimport { EmergencyAccessAddEditComponent } from './emergency-access-add-edit.component';\nimport { EmergencyAccessConfirmComponent } from './emergency-access-confirm.component';\nimport { EmergencyAccessTakeoverComponent } from './emergency-access-takeover.component';\n\n@Component({\n selector: 'emergency-access',\n templateUrl: 'emergency-access.component.html',\n})\nexport class EmergencyAccessComponent implements OnInit {\n @ViewChild('addEdit', { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef;\n @ViewChild('takeoverTemplate', { read: ViewContainerRef, static: true}) takeoverModalRef: ViewContainerRef;\n @ViewChild('confirmTemplate', { read: ViewContainerRef, static: true }) confirmModalRef: ViewContainerRef;\n\n canAccessPremium: boolean;\n trustedContacts: EmergencyAccessGranteeDetailsResponse[];\n grantedContacts: EmergencyAccessGrantorDetailsResponse[];\n emergencyAccessType = EmergencyAccessType;\n emergencyAccessStatusType = EmergencyAccessStatusType;\n actionPromise: Promise;\n isOrganizationOwner: boolean;\n\n private modal: ModalComponent = null;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private componentFactoryResolver: ComponentFactoryResolver,\n private platformUtilsService: PlatformUtilsService,\n private toasterService: ToasterService, private cryptoService: CryptoService,\n private storageService: StorageService, private userService: UserService,\n private messagingService: MessagingService) { }\n\n async ngOnInit() {\n this.canAccessPremium = await this.userService.canAccessPremium();\n const orgs = await this.userService.getAllOrganizations();\n this.isOrganizationOwner = orgs.some(o => o.isOwner);\n this.load();\n }\n\n async load() {\n this.trustedContacts = (await this.apiService.getEmergencyAccessTrusted()).data;\n this.grantedContacts = (await this.apiService.getEmergencyAccessGranted()).data;\n }\n\n async premiumRequired() {\n if (!this.canAccessPremium) {\n this.messagingService.send('premiumRequired');\n return;\n }\n }\n\n edit(details: EmergencyAccessGranteeDetailsResponse) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.addEditModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n EmergencyAccessAddEditComponent, this.addEditModalRef);\n\n childComponent.name = details?.name ?? details?.email;\n childComponent.emergencyAccessId = details?.id;\n childComponent.readOnly = !this.canAccessPremium;\n childComponent.onSaved.subscribe(() => {\n this.modal.close();\n this.load();\n });\n childComponent.onDeleted.subscribe(() => {\n this.modal.close();\n this.remove(details);\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n invite() {\n this.edit(null);\n }\n\n async reinvite(contact: EmergencyAccessGranteeDetailsResponse) {\n if (this.actionPromise != null) {\n return;\n }\n this.actionPromise = this.apiService.postEmergencyAccessReinvite(contact.id);\n await this.actionPromise;\n this.toasterService.popAsync('success', null, this.i18nService.t('hasBeenReinvited', contact.email));\n this.actionPromise = null;\n }\n\n async confirm(contact: EmergencyAccessGranteeDetailsResponse) {\n function updateUser() {\n contact.status = EmergencyAccessStatusType.Confirmed;\n }\n\n if (this.actionPromise != null) {\n return;\n }\n\n const autoConfirm = await this.storageService.get(ConstantsService.autoConfirmFingerprints);\n if (autoConfirm == null || !autoConfirm) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.confirmModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n EmergencyAccessConfirmComponent, this.confirmModalRef);\n\n childComponent.name = contact?.name ?? contact?.email;\n childComponent.emergencyAccessId = contact.id;\n childComponent.userId = contact?.granteeId;\n childComponent.onConfirmed.subscribe(async () => {\n this.modal.close();\n\n childComponent.formPromise = this.doConfirmation(contact);\n await childComponent.formPromise;\n\n updateUser();\n this.toasterService.popAsync('success', null, this.i18nService.t('hasBeenConfirmed', contact.name || contact.email));\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n return;\n }\n\n this.actionPromise = this.doConfirmation(contact);\n await this.actionPromise;\n updateUser();\n\n this.toasterService.popAsync('success', null, this.i18nService.t('hasBeenConfirmed', contact.name || contact.email));\n this.actionPromise = null;\n }\n\n async remove(details: EmergencyAccessGranteeDetailsResponse | EmergencyAccessGrantorDetailsResponse) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('removeUserConfirmation'), details.name || details.email,\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n await this.apiService.deleteEmergencyAccess(details.id);\n this.toasterService.popAsync('success', null, this.i18nService.t('removedUserId', details.name || details.email));\n\n if (details instanceof EmergencyAccessGranteeDetailsResponse) {\n this.removeGrantee(details);\n } else {\n this.removeGrantor(details);\n }\n } catch { }\n }\n\n async requestAccess(details: EmergencyAccessGrantorDetailsResponse) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('requestAccessConfirmation', details.waitTimeDays.toString()),\n details.name || details.email,\n this.i18nService.t('requestAccess'),\n this.i18nService.t('no'),\n 'warning',\n );\n\n if (!confirmed) {\n return false;\n }\n\n await this.apiService.postEmergencyAccessInitiate(details.id);\n\n details.status = EmergencyAccessStatusType.RecoveryInitiated;\n this.toasterService.popAsync('success', null, this.i18nService.t('requestSent', details.name || details.email));\n }\n\n async approve(details: EmergencyAccessGranteeDetailsResponse) {\n const type = this.i18nService.t(details.type === EmergencyAccessType.View ? 'view' : 'takeover');\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('approveAccessConfirmation', details.name || details.email, type),\n details.name || details.email,\n this.i18nService.t('approve'),\n this.i18nService.t('no'),\n 'warning',\n );\n\n if (!confirmed) {\n return false;\n }\n\n await this.apiService.postEmergencyAccessApprove(details.id);\n details.status = EmergencyAccessStatusType.RecoveryApproved;\n\n this.toasterService.popAsync('success', null, this.i18nService.t('emergencyApproved', details.name || details.email));\n }\n\n async reject(details: EmergencyAccessGranteeDetailsResponse) {\n await this.apiService.postEmergencyAccessReject(details.id);\n details.status = EmergencyAccessStatusType.Confirmed;\n\n this.toasterService.popAsync('success', null, this.i18nService.t('emergencyRejected', details.name || details.email));\n }\n\n async takeover(details: EmergencyAccessGrantorDetailsResponse) {\n if (this.modal != null) {\n this.modal.close();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);\n this.modal = this.addEditModalRef.createComponent(factory).instance;\n const childComponent = this.modal.show(\n EmergencyAccessTakeoverComponent, this.takeoverModalRef);\n\n childComponent.name = details != null ? details.name || details.email : null;\n childComponent.email = details.email;\n childComponent.emergencyAccessId = details != null ? details.id : null;\n\n childComponent.onDone.subscribe(() => {\n this.modal.close();\n this.toasterService.popAsync('success', null, this.i18nService.t('passwordResetFor', details.name || details.email));\n });\n\n this.modal.onClosed.subscribe(() => {\n this.modal = null;\n });\n }\n\n private removeGrantee(details: EmergencyAccessGranteeDetailsResponse) {\n const index = this.trustedContacts.indexOf(details);\n if (index > -1) {\n this.trustedContacts.splice(index, 1);\n }\n }\n\n private removeGrantor(details: EmergencyAccessGrantorDetailsResponse) {\n const index = this.grantedContacts.indexOf(details);\n if (index > -1) {\n this.grantedContacts.splice(index, 1);\n }\n }\n\n // Encrypt the master password hash using the grantees public key, and send it to bitwarden for escrow.\n private async doConfirmation(details: EmergencyAccessGranteeDetailsResponse) {\n const encKey = await this.cryptoService.getEncKey();\n const publicKeyResponse = await this.apiService.getUserPublicKey(details.granteeId);\n const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n\n try {\n // tslint:disable-next-line\n console.log('User\\'s fingerprint: ' +\n (await this.cryptoService.getFingerprint(details.granteeId, publicKey.buffer)).join('-'));\n } catch { }\n\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n const request = new EmergencyAccessConfirmRequest();\n request.key = encryptedKey.encryptedString;\n await this.apiService.postEmergencyAccessConfirm(details.id, request);\n }\n}\n","

{{'emergencyAccess' | i18n}}

{{'emergencyAccessDesc' | i18n}} {{'learnMore' | i18n}}.

{{'warning' | i18n }}: {{'emergencyAccessOwnerWarning' | i18n}}

{{'trustedEmergencyContacts' | i18n}} {{'premium' | i18n}}

{{c.email}} {{'invited' | i18n}} {{'accepted' | i18n}} {{'emergencyAccessRecoveryInitiated' | i18n}} {{'emergencyAccessRecoveryApproved' | i18n}} {{'view' | i18n}} {{'takeover' | i18n}} {{c.name}}

{{'noTrustedContacts' | i18n}}

{{'designatedEmergencyContacts' | i18n}}

{{c.email}} {{'invited' | i18n}} {{'accepted' | i18n}} {{'emergencyAccessRecoveryInitiated' | i18n}} {{'emergencyAccessRecoveryApproved' | i18n}} {{'view' | i18n}} {{'takeover' | i18n}} {{c.name}}

{{'noGrantedAccess' | i18n}}

","export enum EmergencyAccessType\n{\n View = 0,\n Takeover = 1,\n}\n","import { EmergencyAccessStatusType } from '../../enums/emergencyAccessStatusType';\nimport { EmergencyAccessType } from '../../enums/emergencyAccessType';\nimport { KdfType } from '../../enums/kdfType';\nimport { BaseResponse } from './baseResponse';\nimport { CipherResponse } from './cipherResponse';\n\nexport class EmergencyAccessGranteeDetailsResponse extends BaseResponse {\n id: string;\n granteeId: string;\n name: string;\n email: string;\n type: EmergencyAccessType;\n status: EmergencyAccessStatusType;\n waitTimeDays: number;\n creationDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.granteeId = this.getResponseProperty('GranteeId');\n this.name = this.getResponseProperty('Name');\n this.email = this.getResponseProperty('Email');\n this.type = this.getResponseProperty('Type');\n this.status = this.getResponseProperty('Status');\n this.waitTimeDays = this.getResponseProperty('WaitTimeDays');\n this.creationDate = this.getResponseProperty('CreationDate');\n }\n}\n\nexport class EmergencyAccessGrantorDetailsResponse extends BaseResponse {\n id: string;\n grantorId: string;\n name: string;\n email: string;\n type: EmergencyAccessType;\n status: EmergencyAccessStatusType;\n waitTimeDays: number;\n creationDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.grantorId = this.getResponseProperty('GrantorId');\n this.name = this.getResponseProperty('Name');\n this.email = this.getResponseProperty('Email');\n this.type = this.getResponseProperty('Type');\n this.status = this.getResponseProperty('Status');\n this.waitTimeDays = this.getResponseProperty('WaitTimeDays');\n this.creationDate = this.getResponseProperty('CreationDate');\n }\n}\n\nexport class EmergencyAccessTakeoverResponse extends BaseResponse {\n keyEncrypted: string;\n kdf: KdfType;\n kdfIterations: number;\n\n constructor(response: any) {\n super(response);\n\n this.keyEncrypted = this.getResponseProperty('KeyEncrypted');\n this.kdf = this.getResponseProperty('Kdf');\n this.kdfIterations = this.getResponseProperty('KdfIterations');\n }\n}\n\nexport class EmergencyAccessViewResponse extends BaseResponse {\n keyEncrypted: string;\n ciphers: CipherResponse[] = [];\n\n constructor(response: any) {\n super(response);\n\n this.keyEncrypted = this.getResponseProperty('KeyEncrypted');\n\n const ciphers = this.getResponseProperty('Ciphers');\n if (ciphers != null) {\n this.ciphers = ciphers.map((c: any) => new CipherResponse(c));\n }\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { EmergencyAccessType } from 'jslib-common/enums/emergencyAccessType';\nimport { EmergencyAccessInviteRequest } from 'jslib-common/models/request/emergencyAccessInviteRequest';\nimport { EmergencyAccessUpdateRequest } from 'jslib-common/models/request/emergencyAccessUpdateRequest';\n\n@Component({\n selector: 'emergency-access-add-edit',\n templateUrl: 'emergency-access-add-edit.component.html',\n})\nexport class EmergencyAccessAddEditComponent implements OnInit {\n @Input() name: string;\n @Input() emergencyAccessId: string;\n @Output() onSaved = new EventEmitter();\n @Output() onDeleted = new EventEmitter();\n\n loading = true;\n readOnly: boolean = false;\n editMode: boolean = false;\n title: string;\n email: string;\n type: EmergencyAccessType = EmergencyAccessType.View;\n\n formPromise: Promise;\n\n emergencyAccessType = EmergencyAccessType;\n waitTimes: { name: string; value: number; }[];\n waitTime: number;\n\n constructor(private apiService: ApiService, private i18nService: I18nService,\n private toasterService: ToasterService) { }\n\n async ngOnInit() {\n this.editMode = this.loading = this.emergencyAccessId != null;\n\n this.waitTimes = [\n { name: this.i18nService.t('oneDay'), value: 1 },\n { name: this.i18nService.t('days', '2'), value: 2 },\n { name: this.i18nService.t('days', '7'), value: 7 },\n { name: this.i18nService.t('days', '14'), value: 14 },\n { name: this.i18nService.t('days', '30'), value: 30 },\n { name: this.i18nService.t('days', '90'), value: 90 },\n ];\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t('editEmergencyContact');\n try {\n const emergencyAccess = await this.apiService.getEmergencyAccess(this.emergencyAccessId);\n this.type = emergencyAccess.type;\n this.waitTime = emergencyAccess.waitTimeDays;\n } catch { }\n } else {\n this.title = this.i18nService.t('inviteEmergencyContact');\n this.waitTime = this.waitTimes[2].value;\n }\n\n this.loading = false;\n }\n\n async submit() {\n try {\n if (this.editMode) {\n const request = new EmergencyAccessUpdateRequest();\n request.type = this.type;\n request.waitTimeDays = this.waitTime;\n\n this.formPromise = this.apiService.putEmergencyAccess(this.emergencyAccessId, request);\n } else {\n const request = new EmergencyAccessInviteRequest();\n request.email = this.email.trim();\n request.type = this.type;\n request.waitTimeDays = this.waitTime;\n\n this.formPromise = this.apiService.postEmergencyAccessInvite(request);\n }\n\n await this.formPromise;\n this.toasterService.popAsync('success', null,\n this.i18nService.t(this.editMode ? 'editedUserId' : 'invitedUsers', this.name));\n this.onSaved.emit();\n } catch { }\n }\n\n async delete() {\n this.onDeleted.emit();\n }\n}\n","

{{'premium' | i18n}} {{title}} {{name}}

{{'loading' | i18n}}

{{'inviteEmergencyContactDesc' | i18n}}

{{'userAccess' | i18n}}

{{'waitTimeDesc' | i18n}}
","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\n@Component({\n selector: 'emergency-access-confirm',\n templateUrl: 'emergency-access-confirm.component.html',\n})\nexport class EmergencyAccessConfirmComponent implements OnInit {\n @Input() name: string;\n @Input() userId: string;\n @Input() emergencyAccessId: string;\n @Input() formPromise: Promise;\n @Output() onConfirmed = new EventEmitter();\n\n dontAskAgain = false;\n loading = true;\n fingerprint: string;\n\n constructor(private apiService: ApiService, private cryptoService: CryptoService,\n private storageService: StorageService) { }\n\n async ngOnInit() {\n try {\n const publicKeyResponse = await this.apiService.getUserPublicKey(this.userId);\n if (publicKeyResponse != null) {\n const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n const fingerprint = await this.cryptoService.getFingerprint(this.userId, publicKey.buffer);\n if (fingerprint != null) {\n this.fingerprint = fingerprint.join('-');\n }\n }\n } catch { }\n this.loading = false;\n }\n\n async submit() {\n if (this.loading) {\n return;\n }\n\n if (this.dontAskAgain) {\n await this.storageService.save(ConstantsService.autoConfirmFingerprints, true);\n }\n\n try {\n this.onConfirmed.emit();\n } catch { }\n }\n}\n","

{{'confirmUser' | i18n}} {{name}}

{{'fingerprintEnsureIntegrityVerify' | i18n}} {{'learnMore' | i18n}}

{{fingerprint}}

","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { KdfType } from 'jslib-common/enums/kdfType';\nimport { PolicyData } from 'jslib-common/models/data/policyData';\nimport { Policy } from 'jslib-common/models/domain/policy';\nimport { SymmetricCryptoKey } from 'jslib-common/models/domain/symmetricCryptoKey';\nimport { EmergencyAccessPasswordRequest } from 'jslib-common/models/request/emergencyAccessPasswordRequest';\nimport { PolicyResponse } from 'jslib-common/models/response/policyResponse';\n\nimport { ChangePasswordComponent } from 'jslib-angular/components/change-password.component';\n\n@Component({\n selector: 'emergency-access-takeover',\n templateUrl: 'emergency-access-takeover.component.html',\n})\nexport class EmergencyAccessTakeoverComponent extends ChangePasswordComponent implements OnInit {\n @Output() onDone = new EventEmitter();\n @Input() emergencyAccessId: string;\n @Input() name: string;\n @Input() email: string;\n @Input() kdf: KdfType;\n @Input() kdfIterations: number;\n\n formPromise: Promise;\n\n constructor(i18nService: I18nService, cryptoService: CryptoService,\n messagingService: MessagingService, userService: UserService,\n passwordGenerationService: PasswordGenerationService,\n platformUtilsService: PlatformUtilsService, policyService: PolicyService,\n private apiService: ApiService, private toasterService: ToasterService) {\n super(i18nService, cryptoService, messagingService, userService, passwordGenerationService,\n platformUtilsService, policyService);\n }\n\n async ngOnInit() {\n const response = await this.apiService.getEmergencyGrantorPolicies(this.emergencyAccessId);\n if (response.data != null && response.data.length > 0) {\n const policies = response.data.map((policyResponse: PolicyResponse) => new Policy(new PolicyData(policyResponse)));\n this.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions(policies);\n }\n }\n\n async submit() {\n if (!await this.strongPassword()) {\n return;\n }\n\n const takeoverResponse = await this.apiService.postEmergencyAccessTakeover(this.emergencyAccessId);\n\n const oldKeyBuffer = await this.cryptoService.rsaDecrypt(takeoverResponse.keyEncrypted);\n const oldEncKey = new SymmetricCryptoKey(oldKeyBuffer);\n\n if (oldEncKey == null) {\n this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'), this.i18nService.t('unexpectedError'));\n return;\n }\n\n const key = await this.cryptoService.makeKey(this.masterPassword, this.email, takeoverResponse.kdf, takeoverResponse.kdfIterations);\n const masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, key);\n\n const encKey = await this.cryptoService.remakeEncKey(key, oldEncKey);\n\n const request = new EmergencyAccessPasswordRequest();\n request.newMasterPasswordHash = masterPasswordHash;\n request.key = encKey[1].encryptedString;\n\n this.apiService.postEmergencyAccessPassword(this.emergencyAccessId, request);\n\n try {\n this.onDone.emit();\n } catch { }\n }\n}\n","

{{'takeover' | i18n}} {{name}}

{{'loggedOutWarning' | i18n}} {{'masterPasswordPolicyInEffect' | i18n}}
  • 0\"> {{'policyInEffectMinComplexity' | i18n : getPasswordScoreAlertDisplay()}}
  • 0\"> {{'policyInEffectMinLength' | i18n : enforcedPolicyOptions?.minLength.toString()}}
  • {{'policyInEffectUppercase' | i18n}}
  • {{'policyInEffectLowercase' | i18n}}
  • {{'policyInEffectNumbers' | i18n}}
  • {{'policyInEffectSpecial' | i18n : '!@#$%^&*'}}
","import { DeviceType } from '../enums/deviceType';\nimport { PolicyType } from '../enums/policyType';\n\nimport { ApiService as ApiServiceAbstraction } from '../abstractions/api.service';\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\nimport { TokenService } from '../abstractions/token.service';\n\nimport { EnvironmentUrls } from '../models/domain/environmentUrls';\n\nimport { AttachmentRequest } from '../models/request/attachmentRequest';\nimport { BitPayInvoiceRequest } from '../models/request/bitPayInvoiceRequest';\nimport { CipherBulkDeleteRequest } from '../models/request/cipherBulkDeleteRequest';\nimport { CipherBulkMoveRequest } from '../models/request/cipherBulkMoveRequest';\nimport { CipherBulkShareRequest } from '../models/request/cipherBulkShareRequest';\nimport { CipherCollectionsRequest } from '../models/request/cipherCollectionsRequest';\nimport { CipherCreateRequest } from '../models/request/cipherCreateRequest';\nimport { CipherRequest } from '../models/request/cipherRequest';\nimport { CipherShareRequest } from '../models/request/cipherShareRequest';\nimport { CollectionRequest } from '../models/request/collectionRequest';\nimport { DeleteRecoverRequest } from '../models/request/deleteRecoverRequest';\nimport { EmailRequest } from '../models/request/emailRequest';\nimport { EmailTokenRequest } from '../models/request/emailTokenRequest';\nimport { EmergencyAccessAcceptRequest } from '../models/request/emergencyAccessAcceptRequest';\nimport { EmergencyAccessConfirmRequest } from '../models/request/emergencyAccessConfirmRequest';\nimport { EmergencyAccessInviteRequest } from '../models/request/emergencyAccessInviteRequest';\nimport { EmergencyAccessPasswordRequest } from '../models/request/emergencyAccessPasswordRequest';\nimport { EmergencyAccessUpdateRequest } from '../models/request/emergencyAccessUpdateRequest';\nimport { EventRequest } from '../models/request/eventRequest';\nimport { FolderRequest } from '../models/request/folderRequest';\nimport { GroupRequest } from '../models/request/groupRequest';\nimport { IapCheckRequest } from '../models/request/iapCheckRequest';\nimport { ImportCiphersRequest } from '../models/request/importCiphersRequest';\nimport { ImportDirectoryRequest } from '../models/request/importDirectoryRequest';\nimport { ImportOrganizationCiphersRequest } from '../models/request/importOrganizationCiphersRequest';\nimport { KdfRequest } from '../models/request/kdfRequest';\nimport { KeysRequest } from '../models/request/keysRequest';\nimport { OrganizationCreateRequest } from '../models/request/organizationCreateRequest';\nimport { OrganizationImportRequest } from '../models/request/organizationImportRequest';\nimport { OrganizationKeysRequest } from '../models/request/organizationKeysRequest';\nimport { OrganizationTaxInfoUpdateRequest } from '../models/request/organizationTaxInfoUpdateRequest';\nimport { OrganizationUpdateRequest } from '../models/request/organizationUpdateRequest';\nimport { OrganizationUpgradeRequest } from '../models/request/organizationUpgradeRequest';\nimport { OrganizationUserAcceptRequest } from '../models/request/organizationUserAcceptRequest';\nimport { OrganizationUserBulkConfirmRequest } from '../models/request/organizationUserBulkConfirmRequest';\nimport { OrganizationUserBulkRequest } from '../models/request/organizationUserBulkRequest';\nimport { OrganizationUserConfirmRequest } from '../models/request/organizationUserConfirmRequest';\nimport { OrganizationUserInviteRequest } from '../models/request/organizationUserInviteRequest';\nimport { OrganizationUserResetPasswordEnrollmentRequest } from '../models/request/organizationUserResetPasswordEnrollmentRequest';\nimport { OrganizationUserResetPasswordRequest } from '../models/request/organizationUserResetPasswordRequest';\nimport { OrganizationUserUpdateGroupsRequest } from '../models/request/organizationUserUpdateGroupsRequest';\nimport { OrganizationUserUpdateRequest } from '../models/request/organizationUserUpdateRequest';\nimport { PasswordHintRequest } from '../models/request/passwordHintRequest';\nimport { PasswordRequest } from '../models/request/passwordRequest';\nimport { PasswordVerificationRequest } from '../models/request/passwordVerificationRequest';\nimport { PaymentRequest } from '../models/request/paymentRequest';\nimport { PolicyRequest } from '../models/request/policyRequest';\nimport { PreloginRequest } from '../models/request/preloginRequest';\nimport { RegisterRequest } from '../models/request/registerRequest';\nimport { SeatRequest } from '../models/request/seatRequest';\nimport { SelectionReadOnlyRequest } from '../models/request/selectionReadOnlyRequest';\nimport { SendAccessRequest } from '../models/request/sendAccessRequest';\nimport { SendRequest } from '../models/request/sendRequest';\nimport { SetPasswordRequest } from '../models/request/setPasswordRequest';\nimport { StorageRequest } from '../models/request/storageRequest';\nimport { TaxInfoUpdateRequest } from '../models/request/taxInfoUpdateRequest';\nimport { TokenRequest } from '../models/request/tokenRequest';\nimport { TwoFactorEmailRequest } from '../models/request/twoFactorEmailRequest';\nimport { TwoFactorProviderRequest } from '../models/request/twoFactorProviderRequest';\nimport { TwoFactorRecoveryRequest } from '../models/request/twoFactorRecoveryRequest';\nimport { UpdateDomainsRequest } from '../models/request/updateDomainsRequest';\nimport { UpdateKeyRequest } from '../models/request/updateKeyRequest';\nimport { UpdateProfileRequest } from '../models/request/updateProfileRequest';\nimport { UpdateTwoFactorAuthenticatorRequest } from '../models/request/updateTwoFactorAuthenticatorRequest';\nimport { UpdateTwoFactorDuoRequest } from '../models/request/updateTwoFactorDuoRequest';\nimport { UpdateTwoFactorEmailRequest } from '../models/request/updateTwoFactorEmailRequest';\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from '../models/request/updateTwoFactorWebAuthnDeleteRequest';\nimport { UpdateTwoFactorWebAuthnRequest } from '../models/request/updateTwoFactorWebAuthnRequest';\nimport { UpdateTwoFactorYubioOtpRequest } from '../models/request/updateTwoFactorYubioOtpRequest';\nimport { VerifyBankRequest } from '../models/request/verifyBankRequest';\nimport { VerifyDeleteRecoverRequest } from '../models/request/verifyDeleteRecoverRequest';\nimport { VerifyEmailRequest } from '../models/request/verifyEmailRequest';\n\nimport { Utils } from '../misc/utils';\nimport { ApiKeyResponse } from '../models/response/apiKeyResponse';\nimport { AttachmentResponse } from '../models/response/attachmentResponse';\nimport { AttachmentUploadDataResponse } from '../models/response/attachmentUploadDataResponse';\nimport { BillingResponse } from '../models/response/billingResponse';\nimport { BreachAccountResponse } from '../models/response/breachAccountResponse';\nimport { CipherResponse } from '../models/response/cipherResponse';\nimport {\n CollectionGroupDetailsResponse,\n CollectionResponse,\n} from '../models/response/collectionResponse';\nimport { DomainsResponse } from '../models/response/domainsResponse';\nimport {\n EmergencyAccessGranteeDetailsResponse,\n EmergencyAccessGrantorDetailsResponse,\n EmergencyAccessTakeoverResponse,\n EmergencyAccessViewResponse\n} from '../models/response/emergencyAccessResponse';\nimport { ErrorResponse } from '../models/response/errorResponse';\nimport { EventResponse } from '../models/response/eventResponse';\nimport { FolderResponse } from '../models/response/folderResponse';\nimport {\n GroupDetailsResponse,\n GroupResponse,\n} from '../models/response/groupResponse';\nimport { IdentityTokenResponse } from '../models/response/identityTokenResponse';\nimport { IdentityTwoFactorResponse } from '../models/response/identityTwoFactorResponse';\nimport { ListResponse } from '../models/response/listResponse';\nimport { OrganizationKeysResponse } from '../models/response/organizationKeysResponse';\nimport { OrganizationResponse } from '../models/response/organizationResponse';\nimport { OrganizationSubscriptionResponse } from '../models/response/organizationSubscriptionResponse';\nimport { OrganizationUserBulkPublicKeyResponse } from '../models/response/organizationUserBulkPublicKeyResponse';\nimport { OrganizationUserBulkResponse } from '../models/response/organizationUserBulkResponse';\nimport {\n OrganizationUserDetailsResponse,\n OrganizationUserResetPasswordDetailsReponse,\n OrganizationUserUserDetailsResponse,\n} from '../models/response/organizationUserResponse';\nimport { PaymentResponse } from '../models/response/paymentResponse';\nimport { PlanResponse } from '../models/response/planResponse';\nimport { PolicyResponse } from '../models/response/policyResponse';\nimport { PreloginResponse } from '../models/response/preloginResponse';\nimport { ProfileResponse } from '../models/response/profileResponse';\nimport { SelectionReadOnlyResponse } from '../models/response/selectionReadOnlyResponse';\nimport { SendAccessResponse } from '../models/response/sendAccessResponse';\nimport { SendFileDownloadDataResponse } from '../models/response/sendFileDownloadDataResponse';\nimport { SendFileUploadDataResponse } from '../models/response/sendFileUploadDataResponse';\nimport { SendResponse } from '../models/response/sendResponse';\nimport { SubscriptionResponse } from '../models/response/subscriptionResponse';\nimport { SyncResponse } from '../models/response/syncResponse';\nimport { TaxInfoResponse } from '../models/response/taxInfoResponse';\nimport { TaxRateResponse } from '../models/response/taxRateResponse';\nimport { TwoFactorAuthenticatorResponse } from '../models/response/twoFactorAuthenticatorResponse';\nimport { TwoFactorDuoResponse } from '../models/response/twoFactorDuoResponse';\nimport { TwoFactorEmailResponse } from '../models/response/twoFactorEmailResponse';\nimport { TwoFactorProviderResponse } from '../models/response/twoFactorProviderResponse';\nimport { TwoFactorRecoverResponse } from '../models/response/twoFactorRescoverResponse';\nimport { TwoFactorWebAuthnResponse } from '../models/response/twoFactorWebAuthnResponse';\nimport { ChallengeResponse } from '../models/response/twoFactorWebAuthnResponse';\nimport { TwoFactorYubiKeyResponse } from '../models/response/twoFactorYubiKeyResponse';\nimport { UserKeyResponse } from '../models/response/userKeyResponse';\n\nimport { SendAccessView } from '../models/view/sendAccessView';\n\nexport class ApiService implements ApiServiceAbstraction {\n urlsSet: boolean = false;\n apiBaseUrl: string;\n identityBaseUrl: string;\n eventsBaseUrl: string;\n\n private device: DeviceType;\n private deviceType: string;\n private isWebClient = false;\n private isDesktopClient = false;\n private usingBaseUrl = false;\n\n constructor(private tokenService: TokenService, private platformUtilsService: PlatformUtilsService,\n private logoutCallback: (expired: boolean) => Promise, private customUserAgent: string = null) {\n this.device = platformUtilsService.getDevice();\n this.deviceType = this.device.toString();\n this.isWebClient = this.device === DeviceType.IEBrowser || this.device === DeviceType.ChromeBrowser ||\n this.device === DeviceType.EdgeBrowser || this.device === DeviceType.FirefoxBrowser ||\n this.device === DeviceType.OperaBrowser || this.device === DeviceType.SafariBrowser ||\n this.device === DeviceType.UnknownBrowser || this.device === DeviceType.VivaldiBrowser;\n this.isDesktopClient = this.device === DeviceType.WindowsDesktop || this.device === DeviceType.MacOsDesktop ||\n this.device === DeviceType.LinuxDesktop;\n }\n\n setUrls(urls: EnvironmentUrls): void {\n this.urlsSet = true;\n\n if (urls.base != null) {\n this.usingBaseUrl = true;\n this.apiBaseUrl = urls.base + '/api';\n this.identityBaseUrl = urls.base + '/identity';\n this.eventsBaseUrl = urls.base + '/events';\n return;\n }\n\n this.apiBaseUrl = urls.api;\n this.identityBaseUrl = urls.identity;\n this.eventsBaseUrl = urls.events;\n\n // Production\n if (this.apiBaseUrl == null) {\n this.apiBaseUrl = 'https://api.bitwarden.com';\n }\n if (this.identityBaseUrl == null) {\n this.identityBaseUrl = 'https://identity.bitwarden.com';\n }\n if (this.eventsBaseUrl == null) {\n this.eventsBaseUrl = 'https://events.bitwarden.com';\n }\n }\n\n // Auth APIs\n\n async postIdentityToken(request: TokenRequest): Promise {\n const headers = new Headers({\n 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',\n 'Accept': 'application/json',\n 'Device-Type': this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set('User-Agent', this.customUserAgent);\n }\n request.alterIdentityTokenHeaders(headers);\n const response = await this.fetch(new Request(this.identityBaseUrl + '/connect/token', {\n body: this.qsStringify(request.toIdentityToken(request.clientId ?? this.platformUtilsService.identityClientId)),\n credentials: this.getCredentials(),\n cache: 'no-store',\n headers: headers,\n method: 'POST',\n }));\n\n let responseJson: any = null;\n if (this.isJsonResponse(response)) {\n responseJson = await response.json();\n }\n\n if (responseJson != null) {\n if (response.status === 200) {\n return new IdentityTokenResponse(responseJson);\n } else if (response.status === 400 && responseJson.TwoFactorProviders2 &&\n Object.keys(responseJson.TwoFactorProviders2).length) {\n await this.tokenService.clearTwoFactorToken(request.email);\n return new IdentityTwoFactorResponse(responseJson);\n }\n }\n\n return Promise.reject(new ErrorResponse(responseJson, response.status, true));\n }\n\n async refreshIdentityToken(): Promise {\n try {\n await this.doRefreshToken();\n } catch (e) {\n return Promise.reject(null);\n }\n }\n\n // Account APIs\n\n async getProfile(): Promise {\n const r = await this.send('GET', '/accounts/profile', null, true, true);\n return new ProfileResponse(r);\n }\n\n async getUserBilling(): Promise {\n const r = await this.send('GET', '/accounts/billing', null, true, true);\n return new BillingResponse(r);\n }\n\n async getUserSubscription(): Promise {\n const r = await this.send('GET', '/accounts/subscription', null, true, true);\n return new SubscriptionResponse(r);\n }\n\n async getTaxInfo(): Promise {\n const r = await this.send('GET', '/accounts/tax', null, true, true);\n return new TaxInfoResponse(r);\n }\n\n async putProfile(request: UpdateProfileRequest): Promise {\n const r = await this.send('PUT', '/accounts/profile', request, true, true);\n return new ProfileResponse(r);\n }\n\n putTaxInfo(request: TaxInfoUpdateRequest): Promise {\n return this.send('PUT', '/accounts/tax', request, true, false);\n }\n\n async postPrelogin(request: PreloginRequest): Promise {\n const r = await this.send('POST', '/accounts/prelogin', request, false, true);\n return new PreloginResponse(r);\n }\n\n postEmailToken(request: EmailTokenRequest): Promise {\n return this.send('POST', '/accounts/email-token', request, true, false);\n }\n\n postEmail(request: EmailRequest): Promise {\n return this.send('POST', '/accounts/email', request, true, false);\n }\n\n postPassword(request: PasswordRequest): Promise {\n return this.send('POST', '/accounts/password', request, true, false);\n }\n\n setPassword(request: SetPasswordRequest): Promise {\n return this.send('POST', '/accounts/set-password', request, true, false);\n }\n\n postSecurityStamp(request: PasswordVerificationRequest): Promise {\n return this.send('POST', '/accounts/security-stamp', request, true, false);\n }\n\n deleteAccount(request: PasswordVerificationRequest): Promise {\n return this.send('DELETE', '/accounts', request, true, false);\n }\n\n async getAccountRevisionDate(): Promise {\n const r = await this.send('GET', '/accounts/revision-date', null, true, true);\n return r as number;\n }\n\n postPasswordHint(request: PasswordHintRequest): Promise {\n return this.send('POST', '/accounts/password-hint', request, false, false);\n }\n\n postRegister(request: RegisterRequest): Promise {\n return this.send('POST', '/accounts/register', request, false, false);\n }\n\n async postPremium(data: FormData): Promise {\n const r = await this.send('POST', '/accounts/premium', data, true, true);\n return new PaymentResponse(r);\n }\n\n async postIapCheck(request: IapCheckRequest): Promise {\n return this.send('POST', '/accounts/iap-check', request, true, false);\n }\n\n postReinstatePremium(): Promise {\n return this.send('POST', '/accounts/reinstate-premium', null, true, false);\n }\n\n postCancelPremium(): Promise {\n return this.send('POST', '/accounts/cancel-premium', null, true, false);\n }\n\n async postAccountStorage(request: StorageRequest): Promise {\n const r = await this.send('POST', '/accounts/storage', request, true, true);\n return new PaymentResponse(r);\n }\n\n postAccountPayment(request: PaymentRequest): Promise {\n return this.send('POST', '/accounts/payment', request, true, false);\n }\n\n postAccountLicense(data: FormData): Promise {\n return this.send('POST', '/accounts/license', data, true, false);\n }\n\n postAccountKeys(request: KeysRequest): Promise {\n return this.send('POST', '/accounts/keys', request, true, false);\n }\n\n postAccountKey(request: UpdateKeyRequest): Promise {\n return this.send('POST', '/accounts/key', request, true, false);\n }\n\n postAccountVerifyEmail(): Promise {\n return this.send('POST', '/accounts/verify-email', null, true, false);\n }\n\n postAccountVerifyEmailToken(request: VerifyEmailRequest): Promise {\n return this.send('POST', '/accounts/verify-email-token', request, false, false);\n }\n\n postAccountVerifyPassword(request: PasswordVerificationRequest): Promise {\n return this.send('POST', '/accounts/verify-password', request, true, false);\n }\n\n postAccountRecoverDelete(request: DeleteRecoverRequest): Promise {\n return this.send('POST', '/accounts/delete-recover', request, false, false);\n }\n\n postAccountRecoverDeleteToken(request: VerifyDeleteRecoverRequest): Promise {\n return this.send('POST', '/accounts/delete-recover-token', request, false, false);\n }\n\n postAccountKdf(request: KdfRequest): Promise {\n return this.send('POST', '/accounts/kdf', request, true, false);\n }\n\n async getEnterprisePortalSignInToken(): Promise {\n const r = await this.send('GET', '/accounts/enterprise-portal-signin-token', null, true, true);\n return r as string;\n }\n\n async deleteSsoUser(organizationId: string): Promise {\n return this.send('DELETE', '/accounts/sso/' + organizationId, null, true, false);\n }\n\n async getSsoUserIdentifier(): Promise {\n return this.send('GET', '/accounts/sso/user-identifier', null, true, true);\n }\n\n async postUserApiKey(id: string, request: PasswordVerificationRequest): Promise {\n const r = await this.send('POST', '/accounts/api-key', request, true, true);\n return new ApiKeyResponse(r);\n }\n\n async postUserRotateApiKey(id: string, request: PasswordVerificationRequest): Promise {\n const r = await this.send('POST', '/accounts/rotate-api-key', request, true, true);\n return new ApiKeyResponse(r);\n }\n\n // Folder APIs\n\n async getFolder(id: string): Promise {\n const r = await this.send('GET', '/folders/' + id, null, true, true);\n return new FolderResponse(r);\n }\n\n async postFolder(request: FolderRequest): Promise {\n const r = await this.send('POST', '/folders', request, true, true);\n return new FolderResponse(r);\n }\n\n async putFolder(id: string, request: FolderRequest): Promise {\n const r = await this.send('PUT', '/folders/' + id, request, true, true);\n return new FolderResponse(r);\n }\n\n deleteFolder(id: string): Promise {\n return this.send('DELETE', '/folders/' + id, null, true, false);\n }\n\n // Send APIs\n\n async getSend(id: string): Promise {\n const r = await this.send('GET', '/sends/' + id, null, true, true);\n return new SendResponse(r);\n }\n\n async postSendAccess(id: string, request: SendAccessRequest, apiUrl?: string): Promise {\n const addSendIdHeader = (headers: Headers) => {\n headers.set('Send-Id', id);\n };\n const r = await this.send('POST', '/sends/access/' + id, request, false, true, apiUrl, addSendIdHeader);\n return new SendAccessResponse(r);\n }\n\n async getSendFileDownloadData(send: SendAccessView, request: SendAccessRequest, apiUrl?: string): Promise {\n const addSendIdHeader = (headers: Headers) => {\n headers.set('Send-Id', send.id);\n };\n const r = await this.send('POST', '/sends/' + send.id + '/access/file/' + send.file.id, request, false, true,\n apiUrl, addSendIdHeader);\n return new SendFileDownloadDataResponse(r);\n }\n\n async getSends(): Promise> {\n const r = await this.send('GET', '/sends', null, true, true);\n return new ListResponse(r, SendResponse);\n }\n\n async postSend(request: SendRequest): Promise {\n const r = await this.send('POST', '/sends', request, true, true);\n return new SendResponse(r);\n }\n\n async postFileTypeSend(request: SendRequest): Promise {\n const r = await this.send('POST', '/sends/file/v2', request, true, true);\n return new SendFileUploadDataResponse(r);\n }\n\n async renewSendFileUploadUrl(sendId: string, fileId: string): Promise {\n const r = await this.send('GET', '/sends/' + sendId + '/file/' + fileId, null, true, true);\n return new SendFileUploadDataResponse(r);\n }\n\n postSendFile(sendId: string, fileId: string, data: FormData): Promise {\n return this.send('POST', '/sends/' + sendId + '/file/' + fileId, data, true, false);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async postSendFileLegacy(data: FormData): Promise {\n const r = await this.send('POST', '/sends/file', data, true, true);\n return new SendResponse(r);\n }\n\n async putSend(id: string, request: SendRequest): Promise {\n const r = await this.send('PUT', '/sends/' + id, request, true, true);\n return new SendResponse(r);\n }\n\n async putSendRemovePassword(id: string): Promise {\n const r = await this.send('PUT', '/sends/' + id + '/remove-password', null, true, true);\n return new SendResponse(r);\n }\n\n deleteSend(id: string): Promise {\n return this.send('DELETE', '/sends/' + id, null, true, false);\n }\n\n // Cipher APIs\n\n async getCipher(id: string): Promise {\n const r = await this.send('GET', '/ciphers/' + id, null, true, true);\n return new CipherResponse(r);\n }\n\n async getCipherAdmin(id: string): Promise {\n const r = await this.send('GET', '/ciphers/' + id + '/admin', null, true, true);\n return new CipherResponse(r);\n }\n\n async getCiphersOrganization(organizationId: string): Promise> {\n const r = await this.send('GET', '/ciphers/organization-details?organizationId=' + organizationId,\n null, true, true);\n return new ListResponse(r, CipherResponse);\n }\n\n async postCipher(request: CipherRequest): Promise {\n const r = await this.send('POST', '/ciphers', request, true, true);\n return new CipherResponse(r);\n }\n\n async postCipherCreate(request: CipherCreateRequest): Promise {\n const r = await this.send('POST', '/ciphers/create', request, true, true);\n return new CipherResponse(r);\n }\n\n async postCipherAdmin(request: CipherCreateRequest): Promise {\n const r = await this.send('POST', '/ciphers/admin', request, true, true);\n return new CipherResponse(r);\n }\n\n async putCipher(id: string, request: CipherRequest): Promise {\n const r = await this.send('PUT', '/ciphers/' + id, request, true, true);\n return new CipherResponse(r);\n }\n\n async putCipherAdmin(id: string, request: CipherRequest): Promise {\n const r = await this.send('PUT', '/ciphers/' + id + '/admin', request, true, true);\n return new CipherResponse(r);\n }\n\n deleteCipher(id: string): Promise {\n return this.send('DELETE', '/ciphers/' + id, null, true, false);\n }\n\n deleteCipherAdmin(id: string): Promise {\n return this.send('DELETE', '/ciphers/' + id + '/admin', null, true, false);\n }\n\n deleteManyCiphers(request: CipherBulkDeleteRequest): Promise {\n return this.send('DELETE', '/ciphers', request, true, false);\n }\n\n deleteManyCiphersAdmin(request: CipherBulkDeleteRequest): Promise {\n return this.send('DELETE', '/ciphers/admin', request, true, false);\n }\n\n putMoveCiphers(request: CipherBulkMoveRequest): Promise {\n return this.send('PUT', '/ciphers/move', request, true, false);\n }\n\n async putShareCipher(id: string, request: CipherShareRequest): Promise {\n const r = await this.send('PUT', '/ciphers/' + id + '/share', request, true, true);\n return new CipherResponse(r);\n }\n\n putShareCiphers(request: CipherBulkShareRequest): Promise {\n return this.send('PUT', '/ciphers/share', request, true, false);\n }\n\n putCipherCollections(id: string, request: CipherCollectionsRequest): Promise {\n return this.send('PUT', '/ciphers/' + id + '/collections', request, true, false);\n }\n\n putCipherCollectionsAdmin(id: string, request: CipherCollectionsRequest): Promise {\n return this.send('PUT', '/ciphers/' + id + '/collections-admin', request, true, false);\n }\n\n postPurgeCiphers(request: PasswordVerificationRequest, organizationId: string = null): Promise {\n let path = '/ciphers/purge';\n if (organizationId != null) {\n path += '?organizationId=' + organizationId;\n }\n return this.send('POST', path, request, true, false);\n }\n\n postImportCiphers(request: ImportCiphersRequest): Promise {\n return this.send('POST', '/ciphers/import', request, true, false);\n }\n\n postImportOrganizationCiphers(organizationId: string, request: ImportOrganizationCiphersRequest): Promise {\n return this.send('POST', '/ciphers/import-organization?organizationId=' + organizationId, request, true, false);\n }\n\n putDeleteCipher(id: string): Promise {\n return this.send('PUT', '/ciphers/' + id + '/delete', null, true, false);\n }\n\n putDeleteCipherAdmin(id: string): Promise {\n return this.send('PUT', '/ciphers/' + id + '/delete-admin', null, true, false);\n }\n\n putDeleteManyCiphers(request: CipherBulkDeleteRequest): Promise {\n return this.send('PUT', '/ciphers/delete', request, true, false);\n }\n\n putDeleteManyCiphersAdmin(request: CipherBulkDeleteRequest): Promise {\n return this.send('PUT', '/ciphers/delete-admin', request, true, false);\n }\n\n async putRestoreCipher(id: string): Promise {\n const r = await this.send('PUT', '/ciphers/' + id + '/restore', null, true, true);\n return new CipherResponse(r);\n }\n\n async putRestoreCipherAdmin(id: string): Promise {\n const r = await this.send('PUT', '/ciphers/' + id + '/restore-admin', null, true, true);\n return new CipherResponse(r);\n }\n\n async putRestoreManyCiphers(request: CipherBulkDeleteRequest): Promise> {\n const r = await this.send('PUT', '/ciphers/restore', request, true, true);\n return new ListResponse(r, CipherResponse);\n }\n\n // Attachments APIs\n\n async getAttachmentData(cipherId: string, attachmentId: string, emergencyAccessId?: string): Promise {\n const path = (emergencyAccessId != null ?\n '/emergency-access/' + emergencyAccessId + '/' :\n '/ciphers/') + cipherId + '/attachment/' + attachmentId;\n const r = await this.send('GET', path, null, true, true);\n return new AttachmentResponse(r);\n }\n\n async postCipherAttachment(id: string, request: AttachmentRequest): Promise {\n const r = await this.send('POST', '/ciphers/' + id + '/attachment/v2', request, true, true);\n return new AttachmentUploadDataResponse(r);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async postCipherAttachmentLegacy(id: string, data: FormData): Promise {\n const r = await this.send('POST', '/ciphers/' + id + '/attachment', data, true, true);\n return new CipherResponse(r);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async postCipherAttachmentAdminLegacy(id: string, data: FormData): Promise {\n const r = await this.send('POST', '/ciphers/' + id + '/attachment-admin', data, true, true);\n return new CipherResponse(r);\n }\n\n deleteCipherAttachment(id: string, attachmentId: string): Promise {\n return this.send('DELETE', '/ciphers/' + id + '/attachment/' + attachmentId, null, true, false);\n }\n\n deleteCipherAttachmentAdmin(id: string, attachmentId: string): Promise {\n return this.send('DELETE', '/ciphers/' + id + '/attachment/' + attachmentId + '/admin', null, true, false);\n }\n\n postShareCipherAttachment(id: string, attachmentId: string, data: FormData,\n organizationId: string): Promise {\n return this.send('POST', '/ciphers/' + id + '/attachment/' +\n attachmentId + '/share?organizationId=' + organizationId, data, true, false);\n }\n\n async renewAttachmentUploadUrl(id: string, attachmentId: string): Promise {\n const r = await this.send('GET', '/ciphers/' + id + '/attachment/' + attachmentId + '/renew', null, true, true);\n return new AttachmentUploadDataResponse(r);\n }\n\n postAttachmentFile(id: string, attachmentId: string, data: FormData): Promise {\n return this.send('POST', '/ciphers/' + id + '/attachment/' + attachmentId, data, true, false);\n }\n\n // Collections APIs\n\n async getCollectionDetails(organizationId: string, id: string): Promise {\n const r = await this.send('GET', '/organizations/' + organizationId + '/collections/' + id + '/details',\n null, true, true);\n return new CollectionGroupDetailsResponse(r);\n }\n\n async getUserCollections(): Promise> {\n const r = await this.send('GET', '/collections', null, true, true);\n return new ListResponse(r, CollectionResponse);\n }\n\n async getCollections(organizationId: string): Promise> {\n const r = await this.send('GET', '/organizations/' + organizationId + '/collections', null, true, true);\n return new ListResponse(r, CollectionResponse);\n }\n\n async getCollectionUsers(organizationId: string, id: string): Promise {\n const r = await this.send('GET', '/organizations/' + organizationId + '/collections/' + id + '/users',\n null, true, true);\n return r.map((dr: any) => new SelectionReadOnlyResponse(dr));\n }\n\n async postCollection(organizationId: string, request: CollectionRequest): Promise {\n const r = await this.send('POST', '/organizations/' + organizationId + '/collections', request, true, true);\n return new CollectionResponse(r);\n }\n\n async putCollection(organizationId: string, id: string, request: CollectionRequest): Promise {\n const r = await this.send('PUT', '/organizations/' + organizationId + '/collections/' + id,\n request, true, true);\n return new CollectionResponse(r);\n }\n\n async putCollectionUsers(organizationId: string, id: string, request: SelectionReadOnlyRequest[]): Promise {\n await this.send('PUT', '/organizations/' + organizationId + '/collections/' + id + '/users',\n request, true, false);\n }\n\n deleteCollection(organizationId: string, id: string): Promise {\n return this.send('DELETE', '/organizations/' + organizationId + '/collections/' + id, null, true, false);\n }\n\n deleteCollectionUser(organizationId: string, id: string, organizationUserId: string): Promise {\n return this.send('DELETE',\n '/organizations/' + organizationId + '/collections/' + id + '/user/' + organizationUserId,\n null, true, false);\n }\n\n // Groups APIs\n\n async getGroupDetails(organizationId: string, id: string): Promise {\n const r = await this.send('GET', '/organizations/' + organizationId + '/groups/' + id + '/details',\n null, true, true);\n return new GroupDetailsResponse(r);\n }\n\n async getGroups(organizationId: string): Promise> {\n const r = await this.send('GET', '/organizations/' + organizationId + '/groups', null, true, true);\n return new ListResponse(r, GroupResponse);\n }\n\n async getGroupUsers(organizationId: string, id: string): Promise {\n const r = await this.send('GET', '/organizations/' + organizationId + '/groups/' + id + '/users',\n null, true, true);\n return r;\n }\n\n async postGroup(organizationId: string, request: GroupRequest): Promise {\n const r = await this.send('POST', '/organizations/' + organizationId + '/groups', request, true, true);\n return new GroupResponse(r);\n }\n\n async putGroup(organizationId: string, id: string, request: GroupRequest): Promise {\n const r = await this.send('PUT', '/organizations/' + organizationId + '/groups/' + id, request, true, true);\n return new GroupResponse(r);\n }\n\n async putGroupUsers(organizationId: string, id: string, request: string[]): Promise {\n await this.send('PUT', '/organizations/' + organizationId + '/groups/' + id + '/users', request, true, false);\n }\n\n deleteGroup(organizationId: string, id: string): Promise {\n return this.send('DELETE', '/organizations/' + organizationId + '/groups/' + id, null, true, false);\n }\n\n deleteGroupUser(organizationId: string, id: string, organizationUserId: string): Promise {\n return this.send('DELETE',\n '/organizations/' + organizationId + '/groups/' + id + '/user/' + organizationUserId, null, true, false);\n }\n\n // Policy APIs\n\n async getPolicy(organizationId: string, type: PolicyType): Promise {\n const r = await this.send('GET', '/organizations/' + organizationId + '/policies/' + type, null, true, true);\n return new PolicyResponse(r);\n }\n\n async getPolicies(organizationId: string): Promise> {\n const r = await this.send('GET', '/organizations/' + organizationId + '/policies', null, true, true);\n return new ListResponse(r, PolicyResponse);\n }\n\n async getPoliciesByToken(organizationId: string, token: string, email: string, organizationUserId: string):\n Promise> {\n const r = await this.send('GET', '/organizations/' + organizationId + '/policies/token?' +\n 'token=' + encodeURIComponent(token) + '&email=' + encodeURIComponent(email) +\n '&organizationUserId=' + organizationUserId, null, false, true);\n return new ListResponse(r, PolicyResponse);\n }\n\n async putPolicy(organizationId: string, type: PolicyType, request: PolicyRequest): Promise {\n const r = await this.send('PUT', '/organizations/' + organizationId + '/policies/' + type, request, true, true);\n return new PolicyResponse(r);\n }\n\n // Organization User APIs\n\n async getOrganizationUser(organizationId: string, id: string): Promise {\n const r = await this.send('GET', '/organizations/' + organizationId + '/users/' + id, null, true, true);\n return new OrganizationUserDetailsResponse(r);\n }\n\n async getOrganizationUserGroups(organizationId: string, id: string): Promise {\n const r = await this.send('GET', '/organizations/' + organizationId + '/users/' + id + '/groups',\n null, true, true);\n return r;\n }\n\n async getOrganizationUsers(organizationId: string): Promise> {\n const r = await this.send('GET', '/organizations/' + organizationId + '/users', null, true, true);\n return new ListResponse(r, OrganizationUserUserDetailsResponse);\n }\n\n async getOrganizationUserResetPasswordDetails(organizationId: string, id: string):\n Promise {\n const r = await this.send('GET', '/organizations/' + organizationId + '/users/' + id +\n '/reset-password-details', null, true, true);\n return new OrganizationUserResetPasswordDetailsReponse(r);\n }\n\n postOrganizationUserInvite(organizationId: string, request: OrganizationUserInviteRequest): Promise {\n return this.send('POST', '/organizations/' + organizationId + '/users/invite', request, true, false);\n }\n\n postOrganizationUserReinvite(organizationId: string, id: string): Promise {\n return this.send('POST', '/organizations/' + organizationId + '/users/' + id + '/reinvite', null, true, false);\n }\n\n async postManyOrganizationUserReinvite(organizationId: string, request: OrganizationUserBulkRequest): Promise> {\n const r = await this.send('POST', '/organizations/' + organizationId + '/users/reinvite', request, true, true);\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n postOrganizationUserAccept(organizationId: string, id: string,\n request: OrganizationUserAcceptRequest): Promise {\n return this.send('POST', '/organizations/' + organizationId + '/users/' + id + '/accept', request, true, false);\n }\n\n postOrganizationUserConfirm(organizationId: string, id: string,\n request: OrganizationUserConfirmRequest): Promise {\n return this.send('POST', '/organizations/' + organizationId + '/users/' + id + '/confirm',\n request, true, false);\n }\n\n async postOrganizationUsersPublicKey(organizationId: string, request: OrganizationUserBulkRequest): Promise> {\n const r = await this.send('POST', '/organizations/' + organizationId + '/users/public-keys', request, true, true);\n return new ListResponse(r, OrganizationUserBulkPublicKeyResponse);\n }\n\n async postOrganizationUserBulkConfirm(organizationId: string, request: OrganizationUserBulkConfirmRequest): Promise> {\n const r = await this.send('POST', '/organizations/' + organizationId + '/users/confirm', request, true, true);\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n putOrganizationUser(organizationId: string, id: string, request: OrganizationUserUpdateRequest): Promise {\n return this.send('PUT', '/organizations/' + organizationId + '/users/' + id, request, true, false);\n }\n\n putOrganizationUserGroups(organizationId: string, id: string,\n request: OrganizationUserUpdateGroupsRequest): Promise {\n return this.send('PUT', '/organizations/' + organizationId + '/users/' + id + '/groups', request, true, false);\n }\n\n putOrganizationUserResetPasswordEnrollment(organizationId: string, userId: string,\n request: OrganizationUserResetPasswordEnrollmentRequest): Promise {\n return this.send('PUT', '/organizations/' + organizationId + '/users/' + userId + '/reset-password-enrollment',\n request, true, false);\n }\n\n putOrganizationUserResetPassword(organizationId: string, id: string,\n request: OrganizationUserResetPasswordRequest): Promise {\n return this.send('PUT', '/organizations/' + organizationId + '/users/' + id + '/reset-password',\n request, true, false);\n }\n\n deleteOrganizationUser(organizationId: string, id: string): Promise {\n return this.send('DELETE', '/organizations/' + organizationId + '/users/' + id, null, true, false);\n }\n\n async deleteManyOrganizationUsers(organizationId: string, request: OrganizationUserBulkRequest): Promise> {\n const r = await this.send('DELETE', '/organizations/' + organizationId + '/users', request, true, true);\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n // Plan APIs\n\n async getPlans(): Promise> {\n const r = await this.send('GET', '/plans/', null, true, true);\n return new ListResponse(r, PlanResponse);\n }\n\n async postImportDirectory(organizationId: string, request: ImportDirectoryRequest): Promise {\n return this.send('POST', '/organizations/' + organizationId + '/import', request, true, false);\n }\n\n async postPublicImportDirectory(request: OrganizationImportRequest): Promise {\n return this.send('POST', '/public/organization/import', request, true, false);\n }\n\n async getTaxRates(): Promise> {\n const r = await this.send('GET', '/plans/sales-tax-rates/', null, true, true);\n return new ListResponse(r, TaxRateResponse);\n }\n\n // Settings APIs\n\n async getSettingsDomains(): Promise {\n const r = await this.send('GET', '/settings/domains', null, true, true);\n return new DomainsResponse(r);\n }\n\n async putSettingsDomains(request: UpdateDomainsRequest): Promise {\n const r = await this.send('PUT', '/settings/domains', request, true, true);\n return new DomainsResponse(r);\n }\n\n // Sync APIs\n\n async getSync(): Promise {\n const path = this.isDesktopClient || this.isWebClient ? '/sync?excludeDomains=true' : '/sync';\n const r = await this.send('GET', path, null, true, true);\n return new SyncResponse(r);\n }\n\n // Two-factor APIs\n\n async getTwoFactorProviders(): Promise> {\n const r = await this.send('GET', '/two-factor', null, true, true);\n return new ListResponse(r, TwoFactorProviderResponse);\n }\n\n async getTwoFactorOrganizationProviders(organizationId: string): Promise> {\n const r = await this.send('GET', '/organizations/' + organizationId + '/two-factor', null, true, true);\n return new ListResponse(r, TwoFactorProviderResponse);\n }\n\n async getTwoFactorAuthenticator(request: PasswordVerificationRequest): Promise {\n const r = await this.send('POST', '/two-factor/get-authenticator', request, true, true);\n return new TwoFactorAuthenticatorResponse(r);\n }\n\n async getTwoFactorEmail(request: PasswordVerificationRequest): Promise {\n const r = await this.send('POST', '/two-factor/get-email', request, true, true);\n return new TwoFactorEmailResponse(r);\n }\n\n async getTwoFactorDuo(request: PasswordVerificationRequest): Promise {\n const r = await this.send('POST', '/two-factor/get-duo', request, true, true);\n return new TwoFactorDuoResponse(r);\n }\n\n async getTwoFactorOrganizationDuo(organizationId: string,\n request: PasswordVerificationRequest): Promise {\n const r = await this.send('POST', '/organizations/' + organizationId + '/two-factor/get-duo',\n request, true, true);\n return new TwoFactorDuoResponse(r);\n }\n\n async getTwoFactorYubiKey(request: PasswordVerificationRequest): Promise {\n const r = await this.send('POST', '/two-factor/get-yubikey', request, true, true);\n return new TwoFactorYubiKeyResponse(r);\n }\n\n async getTwoFactorWebAuthn(request: PasswordVerificationRequest): Promise {\n const r = await this.send('POST', '/two-factor/get-webauthn', request, true, true);\n return new TwoFactorWebAuthnResponse(r);\n }\n\n async getTwoFactorWebAuthnChallenge(request: PasswordVerificationRequest): Promise {\n const r = await this.send('POST', '/two-factor/get-webauthn-challenge', request, true, true);\n return new ChallengeResponse(r);\n }\n\n async getTwoFactorRecover(request: PasswordVerificationRequest): Promise {\n const r = await this.send('POST', '/two-factor/get-recover', request, true, true);\n return new TwoFactorRecoverResponse(r);\n }\n\n async putTwoFactorAuthenticator(\n request: UpdateTwoFactorAuthenticatorRequest): Promise {\n const r = await this.send('PUT', '/two-factor/authenticator', request, true, true);\n return new TwoFactorAuthenticatorResponse(r);\n }\n\n async putTwoFactorEmail(request: UpdateTwoFactorEmailRequest): Promise {\n const r = await this.send('PUT', '/two-factor/email', request, true, true);\n return new TwoFactorEmailResponse(r);\n }\n\n async putTwoFactorDuo(request: UpdateTwoFactorDuoRequest): Promise {\n const r = await this.send('PUT', '/two-factor/duo', request, true, true);\n return new TwoFactorDuoResponse(r);\n }\n\n async putTwoFactorOrganizationDuo(organizationId: string,\n request: UpdateTwoFactorDuoRequest): Promise {\n const r = await this.send('PUT', '/organizations/' + organizationId + '/two-factor/duo', request, true, true);\n return new TwoFactorDuoResponse(r);\n }\n\n async putTwoFactorYubiKey(request: UpdateTwoFactorYubioOtpRequest): Promise {\n const r = await this.send('PUT', '/two-factor/yubikey', request, true, true);\n return new TwoFactorYubiKeyResponse(r);\n }\n\n async putTwoFactorWebAuthn(request: UpdateTwoFactorWebAuthnRequest): Promise {\n const response = request.deviceResponse.response as AuthenticatorAttestationResponse;\n const data: any = Object.assign({}, request);\n\n data.deviceResponse = {\n id: request.deviceResponse.id,\n rawId: btoa(request.deviceResponse.id),\n type: request.deviceResponse.type,\n extensions: request.deviceResponse.getClientExtensionResults(),\n response: {\n AttestationObject: Utils.fromBufferToB64(response.attestationObject),\n clientDataJson: Utils.fromBufferToB64(response.clientDataJSON),\n },\n };\n\n const r = await this.send('PUT', '/two-factor/webauthn', data, true, true);\n return new TwoFactorWebAuthnResponse(r);\n }\n\n async deleteTwoFactorWebAuthn(request: UpdateTwoFactorWebAuthnDeleteRequest): Promise {\n const r = await this.send('DELETE', '/two-factor/webauthn', request, true, true);\n return new TwoFactorWebAuthnResponse(r);\n }\n\n async putTwoFactorDisable(request: TwoFactorProviderRequest): Promise {\n const r = await this.send('PUT', '/two-factor/disable', request, true, true);\n return new TwoFactorProviderResponse(r);\n }\n\n async putTwoFactorOrganizationDisable(organizationId: string,\n request: TwoFactorProviderRequest): Promise {\n const r = await this.send('PUT', '/organizations/' + organizationId + '/two-factor/disable',\n request, true, true);\n return new TwoFactorProviderResponse(r);\n }\n\n postTwoFactorRecover(request: TwoFactorRecoveryRequest): Promise {\n return this.send('POST', '/two-factor/recover', request, false, false);\n }\n\n postTwoFactorEmailSetup(request: TwoFactorEmailRequest): Promise {\n return this.send('POST', '/two-factor/send-email', request, true, false);\n }\n\n postTwoFactorEmail(request: TwoFactorEmailRequest): Promise {\n return this.send('POST', '/two-factor/send-email-login', request, false, false);\n }\n\n // Emergency Access APIs\n\n async getEmergencyAccessTrusted(): Promise> {\n const r = await this.send('GET', '/emergency-access/trusted', null, true, true);\n return new ListResponse(r, EmergencyAccessGranteeDetailsResponse);\n }\n\n async getEmergencyAccessGranted(): Promise> {\n const r = await this.send('GET', '/emergency-access/granted', null, true, true);\n return new ListResponse(r, EmergencyAccessGrantorDetailsResponse);\n }\n\n async getEmergencyAccess(id: string): Promise {\n const r = await this.send('GET', '/emergency-access/' + id, null, true, true);\n return new EmergencyAccessGranteeDetailsResponse(r);\n }\n\n async getEmergencyGrantorPolicies(id: string): Promise> {\n const r = await this.send('GET', '/emergency-access/' + id + '/policies', null, true, true);\n return new ListResponse(r, PolicyResponse);\n }\n\n putEmergencyAccess(id: string, request: EmergencyAccessUpdateRequest): Promise {\n return this.send('PUT', '/emergency-access/' + id, request, true, false);\n }\n\n deleteEmergencyAccess(id: string): Promise {\n return this.send('DELETE', '/emergency-access/' + id, null, true, false);\n }\n\n postEmergencyAccessInvite(request: EmergencyAccessInviteRequest): Promise {\n return this.send('POST', '/emergency-access/invite', request, true, false);\n }\n\n postEmergencyAccessReinvite(id: string): Promise {\n return this.send('POST', '/emergency-access/' + id + '/reinvite', null, true, false);\n }\n\n postEmergencyAccessAccept(id: string, request: EmergencyAccessAcceptRequest): Promise {\n return this.send('POST', '/emergency-access/' + id + '/accept', request, true, false);\n }\n\n postEmergencyAccessConfirm(id: string, request: EmergencyAccessConfirmRequest): Promise {\n return this.send('POST', '/emergency-access/' + id + '/confirm', request, true, false);\n }\n\n postEmergencyAccessInitiate(id: string): Promise {\n return this.send('POST', '/emergency-access/' + id + '/initiate', null, true, false);\n }\n\n postEmergencyAccessApprove(id: string): Promise {\n return this.send('POST', '/emergency-access/' + id + '/approve', null, true, false);\n }\n\n postEmergencyAccessReject(id: string): Promise {\n return this.send('POST', '/emergency-access/' + id + '/reject', null, true, false);\n }\n\n async postEmergencyAccessTakeover(id: string): Promise {\n const r = await this.send('POST', '/emergency-access/' + id + '/takeover', null, true, true);\n return new EmergencyAccessTakeoverResponse(r);\n }\n\n async postEmergencyAccessPassword(id: string, request: EmergencyAccessPasswordRequest): Promise {\n const r = await this.send('POST', '/emergency-access/' + id + '/password', request, true, true);\n }\n\n async postEmergencyAccessView(id: string): Promise {\n const r = await this.send('POST', '/emergency-access/' + id + '/view', null, true, true);\n return new EmergencyAccessViewResponse(r);\n }\n\n // Organization APIs\n\n async getOrganization(id: string): Promise {\n const r = await this.send('GET', '/organizations/' + id, null, true, true);\n return new OrganizationResponse(r);\n }\n\n async getOrganizationBilling(id: string): Promise {\n const r = await this.send('GET', '/organizations/' + id + '/billing', null, true, true);\n return new BillingResponse(r);\n }\n\n async getOrganizationSubscription(id: string): Promise {\n const r = await this.send('GET', '/organizations/' + id + '/subscription', null, true, true);\n return new OrganizationSubscriptionResponse(r);\n }\n\n async getOrganizationLicense(id: string, installationId: string): Promise {\n return this.send('GET', '/organizations/' + id + '/license?installationId=' + installationId,\n null, true, true);\n }\n\n async getOrganizationTaxInfo(id: string): Promise {\n const r = await this.send('GET', '/organizations/' + id + '/tax', null, true, true);\n return new TaxInfoResponse(r);\n }\n\n async postOrganization(request: OrganizationCreateRequest): Promise {\n const r = await this.send('POST', '/organizations', request, true, true);\n return new OrganizationResponse(r);\n }\n\n async putOrganization(id: string, request: OrganizationUpdateRequest): Promise {\n const r = await this.send('PUT', '/organizations/' + id, request, true, true);\n return new OrganizationResponse(r);\n }\n\n async putOrganizationTaxInfo(id: string, request: OrganizationTaxInfoUpdateRequest): Promise {\n return this.send('PUT', '/organizations/' + id + '/tax', request, true, false);\n }\n\n postLeaveOrganization(id: string): Promise {\n return this.send('POST', '/organizations/' + id + '/leave', null, true, false);\n }\n\n async postOrganizationLicense(data: FormData): Promise {\n const r = await this.send('POST', '/organizations/license', data, true, true);\n return new OrganizationResponse(r);\n }\n\n async postOrganizationLicenseUpdate(id: string, data: FormData): Promise {\n return this.send('POST', '/organizations/' + id + '/license', data, true, false);\n }\n\n async postOrganizationApiKey(id: string, request: PasswordVerificationRequest): Promise {\n const r = await this.send('POST', '/organizations/' + id + '/api-key', request, true, true);\n return new ApiKeyResponse(r);\n }\n\n async postOrganizationRotateApiKey(id: string, request: PasswordVerificationRequest): Promise {\n const r = await this.send('POST', '/organizations/' + id + '/rotate-api-key', request, true, true);\n return new ApiKeyResponse(r);\n }\n\n async postOrganizationUpgrade(id: string, request: OrganizationUpgradeRequest): Promise {\n const r = await this.send('POST', '/organizations/' + id + '/upgrade', request, true, true);\n return new PaymentResponse(r);\n }\n\n async postOrganizationSeat(id: string, request: SeatRequest): Promise {\n const r = await this.send('POST', '/organizations/' + id + '/seat', request, true, true);\n return new PaymentResponse(r);\n }\n\n async postOrganizationStorage(id: string, request: StorageRequest): Promise {\n const r = await this.send('POST', '/organizations/' + id + '/storage', request, true, true);\n return new PaymentResponse(r);\n }\n\n postOrganizationPayment(id: string, request: PaymentRequest): Promise {\n return this.send('POST', '/organizations/' + id + '/payment', request, true, false);\n }\n\n postOrganizationVerifyBank(id: string, request: VerifyBankRequest): Promise {\n return this.send('POST', '/organizations/' + id + '/verify-bank', request, true, false);\n }\n\n postOrganizationCancel(id: string): Promise {\n return this.send('POST', '/organizations/' + id + '/cancel', null, true, false);\n }\n\n postOrganizationReinstate(id: string): Promise {\n return this.send('POST', '/organizations/' + id + '/reinstate', null, true, false);\n }\n\n deleteOrganization(id: string, request: PasswordVerificationRequest): Promise {\n return this.send('DELETE', '/organizations/' + id, request, true, false);\n }\n\n async getOrganizationKeys(id: string): Promise {\n const r = await this.send('GET', '/organizations/' + id + '/keys', null, true, true);\n return new OrganizationKeysResponse(r);\n }\n\n async postOrganizationKeys(id: string, request: OrganizationKeysRequest): Promise {\n const r = await this.send('POST', '/organizations/' + id + '/keys', request, true, true);\n return new OrganizationKeysResponse(r);\n }\n\n // Event APIs\n\n async getEvents(start: string, end: string, token: string): Promise> {\n const r = await this.send('GET', this.addEventParameters('/events', start, end, token), null, true, true);\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsCipher(id: string, start: string, end: string,\n token: string): Promise> {\n const r = await this.send('GET', this.addEventParameters('/ciphers/' + id + '/events', start, end, token),\n null, true, true);\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsOrganization(id: string, start: string, end: string,\n token: string): Promise> {\n const r = await this.send('GET', this.addEventParameters('/organizations/' + id + '/events', start, end, token),\n null, true, true);\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsOrganizationUser(organizationId: string, id: string,\n start: string, end: string, token: string): Promise> {\n const r = await this.send('GET',\n this.addEventParameters('/organizations/' + organizationId + '/users/' + id + '/events', start, end, token),\n null, true, true);\n return new ListResponse(r, EventResponse);\n }\n\n async postEventsCollect(request: EventRequest[]): Promise {\n const authHeader = await this.getActiveBearerToken();\n const headers = new Headers({\n 'Device-Type': this.deviceType,\n 'Authorization': 'Bearer ' + authHeader,\n 'Content-Type': 'application/json; charset=utf-8',\n });\n if (this.customUserAgent != null) {\n headers.set('User-Agent', this.customUserAgent);\n }\n const response = await this.fetch(new Request(this.eventsBaseUrl + '/collect', {\n cache: 'no-store',\n credentials: this.getCredentials(),\n method: 'POST',\n body: JSON.stringify(request),\n headers: headers,\n }));\n if (response.status !== 200) {\n return Promise.reject('Event post failed.');\n }\n }\n\n // User APIs\n\n async getUserPublicKey(id: string): Promise {\n const r = await this.send('GET', '/users/' + id + '/public-key', null, true, true);\n return new UserKeyResponse(r);\n }\n\n // HIBP APIs\n\n async getHibpBreach(username: string): Promise {\n const r = await this.send('GET', '/hibp/breach?username=' + username, null, true, true);\n return r.map((a: any) => new BreachAccountResponse(a));\n }\n\n // Misc\n\n async postBitPayInvoice(request: BitPayInvoiceRequest): Promise {\n const r = await this.send('POST', '/bitpay-invoice', request, true, true);\n return r as string;\n }\n\n async postSetupPayment(): Promise {\n const r = await this.send('POST', '/setup-payment', null, true, true);\n return r as string;\n }\n\n // Helpers\n\n async getActiveBearerToken(): Promise {\n let accessToken = await this.tokenService.getToken();\n if (this.tokenService.tokenNeedsRefresh()) {\n await this.doRefreshToken();\n accessToken = await this.tokenService.getToken();\n }\n return accessToken;\n }\n\n fetch(request: Request): Promise {\n if (request.method === 'GET') {\n request.headers.set('Cache-Control', 'no-store');\n request.headers.set('Pragma', 'no-cache');\n }\n return this.nativeFetch(request);\n }\n\n nativeFetch(request: Request): Promise {\n return fetch(request);\n }\n\n async preValidateSso(identifier: string): Promise {\n if (identifier == null || identifier === '') {\n throw new Error('Organization Identifier was not provided.');\n }\n const headers = new Headers({\n 'Accept': 'application/json',\n 'Device-Type': this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set('User-Agent', this.customUserAgent);\n }\n\n const path = `/account/prevalidate?domainHint=${encodeURIComponent(identifier)}`;\n const response = await this.fetch(new Request(this.identityBaseUrl + path, {\n cache: 'no-store',\n credentials: this.getCredentials(),\n headers: headers,\n method: 'GET',\n }));\n\n if (response.status === 200) {\n return true;\n } else {\n const error = await this.handleError(response, false, true);\n return Promise.reject(error);\n }\n }\n\n protected async doRefreshToken(): Promise {\n const refreshToken = await this.tokenService.getRefreshToken();\n if (refreshToken == null || refreshToken === '') {\n throw new Error();\n }\n const headers = new Headers({\n 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',\n 'Accept': 'application/json',\n 'Device-Type': this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set('User-Agent', this.customUserAgent);\n }\n\n const decodedToken = this.tokenService.decodeToken();\n const response = await this.fetch(new Request(this.identityBaseUrl + '/connect/token', {\n body: this.qsStringify({\n grant_type: 'refresh_token',\n client_id: decodedToken.client_id,\n refresh_token: refreshToken,\n }),\n cache: 'no-store',\n credentials: this.getCredentials(),\n headers: headers,\n method: 'POST',\n }));\n\n if (response.status === 200) {\n const responseJson = await response.json();\n const tokenResponse = new IdentityTokenResponse(responseJson);\n await this.tokenService.setTokens(tokenResponse.accessToken, tokenResponse.refreshToken);\n } else {\n const error = await this.handleError(response, true, true);\n return Promise.reject(error);\n }\n }\n\n private async send(method: 'GET' | 'POST' | 'PUT' | 'DELETE', path: string, body: any,\n authed: boolean, hasResponse: boolean, apiUrl?: string,\n alterHeaders?: (headers: Headers) => void): Promise {\n apiUrl = Utils.isNullOrWhitespace(apiUrl) ? this.apiBaseUrl : apiUrl;\n const headers = new Headers({\n 'Device-Type': this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set('User-Agent', this.customUserAgent);\n }\n\n const requestInit: RequestInit = {\n cache: 'no-store',\n credentials: this.getCredentials(),\n method: method,\n };\n\n if (authed) {\n const authHeader = await this.getActiveBearerToken();\n headers.set('Authorization', 'Bearer ' + authHeader);\n }\n if (body != null) {\n if (typeof body === 'string') {\n requestInit.body = body;\n headers.set('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');\n } else if (typeof body === 'object') {\n if (body instanceof FormData) {\n requestInit.body = body;\n } else {\n headers.set('Content-Type', 'application/json; charset=utf-8');\n requestInit.body = JSON.stringify(body);\n }\n }\n }\n if (hasResponse) {\n headers.set('Accept', 'application/json');\n }\n if (alterHeaders != null) {\n alterHeaders(headers);\n }\n\n requestInit.headers = headers;\n const response = await this.fetch(new Request(apiUrl + path, requestInit));\n\n if (hasResponse && response.status === 200) {\n const responseJson = await response.json();\n return responseJson;\n } else if (response.status !== 200) {\n const error = await this.handleError(response, false, authed);\n return Promise.reject(error);\n }\n }\n\n private async handleError(response: Response, tokenError: boolean, authed: boolean): Promise {\n if (authed && ((tokenError && response.status === 400) || response.status === 401 || response.status === 403)) {\n await this.logoutCallback(true);\n return null;\n }\n\n let responseJson: any = null;\n if (this.isJsonResponse(response)) {\n responseJson = await response.json();\n } else if (this.isTextResponse(response)) {\n responseJson = { Message: await response.text() };\n }\n\n return new ErrorResponse(responseJson, response.status, tokenError);\n }\n\n private qsStringify(params: any): string {\n return Object.keys(params).map(key => {\n return encodeURIComponent(key) + '=' + encodeURIComponent(params[key]);\n }).join('&');\n }\n\n private getCredentials(): RequestCredentials {\n if (!this.isWebClient || this.usingBaseUrl) {\n return 'include';\n }\n return undefined;\n }\n\n private addEventParameters(base: string, start: string, end: string, token: string) {\n if (start != null) {\n base += ('?start=' + start);\n }\n if (end != null) {\n base += (base.indexOf('?') > -1 ? '&' : '?');\n base += ('end=' + end);\n }\n if (token != null) {\n base += (base.indexOf('?') > -1 ? '&' : '?');\n base += ('continuationToken=' + token);\n }\n return base;\n }\n\n private isJsonResponse(response: Response): boolean {\n const typeHeader = response.headers.get('content-type');\n return typeHeader != null && typeHeader.indexOf('application/json') > -1;\n }\n\n private isTextResponse(response: Response): boolean {\n const typeHeader = response.headers.get('content-type');\n return typeHeader != null && typeHeader.indexOf('text') > -1;\n }\n}\n","import { BaseResponse } from './baseResponse';\nimport { PlanResponse } from './planResponse';\n\nimport { PlanType } from '../../enums/planType';\n\nexport class OrganizationResponse extends BaseResponse {\n id: string;\n identifier: string;\n name: string;\n businessName: string;\n businessAddress1: string;\n businessAddress2: string;\n businessAddress3: string;\n businessCountry: string;\n businessTaxNumber: string;\n billingEmail: string;\n plan: PlanResponse;\n planType: PlanType;\n seats: number;\n maxCollections: number;\n maxStorageGb: number;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useResetPassword: boolean;\n hasPublicAndPrivateKeys: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.identifier = this.getResponseProperty('Identifier');\n this.name = this.getResponseProperty('Name');\n this.businessName = this.getResponseProperty('BusinessName');\n this.businessAddress1 = this.getResponseProperty('BusinessAddress1');\n this.businessAddress2 = this.getResponseProperty('BusinessAddress2');\n this.businessAddress3 = this.getResponseProperty('BusinessAddress3');\n this.businessCountry = this.getResponseProperty('BusinessCountry');\n this.businessTaxNumber = this.getResponseProperty('BusinessTaxNumber');\n this.billingEmail = this.getResponseProperty('BillingEmail');\n const plan = this.getResponseProperty('Plan');\n this.plan = plan == null ? null : new PlanResponse(plan);\n this.planType = this.getResponseProperty('PlanType');\n this.seats = this.getResponseProperty('Seats');\n this.maxCollections = this.getResponseProperty('MaxCollections');\n this.maxStorageGb = this.getResponseProperty('MaxStorageGb');\n this.useGroups = this.getResponseProperty('UseGroups');\n this.useDirectory = this.getResponseProperty('UseDirectory');\n this.useEvents = this.getResponseProperty('UseEvents');\n this.useTotp = this.getResponseProperty('UseTotp');\n this.use2fa = this.getResponseProperty('Use2fa');\n this.useApi = this.getResponseProperty('UseApi');\n this.useResetPassword = this.getResponseProperty('UseResetPassword');\n this.hasPublicAndPrivateKeys = this.getResponseProperty('HasPublicAndPrivateKeys');\n }\n}\n","import { PlanType } from '../../enums/planType';\nimport { ProductType } from '../../enums/productType';\n\nimport { BaseResponse } from './baseResponse';\n\nexport class PlanResponse extends BaseResponse {\n type: PlanType;\n product: ProductType;\n name: string;\n isAnnual: boolean;\n nameLocalizationKey: string;\n descriptionLocalizationKey: string;\n canBeUsedByBusiness: boolean;\n baseSeats: number;\n baseStorageGb: number;\n maxCollections: number;\n maxUsers: number;\n\n hasAdditionalSeatsOption: boolean;\n maxAdditionalSeats: number;\n hasAdditionalStorageOption: boolean;\n maxAdditionalStorage: number;\n hasPremiumAccessOption: boolean;\n trialPeriodDays: number;\n\n hasSelfHost: boolean;\n hasPolicies: boolean;\n hasGroups: boolean;\n hasDirectory: boolean;\n hasEvents: boolean;\n hasTotp: boolean;\n has2fa: boolean;\n hasApi: boolean;\n hasSso: boolean;\n hasResetPassword: boolean;\n usersGetPremium: boolean;\n\n upgradeSortOrder: number;\n displaySortOrder: number;\n legacyYear: number;\n disabled: boolean;\n\n stripePlanId: string;\n stripeSeatPlanId: string;\n stripeStoragePlanId: string;\n stripePremiumAccessPlanId: string;\n basePrice: number;\n seatPrice: number;\n additionalStoragePricePerGb: number;\n premiumAccessOptionPrice: number;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty('Type');\n this.product = this.getResponseProperty('Product');\n this.name = this.getResponseProperty('Name');\n this.isAnnual = this.getResponseProperty('IsAnnual');\n this.nameLocalizationKey = this.getResponseProperty('NameLocalizationKey');\n this.descriptionLocalizationKey = this.getResponseProperty('DescriptionLocalizationKey');\n this.canBeUsedByBusiness = this.getResponseProperty('CanBeUsedByBusiness');\n this.baseSeats = this.getResponseProperty('BaseSeats');\n this.baseStorageGb = this.getResponseProperty('BaseStorageGb');\n this.maxCollections = this.getResponseProperty('MaxCollections');\n this.maxUsers = this.getResponseProperty('MaxUsers');\n this.hasAdditionalSeatsOption = this.getResponseProperty('HasAdditionalSeatsOption');\n this.maxAdditionalSeats = this.getResponseProperty('MaxAdditionalSeats');\n this.hasAdditionalStorageOption = this.getResponseProperty('HasAdditionalStorageOption');\n this.maxAdditionalStorage = this.getResponseProperty('MaxAdditionalStorage');\n this.hasPremiumAccessOption = this.getResponseProperty('HasPremiumAccessOption');\n this.trialPeriodDays = this.getResponseProperty('TrialPeriodDays');\n this.hasSelfHost = this.getResponseProperty('HasSelfHost');\n this.hasPolicies = this.getResponseProperty('HasPolicies');\n this.hasGroups = this.getResponseProperty('HasGroups');\n this.hasDirectory = this.getResponseProperty('HasDirectory');\n this.hasEvents = this.getResponseProperty('HasEvents');\n this.hasTotp = this.getResponseProperty('HasTotp');\n this.has2fa = this.getResponseProperty('Has2fa');\n this.hasApi = this.getResponseProperty('HasApi');\n this.hasSso = this.getResponseProperty('HasSso');\n this.hasResetPassword = this.getResponseProperty('HasResetPassword');\n this.usersGetPremium = this.getResponseProperty('UsersGetPremium');\n this.upgradeSortOrder = this.getResponseProperty('UpgradeSortOrder');\n this.displaySortOrder = this.getResponseProperty('SortOrder');\n this.legacyYear = this.getResponseProperty('LegacyYear');\n this.disabled = this.getResponseProperty('Disabled');\n this.stripePlanId = this.getResponseProperty('StripePlanId');\n this.stripeSeatPlanId = this.getResponseProperty('StripeSeatPlanId');\n this.stripeStoragePlanId = this.getResponseProperty('StripeStoragePlanId');\n this.stripePremiumAccessPlanId = this.getResponseProperty('StripePremiumAccessPlanId');\n this.basePrice = this.getResponseProperty('BasePrice');\n this.seatPrice = this.getResponseProperty('SeatPrice');\n this.additionalStoragePricePerGb = this.getResponseProperty('AdditionalStoragePricePerGb');\n this.premiumAccessOptionPrice = this.getResponseProperty('PremiumAccessOptionPrice');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class SubscriptionResponse extends BaseResponse {\n storageName: string;\n storageGb: number;\n maxStorageGb: number;\n subscription: BillingSubscriptionResponse;\n upcomingInvoice: BillingSubscriptionUpcomingInvoiceResponse;\n license: any;\n expiration: string;\n usingInAppPurchase: boolean;\n\n constructor(response: any) {\n super(response);\n this.storageName = this.getResponseProperty('StorageName');\n this.storageGb = this.getResponseProperty('StorageGb');\n this.maxStorageGb = this.getResponseProperty('MaxStorageGb');\n this.license = this.getResponseProperty('License');\n this.expiration = this.getResponseProperty('Expiration');\n this.usingInAppPurchase = this.getResponseProperty('UsingInAppPurchase');\n const subscription = this.getResponseProperty('Subscription');\n const upcomingInvoice = this.getResponseProperty('UpcomingInvoice');\n this.subscription = subscription == null ? null : new BillingSubscriptionResponse(subscription);\n this.upcomingInvoice = upcomingInvoice == null ? null :\n new BillingSubscriptionUpcomingInvoiceResponse(upcomingInvoice);\n }\n}\n\nexport class BillingSubscriptionResponse extends BaseResponse {\n trialStartDate: string;\n trialEndDate: string;\n periodStartDate: string;\n periodEndDate: string;\n cancelledDate: string;\n cancelAtEndDate: boolean;\n status: string;\n cancelled: boolean;\n items: BillingSubscriptionItemResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.trialEndDate = this.getResponseProperty('TrialStartDate');\n this.trialEndDate = this.getResponseProperty('TrialEndDate');\n this.periodStartDate = this.getResponseProperty('PeriodStartDate');\n this.periodEndDate = this.getResponseProperty('PeriodEndDate');\n this.cancelledDate = this.getResponseProperty('CancelledDate');\n this.cancelAtEndDate = this.getResponseProperty('CancelAtEndDate');\n this.status = this.getResponseProperty('Status');\n this.cancelled = this.getResponseProperty('Cancelled');\n const items = this.getResponseProperty('Items');\n if (items != null) {\n this.items = items.map((i: any) => new BillingSubscriptionItemResponse(i));\n }\n }\n}\n\nexport class BillingSubscriptionItemResponse extends BaseResponse {\n name: string;\n amount: number;\n quantity: number;\n interval: string;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty('Name');\n this.amount = this.getResponseProperty('Amount');\n this.quantity = this.getResponseProperty('Quantity');\n this.interval = this.getResponseProperty('Interval');\n }\n}\n\nexport class BillingSubscriptionUpcomingInvoiceResponse extends BaseResponse {\n date: string;\n amount: number;\n\n constructor(response: any) {\n super(response);\n this.date = this.getResponseProperty('Date');\n this.amount = this.getResponseProperty('Amount');\n }\n}\n","import { Utils } from '../../misc/utils';\nimport { BaseResponse } from './baseResponse';\n\nexport class TwoFactorWebAuthnResponse extends BaseResponse {\n enabled: boolean;\n keys: KeyResponse[];\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty('Enabled');\n const keys = this.getResponseProperty('Keys');\n this.keys = keys == null ? null : keys.map((k: any) => new KeyResponse(k));\n }\n}\n\nexport class KeyResponse extends BaseResponse {\n name: string;\n id: number;\n migrated: boolean;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty('Name');\n this.id = this.getResponseProperty('Id');\n this.migrated = this.getResponseProperty('Migrated');\n }\n}\n\nexport class ChallengeResponse extends BaseResponse implements PublicKeyCredentialCreationOptions {\n attestation?: AttestationConveyancePreference;\n authenticatorSelection?: AuthenticatorSelectionCriteria;\n challenge: BufferSource;\n excludeCredentials?: PublicKeyCredentialDescriptor[];\n extensions?: AuthenticationExtensionsClientInputs;\n pubKeyCredParams: PublicKeyCredentialParameters[];\n rp: PublicKeyCredentialRpEntity;\n timeout?: number;\n user: PublicKeyCredentialUserEntity;\n\n constructor(response: any) {\n super(response);\n this.attestation = this.getResponseProperty('attestation');\n this.authenticatorSelection = this.getResponseProperty('authenticatorSelection');\n this.challenge = Utils.fromUrlB64ToArray(this.getResponseProperty('challenge'));\n this.excludeCredentials = this.getResponseProperty('excludeCredentials').map((c: any) => {\n c.id = Utils.fromUrlB64ToArray(c.id).buffer;\n return c;\n });\n this.extensions = this.getResponseProperty('extensions');\n this.pubKeyCredParams = this.getResponseProperty('pubKeyCredParams');\n this.rp = this.getResponseProperty('rp');\n this.timeout = this.getResponseProperty('timeout');\n\n const user = this.getResponseProperty('user');\n user.id = Utils.fromUrlB64ToArray(user.id);\n\n this.user = user;\n }\n}\n","import { Utils } from '../misc/utils';\n\nimport { AppIdService as AppIdServiceAbstraction } from '../abstractions/appId.service';\nimport { StorageService } from '../abstractions/storage.service';\n\nexport class AppIdService implements AppIdServiceAbstraction {\n constructor(private storageService: StorageService) {\n }\n\n getAppId(): Promise {\n return this.makeAndGetAppId('appId');\n }\n\n getAnonymousAppId(): Promise {\n return this.makeAndGetAppId('anonymousAppId');\n }\n\n private async makeAndGetAppId(key: string) {\n const existingId = await this.storageService.get(key);\n if (existingId != null) {\n return existingId;\n }\n\n const guid = Utils.newGuid();\n await this.storageService.save(key, guid);\n return guid;\n }\n}\n","import { ApiService } from '../abstractions/api.service';\nimport { AuditService as AuditServiceAbstraction } from '../abstractions/audit.service';\nimport { CryptoFunctionService } from '../abstractions/cryptoFunction.service';\n\nimport { throttle } from '../misc/throttle';\nimport { Utils } from '../misc/utils';\n\nimport { BreachAccountResponse } from '../models/response/breachAccountResponse';\nimport { ErrorResponse } from '../models/response/errorResponse';\n\nconst PwnedPasswordsApi = 'https://api.pwnedpasswords.com/range/';\n\nexport class AuditService implements AuditServiceAbstraction {\n constructor(private cryptoFunctionService: CryptoFunctionService, private apiService: ApiService) { }\n\n @throttle(100, () => 'passwordLeaked')\n async passwordLeaked(password: string): Promise {\n const hashBytes = await this.cryptoFunctionService.hash(password, 'sha1');\n const hash = Utils.fromBufferToHex(hashBytes).toUpperCase();\n const hashStart = hash.substr(0, 5);\n const hashEnding = hash.substr(5);\n\n const response = await this.apiService.nativeFetch(new Request(PwnedPasswordsApi + hashStart));\n const leakedHashes = await response.text();\n const match = leakedHashes.split(/\\r?\\n/).find(v => {\n return v.split(':')[0] === hashEnding;\n });\n\n return match != null ? parseInt(match.split(':')[1], 10) : 0;\n }\n\n async breachedAccounts(username: string): Promise {\n try {\n return await this.apiService.getHibpBreach(username);\n } catch (e) {\n const error = e as ErrorResponse;\n if (error.statusCode === 404) {\n return [];\n }\n throw new Error();\n }\n }\n}\n","import { CipherType } from '../enums/cipherType';\nimport { FieldType } from '../enums/fieldType';\nimport { UriMatchType } from '../enums/uriMatchType';\n\nimport { CipherData } from '../models/data/cipherData';\n\nimport { Attachment } from '../models/domain/attachment';\nimport { Card } from '../models/domain/card';\nimport { Cipher } from '../models/domain/cipher';\nimport Domain from '../models/domain/domainBase';\nimport { EncArrayBuffer } from '../models/domain/encArrayBuffer';\nimport { EncString } from '../models/domain/encString';\nimport { Field } from '../models/domain/field';\nimport { Identity } from '../models/domain/identity';\nimport { Login } from '../models/domain/login';\nimport { LoginUri } from '../models/domain/loginUri';\nimport { Password } from '../models/domain/password';\nimport { SecureNote } from '../models/domain/secureNote';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nimport { AttachmentRequest } from '../models/request/attachmentRequest';\nimport { CipherBulkDeleteRequest } from '../models/request/cipherBulkDeleteRequest';\nimport { CipherBulkMoveRequest } from '../models/request/cipherBulkMoveRequest';\nimport { CipherBulkRestoreRequest } from '../models/request/cipherBulkRestoreRequest';\nimport { CipherBulkShareRequest } from '../models/request/cipherBulkShareRequest';\nimport { CipherCollectionsRequest } from '../models/request/cipherCollectionsRequest';\nimport { CipherCreateRequest } from '../models/request/cipherCreateRequest';\nimport { CipherRequest } from '../models/request/cipherRequest';\nimport { CipherShareRequest } from '../models/request/cipherShareRequest';\n\nimport { CipherResponse } from '../models/response/cipherResponse';\nimport { ErrorResponse } from '../models/response/errorResponse';\n\nimport { AttachmentView } from '../models/view/attachmentView';\nimport { CipherView } from '../models/view/cipherView';\nimport { FieldView } from '../models/view/fieldView';\nimport { PasswordHistoryView } from '../models/view/passwordHistoryView';\nimport { View } from '../models/view/view';\n\nimport { SortedCiphersCache } from '../models/domain/sortedCiphersCache';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { CipherService as CipherServiceAbstraction } from '../abstractions/cipher.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { FileUploadService } from '../abstractions/fileUpload.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport { SearchService } from '../abstractions/search.service';\nimport { SettingsService } from '../abstractions/settings.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\n\nimport { ConstantsService } from './constants.service';\n\nimport { sequentialize } from '../misc/sequentialize';\nimport { Utils } from '../misc/utils';\n\nconst Keys = {\n ciphersPrefix: 'ciphers_',\n localData: 'sitesLocalData',\n neverDomains: 'neverDomains',\n};\n\nconst DomainMatchBlacklist = new Map>([\n ['google.com', new Set(['script.google.com'])],\n]);\n\nexport class CipherService implements CipherServiceAbstraction {\n // tslint:disable-next-line\n _decryptedCipherCache: CipherView[];\n\n private sortedCiphersCache: SortedCiphersCache = new SortedCiphersCache(this.sortCiphersByLastUsed);\n\n constructor(private cryptoService: CryptoService, private userService: UserService,\n private settingsService: SettingsService, private apiService: ApiService,\n private fileUploadService: FileUploadService, private storageService: StorageService,\n private i18nService: I18nService, private searchService: () => SearchService) {\n }\n\n get decryptedCipherCache() {\n return this._decryptedCipherCache;\n }\n set decryptedCipherCache(value: CipherView[]) {\n this._decryptedCipherCache = value;\n if (this.searchService != null) {\n if (value == null) {\n this.searchService().clearIndex();\n } else {\n this.searchService().indexCiphers();\n }\n }\n }\n\n clearCache(): void {\n this.decryptedCipherCache = null;\n this.sortedCiphersCache.clear();\n }\n\n async encrypt(model: CipherView, key?: SymmetricCryptoKey, originalCipher: Cipher = null): Promise {\n // Adjust password history\n if (model.id != null) {\n if (originalCipher == null) {\n originalCipher = await this.get(model.id);\n }\n if (originalCipher != null) {\n const existingCipher = await originalCipher.decrypt();\n model.passwordHistory = existingCipher.passwordHistory || [];\n if (model.type === CipherType.Login && existingCipher.type === CipherType.Login) {\n if (existingCipher.login.password != null && existingCipher.login.password !== '' &&\n existingCipher.login.password !== model.login.password) {\n const ph = new PasswordHistoryView();\n ph.password = existingCipher.login.password;\n ph.lastUsedDate = model.login.passwordRevisionDate = new Date();\n model.passwordHistory.splice(0, 0, ph);\n } else {\n model.login.passwordRevisionDate = existingCipher.login.passwordRevisionDate;\n }\n }\n if (existingCipher.hasFields) {\n const existingHiddenFields = existingCipher.fields.filter(f => f.type === FieldType.Hidden &&\n f.name != null && f.name !== '' && f.value != null && f.value !== '');\n const hiddenFields = model.fields == null ? [] :\n model.fields.filter(f => f.type === FieldType.Hidden && f.name != null && f.name !== '');\n existingHiddenFields.forEach(ef => {\n const matchedField = hiddenFields.find(f => f.name === ef.name);\n if (matchedField == null || matchedField.value !== ef.value) {\n const ph = new PasswordHistoryView();\n ph.password = ef.name + ': ' + ef.value;\n ph.lastUsedDate = new Date();\n model.passwordHistory.splice(0, 0, ph);\n }\n });\n }\n }\n if (model.passwordHistory != null && model.passwordHistory.length === 0) {\n model.passwordHistory = null;\n } else if (model.passwordHistory != null && model.passwordHistory.length > 5) {\n // only save last 5 history\n model.passwordHistory = model.passwordHistory.slice(0, 5);\n }\n }\n\n const cipher = new Cipher();\n cipher.id = model.id;\n cipher.folderId = model.folderId;\n cipher.favorite = model.favorite;\n cipher.organizationId = model.organizationId;\n cipher.type = model.type;\n cipher.collectionIds = model.collectionIds;\n cipher.revisionDate = model.revisionDate;\n cipher.reprompt = model.reprompt;\n\n if (key == null && cipher.organizationId != null) {\n key = await this.cryptoService.getOrgKey(cipher.organizationId);\n if (key == null) {\n throw new Error('Cannot encrypt cipher for organization. No key.');\n }\n }\n await Promise.all([\n this.encryptObjProperty(model, cipher, {\n name: null,\n notes: null,\n }, key),\n this.encryptCipherData(cipher, model, key),\n this.encryptFields(model.fields, key).then(fields => {\n cipher.fields = fields;\n }),\n this.encryptPasswordHistories(model.passwordHistory, key).then(ph => {\n cipher.passwordHistory = ph;\n }),\n this.encryptAttachments(model.attachments, key).then(attachments => {\n cipher.attachments = attachments;\n }),\n ]);\n\n return cipher;\n }\n\n async encryptAttachments(attachmentsModel: AttachmentView[], key: SymmetricCryptoKey): Promise {\n if (attachmentsModel == null || attachmentsModel.length === 0) {\n return null;\n }\n\n const promises: Promise[] = [];\n const encAttachments: Attachment[] = [];\n attachmentsModel.forEach(async model => {\n const attachment = new Attachment();\n attachment.id = model.id;\n attachment.size = model.size;\n attachment.sizeName = model.sizeName;\n attachment.url = model.url;\n const promise = this.encryptObjProperty(model, attachment, {\n fileName: null,\n }, key).then(async () => {\n if (model.key != null) {\n attachment.key = await this.cryptoService.encrypt(model.key.key, key);\n }\n encAttachments.push(attachment);\n });\n promises.push(promise);\n });\n\n await Promise.all(promises);\n return encAttachments;\n }\n\n async encryptFields(fieldsModel: FieldView[], key: SymmetricCryptoKey): Promise {\n if (!fieldsModel || !fieldsModel.length) {\n return null;\n }\n\n const self = this;\n const encFields: Field[] = [];\n await fieldsModel.reduce((promise, field) => {\n return promise.then(() => {\n return self.encryptField(field, key);\n }).then((encField: Field) => {\n encFields.push(encField);\n });\n }, Promise.resolve());\n\n return encFields;\n }\n\n async encryptField(fieldModel: FieldView, key: SymmetricCryptoKey): Promise {\n const field = new Field();\n field.type = fieldModel.type;\n // normalize boolean type field values\n if (fieldModel.type === FieldType.Boolean && fieldModel.value !== 'true') {\n fieldModel.value = 'false';\n }\n\n await this.encryptObjProperty(fieldModel, field, {\n name: null,\n value: null,\n }, key);\n\n return field;\n }\n\n async encryptPasswordHistories(phModels: PasswordHistoryView[], key: SymmetricCryptoKey): Promise {\n if (!phModels || !phModels.length) {\n return null;\n }\n\n const self = this;\n const encPhs: Password[] = [];\n await phModels.reduce((promise, ph) => {\n return promise.then(() => {\n return self.encryptPasswordHistory(ph, key);\n }).then((encPh: Password) => {\n encPhs.push(encPh);\n });\n }, Promise.resolve());\n\n return encPhs;\n }\n\n async encryptPasswordHistory(phModel: PasswordHistoryView, key: SymmetricCryptoKey): Promise {\n const ph = new Password();\n ph.lastUsedDate = phModel.lastUsedDate;\n\n await this.encryptObjProperty(phModel, ph, {\n password: null,\n }, key);\n\n return ph;\n }\n\n async get(id: string): Promise {\n const userId = await this.userService.getUserId();\n const localData = await this.storageService.get(Keys.localData);\n const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n Keys.ciphersPrefix + userId);\n if (ciphers == null || !ciphers.hasOwnProperty(id)) {\n return null;\n }\n\n return new Cipher(ciphers[id], false, localData ? localData[id] : null);\n }\n\n async getAll(): Promise {\n const userId = await this.userService.getUserId();\n const localData = await this.storageService.get(Keys.localData);\n const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n Keys.ciphersPrefix + userId);\n const response: Cipher[] = [];\n for (const id in ciphers) {\n if (ciphers.hasOwnProperty(id)) {\n response.push(new Cipher(ciphers[id], false, localData ? localData[id] : null));\n }\n }\n return response;\n }\n\n @sequentialize(() => 'getAllDecrypted')\n async getAllDecrypted(): Promise {\n if (this.decryptedCipherCache != null) {\n const userId = await this.userService.getUserId();\n if (this.searchService != null && (this.searchService().indexedEntityId ?? userId) !== userId)\n {\n await this.searchService().indexCiphers(userId, this.decryptedCipherCache);\n }\n return this.decryptedCipherCache;\n }\n\n const decCiphers: CipherView[] = [];\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error('No key.');\n }\n\n const promises: any[] = [];\n const ciphers = await this.getAll();\n ciphers.forEach(cipher => {\n promises.push(cipher.decrypt().then(c => decCiphers.push(c)));\n });\n\n await Promise.all(promises);\n decCiphers.sort(this.getLocaleSortingFunction());\n this.decryptedCipherCache = decCiphers;\n return this.decryptedCipherCache;\n }\n\n async getAllDecryptedForGrouping(groupingId: string, folder: boolean = true): Promise {\n const ciphers = await this.getAllDecrypted();\n\n return ciphers.filter(cipher => {\n if (cipher.isDeleted) {\n return false;\n }\n if (folder && cipher.folderId === groupingId) {\n return true;\n } else if (!folder && cipher.collectionIds != null && cipher.collectionIds.indexOf(groupingId) > -1) {\n return true;\n }\n\n return false;\n });\n }\n\n async getAllDecryptedForUrl(url: string, includeOtherTypes?: CipherType[],\n defaultMatch: UriMatchType = null): Promise {\n if (url == null && includeOtherTypes == null) {\n return Promise.resolve([]);\n }\n\n const domain = Utils.getDomain(url);\n const eqDomainsPromise = domain == null ? Promise.resolve([]) :\n this.settingsService.getEquivalentDomains().then((eqDomains: any[][]) => {\n let matches: any[] = [];\n eqDomains.forEach(eqDomain => {\n if (eqDomain.length && eqDomain.indexOf(domain) >= 0) {\n matches = matches.concat(eqDomain);\n }\n });\n\n if (!matches.length) {\n matches.push(domain);\n }\n\n return matches;\n });\n\n const result = await Promise.all([eqDomainsPromise, this.getAllDecrypted()]);\n const matchingDomains = result[0];\n const ciphers = result[1];\n\n if (defaultMatch == null) {\n defaultMatch = await this.storageService.get(ConstantsService.defaultUriMatch);\n if (defaultMatch == null) {\n defaultMatch = UriMatchType.Domain;\n }\n }\n\n return ciphers.filter(cipher => {\n if (cipher.deletedDate != null) {\n return false;\n }\n if (includeOtherTypes != null && includeOtherTypes.indexOf(cipher.type) > -1) {\n return true;\n }\n\n if (url != null && cipher.type === CipherType.Login && cipher.login.uris != null) {\n for (let i = 0; i < cipher.login.uris.length; i++) {\n const u = cipher.login.uris[i];\n if (u.uri == null) {\n continue;\n }\n\n const match = u.match == null ? defaultMatch : u.match;\n switch (match) {\n case UriMatchType.Domain:\n if (domain != null && u.domain != null && matchingDomains.indexOf(u.domain) > -1) {\n if (DomainMatchBlacklist.has(u.domain)) {\n const domainUrlHost = Utils.getHost(url);\n if (!DomainMatchBlacklist.get(u.domain).has(domainUrlHost)) {\n return true;\n }\n } else {\n return true;\n }\n }\n break;\n case UriMatchType.Host:\n const urlHost = Utils.getHost(url);\n if (urlHost != null && urlHost === Utils.getHost(u.uri)) {\n return true;\n }\n break;\n case UriMatchType.Exact:\n if (url === u.uri) {\n return true;\n }\n break;\n case UriMatchType.StartsWith:\n if (url.startsWith(u.uri)) {\n return true;\n }\n break;\n case UriMatchType.RegularExpression:\n try {\n const regex = new RegExp(u.uri, 'i');\n if (regex.test(url)) {\n return true;\n }\n } catch { }\n break;\n case UriMatchType.Never:\n default:\n break;\n }\n }\n }\n\n return false;\n });\n }\n\n async getAllFromApiForOrganization(organizationId: string): Promise {\n const ciphers = await this.apiService.getCiphersOrganization(organizationId);\n if (ciphers != null && ciphers.data != null && ciphers.data.length) {\n const decCiphers: CipherView[] = [];\n const promises: any[] = [];\n ciphers.data.forEach(r => {\n const data = new CipherData(r);\n const cipher = new Cipher(data);\n promises.push(cipher.decrypt().then(c => decCiphers.push(c)));\n });\n await Promise.all(promises);\n decCiphers.sort(this.getLocaleSortingFunction());\n return decCiphers;\n } else {\n return [];\n }\n }\n\n async getLastUsedForUrl(url: string, autofillOnPageLoad: boolean = false): Promise {\n return this.getCipherForUrl(url, true, false, autofillOnPageLoad);\n }\n\n async getLastLaunchedForUrl(url: string, autofillOnPageLoad: boolean = false): Promise {\n return this.getCipherForUrl(url, false, true, autofillOnPageLoad);\n }\n\n async getNextCipherForUrl(url: string): Promise {\n return this.getCipherForUrl(url, false, false, false);\n }\n\n updateLastUsedIndexForUrl(url: string) {\n this.sortedCiphersCache.updateLastUsedIndex(url);\n }\n\n async updateLastUsedDate(id: string): Promise {\n let ciphersLocalData = await this.storageService.get(Keys.localData);\n if (!ciphersLocalData) {\n ciphersLocalData = {};\n }\n\n if (ciphersLocalData[id]) {\n ciphersLocalData[id].lastUsedDate = new Date().getTime();\n } else {\n ciphersLocalData[id] = {\n lastUsedDate: new Date().getTime(),\n };\n }\n\n await this.storageService.save(Keys.localData, ciphersLocalData);\n\n if (this.decryptedCipherCache == null) {\n return;\n }\n\n for (let i = 0; i < this.decryptedCipherCache.length; i++) {\n const cached = this.decryptedCipherCache[i];\n if (cached.id === id) {\n cached.localData = ciphersLocalData[id];\n break;\n }\n }\n }\n\n async updateLastLaunchedDate(id: string): Promise {\n let ciphersLocalData = await this.storageService.get(Keys.localData);\n if (!ciphersLocalData) {\n ciphersLocalData = {};\n }\n\n if (ciphersLocalData[id]) {\n ciphersLocalData[id].lastLaunched = new Date().getTime();\n } else {\n ciphersLocalData[id] = {\n lastUsedDate: new Date().getTime(),\n };\n }\n\n await this.storageService.save(Keys.localData, ciphersLocalData);\n\n if (this.decryptedCipherCache == null) {\n return;\n }\n\n for (let i = 0; i < this.decryptedCipherCache.length; i++) {\n const cached = this.decryptedCipherCache[i];\n if (cached.id === id) {\n cached.localData = ciphersLocalData[id];\n break;\n }\n }\n }\n\n async saveNeverDomain(domain: string): Promise {\n if (domain == null) {\n return;\n }\n\n let domains = await this.storageService.get<{ [id: string]: any; }>(Keys.neverDomains);\n if (!domains) {\n domains = {};\n }\n domains[domain] = null;\n await this.storageService.save(Keys.neverDomains, domains);\n }\n\n async saveWithServer(cipher: Cipher): Promise {\n let response: CipherResponse;\n if (cipher.id == null) {\n if (cipher.collectionIds != null) {\n const request = new CipherCreateRequest(cipher);\n response = await this.apiService.postCipherCreate(request);\n } else {\n const request = new CipherRequest(cipher);\n response = await this.apiService.postCipher(request);\n }\n cipher.id = response.id;\n } else {\n const request = new CipherRequest(cipher);\n response = await this.apiService.putCipher(cipher.id, request);\n }\n\n const userId = await this.userService.getUserId();\n const data = new CipherData(response, userId, cipher.collectionIds);\n await this.upsert(data);\n }\n\n async shareWithServer(cipher: CipherView, organizationId: string, collectionIds: string[]): Promise {\n const attachmentPromises: Promise[] = [];\n if (cipher.attachments != null) {\n cipher.attachments.forEach(attachment => {\n if (attachment.key == null) {\n attachmentPromises.push(this.shareAttachmentWithServer(attachment, cipher.id, organizationId));\n }\n });\n }\n await Promise.all(attachmentPromises);\n\n cipher.organizationId = organizationId;\n cipher.collectionIds = collectionIds;\n const encCipher = await this.encrypt(cipher);\n const request = new CipherShareRequest(encCipher);\n const response = await this.apiService.putShareCipher(cipher.id, request);\n const userId = await this.userService.getUserId();\n const data = new CipherData(response, userId, collectionIds);\n await this.upsert(data);\n }\n\n async shareManyWithServer(ciphers: CipherView[], organizationId: string, collectionIds: string[]): Promise {\n const promises: Promise[] = [];\n const encCiphers: Cipher[] = [];\n for (const cipher of ciphers) {\n cipher.organizationId = organizationId;\n cipher.collectionIds = collectionIds;\n promises.push(this.encrypt(cipher).then(c => {\n encCiphers.push(c);\n }));\n }\n await Promise.all(promises);\n const request = new CipherBulkShareRequest(encCiphers, collectionIds);\n await this.apiService.putShareCiphers(request);\n const userId = await this.userService.getUserId();\n await this.upsert(encCiphers.map(c => c.toCipherData(userId)));\n }\n\n saveAttachmentWithServer(cipher: Cipher, unencryptedFile: any, admin = false): Promise {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsArrayBuffer(unencryptedFile);\n reader.onload = async (evt: any) => {\n try {\n const cData = await this.saveAttachmentRawWithServer(cipher,\n unencryptedFile.name, evt.target.result, admin);\n resolve(cData);\n } catch (e) {\n reject(e);\n }\n };\n reader.onerror = evt => {\n reject('Error reading file.');\n };\n });\n }\n\n async saveAttachmentRawWithServer(cipher: Cipher, filename: string,\n data: ArrayBuffer, admin = false): Promise {\n const key = await this.cryptoService.getOrgKey(cipher.organizationId);\n const encFileName = await this.cryptoService.encrypt(filename, key);\n\n const dataEncKey = await this.cryptoService.makeEncKey(key);\n const encData = await this.cryptoService.encryptToBytes(data, dataEncKey[0]);\n\n const request: AttachmentRequest = {\n key: dataEncKey[1].encryptedString,\n fileName: encFileName.encryptedString,\n fileSize: encData.buffer.byteLength,\n adminRequest: admin,\n };\n\n let response: CipherResponse;\n try {\n const uploadDataResponse = await this.apiService.postCipherAttachment(cipher.id, request);\n response = admin ? uploadDataResponse.cipherMiniResponse : uploadDataResponse.cipherResponse;\n await this.fileUploadService.uploadCipherAttachment(admin, uploadDataResponse, encFileName, encData);\n } catch (e) {\n if (e instanceof ErrorResponse && (e as ErrorResponse).statusCode === 404 || (e as ErrorResponse).statusCode === 405) {\n response = await this.legacyServerAttachmentFileUpload(admin, cipher.id, encFileName, encData, dataEncKey[1]);\n } else if (e instanceof ErrorResponse) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n } else {\n throw e;\n }\n }\n\n const userId = await this.userService.getUserId();\n const cData = new CipherData(response, userId, cipher.collectionIds);\n if (!admin) {\n await this.upsert(cData);\n }\n return new Cipher(cData);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async legacyServerAttachmentFileUpload(admin: boolean, cipherId: string, encFileName: EncString,\n encData: EncArrayBuffer, key: EncString) {\n const fd = new FormData();\n try {\n const blob = new Blob([encData.buffer], { type: 'application/octet-stream' });\n fd.append('key', key.encryptedString);\n fd.append('data', blob, encFileName.encryptedString);\n } catch (e) {\n if (Utils.isNode && !Utils.isBrowser) {\n fd.append('key', key.encryptedString);\n fd.append('data', Buffer.from(encData.buffer) as any, {\n filepath: encFileName.encryptedString,\n contentType: 'application/octet-stream',\n } as any);\n } else {\n throw e;\n }\n }\n\n let response: CipherResponse;\n try {\n if (admin) {\n response = await this.apiService.postCipherAttachmentAdminLegacy(cipherId, fd);\n } else {\n response = await this.apiService.postCipherAttachmentLegacy(cipherId, fd);\n }\n } catch (e) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n }\n\n return response;\n }\n\n async saveCollectionsWithServer(cipher: Cipher): Promise {\n const request = new CipherCollectionsRequest(cipher.collectionIds);\n await this.apiService.putCipherCollections(cipher.id, request);\n const userId = await this.userService.getUserId();\n const data = cipher.toCipherData(userId);\n await this.upsert(data);\n }\n\n async upsert(cipher: CipherData | CipherData[]): Promise {\n const userId = await this.userService.getUserId();\n let ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n Keys.ciphersPrefix + userId);\n if (ciphers == null) {\n ciphers = {};\n }\n\n if (cipher instanceof CipherData) {\n const c = cipher as CipherData;\n ciphers[c.id] = c;\n } else {\n (cipher as CipherData[]).forEach(c => {\n ciphers[c.id] = c;\n });\n }\n\n await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n this.decryptedCipherCache = null;\n }\n\n async replace(ciphers: { [id: string]: CipherData; }): Promise {\n const userId = await this.userService.getUserId();\n await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n this.decryptedCipherCache = null;\n }\n\n async clear(userId: string): Promise {\n await this.storageService.remove(Keys.ciphersPrefix + userId);\n this.clearCache();\n }\n\n async moveManyWithServer(ids: string[], folderId: string): Promise {\n await this.apiService.putMoveCiphers(new CipherBulkMoveRequest(ids, folderId));\n\n const userId = await this.userService.getUserId();\n let ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n Keys.ciphersPrefix + userId);\n if (ciphers == null) {\n ciphers = {};\n }\n\n ids.forEach(id => {\n if (ciphers.hasOwnProperty(id)) {\n ciphers[id].folderId = folderId;\n }\n });\n\n await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n this.decryptedCipherCache = null;\n }\n\n async delete(id: string | string[]): Promise {\n const userId = await this.userService.getUserId();\n const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n Keys.ciphersPrefix + userId);\n if (ciphers == null) {\n return;\n }\n\n if (typeof id === 'string') {\n if (ciphers[id] == null) {\n return;\n }\n delete ciphers[id];\n } else {\n (id as string[]).forEach(i => {\n delete ciphers[i];\n });\n }\n\n await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n this.decryptedCipherCache = null;\n }\n\n async deleteWithServer(id: string): Promise {\n await this.apiService.deleteCipher(id);\n await this.delete(id);\n }\n\n async deleteManyWithServer(ids: string[]): Promise {\n await this.apiService.deleteManyCiphers(new CipherBulkDeleteRequest(ids));\n await this.delete(ids);\n }\n\n async deleteAttachment(id: string, attachmentId: string): Promise {\n const userId = await this.userService.getUserId();\n const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n Keys.ciphersPrefix + userId);\n\n if (ciphers == null || !ciphers.hasOwnProperty(id) || ciphers[id].attachments == null) {\n return;\n }\n\n for (let i = 0; i < ciphers[id].attachments.length; i++) {\n if (ciphers[id].attachments[i].id === attachmentId) {\n ciphers[id].attachments.splice(i, 1);\n }\n }\n\n await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n this.decryptedCipherCache = null;\n }\n\n async deleteAttachmentWithServer(id: string, attachmentId: string): Promise {\n try {\n await this.apiService.deleteCipherAttachment(id, attachmentId);\n } catch (e) {\n return Promise.reject((e as ErrorResponse).getSingleMessage());\n }\n await this.deleteAttachment(id, attachmentId);\n }\n\n sortCiphersByLastUsed(a: CipherView, b: CipherView): number {\n const aLastUsed = a.localData && a.localData.lastUsedDate ? a.localData.lastUsedDate as number : null;\n const bLastUsed = b.localData && b.localData.lastUsedDate ? b.localData.lastUsedDate as number : null;\n\n const bothNotNull = aLastUsed != null && bLastUsed != null;\n if (bothNotNull && aLastUsed < bLastUsed) {\n return 1;\n }\n if (aLastUsed != null && bLastUsed == null) {\n return -1;\n }\n\n if (bothNotNull && aLastUsed > bLastUsed) {\n return -1;\n }\n if (bLastUsed != null && aLastUsed == null) {\n return 1;\n }\n\n return 0;\n }\n\n sortCiphersByLastUsedThenName(a: CipherView, b: CipherView): number {\n const result = this.sortCiphersByLastUsed(a, b);\n if (result !== 0) {\n return result;\n }\n\n return this.getLocaleSortingFunction()(a, b);\n }\n\n getLocaleSortingFunction(): (a: CipherView, b: CipherView) => number {\n return (a, b) => {\n let aName = a.name;\n let bName = b.name;\n\n if (aName == null && bName != null) {\n return -1;\n }\n if (aName != null && bName == null) {\n return 1;\n }\n if (aName == null && bName == null) {\n return 0;\n }\n\n const result = this.i18nService.collator ? this.i18nService.collator.compare(aName, bName) :\n aName.localeCompare(bName);\n\n if (result !== 0 || a.type !== CipherType.Login || b.type !== CipherType.Login) {\n return result;\n }\n\n if (a.login.username != null) {\n aName += a.login.username;\n }\n\n if (b.login.username != null) {\n bName += b.login.username;\n }\n\n return this.i18nService.collator ? this.i18nService.collator.compare(aName, bName) :\n aName.localeCompare(bName);\n };\n }\n\n async softDelete(id: string | string[]): Promise {\n const userId = await this.userService.getUserId();\n const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n Keys.ciphersPrefix + userId);\n if (ciphers == null) {\n return;\n }\n\n const setDeletedDate = (cipherId: string) => {\n if (ciphers[cipherId] == null) {\n return;\n }\n ciphers[cipherId].deletedDate = new Date().toISOString();\n };\n\n if (typeof id === 'string') {\n setDeletedDate(id);\n } else {\n (id as string[]).forEach(setDeletedDate);\n }\n\n await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n this.decryptedCipherCache = null;\n }\n\n async softDeleteWithServer(id: string): Promise {\n await this.apiService.putDeleteCipher(id);\n await this.softDelete(id);\n }\n\n async softDeleteManyWithServer(ids: string[]): Promise {\n await this.apiService.putDeleteManyCiphers(new CipherBulkDeleteRequest(ids));\n await this.softDelete(ids);\n }\n\n async restore(cipher: { id: string, revisionDate: string; } | { id: string, revisionDate: string; }[]) {\n const userId = await this.userService.getUserId();\n const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n Keys.ciphersPrefix + userId);\n if (ciphers == null) {\n return;\n }\n\n const clearDeletedDate = (c: { id: string, revisionDate: string; }) => {\n if (ciphers[c.id] == null) {\n return;\n }\n ciphers[c.id].deletedDate = null;\n ciphers[c.id].revisionDate = c.revisionDate;\n };\n\n\n if (cipher.constructor.name === 'Array') {\n (cipher as { id: string, revisionDate: string; }[]).forEach(clearDeletedDate);\n } else {\n clearDeletedDate(cipher as { id: string, revisionDate: string; });\n }\n\n await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n this.decryptedCipherCache = null;\n }\n\n async restoreWithServer(id: string): Promise {\n const response = await this.apiService.putRestoreCipher(id);\n await this.restore({ id: id, revisionDate: response.revisionDate });\n }\n\n async restoreManyWithServer(ids: string[]): Promise {\n const response = await this.apiService.putRestoreManyCiphers(new CipherBulkRestoreRequest(ids));\n const restores: { id: string, revisionDate: string; }[] = [];\n for (const cipher of response.data) {\n restores.push({ id: cipher.id, revisionDate: cipher.revisionDate });\n }\n await this.restore(restores);\n }\n\n // Helpers\n\n private async shareAttachmentWithServer(attachmentView: AttachmentView, cipherId: string,\n organizationId: string): Promise {\n const attachmentResponse = await this.apiService.nativeFetch(\n new Request(attachmentView.url, { cache: 'no-store' }));\n if (attachmentResponse.status !== 200) {\n throw Error('Failed to download attachment: ' + attachmentResponse.status.toString());\n }\n\n const buf = await attachmentResponse.arrayBuffer();\n const decBuf = await this.cryptoService.decryptFromBytes(buf, null);\n const key = await this.cryptoService.getOrgKey(organizationId);\n const encFileName = await this.cryptoService.encrypt(attachmentView.fileName, key);\n\n const dataEncKey = await this.cryptoService.makeEncKey(key);\n const encData = await this.cryptoService.encryptToBytes(decBuf, dataEncKey[0]);\n\n const fd = new FormData();\n try {\n const blob = new Blob([encData.buffer], { type: 'application/octet-stream' });\n fd.append('key', dataEncKey[1].encryptedString);\n fd.append('data', blob, encFileName.encryptedString);\n } catch (e) {\n if (Utils.isNode && !Utils.isBrowser) {\n fd.append('key', dataEncKey[1].encryptedString);\n fd.append('data', Buffer.from(encData.buffer) as any, {\n filepath: encFileName.encryptedString,\n contentType: 'application/octet-stream',\n } as any);\n } else {\n throw e;\n }\n }\n\n try {\n await this.apiService.postShareCipherAttachment(cipherId, attachmentView.id, fd, organizationId);\n } catch (e) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n }\n }\n\n private async encryptObjProperty(model: V, obj: D,\n map: any, key: SymmetricCryptoKey): Promise {\n const promises = [];\n const self = this;\n\n for (const prop in map) {\n if (!map.hasOwnProperty(prop)) {\n continue;\n }\n\n // tslint:disable-next-line\n (function (theProp, theObj) {\n const p = Promise.resolve().then(() => {\n const modelProp = (model as any)[(map[theProp] || theProp)];\n if (modelProp && modelProp !== '') {\n return self.cryptoService.encrypt(modelProp, key);\n }\n return null;\n }).then((val: EncString) => {\n (theObj as any)[theProp] = val;\n });\n promises.push(p);\n })(prop, obj);\n }\n\n await Promise.all(promises);\n }\n\n private async encryptCipherData(cipher: Cipher, model: CipherView, key: SymmetricCryptoKey) {\n switch (cipher.type) {\n case CipherType.Login:\n cipher.login = new Login();\n cipher.login.passwordRevisionDate = model.login.passwordRevisionDate;\n cipher.login.autofillOnPageLoad = model.login.autofillOnPageLoad;\n await this.encryptObjProperty(model.login, cipher.login, {\n username: null,\n password: null,\n totp: null,\n }, key);\n\n if (model.login.uris != null) {\n cipher.login.uris = [];\n for (let i = 0; i < model.login.uris.length; i++) {\n const loginUri = new LoginUri();\n loginUri.match = model.login.uris[i].match;\n await this.encryptObjProperty(model.login.uris[i], loginUri, {\n uri: null,\n }, key);\n cipher.login.uris.push(loginUri);\n }\n }\n return;\n case CipherType.SecureNote:\n cipher.secureNote = new SecureNote();\n cipher.secureNote.type = model.secureNote.type;\n return;\n case CipherType.Card:\n cipher.card = new Card();\n await this.encryptObjProperty(model.card, cipher.card, {\n cardholderName: null,\n brand: null,\n number: null,\n expMonth: null,\n expYear: null,\n code: null,\n }, key);\n return;\n case CipherType.Identity:\n cipher.identity = new Identity();\n await this.encryptObjProperty(model.identity, cipher.identity, {\n title: null,\n firstName: null,\n middleName: null,\n lastName: null,\n address1: null,\n address2: null,\n address3: null,\n city: null,\n state: null,\n postalCode: null,\n country: null,\n company: null,\n email: null,\n phone: null,\n ssn: null,\n username: null,\n passportNumber: null,\n licenseNumber: null,\n }, key);\n return;\n default:\n throw new Error('Unknown cipher type.');\n }\n }\n\n private async getCipherForUrl(url: string, lastUsed: boolean, lastLaunched: boolean, autofillOnPageLoad: boolean): Promise {\n const cacheKey = autofillOnPageLoad ? 'autofillOnPageLoad-' + url : url;\n\n if (!this.sortedCiphersCache.isCached(cacheKey)) {\n let ciphers = await this.getAllDecryptedForUrl(url);\n if (!ciphers) {\n return null;\n }\n\n if (autofillOnPageLoad) {\n const autofillOnPageLoadDefault = await this.storageService.get(ConstantsService.autoFillOnPageLoadDefaultKey);\n ciphers = ciphers.filter(cipher => cipher.login.autofillOnPageLoad ||\n (cipher.login.autofillOnPageLoad == null && autofillOnPageLoadDefault !== false));\n if (ciphers.length === 0) {\n return null;\n }\n }\n\n this.sortedCiphersCache.addCiphers(cacheKey, ciphers);\n }\n\n if (lastLaunched) {\n return this.sortedCiphersCache.getLastLaunched(cacheKey);\n } else if (lastUsed) {\n return this.sortedCiphersCache.getLastUsed(cacheKey);\n } else {\n return this.sortedCiphersCache.getNext(cacheKey);\n }\n }\n}\n","/**\n * Use as a Decorator on async functions, it will prevent multiple 'active' calls as the same time\n *\n * If a promise was returned from a previous call to this function, that hasn't yet resolved it will\n * be returned, instead of calling the original function again\n *\n * Results are not cached, once the promise has returned, the next call will result in a fresh call\n *\n * Read more at https://github.com/bitwarden/jslib/pull/7\n */\nexport function sequentialize(cacheKey: (args: any[]) => string) {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n const originalMethod: () => Promise = descriptor.value;\n const caches = new Map>>();\n\n const getCache = (obj: any) => {\n let cache = caches.get(obj);\n if (cache != null) {\n return cache;\n }\n cache = new Map>();\n caches.set(obj, cache);\n return cache;\n };\n\n return {\n value: function(...args: any[]) {\n const cache = getCache(this);\n const argsCacheKey = cacheKey(args);\n let response = cache.get(argsCacheKey);\n if (response != null) {\n return response;\n }\n\n const onFinally = () => {\n cache.delete(argsCacheKey);\n if (cache.size === 0) {\n caches.delete(this);\n }\n };\n response = originalMethod.apply(this, args).then((val: any) => {\n onFinally();\n return val;\n }).catch((err: any) => {\n onFinally();\n throw err;\n });\n\n cache.set(argsCacheKey, response);\n return response;\n },\n };\n };\n}\n","import { CollectionData } from '../models/data/collectionData';\n\nimport { Collection } from '../models/domain/collection';\nimport { TreeNode } from '../models/domain/treeNode';\n\nimport { CollectionView } from '../models/view/collectionView';\n\nimport { CollectionService as CollectionServiceAbstraction } from '../abstractions/collection.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\n\nimport { ServiceUtils } from '../misc/serviceUtils';\nimport { Utils } from '../misc/utils';\n\nconst Keys = {\n collectionsPrefix: 'collections_',\n};\nconst NestingDelimiter = '/';\n\nexport class CollectionService implements CollectionServiceAbstraction {\n decryptedCollectionCache: CollectionView[];\n\n constructor(private cryptoService: CryptoService, private userService: UserService,\n private storageService: StorageService, private i18nService: I18nService) {\n }\n\n clearCache(): void {\n this.decryptedCollectionCache = null;\n }\n\n async encrypt(model: CollectionView): Promise {\n if (model.organizationId == null) {\n throw new Error('Collection has no organization id.');\n }\n const key = await this.cryptoService.getOrgKey(model.organizationId);\n if (key == null) {\n throw new Error('No key for this collection\\'s organization.');\n }\n const collection = new Collection();\n collection.id = model.id;\n collection.organizationId = model.organizationId;\n collection.readOnly = model.readOnly;\n collection.name = await this.cryptoService.encrypt(model.name, key);\n return collection;\n }\n\n async decryptMany(collections: Collection[]): Promise {\n if (collections == null) {\n return [];\n }\n const decCollections: CollectionView[] = [];\n const promises: Promise[] = [];\n collections.forEach(collection => {\n promises.push(collection.decrypt().then(c => decCollections.push(c)));\n });\n await Promise.all(promises);\n return decCollections.sort(Utils.getSortFunction(this.i18nService, 'name'));\n }\n\n async get(id: string): Promise {\n const userId = await this.userService.getUserId();\n const collections = await this.storageService.get<{ [id: string]: CollectionData; }>(\n Keys.collectionsPrefix + userId);\n if (collections == null || !collections.hasOwnProperty(id)) {\n return null;\n }\n\n return new Collection(collections[id]);\n }\n\n async getAll(): Promise {\n const userId = await this.userService.getUserId();\n const collections = await this.storageService.get<{ [id: string]: CollectionData; }>(\n Keys.collectionsPrefix + userId);\n const response: Collection[] = [];\n for (const id in collections) {\n if (collections.hasOwnProperty(id)) {\n response.push(new Collection(collections[id]));\n }\n }\n return response;\n }\n\n async getAllDecrypted(): Promise {\n if (this.decryptedCollectionCache != null) {\n return this.decryptedCollectionCache;\n }\n\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error('No key.');\n }\n\n const collections = await this.getAll();\n this.decryptedCollectionCache = await this.decryptMany(collections);\n return this.decryptedCollectionCache;\n }\n\n async getAllNested(collections: CollectionView[] = null): Promise[]> {\n if (collections == null) {\n collections = await this.getAllDecrypted();\n }\n const nodes: TreeNode[] = [];\n collections.forEach(c => {\n const collectionCopy = new CollectionView();\n collectionCopy.id = c.id;\n collectionCopy.organizationId = c.organizationId;\n const parts = c.name != null ? c.name.replace(/^\\/+|\\/+$/g, '').split(NestingDelimiter) : [];\n ServiceUtils.nestedTraverse(nodes, 0, parts, collectionCopy, null, NestingDelimiter);\n });\n return nodes;\n }\n\n async getNested(id: string): Promise> {\n const collections = await this.getAllNested();\n return ServiceUtils.getTreeNodeObject(collections, id) as TreeNode;\n }\n\n async upsert(collection: CollectionData | CollectionData[]): Promise {\n const userId = await this.userService.getUserId();\n let collections = await this.storageService.get<{ [id: string]: CollectionData; }>(\n Keys.collectionsPrefix + userId);\n if (collections == null) {\n collections = {};\n }\n\n if (collection instanceof CollectionData) {\n const c = collection as CollectionData;\n collections[c.id] = c;\n } else {\n (collection as CollectionData[]).forEach(c => {\n collections[c.id] = c;\n });\n }\n\n await this.storageService.save(Keys.collectionsPrefix + userId, collections);\n this.decryptedCollectionCache = null;\n }\n\n async replace(collections: { [id: string]: CollectionData; }): Promise {\n const userId = await this.userService.getUserId();\n await this.storageService.save(Keys.collectionsPrefix + userId, collections);\n this.decryptedCollectionCache = null;\n }\n\n async clear(userId: string): Promise {\n await this.storageService.remove(Keys.collectionsPrefix + userId);\n this.decryptedCollectionCache = null;\n }\n\n async delete(id: string | string[]): Promise {\n const userId = await this.userService.getUserId();\n const collections = await this.storageService.get<{ [id: string]: CollectionData; }>(\n Keys.collectionsPrefix + userId);\n if (collections == null) {\n return;\n }\n\n if (typeof id === 'string') {\n const i = id as string;\n delete collections[id];\n } else {\n (id as string[]).forEach(i => {\n delete collections[i];\n });\n }\n\n await this.storageService.save(Keys.collectionsPrefix + userId, collections);\n this.decryptedCollectionCache = null;\n }\n}\n","import {\n ITreeNodeObject,\n TreeNode,\n} from '../models/domain/treeNode';\n\nexport class ServiceUtils {\n static nestedTraverse(nodeTree: TreeNode[], partIndex: number, parts: string[],\n obj: ITreeNodeObject, parent: ITreeNodeObject, delimiter: string) {\n if (parts.length <= partIndex) {\n return;\n }\n\n const end = partIndex === parts.length - 1;\n const partName = parts[partIndex];\n\n for (let i = 0; i < nodeTree.length; i++) {\n if (nodeTree[i].node.name !== parts[partIndex]) {\n continue;\n }\n if (end && nodeTree[i].node.id !== obj.id) {\n // Another node with the same name.\n nodeTree.push(new TreeNode(obj, partName, parent));\n return;\n }\n ServiceUtils.nestedTraverse(nodeTree[i].children, partIndex + 1, parts,\n obj, nodeTree[i].node, delimiter);\n return;\n }\n\n if (nodeTree.filter(n => n.node.name === partName).length === 0) {\n if (end) {\n nodeTree.push(new TreeNode(obj, partName, parent));\n return;\n }\n const newPartName = parts[partIndex] + delimiter + parts[partIndex + 1];\n ServiceUtils.nestedTraverse(nodeTree, 0, [newPartName, ...parts.slice(partIndex + 2)],\n obj, parent, delimiter);\n }\n }\n\n static getTreeNodeObject(nodeTree: TreeNode[], id: string): TreeNode {\n for (let i = 0; i < nodeTree.length; i++) {\n if (nodeTree[i].node.id === id) {\n return nodeTree[i];\n } else if (nodeTree[i].children != null) {\n const node = ServiceUtils.getTreeNodeObject(nodeTree[i].children, id);\n if (node !== null) {\n return node;\n }\n }\n }\n return null;\n }\n}\n","import { CryptoService } from '../abstractions/crypto.service';\n\nexport class ContainerService {\n constructor(private cryptoService: CryptoService) {\n }\n\n // deprecated, use attachToGlobal instead\n attachToWindow(win: any) {\n this.attachToGlobal(win);\n }\n\n attachToGlobal(global: any) {\n if (!global.bitwardenContainerService) {\n global.bitwardenContainerService = this;\n }\n }\n\n getCryptoService(): CryptoService {\n return this.cryptoService;\n }\n}\n","import * as bigInt from 'big-integer';\n\nimport { EncryptionType } from '../enums/encryptionType';\nimport { HashPurpose } from '../enums/hashPurpose';\nimport { KdfType } from '../enums/kdfType';\n\nimport { EncArrayBuffer } from '../models/domain/encArrayBuffer';\nimport { EncryptedObject } from '../models/domain/encryptedObject';\nimport { EncString } from '../models/domain/encString';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\nimport { ProfileOrganizationResponse } from '../models/response/profileOrganizationResponse';\n\nimport { CryptoService as CryptoServiceAbstraction } from '../abstractions/crypto.service';\nimport { CryptoFunctionService } from '../abstractions/cryptoFunction.service';\nimport { LogService } from '../abstractions/log.service';\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\nimport {\n KeySuffixOptions,\n StorageService,\n} from '../abstractions/storage.service';\n\nimport { ConstantsService } from './constants.service';\n\nimport { sequentialize } from '../misc/sequentialize';\nimport { Utils } from '../misc/utils';\nimport { EEFLongWordList } from '../misc/wordlist';\n\nexport const Keys = {\n key: 'key', // Master Key\n encOrgKeys: 'encOrgKeys',\n encPrivateKey: 'encPrivateKey',\n encKey: 'encKey', // Generated Symmetric Key\n keyHash: 'keyHash',\n};\n\nexport class CryptoService implements CryptoServiceAbstraction {\n private key: SymmetricCryptoKey;\n private encKey: SymmetricCryptoKey;\n private legacyEtmKey: SymmetricCryptoKey;\n private keyHash: string;\n private publicKey: ArrayBuffer;\n private privateKey: ArrayBuffer;\n private orgKeys: Map;\n\n constructor(private storageService: StorageService, protected secureStorageService: StorageService,\n private cryptoFunctionService: CryptoFunctionService, protected platformUtilService: PlatformUtilsService,\n protected logService: LogService) {\n }\n\n async setKey(key: SymmetricCryptoKey): Promise {\n this.key = key;\n\n await this.storeKey(key);\n }\n\n setKeyHash(keyHash: string): Promise<{}> {\n this.keyHash = keyHash;\n return this.storageService.save(Keys.keyHash, keyHash);\n }\n\n async setEncKey(encKey: string): Promise<{}> {\n if (encKey == null) {\n return;\n }\n\n await this.storageService.save(Keys.encKey, encKey);\n this.encKey = null;\n }\n\n async setEncPrivateKey(encPrivateKey: string): Promise<{}> {\n if (encPrivateKey == null) {\n return;\n }\n\n await this.storageService.save(Keys.encPrivateKey, encPrivateKey);\n this.privateKey = null;\n }\n\n setOrgKeys(orgs: ProfileOrganizationResponse[]): Promise<{}> {\n const orgKeys: any = {};\n orgs.forEach(org => {\n orgKeys[org.id] = org.key;\n });\n\n this.orgKeys = null;\n return this.storageService.save(Keys.encOrgKeys, orgKeys);\n }\n\n async getKey(keySuffix?: KeySuffixOptions): Promise {\n if (this.key != null) {\n return this.key;\n }\n\n keySuffix ||= 'auto';\n const symmetricKey = await this.getKeyFromStorage(keySuffix);\n\n if (symmetricKey != null) {\n this.setKey(symmetricKey);\n }\n\n return symmetricKey;\n }\n\n async getKeyFromStorage(keySuffix: KeySuffixOptions): Promise {\n const key = await this.retrieveKeyFromStorage(keySuffix);\n if (key != null) {\n\n const symmetricKey = new SymmetricCryptoKey(Utils.fromB64ToArray(key).buffer);\n\n if (!await this.validateKey(symmetricKey)) {\n this.logService.warning('Wrong key, throwing away stored key');\n this.secureStorageService.remove(Keys.key, { keySuffix: keySuffix });\n return null;\n }\n\n return symmetricKey;\n }\n return null;\n }\n\n async getKeyHash(): Promise {\n if (this.keyHash != null) {\n return this.keyHash;\n }\n\n const keyHash = await this.storageService.get(Keys.keyHash);\n if (keyHash != null) {\n this.keyHash = keyHash;\n }\n\n return keyHash == null ? null : this.keyHash;\n }\n\n async compareAndUpdateKeyHash(masterPassword: string, key: SymmetricCryptoKey): Promise {\n const storedKeyHash = await this.getKeyHash();\n if (masterPassword != null && storedKeyHash != null) {\n const localKeyHash = await this.hashPassword(masterPassword, key, HashPurpose.LocalAuthorization);\n if (localKeyHash != null && storedKeyHash === localKeyHash) {\n return true;\n }\n\n // TODO: remove serverKeyHash check in 1-2 releases after everyone's keyHash has been updated\n const serverKeyHash = await this.hashPassword(masterPassword, key, HashPurpose.ServerAuthorization);\n if (serverKeyHash != null && storedKeyHash === serverKeyHash) {\n await this.setKeyHash(localKeyHash);\n return true;\n }\n }\n\n return false;\n }\n\n @sequentialize(() => 'getEncKey')\n async getEncKey(key: SymmetricCryptoKey = null): Promise {\n if (this.encKey != null) {\n return this.encKey;\n }\n\n const encKey = await this.storageService.get(Keys.encKey);\n if (encKey == null) {\n return null;\n }\n\n if (key == null) {\n key = await this.getKey();\n }\n if (key == null) {\n return null;\n }\n\n let decEncKey: ArrayBuffer;\n const encKeyCipher = new EncString(encKey);\n if (encKeyCipher.encryptionType === EncryptionType.AesCbc256_B64) {\n decEncKey = await this.decryptToBytes(encKeyCipher, key);\n } else if (encKeyCipher.encryptionType === EncryptionType.AesCbc256_HmacSha256_B64) {\n const newKey = await this.stretchKey(key);\n decEncKey = await this.decryptToBytes(encKeyCipher, newKey);\n } else {\n throw new Error('Unsupported encKey type.');\n }\n\n if (decEncKey == null) {\n return null;\n }\n this.encKey = new SymmetricCryptoKey(decEncKey);\n return this.encKey;\n }\n\n async getPublicKey(): Promise {\n if (this.publicKey != null) {\n return this.publicKey;\n }\n\n const privateKey = await this.getPrivateKey();\n if (privateKey == null) {\n return null;\n }\n\n this.publicKey = await this.cryptoFunctionService.rsaExtractPublicKey(privateKey);\n return this.publicKey;\n }\n\n async getPrivateKey(): Promise {\n if (this.privateKey != null) {\n return this.privateKey;\n }\n\n const encPrivateKey = await this.storageService.get(Keys.encPrivateKey);\n if (encPrivateKey == null) {\n return null;\n }\n\n this.privateKey = await this.decryptToBytes(new EncString(encPrivateKey), null);\n return this.privateKey;\n }\n\n async getFingerprint(userId: string, publicKey?: ArrayBuffer): Promise {\n if (publicKey == null) {\n publicKey = await this.getPublicKey();\n }\n if (publicKey === null) {\n throw new Error('No public key available.');\n }\n const keyFingerprint = await this.cryptoFunctionService.hash(publicKey, 'sha256');\n const userFingerprint = await this.cryptoFunctionService.hkdfExpand(keyFingerprint, userId, 32, 'sha256');\n return this.hashPhrase(userFingerprint);\n }\n\n @sequentialize(() => 'getOrgKeys')\n async getOrgKeys(): Promise> {\n if (this.orgKeys != null && this.orgKeys.size > 0) {\n return this.orgKeys;\n }\n\n const encOrgKeys = await this.storageService.get(Keys.encOrgKeys);\n if (encOrgKeys == null) {\n return null;\n }\n\n const orgKeys: Map = new Map();\n let setKey = false;\n\n for (const orgId in encOrgKeys) {\n if (!encOrgKeys.hasOwnProperty(orgId)) {\n continue;\n }\n\n const decValue = await this.rsaDecrypt(encOrgKeys[orgId]);\n orgKeys.set(orgId, new SymmetricCryptoKey(decValue));\n setKey = true;\n }\n\n if (setKey) {\n this.orgKeys = orgKeys;\n }\n\n return this.orgKeys;\n }\n\n async getOrgKey(orgId: string): Promise {\n if (orgId == null) {\n return null;\n }\n\n const orgKeys = await this.getOrgKeys();\n if (orgKeys == null || !orgKeys.has(orgId)) {\n return null;\n }\n\n return orgKeys.get(orgId);\n }\n\n async hasKey(): Promise {\n return this.hasKeyInMemory() || await this.hasKeyStored('auto') || await this.hasKeyStored('biometric');\n }\n\n hasKeyInMemory(): boolean {\n return this.key != null;\n }\n\n hasKeyStored(keySuffix: KeySuffixOptions): Promise {\n return this.secureStorageService.has(Keys.key, { keySuffix: keySuffix });\n }\n\n async hasEncKey(): Promise {\n const encKey = await this.storageService.get(Keys.encKey);\n return encKey != null;\n }\n\n async clearKey(clearSecretStorage: boolean = true): Promise {\n this.key = this.legacyEtmKey = null;\n if (clearSecretStorage) {\n this.clearStoredKey('auto');\n this.clearStoredKey('biometric');\n }\n }\n\n async clearStoredKey(keySuffix: KeySuffixOptions) {\n await this.secureStorageService.remove(Keys.key, { keySuffix: keySuffix });\n }\n\n clearKeyHash(): Promise {\n this.keyHash = null;\n return this.storageService.remove(Keys.keyHash);\n }\n\n clearEncKey(memoryOnly?: boolean): Promise {\n this.encKey = null;\n if (memoryOnly) {\n return Promise.resolve();\n }\n return this.storageService.remove(Keys.encKey);\n }\n\n clearKeyPair(memoryOnly?: boolean): Promise {\n this.privateKey = null;\n this.publicKey = null;\n if (memoryOnly) {\n return Promise.resolve();\n }\n return this.storageService.remove(Keys.encPrivateKey);\n }\n\n clearOrgKeys(memoryOnly?: boolean): Promise {\n this.orgKeys = null;\n if (memoryOnly) {\n return Promise.resolve();\n }\n return this.storageService.remove(Keys.encOrgKeys);\n }\n\n clearPinProtectedKey(): Promise {\n return this.storageService.remove(ConstantsService.pinProtectedKey);\n }\n\n async clearKeys(): Promise {\n await this.clearEncKey();\n await this.clearKeyHash();\n await this.clearOrgKeys();\n await this.clearEncKey();\n await this.clearKeyPair();\n await this.clearPinProtectedKey();\n }\n\n async toggleKey(): Promise {\n const key = await this.getKey();\n\n await this.setKey(key);\n }\n\n async makeKey(password: string, salt: string, kdf: KdfType, kdfIterations: number):\n Promise {\n let key: ArrayBuffer = null;\n if (kdf == null || kdf === KdfType.PBKDF2_SHA256) {\n if (kdfIterations == null) {\n kdfIterations = 5000;\n } else if (kdfIterations < 5000) {\n throw new Error('PBKDF2 iteration minimum is 5000.');\n }\n key = await this.cryptoFunctionService.pbkdf2(password, salt, 'sha256', kdfIterations);\n } else {\n throw new Error('Unknown Kdf.');\n }\n return new SymmetricCryptoKey(key);\n }\n\n async makeKeyFromPin(pin: string, salt: string, kdf: KdfType, kdfIterations: number,\n protectedKeyCs: EncString = null):\n Promise {\n if (protectedKeyCs == null) {\n const pinProtectedKey = await this.storageService.get(ConstantsService.pinProtectedKey);\n if (pinProtectedKey == null) {\n throw new Error('No PIN protected key found.');\n }\n protectedKeyCs = new EncString(pinProtectedKey);\n }\n const pinKey = await this.makePinKey(pin, salt, kdf, kdfIterations);\n const decKey = await this.decryptToBytes(protectedKeyCs, pinKey);\n return new SymmetricCryptoKey(decKey);\n }\n\n async makeShareKey(): Promise<[EncString, SymmetricCryptoKey]> {\n const shareKey = await this.cryptoFunctionService.randomBytes(64);\n const publicKey = await this.getPublicKey();\n const encShareKey = await this.rsaEncrypt(shareKey, publicKey);\n return [encShareKey, new SymmetricCryptoKey(shareKey)];\n }\n\n async makeKeyPair(key?: SymmetricCryptoKey): Promise<[string, EncString]> {\n const keyPair = await this.cryptoFunctionService.rsaGenerateKeyPair(2048);\n const publicB64 = Utils.fromBufferToB64(keyPair[0]);\n const privateEnc = await this.encrypt(keyPair[1], key);\n return [publicB64, privateEnc];\n }\n\n async makePinKey(pin: string, salt: string, kdf: KdfType, kdfIterations: number): Promise {\n const pinKey = await this.makeKey(pin, salt, kdf, kdfIterations);\n return await this.stretchKey(pinKey);\n }\n\n async makeSendKey(keyMaterial: ArrayBuffer): Promise {\n const sendKey = await this.cryptoFunctionService.hkdf(keyMaterial, 'bitwarden-send', 'send', 64, 'sha256');\n return new SymmetricCryptoKey(sendKey);\n }\n\n async hashPassword(password: string, key: SymmetricCryptoKey, hashPurpose?: HashPurpose): Promise {\n if (key == null) {\n key = await this.getKey();\n }\n if (password == null || key == null) {\n throw new Error('Invalid parameters.');\n }\n\n const iterations = hashPurpose === HashPurpose.LocalAuthorization ? 2 : 1;\n const hash = await this.cryptoFunctionService.pbkdf2(key.key, password, 'sha256', iterations);\n return Utils.fromBufferToB64(hash);\n }\n\n async makeEncKey(key: SymmetricCryptoKey): Promise<[SymmetricCryptoKey, EncString]> {\n const theKey = await this.getKeyForEncryption(key);\n const encKey = await this.cryptoFunctionService.randomBytes(64);\n return this.buildEncKey(theKey, encKey);\n }\n\n async remakeEncKey(key: SymmetricCryptoKey, encKey?: SymmetricCryptoKey): Promise<[SymmetricCryptoKey, EncString]> {\n if (encKey == null) {\n encKey = await this.getEncKey();\n }\n return this.buildEncKey(key, encKey.key);\n }\n\n async encrypt(plainValue: string | ArrayBuffer, key?: SymmetricCryptoKey): Promise {\n if (plainValue == null) {\n return Promise.resolve(null);\n }\n\n let plainBuf: ArrayBuffer;\n if (typeof (plainValue) === 'string') {\n plainBuf = Utils.fromUtf8ToArray(plainValue).buffer;\n } else {\n plainBuf = plainValue;\n }\n\n const encObj = await this.aesEncrypt(plainBuf, key);\n const iv = Utils.fromBufferToB64(encObj.iv);\n const data = Utils.fromBufferToB64(encObj.data);\n const mac = encObj.mac != null ? Utils.fromBufferToB64(encObj.mac) : null;\n return new EncString(encObj.key.encType, data, iv, mac);\n }\n\n async encryptToBytes(plainValue: ArrayBuffer, key?: SymmetricCryptoKey): Promise {\n const encValue = await this.aesEncrypt(plainValue, key);\n let macLen = 0;\n if (encValue.mac != null) {\n macLen = encValue.mac.byteLength;\n }\n\n const encBytes = new Uint8Array(1 + encValue.iv.byteLength + macLen + encValue.data.byteLength);\n encBytes.set([encValue.key.encType]);\n encBytes.set(new Uint8Array(encValue.iv), 1);\n if (encValue.mac != null) {\n encBytes.set(new Uint8Array(encValue.mac), 1 + encValue.iv.byteLength);\n }\n\n encBytes.set(new Uint8Array(encValue.data), 1 + encValue.iv.byteLength + macLen);\n return new EncArrayBuffer(encBytes.buffer);\n }\n\n async rsaEncrypt(data: ArrayBuffer, publicKey?: ArrayBuffer): Promise {\n if (publicKey == null) {\n publicKey = await this.getPublicKey();\n }\n if (publicKey == null) {\n throw new Error('Public key unavailable.');\n }\n\n const encBytes = await this.cryptoFunctionService.rsaEncrypt(data, publicKey, 'sha1');\n return new EncString(EncryptionType.Rsa2048_OaepSha1_B64, Utils.fromBufferToB64(encBytes));\n }\n\n async rsaDecrypt(encValue: string, privateKeyValue?: ArrayBuffer): Promise {\n const headerPieces = encValue.split('.');\n let encType: EncryptionType = null;\n let encPieces: string[];\n\n if (headerPieces.length === 1) {\n encType = EncryptionType.Rsa2048_OaepSha256_B64;\n encPieces = [headerPieces[0]];\n } else if (headerPieces.length === 2) {\n try {\n encType = parseInt(headerPieces[0], null);\n encPieces = headerPieces[1].split('|');\n } catch (e) { }\n }\n\n switch (encType) {\n case EncryptionType.Rsa2048_OaepSha256_B64:\n case EncryptionType.Rsa2048_OaepSha1_B64:\n // HmacSha256 types are deprecated\n case EncryptionType.Rsa2048_OaepSha256_HmacSha256_B64:\n case EncryptionType.Rsa2048_OaepSha1_HmacSha256_B64:\n break;\n default:\n throw new Error('encType unavailable.');\n }\n\n if (encPieces == null || encPieces.length <= 0) {\n throw new Error('encPieces unavailable.');\n }\n\n const data = Utils.fromB64ToArray(encPieces[0]).buffer;\n const privateKey = privateKeyValue ?? await this.getPrivateKey();\n if (privateKey == null) {\n throw new Error('No private key.');\n }\n\n let alg: 'sha1' | 'sha256' = 'sha1';\n switch (encType) {\n case EncryptionType.Rsa2048_OaepSha256_B64:\n case EncryptionType.Rsa2048_OaepSha256_HmacSha256_B64:\n alg = 'sha256';\n break;\n case EncryptionType.Rsa2048_OaepSha1_B64:\n case EncryptionType.Rsa2048_OaepSha1_HmacSha256_B64:\n break;\n default:\n throw new Error('encType unavailable.');\n }\n\n return this.cryptoFunctionService.rsaDecrypt(data, privateKey, alg);\n }\n\n async decryptToBytes(encString: EncString, key?: SymmetricCryptoKey): Promise {\n const iv = Utils.fromB64ToArray(encString.iv).buffer;\n const data = Utils.fromB64ToArray(encString.data).buffer;\n const mac = encString.mac ? Utils.fromB64ToArray(encString.mac).buffer : null;\n const decipher = await this.aesDecryptToBytes(encString.encryptionType, data, iv, mac, key);\n if (decipher == null) {\n return null;\n }\n\n return decipher;\n }\n\n async decryptToUtf8(encString: EncString, key?: SymmetricCryptoKey): Promise {\n return await this.aesDecryptToUtf8(encString.encryptionType, encString.data,\n encString.iv, encString.mac, key);\n }\n\n async decryptFromBytes(encBuf: ArrayBuffer, key: SymmetricCryptoKey): Promise {\n if (encBuf == null) {\n throw new Error('no encBuf.');\n }\n\n const encBytes = new Uint8Array(encBuf);\n const encType = encBytes[0];\n let ctBytes: Uint8Array = null;\n let ivBytes: Uint8Array = null;\n let macBytes: Uint8Array = null;\n\n switch (encType) {\n case EncryptionType.AesCbc128_HmacSha256_B64:\n case EncryptionType.AesCbc256_HmacSha256_B64:\n if (encBytes.length <= 49) { // 1 + 16 + 32 + ctLength\n return null;\n }\n\n ivBytes = encBytes.slice(1, 17);\n macBytes = encBytes.slice(17, 49);\n ctBytes = encBytes.slice(49);\n break;\n case EncryptionType.AesCbc256_B64:\n if (encBytes.length <= 17) { // 1 + 16 + ctLength\n return null;\n }\n\n ivBytes = encBytes.slice(1, 17);\n ctBytes = encBytes.slice(17);\n break;\n default:\n return null;\n }\n\n return await this.aesDecryptToBytes(encType, ctBytes.buffer, ivBytes.buffer,\n macBytes != null ? macBytes.buffer : null, key);\n }\n\n // EFForg/OpenWireless\n // ref https://github.com/EFForg/OpenWireless/blob/master/app/js/diceware.js\n async randomNumber(min: number, max: number): Promise {\n let rval = 0;\n const range = max - min + 1;\n const bitsNeeded = Math.ceil(Math.log2(range));\n if (bitsNeeded > 53) {\n throw new Error('We cannot generate numbers larger than 53 bits.');\n }\n\n const bytesNeeded = Math.ceil(bitsNeeded / 8);\n const mask = Math.pow(2, bitsNeeded) - 1;\n // 7776 -> (2^13 = 8192) -1 == 8191 or 0x00001111 11111111\n\n // Fill a byte array with N random numbers\n const byteArray = new Uint8Array(await this.cryptoFunctionService.randomBytes(bytesNeeded));\n\n let p = (bytesNeeded - 1) * 8;\n for (let i = 0; i < bytesNeeded; i++) {\n rval += byteArray[i] * Math.pow(2, p);\n p -= 8;\n }\n\n // Use & to apply the mask and reduce the number of recursive lookups\n // tslint:disable-next-line\n rval = rval & mask;\n\n if (rval >= range) {\n // Integer out of acceptable range\n return this.randomNumber(min, max);\n }\n\n // Return an integer that falls within the range\n return min + rval;\n }\n\n async validateKey(key: SymmetricCryptoKey) {\n try {\n const encPrivateKey = await this.storageService.get(Keys.encPrivateKey);\n const encKey = await this.getEncKey(key);\n if (encPrivateKey == null || encKey == null) {\n return false;\n }\n\n const privateKey = await this.decryptToBytes(new EncString(encPrivateKey), encKey);\n await this.cryptoFunctionService.rsaExtractPublicKey(privateKey);\n } catch (e) {\n return false;\n }\n\n return true;\n }\n\n // Helpers\n\n protected async storeKey(key: SymmetricCryptoKey) {\n if (await this.shouldStoreKey('auto') || await this.shouldStoreKey('biometric')) {\n this.secureStorageService.save(Keys.key, key.keyB64);\n } else {\n this.secureStorageService.remove(Keys.key);\n }\n }\n\n protected async shouldStoreKey(keySuffix: KeySuffixOptions) {\n let shouldStoreKey = false;\n if (keySuffix === 'auto') {\n const vaultTimeout = await this.storageService.get(ConstantsService.vaultTimeoutKey);\n shouldStoreKey = vaultTimeout == null;\n } else if (keySuffix === 'biometric') {\n const biometricUnlock = await this.storageService.get(ConstantsService.biometricUnlockKey);\n shouldStoreKey = biometricUnlock && this.platformUtilService.supportsSecureStorage();\n }\n return shouldStoreKey;\n }\n\n protected retrieveKeyFromStorage(keySuffix: KeySuffixOptions) {\n return this.secureStorageService.get(Keys.key, { keySuffix: keySuffix });\n }\n\n private async aesEncrypt(data: ArrayBuffer, key: SymmetricCryptoKey): Promise {\n const obj = new EncryptedObject();\n obj.key = await this.getKeyForEncryption(key);\n obj.iv = await this.cryptoFunctionService.randomBytes(16);\n obj.data = await this.cryptoFunctionService.aesEncrypt(data, obj.iv, obj.key.encKey);\n\n if (obj.key.macKey != null) {\n const macData = new Uint8Array(obj.iv.byteLength + obj.data.byteLength);\n macData.set(new Uint8Array(obj.iv), 0);\n macData.set(new Uint8Array(obj.data), obj.iv.byteLength);\n obj.mac = await this.cryptoFunctionService.hmac(macData.buffer, obj.key.macKey, 'sha256');\n }\n\n return obj;\n }\n\n private async aesDecryptToUtf8(encType: EncryptionType, data: string, iv: string, mac: string,\n key: SymmetricCryptoKey): Promise {\n const keyForEnc = await this.getKeyForEncryption(key);\n const theKey = this.resolveLegacyKey(encType, keyForEnc);\n\n if (theKey.macKey != null && mac == null) {\n this.logService.error('mac required.');\n return null;\n }\n\n if (theKey.encType !== encType) {\n this.logService.error('encType unavailable.');\n return null;\n }\n\n const fastParams = this.cryptoFunctionService.aesDecryptFastParameters(data, iv, mac, theKey);\n if (fastParams.macKey != null && fastParams.mac != null) {\n const computedMac = await this.cryptoFunctionService.hmacFast(fastParams.macData,\n fastParams.macKey, 'sha256');\n const macsEqual = await this.cryptoFunctionService.compareFast(fastParams.mac, computedMac);\n if (!macsEqual) {\n this.logService.error('mac failed.');\n return null;\n }\n }\n\n return this.cryptoFunctionService.aesDecryptFast(fastParams);\n }\n\n private async aesDecryptToBytes(encType: EncryptionType, data: ArrayBuffer, iv: ArrayBuffer,\n mac: ArrayBuffer, key: SymmetricCryptoKey): Promise {\n const keyForEnc = await this.getKeyForEncryption(key);\n const theKey = this.resolveLegacyKey(encType, keyForEnc);\n\n if (theKey.macKey != null && mac == null) {\n return null;\n }\n\n if (theKey.encType !== encType) {\n return null;\n }\n\n if (theKey.macKey != null && mac != null) {\n const macData = new Uint8Array(iv.byteLength + data.byteLength);\n macData.set(new Uint8Array(iv), 0);\n macData.set(new Uint8Array(data), iv.byteLength);\n const computedMac = await this.cryptoFunctionService.hmac(macData.buffer, theKey.macKey, 'sha256');\n if (computedMac === null) {\n return null;\n }\n\n const macsMatch = await this.cryptoFunctionService.compare(mac, computedMac);\n if (!macsMatch) {\n this.logService.error('mac failed.');\n return null;\n }\n }\n\n return await this.cryptoFunctionService.aesDecrypt(data, iv, theKey.encKey);\n }\n\n private async getKeyForEncryption(key?: SymmetricCryptoKey): Promise {\n if (key != null) {\n return key;\n }\n\n const encKey = await this.getEncKey();\n if (encKey != null) {\n return encKey;\n }\n\n return await this.getKey();\n }\n\n private resolveLegacyKey(encType: EncryptionType, key: SymmetricCryptoKey): SymmetricCryptoKey {\n if (encType === EncryptionType.AesCbc128_HmacSha256_B64 &&\n key.encType === EncryptionType.AesCbc256_B64) {\n // Old encrypt-then-mac scheme, make a new key\n if (this.legacyEtmKey == null) {\n this.legacyEtmKey = new SymmetricCryptoKey(key.key, EncryptionType.AesCbc128_HmacSha256_B64);\n }\n return this.legacyEtmKey;\n }\n\n return key;\n }\n\n private async stretchKey(key: SymmetricCryptoKey): Promise {\n const newKey = new Uint8Array(64);\n const encKey = await this.cryptoFunctionService.hkdfExpand(key.key, 'enc', 32, 'sha256');\n const macKey = await this.cryptoFunctionService.hkdfExpand(key.key, 'mac', 32, 'sha256');\n newKey.set(new Uint8Array(encKey));\n newKey.set(new Uint8Array(macKey), 32);\n return new SymmetricCryptoKey(newKey.buffer);\n }\n\n private async hashPhrase(hash: ArrayBuffer, minimumEntropy: number = 64) {\n const entropyPerWord = Math.log(EEFLongWordList.length) / Math.log(2);\n let numWords = Math.ceil(minimumEntropy / entropyPerWord);\n\n const hashArr = Array.from(new Uint8Array(hash));\n const entropyAvailable = hashArr.length * 4;\n if (numWords * entropyPerWord > entropyAvailable) {\n throw new Error('Output entropy of hash function is too small');\n }\n\n const phrase: string[] = [];\n let hashNumber = bigInt.fromArray(hashArr, 256);\n while (numWords--) {\n const remainder = hashNumber.mod(EEFLongWordList.length);\n hashNumber = hashNumber.divide(EEFLongWordList.length);\n phrase.push(EEFLongWordList[remainder as any]);\n }\n return phrase;\n }\n\n private async buildEncKey(key: SymmetricCryptoKey, encKey: ArrayBuffer)\n : Promise<[SymmetricCryptoKey, EncString]> {\n let encKeyEnc: EncString = null;\n if (key.key.byteLength === 32) {\n const newKey = await this.stretchKey(key);\n encKeyEnc = await this.encrypt(encKey, newKey);\n } else if (key.key.byteLength === 64) {\n encKeyEnc = await this.encrypt(encKey, key);\n } else {\n throw new Error('Invalid key size.');\n }\n return [new SymmetricCryptoKey(encKey), encKeyEnc];\n }\n}\n","// EFF's Long Wordlist from https://www.eff.org/dice\nexport const EEFLongWordList = [\n 'abacus',\n 'abdomen',\n 'abdominal',\n 'abide',\n 'abiding',\n 'ability',\n 'ablaze',\n 'able',\n 'abnormal',\n 'abrasion',\n 'abrasive',\n 'abreast',\n 'abridge',\n 'abroad',\n 'abruptly',\n 'absence',\n 'absentee',\n 'absently',\n 'absinthe',\n 'absolute',\n 'absolve',\n 'abstain',\n 'abstract',\n 'absurd',\n 'accent',\n 'acclaim',\n 'acclimate',\n 'accompany',\n 'account',\n 'accuracy',\n 'accurate',\n 'accustom',\n 'acetone',\n 'achiness',\n 'aching',\n 'acid',\n 'acorn',\n 'acquaint',\n 'acquire',\n 'acre',\n 'acrobat',\n 'acronym',\n 'acting',\n 'action',\n 'activate',\n 'activator',\n 'active',\n 'activism',\n 'activist',\n 'activity',\n 'actress',\n 'acts',\n 'acutely',\n 'acuteness',\n 'aeration',\n 'aerobics',\n 'aerosol',\n 'aerospace',\n 'afar',\n 'affair',\n 'affected',\n 'affecting',\n 'affection',\n 'affidavit',\n 'affiliate',\n 'affirm',\n 'affix',\n 'afflicted',\n 'affluent',\n 'afford',\n 'affront',\n 'aflame',\n 'afloat',\n 'aflutter',\n 'afoot',\n 'afraid',\n 'afterglow',\n 'afterlife',\n 'aftermath',\n 'aftermost',\n 'afternoon',\n 'aged',\n 'ageless',\n 'agency',\n 'agenda',\n 'agent',\n 'aggregate',\n 'aghast',\n 'agile',\n 'agility',\n 'aging',\n 'agnostic',\n 'agonize',\n 'agonizing',\n 'agony',\n 'agreeable',\n 'agreeably',\n 'agreed',\n 'agreeing',\n 'agreement',\n 'aground',\n 'ahead',\n 'ahoy',\n 'aide',\n 'aids',\n 'aim',\n 'ajar',\n 'alabaster',\n 'alarm',\n 'albatross',\n 'album',\n 'alfalfa',\n 'algebra',\n 'algorithm',\n 'alias',\n 'alibi',\n 'alienable',\n 'alienate',\n 'aliens',\n 'alike',\n 'alive',\n 'alkaline',\n 'alkalize',\n 'almanac',\n 'almighty',\n 'almost',\n 'aloe',\n 'aloft',\n 'aloha',\n 'alone',\n 'alongside',\n 'aloof',\n 'alphabet',\n 'alright',\n 'although',\n 'altitude',\n 'alto',\n 'aluminum',\n 'alumni',\n 'always',\n 'amaretto',\n 'amaze',\n 'amazingly',\n 'amber',\n 'ambiance',\n 'ambiguity',\n 'ambiguous',\n 'ambition',\n 'ambitious',\n 'ambulance',\n 'ambush',\n 'amendable',\n 'amendment',\n 'amends',\n 'amenity',\n 'amiable',\n 'amicably',\n 'amid',\n 'amigo',\n 'amino',\n 'amiss',\n 'ammonia',\n 'ammonium',\n 'amnesty',\n 'amniotic',\n 'among',\n 'amount',\n 'amperage',\n 'ample',\n 'amplifier',\n 'amplify',\n 'amply',\n 'amuck',\n 'amulet',\n 'amusable',\n 'amused',\n 'amusement',\n 'amuser',\n 'amusing',\n 'anaconda',\n 'anaerobic',\n 'anagram',\n 'anatomist',\n 'anatomy',\n 'anchor',\n 'anchovy',\n 'ancient',\n 'android',\n 'anemia',\n 'anemic',\n 'aneurism',\n 'anew',\n 'angelfish',\n 'angelic',\n 'anger',\n 'angled',\n 'angler',\n 'angles',\n 'angling',\n 'angrily',\n 'angriness',\n 'anguished',\n 'angular',\n 'animal',\n 'animate',\n 'animating',\n 'animation',\n 'animator',\n 'anime',\n 'animosity',\n 'ankle',\n 'annex',\n 'annotate',\n 'announcer',\n 'annoying',\n 'annually',\n 'annuity',\n 'anointer',\n 'another',\n 'answering',\n 'antacid',\n 'antarctic',\n 'anteater',\n 'antelope',\n 'antennae',\n 'anthem',\n 'anthill',\n 'anthology',\n 'antibody',\n 'antics',\n 'antidote',\n 'antihero',\n 'antiquely',\n 'antiques',\n 'antiquity',\n 'antirust',\n 'antitoxic',\n 'antitrust',\n 'antiviral',\n 'antivirus',\n 'antler',\n 'antonym',\n 'antsy',\n 'anvil',\n 'anybody',\n 'anyhow',\n 'anymore',\n 'anyone',\n 'anyplace',\n 'anything',\n 'anytime',\n 'anyway',\n 'anywhere',\n 'aorta',\n 'apache',\n 'apostle',\n 'appealing',\n 'appear',\n 'appease',\n 'appeasing',\n 'appendage',\n 'appendix',\n 'appetite',\n 'appetizer',\n 'applaud',\n 'applause',\n 'apple',\n 'appliance',\n 'applicant',\n 'applied',\n 'apply',\n 'appointee',\n 'appraisal',\n 'appraiser',\n 'apprehend',\n 'approach',\n 'approval',\n 'approve',\n 'apricot',\n 'april',\n 'apron',\n 'aptitude',\n 'aptly',\n 'aqua',\n 'aqueduct',\n 'arbitrary',\n 'arbitrate',\n 'ardently',\n 'area',\n 'arena',\n 'arguable',\n 'arguably',\n 'argue',\n 'arise',\n 'armadillo',\n 'armband',\n 'armchair',\n 'armed',\n 'armful',\n 'armhole',\n 'arming',\n 'armless',\n 'armoire',\n 'armored',\n 'armory',\n 'armrest',\n 'army',\n 'aroma',\n 'arose',\n 'around',\n 'arousal',\n 'arrange',\n 'array',\n 'arrest',\n 'arrival',\n 'arrive',\n 'arrogance',\n 'arrogant',\n 'arson',\n 'art',\n 'ascend',\n 'ascension',\n 'ascent',\n 'ascertain',\n 'ashamed',\n 'ashen',\n 'ashes',\n 'ashy',\n 'aside',\n 'askew',\n 'asleep',\n 'asparagus',\n 'aspect',\n 'aspirate',\n 'aspire',\n 'aspirin',\n 'astonish',\n 'astound',\n 'astride',\n 'astrology',\n 'astronaut',\n 'astronomy',\n 'astute',\n 'atlantic',\n 'atlas',\n 'atom',\n 'atonable',\n 'atop',\n 'atrium',\n 'atrocious',\n 'atrophy',\n 'attach',\n 'attain',\n 'attempt',\n 'attendant',\n 'attendee',\n 'attention',\n 'attentive',\n 'attest',\n 'attic',\n 'attire',\n 'attitude',\n 'attractor',\n 'attribute',\n 'atypical',\n 'auction',\n 'audacious',\n 'audacity',\n 'audible',\n 'audibly',\n 'audience',\n 'audio',\n 'audition',\n 'augmented',\n 'august',\n 'authentic',\n 'author',\n 'autism',\n 'autistic',\n 'autograph',\n 'automaker',\n 'automated',\n 'automatic',\n 'autopilot',\n 'available',\n 'avalanche',\n 'avatar',\n 'avenge',\n 'avenging',\n 'avenue',\n 'average',\n 'aversion',\n 'avert',\n 'aviation',\n 'aviator',\n 'avid',\n 'avoid',\n 'await',\n 'awaken',\n 'award',\n 'aware',\n 'awhile',\n 'awkward',\n 'awning',\n 'awoke',\n 'awry',\n 'axis',\n 'babble',\n 'babbling',\n 'babied',\n 'baboon',\n 'backache',\n 'backboard',\n 'backboned',\n 'backdrop',\n 'backed',\n 'backer',\n 'backfield',\n 'backfire',\n 'backhand',\n 'backing',\n 'backlands',\n 'backlash',\n 'backless',\n 'backlight',\n 'backlit',\n 'backlog',\n 'backpack',\n 'backpedal',\n 'backrest',\n 'backroom',\n 'backshift',\n 'backside',\n 'backslid',\n 'backspace',\n 'backspin',\n 'backstab',\n 'backstage',\n 'backtalk',\n 'backtrack',\n 'backup',\n 'backward',\n 'backwash',\n 'backwater',\n 'backyard',\n 'bacon',\n 'bacteria',\n 'bacterium',\n 'badass',\n 'badge',\n 'badland',\n 'badly',\n 'badness',\n 'baffle',\n 'baffling',\n 'bagel',\n 'bagful',\n 'baggage',\n 'bagged',\n 'baggie',\n 'bagginess',\n 'bagging',\n 'baggy',\n 'bagpipe',\n 'baguette',\n 'baked',\n 'bakery',\n 'bakeshop',\n 'baking',\n 'balance',\n 'balancing',\n 'balcony',\n 'balmy',\n 'balsamic',\n 'bamboo',\n 'banana',\n 'banish',\n 'banister',\n 'banjo',\n 'bankable',\n 'bankbook',\n 'banked',\n 'banker',\n 'banking',\n 'banknote',\n 'bankroll',\n 'banner',\n 'bannister',\n 'banshee',\n 'banter',\n 'barbecue',\n 'barbed',\n 'barbell',\n 'barber',\n 'barcode',\n 'barge',\n 'bargraph',\n 'barista',\n 'baritone',\n 'barley',\n 'barmaid',\n 'barman',\n 'barn',\n 'barometer',\n 'barrack',\n 'barracuda',\n 'barrel',\n 'barrette',\n 'barricade',\n 'barrier',\n 'barstool',\n 'bartender',\n 'barterer',\n 'bash',\n 'basically',\n 'basics',\n 'basil',\n 'basin',\n 'basis',\n 'basket',\n 'batboy',\n 'batch',\n 'bath',\n 'baton',\n 'bats',\n 'battalion',\n 'battered',\n 'battering',\n 'battery',\n 'batting',\n 'battle',\n 'bauble',\n 'bazooka',\n 'blabber',\n 'bladder',\n 'blade',\n 'blah',\n 'blame',\n 'blaming',\n 'blanching',\n 'blandness',\n 'blank',\n 'blaspheme',\n 'blasphemy',\n 'blast',\n 'blatancy',\n 'blatantly',\n 'blazer',\n 'blazing',\n 'bleach',\n 'bleak',\n 'bleep',\n 'blemish',\n 'blend',\n 'bless',\n 'blighted',\n 'blimp',\n 'bling',\n 'blinked',\n 'blinker',\n 'blinking',\n 'blinks',\n 'blip',\n 'blissful',\n 'blitz',\n 'blizzard',\n 'bloated',\n 'bloating',\n 'blob',\n 'blog',\n 'bloomers',\n 'blooming',\n 'blooper',\n 'blot',\n 'blouse',\n 'blubber',\n 'bluff',\n 'bluish',\n 'blunderer',\n 'blunt',\n 'blurb',\n 'blurred',\n 'blurry',\n 'blurt',\n 'blush',\n 'blustery',\n 'boaster',\n 'boastful',\n 'boasting',\n 'boat',\n 'bobbed',\n 'bobbing',\n 'bobble',\n 'bobcat',\n 'bobsled',\n 'bobtail',\n 'bodacious',\n 'body',\n 'bogged',\n 'boggle',\n 'bogus',\n 'boil',\n 'bok',\n 'bolster',\n 'bolt',\n 'bonanza',\n 'bonded',\n 'bonding',\n 'bondless',\n 'boned',\n 'bonehead',\n 'boneless',\n 'bonelike',\n 'boney',\n 'bonfire',\n 'bonnet',\n 'bonsai',\n 'bonus',\n 'bony',\n 'boogeyman',\n 'boogieman',\n 'book',\n 'boondocks',\n 'booted',\n 'booth',\n 'bootie',\n 'booting',\n 'bootlace',\n 'bootleg',\n 'boots',\n 'boozy',\n 'borax',\n 'boring',\n 'borough',\n 'borrower',\n 'borrowing',\n 'boss',\n 'botanical',\n 'botanist',\n 'botany',\n 'botch',\n 'both',\n 'bottle',\n 'bottling',\n 'bottom',\n 'bounce',\n 'bouncing',\n 'bouncy',\n 'bounding',\n 'boundless',\n 'bountiful',\n 'bovine',\n 'boxcar',\n 'boxer',\n 'boxing',\n 'boxlike',\n 'boxy',\n 'breach',\n 'breath',\n 'breeches',\n 'breeching',\n 'breeder',\n 'breeding',\n 'breeze',\n 'breezy',\n 'brethren',\n 'brewery',\n 'brewing',\n 'briar',\n 'bribe',\n 'brick',\n 'bride',\n 'bridged',\n 'brigade',\n 'bright',\n 'brilliant',\n 'brim',\n 'bring',\n 'brink',\n 'brisket',\n 'briskly',\n 'briskness',\n 'bristle',\n 'brittle',\n 'broadband',\n 'broadcast',\n 'broaden',\n 'broadly',\n 'broadness',\n 'broadside',\n 'broadways',\n 'broiler',\n 'broiling',\n 'broken',\n 'broker',\n 'bronchial',\n 'bronco',\n 'bronze',\n 'bronzing',\n 'brook',\n 'broom',\n 'brought',\n 'browbeat',\n 'brownnose',\n 'browse',\n 'browsing',\n 'bruising',\n 'brunch',\n 'brunette',\n 'brunt',\n 'brush',\n 'brussels',\n 'brute',\n 'brutishly',\n 'bubble',\n 'bubbling',\n 'bubbly',\n 'buccaneer',\n 'bucked',\n 'bucket',\n 'buckle',\n 'buckshot',\n 'buckskin',\n 'bucktooth',\n 'buckwheat',\n 'buddhism',\n 'buddhist',\n 'budding',\n 'buddy',\n 'budget',\n 'buffalo',\n 'buffed',\n 'buffer',\n 'buffing',\n 'buffoon',\n 'buggy',\n 'bulb',\n 'bulge',\n 'bulginess',\n 'bulgur',\n 'bulk',\n 'bulldog',\n 'bulldozer',\n 'bullfight',\n 'bullfrog',\n 'bullhorn',\n 'bullion',\n 'bullish',\n 'bullpen',\n 'bullring',\n 'bullseye',\n 'bullwhip',\n 'bully',\n 'bunch',\n 'bundle',\n 'bungee',\n 'bunion',\n 'bunkbed',\n 'bunkhouse',\n 'bunkmate',\n 'bunny',\n 'bunt',\n 'busboy',\n 'bush',\n 'busily',\n 'busload',\n 'bust',\n 'busybody',\n 'buzz',\n 'cabana',\n 'cabbage',\n 'cabbie',\n 'cabdriver',\n 'cable',\n 'caboose',\n 'cache',\n 'cackle',\n 'cacti',\n 'cactus',\n 'caddie',\n 'caddy',\n 'cadet',\n 'cadillac',\n 'cadmium',\n 'cage',\n 'cahoots',\n 'cake',\n 'calamari',\n 'calamity',\n 'calcium',\n 'calculate',\n 'calculus',\n 'caliber',\n 'calibrate',\n 'calm',\n 'caloric',\n 'calorie',\n 'calzone',\n 'camcorder',\n 'cameo',\n 'camera',\n 'camisole',\n 'camper',\n 'campfire',\n 'camping',\n 'campsite',\n 'campus',\n 'canal',\n 'canary',\n 'cancel',\n 'candied',\n 'candle',\n 'candy',\n 'cane',\n 'canine',\n 'canister',\n 'cannabis',\n 'canned',\n 'canning',\n 'cannon',\n 'cannot',\n 'canola',\n 'canon',\n 'canopener',\n 'canopy',\n 'canteen',\n 'canyon',\n 'capable',\n 'capably',\n 'capacity',\n 'cape',\n 'capillary',\n 'capital',\n 'capitol',\n 'capped',\n 'capricorn',\n 'capsize',\n 'capsule',\n 'caption',\n 'captivate',\n 'captive',\n 'captivity',\n 'capture',\n 'caramel',\n 'carat',\n 'caravan',\n 'carbon',\n 'cardboard',\n 'carded',\n 'cardiac',\n 'cardigan',\n 'cardinal',\n 'cardstock',\n 'carefully',\n 'caregiver',\n 'careless',\n 'caress',\n 'caretaker',\n 'cargo',\n 'caring',\n 'carless',\n 'carload',\n 'carmaker',\n 'carnage',\n 'carnation',\n 'carnival',\n 'carnivore',\n 'carol',\n 'carpenter',\n 'carpentry',\n 'carpool',\n 'carport',\n 'carried',\n 'carrot',\n 'carrousel',\n 'carry',\n 'cartel',\n 'cartload',\n 'carton',\n 'cartoon',\n 'cartridge',\n 'cartwheel',\n 'carve',\n 'carving',\n 'carwash',\n 'cascade',\n 'case',\n 'cash',\n 'casing',\n 'casino',\n 'casket',\n 'cassette',\n 'casually',\n 'casualty',\n 'catacomb',\n 'catalog',\n 'catalyst',\n 'catalyze',\n 'catapult',\n 'cataract',\n 'catatonic',\n 'catcall',\n 'catchable',\n 'catcher',\n 'catching',\n 'catchy',\n 'caterer',\n 'catering',\n 'catfight',\n 'catfish',\n 'cathedral',\n 'cathouse',\n 'catlike',\n 'catnap',\n 'catnip',\n 'catsup',\n 'cattail',\n 'cattishly',\n 'cattle',\n 'catty',\n 'catwalk',\n 'caucasian',\n 'caucus',\n 'causal',\n 'causation',\n 'cause',\n 'causing',\n 'cauterize',\n 'caution',\n 'cautious',\n 'cavalier',\n 'cavalry',\n 'caviar',\n 'cavity',\n 'cedar',\n 'celery',\n 'celestial',\n 'celibacy',\n 'celibate',\n 'celtic',\n 'cement',\n 'census',\n 'ceramics',\n 'ceremony',\n 'certainly',\n 'certainty',\n 'certified',\n 'certify',\n 'cesarean',\n 'cesspool',\n 'chafe',\n 'chaffing',\n 'chain',\n 'chair',\n 'chalice',\n 'challenge',\n 'chamber',\n 'chamomile',\n 'champion',\n 'chance',\n 'change',\n 'channel',\n 'chant',\n 'chaos',\n 'chaperone',\n 'chaplain',\n 'chapped',\n 'chaps',\n 'chapter',\n 'character',\n 'charbroil',\n 'charcoal',\n 'charger',\n 'charging',\n 'chariot',\n 'charity',\n 'charm',\n 'charred',\n 'charter',\n 'charting',\n 'chase',\n 'chasing',\n 'chaste',\n 'chastise',\n 'chastity',\n 'chatroom',\n 'chatter',\n 'chatting',\n 'chatty',\n 'cheating',\n 'cheddar',\n 'cheek',\n 'cheer',\n 'cheese',\n 'cheesy',\n 'chef',\n 'chemicals',\n 'chemist',\n 'chemo',\n 'cherisher',\n 'cherub',\n 'chess',\n 'chest',\n 'chevron',\n 'chevy',\n 'chewable',\n 'chewer',\n 'chewing',\n 'chewy',\n 'chief',\n 'chihuahua',\n 'childcare',\n 'childhood',\n 'childish',\n 'childless',\n 'childlike',\n 'chili',\n 'chill',\n 'chimp',\n 'chip',\n 'chirping',\n 'chirpy',\n 'chitchat',\n 'chivalry',\n 'chive',\n 'chloride',\n 'chlorine',\n 'choice',\n 'chokehold',\n 'choking',\n 'chomp',\n 'chooser',\n 'choosing',\n 'choosy',\n 'chop',\n 'chosen',\n 'chowder',\n 'chowtime',\n 'chrome',\n 'chubby',\n 'chuck',\n 'chug',\n 'chummy',\n 'chump',\n 'chunk',\n 'churn',\n 'chute',\n 'cider',\n 'cilantro',\n 'cinch',\n 'cinema',\n 'cinnamon',\n 'circle',\n 'circling',\n 'circular',\n 'circulate',\n 'circus',\n 'citable',\n 'citadel',\n 'citation',\n 'citizen',\n 'citric',\n 'citrus',\n 'city',\n 'civic',\n 'civil',\n 'clad',\n 'claim',\n 'clambake',\n 'clammy',\n 'clamor',\n 'clamp',\n 'clamshell',\n 'clang',\n 'clanking',\n 'clapped',\n 'clapper',\n 'clapping',\n 'clarify',\n 'clarinet',\n 'clarity',\n 'clash',\n 'clasp',\n 'class',\n 'clatter',\n 'clause',\n 'clavicle',\n 'claw',\n 'clay',\n 'clean',\n 'clear',\n 'cleat',\n 'cleaver',\n 'cleft',\n 'clench',\n 'clergyman',\n 'clerical',\n 'clerk',\n 'clever',\n 'clicker',\n 'client',\n 'climate',\n 'climatic',\n 'cling',\n 'clinic',\n 'clinking',\n 'clip',\n 'clique',\n 'cloak',\n 'clobber',\n 'clock',\n 'clone',\n 'cloning',\n 'closable',\n 'closure',\n 'clothes',\n 'clothing',\n 'cloud',\n 'clover',\n 'clubbed',\n 'clubbing',\n 'clubhouse',\n 'clump',\n 'clumsily',\n 'clumsy',\n 'clunky',\n 'clustered',\n 'clutch',\n 'clutter',\n 'coach',\n 'coagulant',\n 'coastal',\n 'coaster',\n 'coasting',\n 'coastland',\n 'coastline',\n 'coat',\n 'coauthor',\n 'cobalt',\n 'cobbler',\n 'cobweb',\n 'cocoa',\n 'coconut',\n 'cod',\n 'coeditor',\n 'coerce',\n 'coexist',\n 'coffee',\n 'cofounder',\n 'cognition',\n 'cognitive',\n 'cogwheel',\n 'coherence',\n 'coherent',\n 'cohesive',\n 'coil',\n 'coke',\n 'cola',\n 'cold',\n 'coleslaw',\n 'coliseum',\n 'collage',\n 'collapse',\n 'collar',\n 'collected',\n 'collector',\n 'collide',\n 'collie',\n 'collision',\n 'colonial',\n 'colonist',\n 'colonize',\n 'colony',\n 'colossal',\n 'colt',\n 'coma',\n 'come',\n 'comfort',\n 'comfy',\n 'comic',\n 'coming',\n 'comma',\n 'commence',\n 'commend',\n 'comment',\n 'commerce',\n 'commode',\n 'commodity',\n 'commodore',\n 'common',\n 'commotion',\n 'commute',\n 'commuting',\n 'compacted',\n 'compacter',\n 'compactly',\n 'compactor',\n 'companion',\n 'company',\n 'compare',\n 'compel',\n 'compile',\n 'comply',\n 'component',\n 'composed',\n 'composer',\n 'composite',\n 'compost',\n 'composure',\n 'compound',\n 'compress',\n 'comprised',\n 'computer',\n 'computing',\n 'comrade',\n 'concave',\n 'conceal',\n 'conceded',\n 'concept',\n 'concerned',\n 'concert',\n 'conch',\n 'concierge',\n 'concise',\n 'conclude',\n 'concrete',\n 'concur',\n 'condense',\n 'condiment',\n 'condition',\n 'condone',\n 'conducive',\n 'conductor',\n 'conduit',\n 'cone',\n 'confess',\n 'confetti',\n 'confidant',\n 'confident',\n 'confider',\n 'confiding',\n 'configure',\n 'confined',\n 'confining',\n 'confirm',\n 'conflict',\n 'conform',\n 'confound',\n 'confront',\n 'confused',\n 'confusing',\n 'confusion',\n 'congenial',\n 'congested',\n 'congrats',\n 'congress',\n 'conical',\n 'conjoined',\n 'conjure',\n 'conjuror',\n 'connected',\n 'connector',\n 'consensus',\n 'consent',\n 'console',\n 'consoling',\n 'consonant',\n 'constable',\n 'constant',\n 'constrain',\n 'constrict',\n 'construct',\n 'consult',\n 'consumer',\n 'consuming',\n 'contact',\n 'container',\n 'contempt',\n 'contend',\n 'contented',\n 'contently',\n 'contents',\n 'contest',\n 'context',\n 'contort',\n 'contour',\n 'contrite',\n 'control',\n 'contusion',\n 'convene',\n 'convent',\n 'copartner',\n 'cope',\n 'copied',\n 'copier',\n 'copilot',\n 'coping',\n 'copious',\n 'copper',\n 'copy',\n 'coral',\n 'cork',\n 'cornball',\n 'cornbread',\n 'corncob',\n 'cornea',\n 'corned',\n 'corner',\n 'cornfield',\n 'cornflake',\n 'cornhusk',\n 'cornmeal',\n 'cornstalk',\n 'corny',\n 'coronary',\n 'coroner',\n 'corporal',\n 'corporate',\n 'corral',\n 'correct',\n 'corridor',\n 'corrode',\n 'corroding',\n 'corrosive',\n 'corsage',\n 'corset',\n 'cortex',\n 'cosigner',\n 'cosmetics',\n 'cosmic',\n 'cosmos',\n 'cosponsor',\n 'cost',\n 'cottage',\n 'cotton',\n 'couch',\n 'cough',\n 'could',\n 'countable',\n 'countdown',\n 'counting',\n 'countless',\n 'country',\n 'county',\n 'courier',\n 'covenant',\n 'cover',\n 'coveted',\n 'coveting',\n 'coyness',\n 'cozily',\n 'coziness',\n 'cozy',\n 'crabbing',\n 'crabgrass',\n 'crablike',\n 'crabmeat',\n 'cradle',\n 'cradling',\n 'crafter',\n 'craftily',\n 'craftsman',\n 'craftwork',\n 'crafty',\n 'cramp',\n 'cranberry',\n 'crane',\n 'cranial',\n 'cranium',\n 'crank',\n 'crate',\n 'crave',\n 'craving',\n 'crawfish',\n 'crawlers',\n 'crawling',\n 'crayfish',\n 'crayon',\n 'crazed',\n 'crazily',\n 'craziness',\n 'crazy',\n 'creamed',\n 'creamer',\n 'creamlike',\n 'crease',\n 'creasing',\n 'creatable',\n 'create',\n 'creation',\n 'creative',\n 'creature',\n 'credible',\n 'credibly',\n 'credit',\n 'creed',\n 'creme',\n 'creole',\n 'crepe',\n 'crept',\n 'crescent',\n 'crested',\n 'cresting',\n 'crestless',\n 'crevice',\n 'crewless',\n 'crewman',\n 'crewmate',\n 'crib',\n 'cricket',\n 'cried',\n 'crier',\n 'crimp',\n 'crimson',\n 'cringe',\n 'cringing',\n 'crinkle',\n 'crinkly',\n 'crisped',\n 'crisping',\n 'crisply',\n 'crispness',\n 'crispy',\n 'criteria',\n 'critter',\n 'croak',\n 'crock',\n 'crook',\n 'croon',\n 'crop',\n 'cross',\n 'crouch',\n 'crouton',\n 'crowbar',\n 'crowd',\n 'crown',\n 'crucial',\n 'crudely',\n 'crudeness',\n 'cruelly',\n 'cruelness',\n 'cruelty',\n 'crumb',\n 'crummiest',\n 'crummy',\n 'crumpet',\n 'crumpled',\n 'cruncher',\n 'crunching',\n 'crunchy',\n 'crusader',\n 'crushable',\n 'crushed',\n 'crusher',\n 'crushing',\n 'crust',\n 'crux',\n 'crying',\n 'cryptic',\n 'crystal',\n 'cubbyhole',\n 'cube',\n 'cubical',\n 'cubicle',\n 'cucumber',\n 'cuddle',\n 'cuddly',\n 'cufflink',\n 'culinary',\n 'culminate',\n 'culpable',\n 'culprit',\n 'cultivate',\n 'cultural',\n 'culture',\n 'cupbearer',\n 'cupcake',\n 'cupid',\n 'cupped',\n 'cupping',\n 'curable',\n 'curator',\n 'curdle',\n 'cure',\n 'curfew',\n 'curing',\n 'curled',\n 'curler',\n 'curliness',\n 'curling',\n 'curly',\n 'curry',\n 'curse',\n 'cursive',\n 'cursor',\n 'curtain',\n 'curtly',\n 'curtsy',\n 'curvature',\n 'curve',\n 'curvy',\n 'cushy',\n 'cusp',\n 'cussed',\n 'custard',\n 'custodian',\n 'custody',\n 'customary',\n 'customer',\n 'customize',\n 'customs',\n 'cut',\n 'cycle',\n 'cyclic',\n 'cycling',\n 'cyclist',\n 'cylinder',\n 'cymbal',\n 'cytoplasm',\n 'cytoplast',\n 'dab',\n 'dad',\n 'daffodil',\n 'dagger',\n 'daily',\n 'daintily',\n 'dainty',\n 'dairy',\n 'daisy',\n 'dallying',\n 'dance',\n 'dancing',\n 'dandelion',\n 'dander',\n 'dandruff',\n 'dandy',\n 'danger',\n 'dangle',\n 'dangling',\n 'daredevil',\n 'dares',\n 'daringly',\n 'darkened',\n 'darkening',\n 'darkish',\n 'darkness',\n 'darkroom',\n 'darling',\n 'darn',\n 'dart',\n 'darwinism',\n 'dash',\n 'dastardly',\n 'data',\n 'datebook',\n 'dating',\n 'daughter',\n 'daunting',\n 'dawdler',\n 'dawn',\n 'daybed',\n 'daybreak',\n 'daycare',\n 'daydream',\n 'daylight',\n 'daylong',\n 'dayroom',\n 'daytime',\n 'dazzler',\n 'dazzling',\n 'deacon',\n 'deafening',\n 'deafness',\n 'dealer',\n 'dealing',\n 'dealmaker',\n 'dealt',\n 'dean',\n 'debatable',\n 'debate',\n 'debating',\n 'debit',\n 'debrief',\n 'debtless',\n 'debtor',\n 'debug',\n 'debunk',\n 'decade',\n 'decaf',\n 'decal',\n 'decathlon',\n 'decay',\n 'deceased',\n 'deceit',\n 'deceiver',\n 'deceiving',\n 'december',\n 'decency',\n 'decent',\n 'deception',\n 'deceptive',\n 'decibel',\n 'decidable',\n 'decimal',\n 'decimeter',\n 'decipher',\n 'deck',\n 'declared',\n 'decline',\n 'decode',\n 'decompose',\n 'decorated',\n 'decorator',\n 'decoy',\n 'decrease',\n 'decree',\n 'dedicate',\n 'dedicator',\n 'deduce',\n 'deduct',\n 'deed',\n 'deem',\n 'deepen',\n 'deeply',\n 'deepness',\n 'deface',\n 'defacing',\n 'defame',\n 'default',\n 'defeat',\n 'defection',\n 'defective',\n 'defendant',\n 'defender',\n 'defense',\n 'defensive',\n 'deferral',\n 'deferred',\n 'defiance',\n 'defiant',\n 'defile',\n 'defiling',\n 'define',\n 'definite',\n 'deflate',\n 'deflation',\n 'deflator',\n 'deflected',\n 'deflector',\n 'defog',\n 'deforest',\n 'defraud',\n 'defrost',\n 'deftly',\n 'defuse',\n 'defy',\n 'degraded',\n 'degrading',\n 'degrease',\n 'degree',\n 'dehydrate',\n 'deity',\n 'dejected',\n 'delay',\n 'delegate',\n 'delegator',\n 'delete',\n 'deletion',\n 'delicacy',\n 'delicate',\n 'delicious',\n 'delighted',\n 'delirious',\n 'delirium',\n 'deliverer',\n 'delivery',\n 'delouse',\n 'delta',\n 'deluge',\n 'delusion',\n 'deluxe',\n 'demanding',\n 'demeaning',\n 'demeanor',\n 'demise',\n 'democracy',\n 'democrat',\n 'demote',\n 'demotion',\n 'demystify',\n 'denatured',\n 'deniable',\n 'denial',\n 'denim',\n 'denote',\n 'dense',\n 'density',\n 'dental',\n 'dentist',\n 'denture',\n 'deny',\n 'deodorant',\n 'deodorize',\n 'departed',\n 'departure',\n 'depict',\n 'deplete',\n 'depletion',\n 'deplored',\n 'deploy',\n 'deport',\n 'depose',\n 'depraved',\n 'depravity',\n 'deprecate',\n 'depress',\n 'deprive',\n 'depth',\n 'deputize',\n 'deputy',\n 'derail',\n 'deranged',\n 'derby',\n 'derived',\n 'desecrate',\n 'deserve',\n 'deserving',\n 'designate',\n 'designed',\n 'designer',\n 'designing',\n 'deskbound',\n 'desktop',\n 'deskwork',\n 'desolate',\n 'despair',\n 'despise',\n 'despite',\n 'destiny',\n 'destitute',\n 'destruct',\n 'detached',\n 'detail',\n 'detection',\n 'detective',\n 'detector',\n 'detention',\n 'detergent',\n 'detest',\n 'detonate',\n 'detonator',\n 'detoxify',\n 'detract',\n 'deuce',\n 'devalue',\n 'deviancy',\n 'deviant',\n 'deviate',\n 'deviation',\n 'deviator',\n 'device',\n 'devious',\n 'devotedly',\n 'devotee',\n 'devotion',\n 'devourer',\n 'devouring',\n 'devoutly',\n 'dexterity',\n 'dexterous',\n 'diabetes',\n 'diabetic',\n 'diabolic',\n 'diagnoses',\n 'diagnosis',\n 'diagram',\n 'dial',\n 'diameter',\n 'diaper',\n 'diaphragm',\n 'diary',\n 'dice',\n 'dicing',\n 'dictate',\n 'dictation',\n 'dictator',\n 'difficult',\n 'diffused',\n 'diffuser',\n 'diffusion',\n 'diffusive',\n 'dig',\n 'dilation',\n 'diligence',\n 'diligent',\n 'dill',\n 'dilute',\n 'dime',\n 'diminish',\n 'dimly',\n 'dimmed',\n 'dimmer',\n 'dimness',\n 'dimple',\n 'diner',\n 'dingbat',\n 'dinghy',\n 'dinginess',\n 'dingo',\n 'dingy',\n 'dining',\n 'dinner',\n 'diocese',\n 'dioxide',\n 'diploma',\n 'dipped',\n 'dipper',\n 'dipping',\n 'directed',\n 'direction',\n 'directive',\n 'directly',\n 'directory',\n 'direness',\n 'dirtiness',\n 'disabled',\n 'disagree',\n 'disallow',\n 'disarm',\n 'disarray',\n 'disaster',\n 'disband',\n 'disbelief',\n 'disburse',\n 'discard',\n 'discern',\n 'discharge',\n 'disclose',\n 'discolor',\n 'discount',\n 'discourse',\n 'discover',\n 'discuss',\n 'disdain',\n 'disengage',\n 'disfigure',\n 'disgrace',\n 'dish',\n 'disinfect',\n 'disjoin',\n 'disk',\n 'dislike',\n 'disliking',\n 'dislocate',\n 'dislodge',\n 'disloyal',\n 'dismantle',\n 'dismay',\n 'dismiss',\n 'dismount',\n 'disobey',\n 'disorder',\n 'disown',\n 'disparate',\n 'disparity',\n 'dispatch',\n 'dispense',\n 'dispersal',\n 'dispersed',\n 'disperser',\n 'displace',\n 'display',\n 'displease',\n 'disposal',\n 'dispose',\n 'disprove',\n 'dispute',\n 'disregard',\n 'disrupt',\n 'dissuade',\n 'distance',\n 'distant',\n 'distaste',\n 'distill',\n 'distinct',\n 'distort',\n 'distract',\n 'distress',\n 'district',\n 'distrust',\n 'ditch',\n 'ditto',\n 'ditzy',\n 'dividable',\n 'divided',\n 'dividend',\n 'dividers',\n 'dividing',\n 'divinely',\n 'diving',\n 'divinity',\n 'divisible',\n 'divisibly',\n 'division',\n 'divisive',\n 'divorcee',\n 'dizziness',\n 'dizzy',\n 'doable',\n 'docile',\n 'dock',\n 'doctrine',\n 'document',\n 'dodge',\n 'dodgy',\n 'doily',\n 'doing',\n 'dole',\n 'dollar',\n 'dollhouse',\n 'dollop',\n 'dolly',\n 'dolphin',\n 'domain',\n 'domelike',\n 'domestic',\n 'dominion',\n 'dominoes',\n 'donated',\n 'donation',\n 'donator',\n 'donor',\n 'donut',\n 'doodle',\n 'doorbell',\n 'doorframe',\n 'doorknob',\n 'doorman',\n 'doormat',\n 'doornail',\n 'doorpost',\n 'doorstep',\n 'doorstop',\n 'doorway',\n 'doozy',\n 'dork',\n 'dormitory',\n 'dorsal',\n 'dosage',\n 'dose',\n 'dotted',\n 'doubling',\n 'douche',\n 'dove',\n 'down',\n 'dowry',\n 'doze',\n 'drab',\n 'dragging',\n 'dragonfly',\n 'dragonish',\n 'dragster',\n 'drainable',\n 'drainage',\n 'drained',\n 'drainer',\n 'drainpipe',\n 'dramatic',\n 'dramatize',\n 'drank',\n 'drapery',\n 'drastic',\n 'draw',\n 'dreaded',\n 'dreadful',\n 'dreadlock',\n 'dreamboat',\n 'dreamily',\n 'dreamland',\n 'dreamless',\n 'dreamlike',\n 'dreamt',\n 'dreamy',\n 'drearily',\n 'dreary',\n 'drench',\n 'dress',\n 'drew',\n 'dribble',\n 'dried',\n 'drier',\n 'drift',\n 'driller',\n 'drilling',\n 'drinkable',\n 'drinking',\n 'dripping',\n 'drippy',\n 'drivable',\n 'driven',\n 'driver',\n 'driveway',\n 'driving',\n 'drizzle',\n 'drizzly',\n 'drone',\n 'drool',\n 'droop',\n 'drop-down',\n 'dropbox',\n 'dropkick',\n 'droplet',\n 'dropout',\n 'dropper',\n 'drove',\n 'drown',\n 'drowsily',\n 'drudge',\n 'drum',\n 'dry',\n 'dubbed',\n 'dubiously',\n 'duchess',\n 'duckbill',\n 'ducking',\n 'duckling',\n 'ducktail',\n 'ducky',\n 'duct',\n 'dude',\n 'duffel',\n 'dugout',\n 'duh',\n 'duke',\n 'duller',\n 'dullness',\n 'duly',\n 'dumping',\n 'dumpling',\n 'dumpster',\n 'duo',\n 'dupe',\n 'duplex',\n 'duplicate',\n 'duplicity',\n 'durable',\n 'durably',\n 'duration',\n 'duress',\n 'during',\n 'dusk',\n 'dust',\n 'dutiful',\n 'duty',\n 'duvet',\n 'dwarf',\n 'dweeb',\n 'dwelled',\n 'dweller',\n 'dwelling',\n 'dwindle',\n 'dwindling',\n 'dynamic',\n 'dynamite',\n 'dynasty',\n 'dyslexia',\n 'dyslexic',\n 'each',\n 'eagle',\n 'earache',\n 'eardrum',\n 'earflap',\n 'earful',\n 'earlobe',\n 'early',\n 'earmark',\n 'earmuff',\n 'earphone',\n 'earpiece',\n 'earplugs',\n 'earring',\n 'earshot',\n 'earthen',\n 'earthlike',\n 'earthling',\n 'earthly',\n 'earthworm',\n 'earthy',\n 'earwig',\n 'easeful',\n 'easel',\n 'easiest',\n 'easily',\n 'easiness',\n 'easing',\n 'eastbound',\n 'eastcoast',\n 'easter',\n 'eastward',\n 'eatable',\n 'eaten',\n 'eatery',\n 'eating',\n 'eats',\n 'ebay',\n 'ebony',\n 'ebook',\n 'ecard',\n 'eccentric',\n 'echo',\n 'eclair',\n 'eclipse',\n 'ecologist',\n 'ecology',\n 'economic',\n 'economist',\n 'economy',\n 'ecosphere',\n 'ecosystem',\n 'edge',\n 'edginess',\n 'edging',\n 'edgy',\n 'edition',\n 'editor',\n 'educated',\n 'education',\n 'educator',\n 'eel',\n 'effective',\n 'effects',\n 'efficient',\n 'effort',\n 'eggbeater',\n 'egging',\n 'eggnog',\n 'eggplant',\n 'eggshell',\n 'egomaniac',\n 'egotism',\n 'egotistic',\n 'either',\n 'eject',\n 'elaborate',\n 'elastic',\n 'elated',\n 'elbow',\n 'eldercare',\n 'elderly',\n 'eldest',\n 'electable',\n 'election',\n 'elective',\n 'elephant',\n 'elevate',\n 'elevating',\n 'elevation',\n 'elevator',\n 'eleven',\n 'elf',\n 'eligible',\n 'eligibly',\n 'eliminate',\n 'elite',\n 'elitism',\n 'elixir',\n 'elk',\n 'ellipse',\n 'elliptic',\n 'elm',\n 'elongated',\n 'elope',\n 'eloquence',\n 'eloquent',\n 'elsewhere',\n 'elude',\n 'elusive',\n 'elves',\n 'email',\n 'embargo',\n 'embark',\n 'embassy',\n 'embattled',\n 'embellish',\n 'ember',\n 'embezzle',\n 'emblaze',\n 'emblem',\n 'embody',\n 'embolism',\n 'emboss',\n 'embroider',\n 'emcee',\n 'emerald',\n 'emergency',\n 'emission',\n 'emit',\n 'emote',\n 'emoticon',\n 'emotion',\n 'empathic',\n 'empathy',\n 'emperor',\n 'emphases',\n 'emphasis',\n 'emphasize',\n 'emphatic',\n 'empirical',\n 'employed',\n 'employee',\n 'employer',\n 'emporium',\n 'empower',\n 'emptier',\n 'emptiness',\n 'empty',\n 'emu',\n 'enable',\n 'enactment',\n 'enamel',\n 'enchanted',\n 'enchilada',\n 'encircle',\n 'enclose',\n 'enclosure',\n 'encode',\n 'encore',\n 'encounter',\n 'encourage',\n 'encroach',\n 'encrust',\n 'encrypt',\n 'endanger',\n 'endeared',\n 'endearing',\n 'ended',\n 'ending',\n 'endless',\n 'endnote',\n 'endocrine',\n 'endorphin',\n 'endorse',\n 'endowment',\n 'endpoint',\n 'endurable',\n 'endurance',\n 'enduring',\n 'energetic',\n 'energize',\n 'energy',\n 'enforced',\n 'enforcer',\n 'engaged',\n 'engaging',\n 'engine',\n 'engorge',\n 'engraved',\n 'engraver',\n 'engraving',\n 'engross',\n 'engulf',\n 'enhance',\n 'enigmatic',\n 'enjoyable',\n 'enjoyably',\n 'enjoyer',\n 'enjoying',\n 'enjoyment',\n 'enlarged',\n 'enlarging',\n 'enlighten',\n 'enlisted',\n 'enquirer',\n 'enrage',\n 'enrich',\n 'enroll',\n 'enslave',\n 'ensnare',\n 'ensure',\n 'entail',\n 'entangled',\n 'entering',\n 'entertain',\n 'enticing',\n 'entire',\n 'entitle',\n 'entity',\n 'entomb',\n 'entourage',\n 'entrap',\n 'entree',\n 'entrench',\n 'entrust',\n 'entryway',\n 'entwine',\n 'enunciate',\n 'envelope',\n 'enviable',\n 'enviably',\n 'envious',\n 'envision',\n 'envoy',\n 'envy',\n 'enzyme',\n 'epic',\n 'epidemic',\n 'epidermal',\n 'epidermis',\n 'epidural',\n 'epilepsy',\n 'epileptic',\n 'epilogue',\n 'epiphany',\n 'episode',\n 'equal',\n 'equate',\n 'equation',\n 'equator',\n 'equinox',\n 'equipment',\n 'equity',\n 'equivocal',\n 'eradicate',\n 'erasable',\n 'erased',\n 'eraser',\n 'erasure',\n 'ergonomic',\n 'errand',\n 'errant',\n 'erratic',\n 'error',\n 'erupt',\n 'escalate',\n 'escalator',\n 'escapable',\n 'escapade',\n 'escapist',\n 'escargot',\n 'eskimo',\n 'esophagus',\n 'espionage',\n 'espresso',\n 'esquire',\n 'essay',\n 'essence',\n 'essential',\n 'establish',\n 'estate',\n 'esteemed',\n 'estimate',\n 'estimator',\n 'estranged',\n 'estrogen',\n 'etching',\n 'eternal',\n 'eternity',\n 'ethanol',\n 'ether',\n 'ethically',\n 'ethics',\n 'euphemism',\n 'evacuate',\n 'evacuee',\n 'evade',\n 'evaluate',\n 'evaluator',\n 'evaporate',\n 'evasion',\n 'evasive',\n 'even',\n 'everglade',\n 'evergreen',\n 'everybody',\n 'everyday',\n 'everyone',\n 'evict',\n 'evidence',\n 'evident',\n 'evil',\n 'evoke',\n 'evolution',\n 'evolve',\n 'exact',\n 'exalted',\n 'example',\n 'excavate',\n 'excavator',\n 'exceeding',\n 'exception',\n 'excess',\n 'exchange',\n 'excitable',\n 'exciting',\n 'exclaim',\n 'exclude',\n 'excluding',\n 'exclusion',\n 'exclusive',\n 'excretion',\n 'excretory',\n 'excursion',\n 'excusable',\n 'excusably',\n 'excuse',\n 'exemplary',\n 'exemplify',\n 'exemption',\n 'exerciser',\n 'exert',\n 'exes',\n 'exfoliate',\n 'exhale',\n 'exhaust',\n 'exhume',\n 'exile',\n 'existing',\n 'exit',\n 'exodus',\n 'exonerate',\n 'exorcism',\n 'exorcist',\n 'expand',\n 'expanse',\n 'expansion',\n 'expansive',\n 'expectant',\n 'expedited',\n 'expediter',\n 'expel',\n 'expend',\n 'expenses',\n 'expensive',\n 'expert',\n 'expire',\n 'expiring',\n 'explain',\n 'expletive',\n 'explicit',\n 'explode',\n 'exploit',\n 'explore',\n 'exploring',\n 'exponent',\n 'exporter',\n 'exposable',\n 'expose',\n 'exposure',\n 'express',\n 'expulsion',\n 'exquisite',\n 'extended',\n 'extending',\n 'extent',\n 'extenuate',\n 'exterior',\n 'external',\n 'extinct',\n 'extortion',\n 'extradite',\n 'extras',\n 'extrovert',\n 'extrude',\n 'extruding',\n 'exuberant',\n 'fable',\n 'fabric',\n 'fabulous',\n 'facebook',\n 'facecloth',\n 'facedown',\n 'faceless',\n 'facelift',\n 'faceplate',\n 'faceted',\n 'facial',\n 'facility',\n 'facing',\n 'facsimile',\n 'faction',\n 'factoid',\n 'factor',\n 'factsheet',\n 'factual',\n 'faculty',\n 'fade',\n 'fading',\n 'failing',\n 'falcon',\n 'fall',\n 'false',\n 'falsify',\n 'fame',\n 'familiar',\n 'family',\n 'famine',\n 'famished',\n 'fanatic',\n 'fancied',\n 'fanciness',\n 'fancy',\n 'fanfare',\n 'fang',\n 'fanning',\n 'fantasize',\n 'fantastic',\n 'fantasy',\n 'fascism',\n 'fastball',\n 'faster',\n 'fasting',\n 'fastness',\n 'faucet',\n 'favorable',\n 'favorably',\n 'favored',\n 'favoring',\n 'favorite',\n 'fax',\n 'feast',\n 'federal',\n 'fedora',\n 'feeble',\n 'feed',\n 'feel',\n 'feisty',\n 'feline',\n 'felt-tip',\n 'feminine',\n 'feminism',\n 'feminist',\n 'feminize',\n 'femur',\n 'fence',\n 'fencing',\n 'fender',\n 'ferment',\n 'fernlike',\n 'ferocious',\n 'ferocity',\n 'ferret',\n 'ferris',\n 'ferry',\n 'fervor',\n 'fester',\n 'festival',\n 'festive',\n 'festivity',\n 'fetal',\n 'fetch',\n 'fever',\n 'fiber',\n 'fiction',\n 'fiddle',\n 'fiddling',\n 'fidelity',\n 'fidgeting',\n 'fidgety',\n 'fifteen',\n 'fifth',\n 'fiftieth',\n 'fifty',\n 'figment',\n 'figure',\n 'figurine',\n 'filing',\n 'filled',\n 'filler',\n 'filling',\n 'film',\n 'filter',\n 'filth',\n 'filtrate',\n 'finale',\n 'finalist',\n 'finalize',\n 'finally',\n 'finance',\n 'financial',\n 'finch',\n 'fineness',\n 'finer',\n 'finicky',\n 'finished',\n 'finisher',\n 'finishing',\n 'finite',\n 'finless',\n 'finlike',\n 'fiscally',\n 'fit',\n 'five',\n 'flaccid',\n 'flagman',\n 'flagpole',\n 'flagship',\n 'flagstick',\n 'flagstone',\n 'flail',\n 'flakily',\n 'flaky',\n 'flame',\n 'flammable',\n 'flanked',\n 'flanking',\n 'flannels',\n 'flap',\n 'flaring',\n 'flashback',\n 'flashbulb',\n 'flashcard',\n 'flashily',\n 'flashing',\n 'flashy',\n 'flask',\n 'flatbed',\n 'flatfoot',\n 'flatly',\n 'flatness',\n 'flatten',\n 'flattered',\n 'flatterer',\n 'flattery',\n 'flattop',\n 'flatware',\n 'flatworm',\n 'flavored',\n 'flavorful',\n 'flavoring',\n 'flaxseed',\n 'fled',\n 'fleshed',\n 'fleshy',\n 'flick',\n 'flier',\n 'flight',\n 'flinch',\n 'fling',\n 'flint',\n 'flip',\n 'flirt',\n 'float',\n 'flock',\n 'flogging',\n 'flop',\n 'floral',\n 'florist',\n 'floss',\n 'flounder',\n 'flyable',\n 'flyaway',\n 'flyer',\n 'flying',\n 'flyover',\n 'flypaper',\n 'foam',\n 'foe',\n 'fog',\n 'foil',\n 'folic',\n 'folk',\n 'follicle',\n 'follow',\n 'fondling',\n 'fondly',\n 'fondness',\n 'fondue',\n 'font',\n 'food',\n 'fool',\n 'footage',\n 'football',\n 'footbath',\n 'footboard',\n 'footer',\n 'footgear',\n 'foothill',\n 'foothold',\n 'footing',\n 'footless',\n 'footman',\n 'footnote',\n 'footpad',\n 'footpath',\n 'footprint',\n 'footrest',\n 'footsie',\n 'footsore',\n 'footwear',\n 'footwork',\n 'fossil',\n 'foster',\n 'founder',\n 'founding',\n 'fountain',\n 'fox',\n 'foyer',\n 'fraction',\n 'fracture',\n 'fragile',\n 'fragility',\n 'fragment',\n 'fragrance',\n 'fragrant',\n 'frail',\n 'frame',\n 'framing',\n 'frantic',\n 'fraternal',\n 'frayed',\n 'fraying',\n 'frays',\n 'freckled',\n 'freckles',\n 'freebase',\n 'freebee',\n 'freebie',\n 'freedom',\n 'freefall',\n 'freehand',\n 'freeing',\n 'freeload',\n 'freely',\n 'freemason',\n 'freeness',\n 'freestyle',\n 'freeware',\n 'freeway',\n 'freewill',\n 'freezable',\n 'freezing',\n 'freight',\n 'french',\n 'frenzied',\n 'frenzy',\n 'frequency',\n 'frequent',\n 'fresh',\n 'fretful',\n 'fretted',\n 'friction',\n 'friday',\n 'fridge',\n 'fried',\n 'friend',\n 'frighten',\n 'frightful',\n 'frigidity',\n 'frigidly',\n 'frill',\n 'fringe',\n 'frisbee',\n 'frisk',\n 'fritter',\n 'frivolous',\n 'frolic',\n 'from',\n 'front',\n 'frostbite',\n 'frosted',\n 'frostily',\n 'frosting',\n 'frostlike',\n 'frosty',\n 'froth',\n 'frown',\n 'frozen',\n 'fructose',\n 'frugality',\n 'frugally',\n 'fruit',\n 'frustrate',\n 'frying',\n 'gab',\n 'gaffe',\n 'gag',\n 'gainfully',\n 'gaining',\n 'gains',\n 'gala',\n 'gallantly',\n 'galleria',\n 'gallery',\n 'galley',\n 'gallon',\n 'gallows',\n 'gallstone',\n 'galore',\n 'galvanize',\n 'gambling',\n 'game',\n 'gaming',\n 'gamma',\n 'gander',\n 'gangly',\n 'gangrene',\n 'gangway',\n 'gap',\n 'garage',\n 'garbage',\n 'garden',\n 'gargle',\n 'garland',\n 'garlic',\n 'garment',\n 'garnet',\n 'garnish',\n 'garter',\n 'gas',\n 'gatherer',\n 'gathering',\n 'gating',\n 'gauging',\n 'gauntlet',\n 'gauze',\n 'gave',\n 'gawk',\n 'gazing',\n 'gear',\n 'gecko',\n 'geek',\n 'geiger',\n 'gem',\n 'gender',\n 'generic',\n 'generous',\n 'genetics',\n 'genre',\n 'gentile',\n 'gentleman',\n 'gently',\n 'gents',\n 'geography',\n 'geologic',\n 'geologist',\n 'geology',\n 'geometric',\n 'geometry',\n 'geranium',\n 'gerbil',\n 'geriatric',\n 'germicide',\n 'germinate',\n 'germless',\n 'germproof',\n 'gestate',\n 'gestation',\n 'gesture',\n 'getaway',\n 'getting',\n 'getup',\n 'giant',\n 'gibberish',\n 'giblet',\n 'giddily',\n 'giddiness',\n 'giddy',\n 'gift',\n 'gigabyte',\n 'gigahertz',\n 'gigantic',\n 'giggle',\n 'giggling',\n 'giggly',\n 'gigolo',\n 'gilled',\n 'gills',\n 'gimmick',\n 'girdle',\n 'giveaway',\n 'given',\n 'giver',\n 'giving',\n 'gizmo',\n 'gizzard',\n 'glacial',\n 'glacier',\n 'glade',\n 'gladiator',\n 'gladly',\n 'glamorous',\n 'glamour',\n 'glance',\n 'glancing',\n 'glandular',\n 'glare',\n 'glaring',\n 'glass',\n 'glaucoma',\n 'glazing',\n 'gleaming',\n 'gleeful',\n 'glider',\n 'gliding',\n 'glimmer',\n 'glimpse',\n 'glisten',\n 'glitch',\n 'glitter',\n 'glitzy',\n 'gloater',\n 'gloating',\n 'gloomily',\n 'gloomy',\n 'glorified',\n 'glorifier',\n 'glorify',\n 'glorious',\n 'glory',\n 'gloss',\n 'glove',\n 'glowing',\n 'glowworm',\n 'glucose',\n 'glue',\n 'gluten',\n 'glutinous',\n 'glutton',\n 'gnarly',\n 'gnat',\n 'goal',\n 'goatskin',\n 'goes',\n 'goggles',\n 'going',\n 'goldfish',\n 'goldmine',\n 'goldsmith',\n 'golf',\n 'goliath',\n 'gonad',\n 'gondola',\n 'gone',\n 'gong',\n 'good',\n 'gooey',\n 'goofball',\n 'goofiness',\n 'goofy',\n 'google',\n 'goon',\n 'gopher',\n 'gore',\n 'gorged',\n 'gorgeous',\n 'gory',\n 'gosling',\n 'gossip',\n 'gothic',\n 'gotten',\n 'gout',\n 'gown',\n 'grab',\n 'graceful',\n 'graceless',\n 'gracious',\n 'gradation',\n 'graded',\n 'grader',\n 'gradient',\n 'grading',\n 'gradually',\n 'graduate',\n 'graffiti',\n 'grafted',\n 'grafting',\n 'grain',\n 'granddad',\n 'grandkid',\n 'grandly',\n 'grandma',\n 'grandpa',\n 'grandson',\n 'granite',\n 'granny',\n 'granola',\n 'grant',\n 'granular',\n 'grape',\n 'graph',\n 'grapple',\n 'grappling',\n 'grasp',\n 'grass',\n 'gratified',\n 'gratify',\n 'grating',\n 'gratitude',\n 'gratuity',\n 'gravel',\n 'graveness',\n 'graves',\n 'graveyard',\n 'gravitate',\n 'gravity',\n 'gravy',\n 'gray',\n 'grazing',\n 'greasily',\n 'greedily',\n 'greedless',\n 'greedy',\n 'green',\n 'greeter',\n 'greeting',\n 'grew',\n 'greyhound',\n 'grid',\n 'grief',\n 'grievance',\n 'grieving',\n 'grievous',\n 'grill',\n 'grimace',\n 'grimacing',\n 'grime',\n 'griminess',\n 'grimy',\n 'grinch',\n 'grinning',\n 'grip',\n 'gristle',\n 'grit',\n 'groggily',\n 'groggy',\n 'groin',\n 'groom',\n 'groove',\n 'grooving',\n 'groovy',\n 'grope',\n 'ground',\n 'grouped',\n 'grout',\n 'grove',\n 'grower',\n 'growing',\n 'growl',\n 'grub',\n 'grudge',\n 'grudging',\n 'grueling',\n 'gruffly',\n 'grumble',\n 'grumbling',\n 'grumbly',\n 'grumpily',\n 'grunge',\n 'grunt',\n 'guacamole',\n 'guidable',\n 'guidance',\n 'guide',\n 'guiding',\n 'guileless',\n 'guise',\n 'gulf',\n 'gullible',\n 'gully',\n 'gulp',\n 'gumball',\n 'gumdrop',\n 'gumminess',\n 'gumming',\n 'gummy',\n 'gurgle',\n 'gurgling',\n 'guru',\n 'gush',\n 'gusto',\n 'gusty',\n 'gutless',\n 'guts',\n 'gutter',\n 'guy',\n 'guzzler',\n 'gyration',\n 'habitable',\n 'habitant',\n 'habitat',\n 'habitual',\n 'hacked',\n 'hacker',\n 'hacking',\n 'hacksaw',\n 'had',\n 'haggler',\n 'haiku',\n 'half',\n 'halogen',\n 'halt',\n 'halved',\n 'halves',\n 'hamburger',\n 'hamlet',\n 'hammock',\n 'hamper',\n 'hamster',\n 'hamstring',\n 'handbag',\n 'handball',\n 'handbook',\n 'handbrake',\n 'handcart',\n 'handclap',\n 'handclasp',\n 'handcraft',\n 'handcuff',\n 'handed',\n 'handful',\n 'handgrip',\n 'handgun',\n 'handheld',\n 'handiness',\n 'handiwork',\n 'handlebar',\n 'handled',\n 'handler',\n 'handling',\n 'handmade',\n 'handoff',\n 'handpick',\n 'handprint',\n 'handrail',\n 'handsaw',\n 'handset',\n 'handsfree',\n 'handshake',\n 'handstand',\n 'handwash',\n 'handwork',\n 'handwoven',\n 'handwrite',\n 'handyman',\n 'hangnail',\n 'hangout',\n 'hangover',\n 'hangup',\n 'hankering',\n 'hankie',\n 'hanky',\n 'haphazard',\n 'happening',\n 'happier',\n 'happiest',\n 'happily',\n 'happiness',\n 'happy',\n 'harbor',\n 'hardcopy',\n 'hardcore',\n 'hardcover',\n 'harddisk',\n 'hardened',\n 'hardener',\n 'hardening',\n 'hardhat',\n 'hardhead',\n 'hardiness',\n 'hardly',\n 'hardness',\n 'hardship',\n 'hardware',\n 'hardwired',\n 'hardwood',\n 'hardy',\n 'harmful',\n 'harmless',\n 'harmonica',\n 'harmonics',\n 'harmonize',\n 'harmony',\n 'harness',\n 'harpist',\n 'harsh',\n 'harvest',\n 'hash',\n 'hassle',\n 'haste',\n 'hastily',\n 'hastiness',\n 'hasty',\n 'hatbox',\n 'hatchback',\n 'hatchery',\n 'hatchet',\n 'hatching',\n 'hatchling',\n 'hate',\n 'hatless',\n 'hatred',\n 'haunt',\n 'haven',\n 'hazard',\n 'hazelnut',\n 'hazily',\n 'haziness',\n 'hazing',\n 'hazy',\n 'headache',\n 'headband',\n 'headboard',\n 'headcount',\n 'headdress',\n 'headed',\n 'header',\n 'headfirst',\n 'headgear',\n 'heading',\n 'headlamp',\n 'headless',\n 'headlock',\n 'headphone',\n 'headpiece',\n 'headrest',\n 'headroom',\n 'headscarf',\n 'headset',\n 'headsman',\n 'headstand',\n 'headstone',\n 'headway',\n 'headwear',\n 'heap',\n 'heat',\n 'heave',\n 'heavily',\n 'heaviness',\n 'heaving',\n 'hedge',\n 'hedging',\n 'heftiness',\n 'hefty',\n 'helium',\n 'helmet',\n 'helper',\n 'helpful',\n 'helping',\n 'helpless',\n 'helpline',\n 'hemlock',\n 'hemstitch',\n 'hence',\n 'henchman',\n 'henna',\n 'herald',\n 'herbal',\n 'herbicide',\n 'herbs',\n 'heritage',\n 'hermit',\n 'heroics',\n 'heroism',\n 'herring',\n 'herself',\n 'hertz',\n 'hesitancy',\n 'hesitant',\n 'hesitate',\n 'hexagon',\n 'hexagram',\n 'hubcap',\n 'huddle',\n 'huddling',\n 'huff',\n 'hug',\n 'hula',\n 'hulk',\n 'hull',\n 'human',\n 'humble',\n 'humbling',\n 'humbly',\n 'humid',\n 'humiliate',\n 'humility',\n 'humming',\n 'hummus',\n 'humongous',\n 'humorist',\n 'humorless',\n 'humorous',\n 'humpback',\n 'humped',\n 'humvee',\n 'hunchback',\n 'hundredth',\n 'hunger',\n 'hungrily',\n 'hungry',\n 'hunk',\n 'hunter',\n 'hunting',\n 'huntress',\n 'huntsman',\n 'hurdle',\n 'hurled',\n 'hurler',\n 'hurling',\n 'hurray',\n 'hurricane',\n 'hurried',\n 'hurry',\n 'hurt',\n 'husband',\n 'hush',\n 'husked',\n 'huskiness',\n 'hut',\n 'hybrid',\n 'hydrant',\n 'hydrated',\n 'hydration',\n 'hydrogen',\n 'hydroxide',\n 'hyperlink',\n 'hypertext',\n 'hyphen',\n 'hypnoses',\n 'hypnosis',\n 'hypnotic',\n 'hypnotism',\n 'hypnotist',\n 'hypnotize',\n 'hypocrisy',\n 'hypocrite',\n 'ibuprofen',\n 'ice',\n 'iciness',\n 'icing',\n 'icky',\n 'icon',\n 'icy',\n 'idealism',\n 'idealist',\n 'idealize',\n 'ideally',\n 'idealness',\n 'identical',\n 'identify',\n 'identity',\n 'ideology',\n 'idiocy',\n 'idiom',\n 'idly',\n 'igloo',\n 'ignition',\n 'ignore',\n 'iguana',\n 'illicitly',\n 'illusion',\n 'illusive',\n 'image',\n 'imaginary',\n 'imagines',\n 'imaging',\n 'imbecile',\n 'imitate',\n 'imitation',\n 'immature',\n 'immerse',\n 'immersion',\n 'imminent',\n 'immobile',\n 'immodest',\n 'immorally',\n 'immortal',\n 'immovable',\n 'immovably',\n 'immunity',\n 'immunize',\n 'impaired',\n 'impale',\n 'impart',\n 'impatient',\n 'impeach',\n 'impeding',\n 'impending',\n 'imperfect',\n 'imperial',\n 'impish',\n 'implant',\n 'implement',\n 'implicate',\n 'implicit',\n 'implode',\n 'implosion',\n 'implosive',\n 'imply',\n 'impolite',\n 'important',\n 'importer',\n 'impose',\n 'imposing',\n 'impotence',\n 'impotency',\n 'impotent',\n 'impound',\n 'imprecise',\n 'imprint',\n 'imprison',\n 'impromptu',\n 'improper',\n 'improve',\n 'improving',\n 'improvise',\n 'imprudent',\n 'impulse',\n 'impulsive',\n 'impure',\n 'impurity',\n 'iodine',\n 'iodize',\n 'ion',\n 'ipad',\n 'iphone',\n 'ipod',\n 'irate',\n 'irk',\n 'iron',\n 'irregular',\n 'irrigate',\n 'irritable',\n 'irritably',\n 'irritant',\n 'irritate',\n 'islamic',\n 'islamist',\n 'isolated',\n 'isolating',\n 'isolation',\n 'isotope',\n 'issue',\n 'issuing',\n 'italicize',\n 'italics',\n 'item',\n 'itinerary',\n 'itunes',\n 'ivory',\n 'ivy',\n 'jab',\n 'jackal',\n 'jacket',\n 'jackknife',\n 'jackpot',\n 'jailbird',\n 'jailbreak',\n 'jailer',\n 'jailhouse',\n 'jalapeno',\n 'jam',\n 'janitor',\n 'january',\n 'jargon',\n 'jarring',\n 'jasmine',\n 'jaundice',\n 'jaunt',\n 'java',\n 'jawed',\n 'jawless',\n 'jawline',\n 'jaws',\n 'jaybird',\n 'jaywalker',\n 'jazz',\n 'jeep',\n 'jeeringly',\n 'jellied',\n 'jelly',\n 'jersey',\n 'jester',\n 'jet',\n 'jiffy',\n 'jigsaw',\n 'jimmy',\n 'jingle',\n 'jingling',\n 'jinx',\n 'jitters',\n 'jittery',\n 'job',\n 'jockey',\n 'jockstrap',\n 'jogger',\n 'jogging',\n 'john',\n 'joining',\n 'jokester',\n 'jokingly',\n 'jolliness',\n 'jolly',\n 'jolt',\n 'jot',\n 'jovial',\n 'joyfully',\n 'joylessly',\n 'joyous',\n 'joyride',\n 'joystick',\n 'jubilance',\n 'jubilant',\n 'judge',\n 'judgingly',\n 'judicial',\n 'judiciary',\n 'judo',\n 'juggle',\n 'juggling',\n 'jugular',\n 'juice',\n 'juiciness',\n 'juicy',\n 'jujitsu',\n 'jukebox',\n 'july',\n 'jumble',\n 'jumbo',\n 'jump',\n 'junction',\n 'juncture',\n 'june',\n 'junior',\n 'juniper',\n 'junkie',\n 'junkman',\n 'junkyard',\n 'jurist',\n 'juror',\n 'jury',\n 'justice',\n 'justifier',\n 'justify',\n 'justly',\n 'justness',\n 'juvenile',\n 'kabob',\n 'kangaroo',\n 'karaoke',\n 'karate',\n 'karma',\n 'kebab',\n 'keenly',\n 'keenness',\n 'keep',\n 'keg',\n 'kelp',\n 'kennel',\n 'kept',\n 'kerchief',\n 'kerosene',\n 'kettle',\n 'kick',\n 'kiln',\n 'kilobyte',\n 'kilogram',\n 'kilometer',\n 'kilowatt',\n 'kilt',\n 'kimono',\n 'kindle',\n 'kindling',\n 'kindly',\n 'kindness',\n 'kindred',\n 'kinetic',\n 'kinfolk',\n 'king',\n 'kinship',\n 'kinsman',\n 'kinswoman',\n 'kissable',\n 'kisser',\n 'kissing',\n 'kitchen',\n 'kite',\n 'kitten',\n 'kitty',\n 'kiwi',\n 'kleenex',\n 'knapsack',\n 'knee',\n 'knelt',\n 'knickers',\n 'knoll',\n 'koala',\n 'kooky',\n 'kosher',\n 'krypton',\n 'kudos',\n 'kung',\n 'labored',\n 'laborer',\n 'laboring',\n 'laborious',\n 'labrador',\n 'ladder',\n 'ladies',\n 'ladle',\n 'ladybug',\n 'ladylike',\n 'lagged',\n 'lagging',\n 'lagoon',\n 'lair',\n 'lake',\n 'lance',\n 'landed',\n 'landfall',\n 'landfill',\n 'landing',\n 'landlady',\n 'landless',\n 'landline',\n 'landlord',\n 'landmark',\n 'landmass',\n 'landmine',\n 'landowner',\n 'landscape',\n 'landside',\n 'landslide',\n 'language',\n 'lankiness',\n 'lanky',\n 'lantern',\n 'lapdog',\n 'lapel',\n 'lapped',\n 'lapping',\n 'laptop',\n 'lard',\n 'large',\n 'lark',\n 'lash',\n 'lasso',\n 'last',\n 'latch',\n 'late',\n 'lather',\n 'latitude',\n 'latrine',\n 'latter',\n 'latticed',\n 'launch',\n 'launder',\n 'laundry',\n 'laurel',\n 'lavender',\n 'lavish',\n 'laxative',\n 'lazily',\n 'laziness',\n 'lazy',\n 'lecturer',\n 'left',\n 'legacy',\n 'legal',\n 'legend',\n 'legged',\n 'leggings',\n 'legible',\n 'legibly',\n 'legislate',\n 'lego',\n 'legroom',\n 'legume',\n 'legwarmer',\n 'legwork',\n 'lemon',\n 'lend',\n 'length',\n 'lens',\n 'lent',\n 'leotard',\n 'lesser',\n 'letdown',\n 'lethargic',\n 'lethargy',\n 'letter',\n 'lettuce',\n 'level',\n 'leverage',\n 'levers',\n 'levitate',\n 'levitator',\n 'liability',\n 'liable',\n 'liberty',\n 'librarian',\n 'library',\n 'licking',\n 'licorice',\n 'lid',\n 'life',\n 'lifter',\n 'lifting',\n 'liftoff',\n 'ligament',\n 'likely',\n 'likeness',\n 'likewise',\n 'liking',\n 'lilac',\n 'lilly',\n 'lily',\n 'limb',\n 'limeade',\n 'limelight',\n 'limes',\n 'limit',\n 'limping',\n 'limpness',\n 'line',\n 'lingo',\n 'linguini',\n 'linguist',\n 'lining',\n 'linked',\n 'linoleum',\n 'linseed',\n 'lint',\n 'lion',\n 'lip',\n 'liquefy',\n 'liqueur',\n 'liquid',\n 'lisp',\n 'list',\n 'litigate',\n 'litigator',\n 'litmus',\n 'litter',\n 'little',\n 'livable',\n 'lived',\n 'lively',\n 'liver',\n 'livestock',\n 'lividly',\n 'living',\n 'lizard',\n 'lubricant',\n 'lubricate',\n 'lucid',\n 'luckily',\n 'luckiness',\n 'luckless',\n 'lucrative',\n 'ludicrous',\n 'lugged',\n 'lukewarm',\n 'lullaby',\n 'lumber',\n 'luminance',\n 'luminous',\n 'lumpiness',\n 'lumping',\n 'lumpish',\n 'lunacy',\n 'lunar',\n 'lunchbox',\n 'luncheon',\n 'lunchroom',\n 'lunchtime',\n 'lung',\n 'lurch',\n 'lure',\n 'luridness',\n 'lurk',\n 'lushly',\n 'lushness',\n 'luster',\n 'lustfully',\n 'lustily',\n 'lustiness',\n 'lustrous',\n 'lusty',\n 'luxurious',\n 'luxury',\n 'lying',\n 'lyrically',\n 'lyricism',\n 'lyricist',\n 'lyrics',\n 'macarena',\n 'macaroni',\n 'macaw',\n 'mace',\n 'machine',\n 'machinist',\n 'magazine',\n 'magenta',\n 'maggot',\n 'magical',\n 'magician',\n 'magma',\n 'magnesium',\n 'magnetic',\n 'magnetism',\n 'magnetize',\n 'magnifier',\n 'magnify',\n 'magnitude',\n 'magnolia',\n 'mahogany',\n 'maimed',\n 'majestic',\n 'majesty',\n 'majorette',\n 'majority',\n 'makeover',\n 'maker',\n 'makeshift',\n 'making',\n 'malformed',\n 'malt',\n 'mama',\n 'mammal',\n 'mammary',\n 'mammogram',\n 'manager',\n 'managing',\n 'manatee',\n 'mandarin',\n 'mandate',\n 'mandatory',\n 'mandolin',\n 'manger',\n 'mangle',\n 'mango',\n 'mangy',\n 'manhandle',\n 'manhole',\n 'manhood',\n 'manhunt',\n 'manicotti',\n 'manicure',\n 'manifesto',\n 'manila',\n 'mankind',\n 'manlike',\n 'manliness',\n 'manly',\n 'manmade',\n 'manned',\n 'mannish',\n 'manor',\n 'manpower',\n 'mantis',\n 'mantra',\n 'manual',\n 'many',\n 'map',\n 'marathon',\n 'marauding',\n 'marbled',\n 'marbles',\n 'marbling',\n 'march',\n 'mardi',\n 'margarine',\n 'margarita',\n 'margin',\n 'marigold',\n 'marina',\n 'marine',\n 'marital',\n 'maritime',\n 'marlin',\n 'marmalade',\n 'maroon',\n 'married',\n 'marrow',\n 'marry',\n 'marshland',\n 'marshy',\n 'marsupial',\n 'marvelous',\n 'marxism',\n 'mascot',\n 'masculine',\n 'mashed',\n 'mashing',\n 'massager',\n 'masses',\n 'massive',\n 'mastiff',\n 'matador',\n 'matchbook',\n 'matchbox',\n 'matcher',\n 'matching',\n 'matchless',\n 'material',\n 'maternal',\n 'maternity',\n 'math',\n 'mating',\n 'matriarch',\n 'matrimony',\n 'matrix',\n 'matron',\n 'matted',\n 'matter',\n 'maturely',\n 'maturing',\n 'maturity',\n 'mauve',\n 'maverick',\n 'maximize',\n 'maximum',\n 'maybe',\n 'mayday',\n 'mayflower',\n 'moaner',\n 'moaning',\n 'mobile',\n 'mobility',\n 'mobilize',\n 'mobster',\n 'mocha',\n 'mocker',\n 'mockup',\n 'modified',\n 'modify',\n 'modular',\n 'modulator',\n 'module',\n 'moisten',\n 'moistness',\n 'moisture',\n 'molar',\n 'molasses',\n 'mold',\n 'molecular',\n 'molecule',\n 'molehill',\n 'mollusk',\n 'mom',\n 'monastery',\n 'monday',\n 'monetary',\n 'monetize',\n 'moneybags',\n 'moneyless',\n 'moneywise',\n 'mongoose',\n 'mongrel',\n 'monitor',\n 'monkhood',\n 'monogamy',\n 'monogram',\n 'monologue',\n 'monopoly',\n 'monorail',\n 'monotone',\n 'monotype',\n 'monoxide',\n 'monsieur',\n 'monsoon',\n 'monstrous',\n 'monthly',\n 'monument',\n 'moocher',\n 'moodiness',\n 'moody',\n 'mooing',\n 'moonbeam',\n 'mooned',\n 'moonlight',\n 'moonlike',\n 'moonlit',\n 'moonrise',\n 'moonscape',\n 'moonshine',\n 'moonstone',\n 'moonwalk',\n 'mop',\n 'morale',\n 'morality',\n 'morally',\n 'morbidity',\n 'morbidly',\n 'morphine',\n 'morphing',\n 'morse',\n 'mortality',\n 'mortally',\n 'mortician',\n 'mortified',\n 'mortify',\n 'mortuary',\n 'mosaic',\n 'mossy',\n 'most',\n 'mothball',\n 'mothproof',\n 'motion',\n 'motivate',\n 'motivator',\n 'motive',\n 'motocross',\n 'motor',\n 'motto',\n 'mountable',\n 'mountain',\n 'mounted',\n 'mounting',\n 'mourner',\n 'mournful',\n 'mouse',\n 'mousiness',\n 'moustache',\n 'mousy',\n 'mouth',\n 'movable',\n 'move',\n 'movie',\n 'moving',\n 'mower',\n 'mowing',\n 'much',\n 'muck',\n 'mud',\n 'mug',\n 'mulberry',\n 'mulch',\n 'mule',\n 'mulled',\n 'mullets',\n 'multiple',\n 'multiply',\n 'multitask',\n 'multitude',\n 'mumble',\n 'mumbling',\n 'mumbo',\n 'mummified',\n 'mummify',\n 'mummy',\n 'mumps',\n 'munchkin',\n 'mundane',\n 'municipal',\n 'muppet',\n 'mural',\n 'murkiness',\n 'murky',\n 'murmuring',\n 'muscular',\n 'museum',\n 'mushily',\n 'mushiness',\n 'mushroom',\n 'mushy',\n 'music',\n 'musket',\n 'muskiness',\n 'musky',\n 'mustang',\n 'mustard',\n 'muster',\n 'mustiness',\n 'musty',\n 'mutable',\n 'mutate',\n 'mutation',\n 'mute',\n 'mutilated',\n 'mutilator',\n 'mutiny',\n 'mutt',\n 'mutual',\n 'muzzle',\n 'myself',\n 'myspace',\n 'mystified',\n 'mystify',\n 'myth',\n 'nacho',\n 'nag',\n 'nail',\n 'name',\n 'naming',\n 'nanny',\n 'nanometer',\n 'nape',\n 'napkin',\n 'napped',\n 'napping',\n 'nappy',\n 'narrow',\n 'nastily',\n 'nastiness',\n 'national',\n 'native',\n 'nativity',\n 'natural',\n 'nature',\n 'naturist',\n 'nautical',\n 'navigate',\n 'navigator',\n 'navy',\n 'nearby',\n 'nearest',\n 'nearly',\n 'nearness',\n 'neatly',\n 'neatness',\n 'nebula',\n 'nebulizer',\n 'nectar',\n 'negate',\n 'negation',\n 'negative',\n 'neglector',\n 'negligee',\n 'negligent',\n 'negotiate',\n 'nemeses',\n 'nemesis',\n 'neon',\n 'nephew',\n 'nerd',\n 'nervous',\n 'nervy',\n 'nest',\n 'net',\n 'neurology',\n 'neuron',\n 'neurosis',\n 'neurotic',\n 'neuter',\n 'neutron',\n 'never',\n 'next',\n 'nibble',\n 'nickname',\n 'nicotine',\n 'niece',\n 'nifty',\n 'nimble',\n 'nimbly',\n 'nineteen',\n 'ninetieth',\n 'ninja',\n 'nintendo',\n 'ninth',\n 'nuclear',\n 'nuclei',\n 'nucleus',\n 'nugget',\n 'nullify',\n 'number',\n 'numbing',\n 'numbly',\n 'numbness',\n 'numeral',\n 'numerate',\n 'numerator',\n 'numeric',\n 'numerous',\n 'nuptials',\n 'nursery',\n 'nursing',\n 'nurture',\n 'nutcase',\n 'nutlike',\n 'nutmeg',\n 'nutrient',\n 'nutshell',\n 'nuttiness',\n 'nutty',\n 'nuzzle',\n 'nylon',\n 'oaf',\n 'oak',\n 'oasis',\n 'oat',\n 'obedience',\n 'obedient',\n 'obituary',\n 'object',\n 'obligate',\n 'obliged',\n 'oblivion',\n 'oblivious',\n 'oblong',\n 'obnoxious',\n 'oboe',\n 'obscure',\n 'obscurity',\n 'observant',\n 'observer',\n 'observing',\n 'obsessed',\n 'obsession',\n 'obsessive',\n 'obsolete',\n 'obstacle',\n 'obstinate',\n 'obstruct',\n 'obtain',\n 'obtrusive',\n 'obtuse',\n 'obvious',\n 'occultist',\n 'occupancy',\n 'occupant',\n 'occupier',\n 'occupy',\n 'ocean',\n 'ocelot',\n 'octagon',\n 'octane',\n 'october',\n 'octopus',\n 'ogle',\n 'oil',\n 'oink',\n 'ointment',\n 'okay',\n 'old',\n 'olive',\n 'olympics',\n 'omega',\n 'omen',\n 'ominous',\n 'omission',\n 'omit',\n 'omnivore',\n 'onboard',\n 'oncoming',\n 'ongoing',\n 'onion',\n 'online',\n 'onlooker',\n 'only',\n 'onscreen',\n 'onset',\n 'onshore',\n 'onslaught',\n 'onstage',\n 'onto',\n 'onward',\n 'onyx',\n 'oops',\n 'ooze',\n 'oozy',\n 'opacity',\n 'opal',\n 'open',\n 'operable',\n 'operate',\n 'operating',\n 'operation',\n 'operative',\n 'operator',\n 'opium',\n 'opossum',\n 'opponent',\n 'oppose',\n 'opposing',\n 'opposite',\n 'oppressed',\n 'oppressor',\n 'opt',\n 'opulently',\n 'osmosis',\n 'other',\n 'otter',\n 'ouch',\n 'ought',\n 'ounce',\n 'outage',\n 'outback',\n 'outbid',\n 'outboard',\n 'outbound',\n 'outbreak',\n 'outburst',\n 'outcast',\n 'outclass',\n 'outcome',\n 'outdated',\n 'outdoors',\n 'outer',\n 'outfield',\n 'outfit',\n 'outflank',\n 'outgoing',\n 'outgrow',\n 'outhouse',\n 'outing',\n 'outlast',\n 'outlet',\n 'outline',\n 'outlook',\n 'outlying',\n 'outmatch',\n 'outmost',\n 'outnumber',\n 'outplayed',\n 'outpost',\n 'outpour',\n 'output',\n 'outrage',\n 'outrank',\n 'outreach',\n 'outright',\n 'outscore',\n 'outsell',\n 'outshine',\n 'outshoot',\n 'outsider',\n 'outskirts',\n 'outsmart',\n 'outsource',\n 'outspoken',\n 'outtakes',\n 'outthink',\n 'outward',\n 'outweigh',\n 'outwit',\n 'oval',\n 'ovary',\n 'oven',\n 'overact',\n 'overall',\n 'overarch',\n 'overbid',\n 'overbill',\n 'overbite',\n 'overblown',\n 'overboard',\n 'overbook',\n 'overbuilt',\n 'overcast',\n 'overcoat',\n 'overcome',\n 'overcook',\n 'overcrowd',\n 'overdraft',\n 'overdrawn',\n 'overdress',\n 'overdrive',\n 'overdue',\n 'overeager',\n 'overeater',\n 'overexert',\n 'overfed',\n 'overfeed',\n 'overfill',\n 'overflow',\n 'overfull',\n 'overgrown',\n 'overhand',\n 'overhang',\n 'overhaul',\n 'overhead',\n 'overhear',\n 'overheat',\n 'overhung',\n 'overjoyed',\n 'overkill',\n 'overlabor',\n 'overlaid',\n 'overlap',\n 'overlay',\n 'overload',\n 'overlook',\n 'overlord',\n 'overlying',\n 'overnight',\n 'overpass',\n 'overpay',\n 'overplant',\n 'overplay',\n 'overpower',\n 'overprice',\n 'overrate',\n 'overreach',\n 'overreact',\n 'override',\n 'overripe',\n 'overrule',\n 'overrun',\n 'overshoot',\n 'overshot',\n 'oversight',\n 'oversized',\n 'oversleep',\n 'oversold',\n 'overspend',\n 'overstate',\n 'overstay',\n 'overstep',\n 'overstock',\n 'overstuff',\n 'oversweet',\n 'overtake',\n 'overthrow',\n 'overtime',\n 'overtly',\n 'overtone',\n 'overture',\n 'overturn',\n 'overuse',\n 'overvalue',\n 'overview',\n 'overwrite',\n 'owl',\n 'oxford',\n 'oxidant',\n 'oxidation',\n 'oxidize',\n 'oxidizing',\n 'oxygen',\n 'oxymoron',\n 'oyster',\n 'ozone',\n 'paced',\n 'pacemaker',\n 'pacific',\n 'pacifier',\n 'pacifism',\n 'pacifist',\n 'pacify',\n 'padded',\n 'padding',\n 'paddle',\n 'paddling',\n 'padlock',\n 'pagan',\n 'pager',\n 'paging',\n 'pajamas',\n 'palace',\n 'palatable',\n 'palm',\n 'palpable',\n 'palpitate',\n 'paltry',\n 'pampered',\n 'pamperer',\n 'pampers',\n 'pamphlet',\n 'panama',\n 'pancake',\n 'pancreas',\n 'panda',\n 'pandemic',\n 'pang',\n 'panhandle',\n 'panic',\n 'panning',\n 'panorama',\n 'panoramic',\n 'panther',\n 'pantomime',\n 'pantry',\n 'pants',\n 'pantyhose',\n 'paparazzi',\n 'papaya',\n 'paper',\n 'paprika',\n 'papyrus',\n 'parabola',\n 'parachute',\n 'parade',\n 'paradox',\n 'paragraph',\n 'parakeet',\n 'paralegal',\n 'paralyses',\n 'paralysis',\n 'paralyze',\n 'paramedic',\n 'parameter',\n 'paramount',\n 'parasail',\n 'parasite',\n 'parasitic',\n 'parcel',\n 'parched',\n 'parchment',\n 'pardon',\n 'parish',\n 'parka',\n 'parking',\n 'parkway',\n 'parlor',\n 'parmesan',\n 'parole',\n 'parrot',\n 'parsley',\n 'parsnip',\n 'partake',\n 'parted',\n 'parting',\n 'partition',\n 'partly',\n 'partner',\n 'partridge',\n 'party',\n 'passable',\n 'passably',\n 'passage',\n 'passcode',\n 'passenger',\n 'passerby',\n 'passing',\n 'passion',\n 'passive',\n 'passivism',\n 'passover',\n 'passport',\n 'password',\n 'pasta',\n 'pasted',\n 'pastel',\n 'pastime',\n 'pastor',\n 'pastrami',\n 'pasture',\n 'pasty',\n 'patchwork',\n 'patchy',\n 'paternal',\n 'paternity',\n 'path',\n 'patience',\n 'patient',\n 'patio',\n 'patriarch',\n 'patriot',\n 'patrol',\n 'patronage',\n 'patronize',\n 'pauper',\n 'pavement',\n 'paver',\n 'pavestone',\n 'pavilion',\n 'paving',\n 'pawing',\n 'payable',\n 'payback',\n 'paycheck',\n 'payday',\n 'payee',\n 'payer',\n 'paying',\n 'payment',\n 'payphone',\n 'payroll',\n 'pebble',\n 'pebbly',\n 'pecan',\n 'pectin',\n 'peculiar',\n 'peddling',\n 'pediatric',\n 'pedicure',\n 'pedigree',\n 'pedometer',\n 'pegboard',\n 'pelican',\n 'pellet',\n 'pelt',\n 'pelvis',\n 'penalize',\n 'penalty',\n 'pencil',\n 'pendant',\n 'pending',\n 'penholder',\n 'penknife',\n 'pennant',\n 'penniless',\n 'penny',\n 'penpal',\n 'pension',\n 'pentagon',\n 'pentagram',\n 'pep',\n 'perceive',\n 'percent',\n 'perch',\n 'percolate',\n 'perennial',\n 'perfected',\n 'perfectly',\n 'perfume',\n 'periscope',\n 'perish',\n 'perjurer',\n 'perjury',\n 'perkiness',\n 'perky',\n 'perm',\n 'peroxide',\n 'perpetual',\n 'perplexed',\n 'persecute',\n 'persevere',\n 'persuaded',\n 'persuader',\n 'pesky',\n 'peso',\n 'pessimism',\n 'pessimist',\n 'pester',\n 'pesticide',\n 'petal',\n 'petite',\n 'petition',\n 'petri',\n 'petroleum',\n 'petted',\n 'petticoat',\n 'pettiness',\n 'petty',\n 'petunia',\n 'phantom',\n 'phobia',\n 'phoenix',\n 'phonebook',\n 'phoney',\n 'phonics',\n 'phoniness',\n 'phony',\n 'phosphate',\n 'photo',\n 'phrase',\n 'phrasing',\n 'placard',\n 'placate',\n 'placidly',\n 'plank',\n 'planner',\n 'plant',\n 'plasma',\n 'plaster',\n 'plastic',\n 'plated',\n 'platform',\n 'plating',\n 'platinum',\n 'platonic',\n 'platter',\n 'platypus',\n 'plausible',\n 'plausibly',\n 'playable',\n 'playback',\n 'player',\n 'playful',\n 'playgroup',\n 'playhouse',\n 'playing',\n 'playlist',\n 'playmaker',\n 'playmate',\n 'playoff',\n 'playpen',\n 'playroom',\n 'playset',\n 'plaything',\n 'playtime',\n 'plaza',\n 'pleading',\n 'pleat',\n 'pledge',\n 'plentiful',\n 'plenty',\n 'plethora',\n 'plexiglas',\n 'pliable',\n 'plod',\n 'plop',\n 'plot',\n 'plow',\n 'ploy',\n 'pluck',\n 'plug',\n 'plunder',\n 'plunging',\n 'plural',\n 'plus',\n 'plutonium',\n 'plywood',\n 'poach',\n 'pod',\n 'poem',\n 'poet',\n 'pogo',\n 'pointed',\n 'pointer',\n 'pointing',\n 'pointless',\n 'pointy',\n 'poise',\n 'poison',\n 'poker',\n 'poking',\n 'polar',\n 'police',\n 'policy',\n 'polio',\n 'polish',\n 'politely',\n 'polka',\n 'polo',\n 'polyester',\n 'polygon',\n 'polygraph',\n 'polymer',\n 'poncho',\n 'pond',\n 'pony',\n 'popcorn',\n 'pope',\n 'poplar',\n 'popper',\n 'poppy',\n 'popsicle',\n 'populace',\n 'popular',\n 'populate',\n 'porcupine',\n 'pork',\n 'porous',\n 'porridge',\n 'portable',\n 'portal',\n 'portfolio',\n 'porthole',\n 'portion',\n 'portly',\n 'portside',\n 'poser',\n 'posh',\n 'posing',\n 'possible',\n 'possibly',\n 'possum',\n 'postage',\n 'postal',\n 'postbox',\n 'postcard',\n 'posted',\n 'poster',\n 'posting',\n 'postnasal',\n 'posture',\n 'postwar',\n 'pouch',\n 'pounce',\n 'pouncing',\n 'pound',\n 'pouring',\n 'pout',\n 'powdered',\n 'powdering',\n 'powdery',\n 'power',\n 'powwow',\n 'pox',\n 'praising',\n 'prance',\n 'prancing',\n 'pranker',\n 'prankish',\n 'prankster',\n 'prayer',\n 'praying',\n 'preacher',\n 'preaching',\n 'preachy',\n 'preamble',\n 'precinct',\n 'precise',\n 'precision',\n 'precook',\n 'precut',\n 'predator',\n 'predefine',\n 'predict',\n 'preface',\n 'prefix',\n 'preflight',\n 'preformed',\n 'pregame',\n 'pregnancy',\n 'pregnant',\n 'preheated',\n 'prelaunch',\n 'prelaw',\n 'prelude',\n 'premiere',\n 'premises',\n 'premium',\n 'prenatal',\n 'preoccupy',\n 'preorder',\n 'prepaid',\n 'prepay',\n 'preplan',\n 'preppy',\n 'preschool',\n 'prescribe',\n 'preseason',\n 'preset',\n 'preshow',\n 'president',\n 'presoak',\n 'press',\n 'presume',\n 'presuming',\n 'preteen',\n 'pretended',\n 'pretender',\n 'pretense',\n 'pretext',\n 'pretty',\n 'pretzel',\n 'prevail',\n 'prevalent',\n 'prevent',\n 'preview',\n 'previous',\n 'prewar',\n 'prewashed',\n 'prideful',\n 'pried',\n 'primal',\n 'primarily',\n 'primary',\n 'primate',\n 'primer',\n 'primp',\n 'princess',\n 'print',\n 'prior',\n 'prism',\n 'prison',\n 'prissy',\n 'pristine',\n 'privacy',\n 'private',\n 'privatize',\n 'prize',\n 'proactive',\n 'probable',\n 'probably',\n 'probation',\n 'probe',\n 'probing',\n 'probiotic',\n 'problem',\n 'procedure',\n 'process',\n 'proclaim',\n 'procreate',\n 'procurer',\n 'prodigal',\n 'prodigy',\n 'produce',\n 'product',\n 'profane',\n 'profanity',\n 'professed',\n 'professor',\n 'profile',\n 'profound',\n 'profusely',\n 'progeny',\n 'prognosis',\n 'program',\n 'progress',\n 'projector',\n 'prologue',\n 'prolonged',\n 'promenade',\n 'prominent',\n 'promoter',\n 'promotion',\n 'prompter',\n 'promptly',\n 'prone',\n 'prong',\n 'pronounce',\n 'pronto',\n 'proofing',\n 'proofread',\n 'proofs',\n 'propeller',\n 'properly',\n 'property',\n 'proponent',\n 'proposal',\n 'propose',\n 'props',\n 'prorate',\n 'protector',\n 'protegee',\n 'proton',\n 'prototype',\n 'protozoan',\n 'protract',\n 'protrude',\n 'proud',\n 'provable',\n 'proved',\n 'proven',\n 'provided',\n 'provider',\n 'providing',\n 'province',\n 'proving',\n 'provoke',\n 'provoking',\n 'provolone',\n 'prowess',\n 'prowler',\n 'prowling',\n 'proximity',\n 'proxy',\n 'prozac',\n 'prude',\n 'prudishly',\n 'prune',\n 'pruning',\n 'pry',\n 'psychic',\n 'public',\n 'publisher',\n 'pucker',\n 'pueblo',\n 'pug',\n 'pull',\n 'pulmonary',\n 'pulp',\n 'pulsate',\n 'pulse',\n 'pulverize',\n 'puma',\n 'pumice',\n 'pummel',\n 'punch',\n 'punctual',\n 'punctuate',\n 'punctured',\n 'pungent',\n 'punisher',\n 'punk',\n 'pupil',\n 'puppet',\n 'puppy',\n 'purchase',\n 'pureblood',\n 'purebred',\n 'purely',\n 'pureness',\n 'purgatory',\n 'purge',\n 'purging',\n 'purifier',\n 'purify',\n 'purist',\n 'puritan',\n 'purity',\n 'purple',\n 'purplish',\n 'purposely',\n 'purr',\n 'purse',\n 'pursuable',\n 'pursuant',\n 'pursuit',\n 'purveyor',\n 'pushcart',\n 'pushchair',\n 'pusher',\n 'pushiness',\n 'pushing',\n 'pushover',\n 'pushpin',\n 'pushup',\n 'pushy',\n 'putdown',\n 'putt',\n 'puzzle',\n 'puzzling',\n 'pyramid',\n 'pyromania',\n 'python',\n 'quack',\n 'quadrant',\n 'quail',\n 'quaintly',\n 'quake',\n 'quaking',\n 'qualified',\n 'qualifier',\n 'qualify',\n 'quality',\n 'qualm',\n 'quantum',\n 'quarrel',\n 'quarry',\n 'quartered',\n 'quarterly',\n 'quarters',\n 'quartet',\n 'quench',\n 'query',\n 'quicken',\n 'quickly',\n 'quickness',\n 'quicksand',\n 'quickstep',\n 'quiet',\n 'quill',\n 'quilt',\n 'quintet',\n 'quintuple',\n 'quirk',\n 'quit',\n 'quiver',\n 'quizzical',\n 'quotable',\n 'quotation',\n 'quote',\n 'rabid',\n 'race',\n 'racing',\n 'racism',\n 'rack',\n 'racoon',\n 'radar',\n 'radial',\n 'radiance',\n 'radiantly',\n 'radiated',\n 'radiation',\n 'radiator',\n 'radio',\n 'radish',\n 'raffle',\n 'raft',\n 'rage',\n 'ragged',\n 'raging',\n 'ragweed',\n 'raider',\n 'railcar',\n 'railing',\n 'railroad',\n 'railway',\n 'raisin',\n 'rake',\n 'raking',\n 'rally',\n 'ramble',\n 'rambling',\n 'ramp',\n 'ramrod',\n 'ranch',\n 'rancidity',\n 'random',\n 'ranged',\n 'ranger',\n 'ranging',\n 'ranked',\n 'ranking',\n 'ransack',\n 'ranting',\n 'rants',\n 'rare',\n 'rarity',\n 'rascal',\n 'rash',\n 'rasping',\n 'ravage',\n 'raven',\n 'ravine',\n 'raving',\n 'ravioli',\n 'ravishing',\n 'reabsorb',\n 'reach',\n 'reacquire',\n 'reaction',\n 'reactive',\n 'reactor',\n 'reaffirm',\n 'ream',\n 'reanalyze',\n 'reappear',\n 'reapply',\n 'reappoint',\n 'reapprove',\n 'rearrange',\n 'rearview',\n 'reason',\n 'reassign',\n 'reassure',\n 'reattach',\n 'reawake',\n 'rebalance',\n 'rebate',\n 'rebel',\n 'rebirth',\n 'reboot',\n 'reborn',\n 'rebound',\n 'rebuff',\n 'rebuild',\n 'rebuilt',\n 'reburial',\n 'rebuttal',\n 'recall',\n 'recant',\n 'recapture',\n 'recast',\n 'recede',\n 'recent',\n 'recess',\n 'recharger',\n 'recipient',\n 'recital',\n 'recite',\n 'reckless',\n 'reclaim',\n 'recliner',\n 'reclining',\n 'recluse',\n 'reclusive',\n 'recognize',\n 'recoil',\n 'recollect',\n 'recolor',\n 'reconcile',\n 'reconfirm',\n 'reconvene',\n 'recopy',\n 'record',\n 'recount',\n 'recoup',\n 'recovery',\n 'recreate',\n 'rectal',\n 'rectangle',\n 'rectified',\n 'rectify',\n 'recycled',\n 'recycler',\n 'recycling',\n 'reemerge',\n 'reenact',\n 'reenter',\n 'reentry',\n 'reexamine',\n 'referable',\n 'referee',\n 'reference',\n 'refill',\n 'refinance',\n 'refined',\n 'refinery',\n 'refining',\n 'refinish',\n 'reflected',\n 'reflector',\n 'reflex',\n 'reflux',\n 'refocus',\n 'refold',\n 'reforest',\n 'reformat',\n 'reformed',\n 'reformer',\n 'reformist',\n 'refract',\n 'refrain',\n 'refreeze',\n 'refresh',\n 'refried',\n 'refueling',\n 'refund',\n 'refurbish',\n 'refurnish',\n 'refusal',\n 'refuse',\n 'refusing',\n 'refutable',\n 'refute',\n 'regain',\n 'regalia',\n 'regally',\n 'reggae',\n 'regime',\n 'region',\n 'register',\n 'registrar',\n 'registry',\n 'regress',\n 'regretful',\n 'regroup',\n 'regular',\n 'regulate',\n 'regulator',\n 'rehab',\n 'reheat',\n 'rehire',\n 'rehydrate',\n 'reimburse',\n 'reissue',\n 'reiterate',\n 'rejoice',\n 'rejoicing',\n 'rejoin',\n 'rekindle',\n 'relapse',\n 'relapsing',\n 'relatable',\n 'related',\n 'relation',\n 'relative',\n 'relax',\n 'relay',\n 'relearn',\n 'release',\n 'relenting',\n 'reliable',\n 'reliably',\n 'reliance',\n 'reliant',\n 'relic',\n 'relieve',\n 'relieving',\n 'relight',\n 'relish',\n 'relive',\n 'reload',\n 'relocate',\n 'relock',\n 'reluctant',\n 'rely',\n 'remake',\n 'remark',\n 'remarry',\n 'rematch',\n 'remedial',\n 'remedy',\n 'remember',\n 'reminder',\n 'remindful',\n 'remission',\n 'remix',\n 'remnant',\n 'remodeler',\n 'remold',\n 'remorse',\n 'remote',\n 'removable',\n 'removal',\n 'removed',\n 'remover',\n 'removing',\n 'rename',\n 'renderer',\n 'rendering',\n 'rendition',\n 'renegade',\n 'renewable',\n 'renewably',\n 'renewal',\n 'renewed',\n 'renounce',\n 'renovate',\n 'renovator',\n 'rentable',\n 'rental',\n 'rented',\n 'renter',\n 'reoccupy',\n 'reoccur',\n 'reopen',\n 'reorder',\n 'repackage',\n 'repacking',\n 'repaint',\n 'repair',\n 'repave',\n 'repaying',\n 'repayment',\n 'repeal',\n 'repeated',\n 'repeater',\n 'repent',\n 'rephrase',\n 'replace',\n 'replay',\n 'replica',\n 'reply',\n 'reporter',\n 'repose',\n 'repossess',\n 'repost',\n 'repressed',\n 'reprimand',\n 'reprint',\n 'reprise',\n 'reproach',\n 'reprocess',\n 'reproduce',\n 'reprogram',\n 'reps',\n 'reptile',\n 'reptilian',\n 'repugnant',\n 'repulsion',\n 'repulsive',\n 'repurpose',\n 'reputable',\n 'reputably',\n 'request',\n 'require',\n 'requisite',\n 'reroute',\n 'rerun',\n 'resale',\n 'resample',\n 'rescuer',\n 'reseal',\n 'research',\n 'reselect',\n 'reseller',\n 'resemble',\n 'resend',\n 'resent',\n 'reset',\n 'reshape',\n 'reshoot',\n 'reshuffle',\n 'residence',\n 'residency',\n 'resident',\n 'residual',\n 'residue',\n 'resigned',\n 'resilient',\n 'resistant',\n 'resisting',\n 'resize',\n 'resolute',\n 'resolved',\n 'resonant',\n 'resonate',\n 'resort',\n 'resource',\n 'respect',\n 'resubmit',\n 'result',\n 'resume',\n 'resupply',\n 'resurface',\n 'resurrect',\n 'retail',\n 'retainer',\n 'retaining',\n 'retake',\n 'retaliate',\n 'retention',\n 'rethink',\n 'retinal',\n 'retired',\n 'retiree',\n 'retiring',\n 'retold',\n 'retool',\n 'retorted',\n 'retouch',\n 'retrace',\n 'retract',\n 'retrain',\n 'retread',\n 'retreat',\n 'retrial',\n 'retrieval',\n 'retriever',\n 'retry',\n 'return',\n 'retying',\n 'retype',\n 'reunion',\n 'reunite',\n 'reusable',\n 'reuse',\n 'reveal',\n 'reveler',\n 'revenge',\n 'revenue',\n 'reverb',\n 'revered',\n 'reverence',\n 'reverend',\n 'reversal',\n 'reverse',\n 'reversing',\n 'reversion',\n 'revert',\n 'revisable',\n 'revise',\n 'revision',\n 'revisit',\n 'revivable',\n 'revival',\n 'reviver',\n 'reviving',\n 'revocable',\n 'revoke',\n 'revolt',\n 'revolver',\n 'revolving',\n 'reward',\n 'rewash',\n 'rewind',\n 'rewire',\n 'reword',\n 'rework',\n 'rewrap',\n 'rewrite',\n 'rhyme',\n 'ribbon',\n 'ribcage',\n 'rice',\n 'riches',\n 'richly',\n 'richness',\n 'rickety',\n 'ricotta',\n 'riddance',\n 'ridden',\n 'ride',\n 'riding',\n 'rifling',\n 'rift',\n 'rigging',\n 'rigid',\n 'rigor',\n 'rimless',\n 'rimmed',\n 'rind',\n 'rink',\n 'rinse',\n 'rinsing',\n 'riot',\n 'ripcord',\n 'ripeness',\n 'ripening',\n 'ripping',\n 'ripple',\n 'rippling',\n 'riptide',\n 'rise',\n 'rising',\n 'risk',\n 'risotto',\n 'ritalin',\n 'ritzy',\n 'rival',\n 'riverbank',\n 'riverbed',\n 'riverboat',\n 'riverside',\n 'riveter',\n 'riveting',\n 'roamer',\n 'roaming',\n 'roast',\n 'robbing',\n 'robe',\n 'robin',\n 'robotics',\n 'robust',\n 'rockband',\n 'rocker',\n 'rocket',\n 'rockfish',\n 'rockiness',\n 'rocking',\n 'rocklike',\n 'rockslide',\n 'rockstar',\n 'rocky',\n 'rogue',\n 'roman',\n 'romp',\n 'rope',\n 'roping',\n 'roster',\n 'rosy',\n 'rotten',\n 'rotting',\n 'rotunda',\n 'roulette',\n 'rounding',\n 'roundish',\n 'roundness',\n 'roundup',\n 'roundworm',\n 'routine',\n 'routing',\n 'rover',\n 'roving',\n 'royal',\n 'rubbed',\n 'rubber',\n 'rubbing',\n 'rubble',\n 'rubdown',\n 'ruby',\n 'ruckus',\n 'rudder',\n 'rug',\n 'ruined',\n 'rule',\n 'rumble',\n 'rumbling',\n 'rummage',\n 'rumor',\n 'runaround',\n 'rundown',\n 'runner',\n 'running',\n 'runny',\n 'runt',\n 'runway',\n 'rupture',\n 'rural',\n 'ruse',\n 'rush',\n 'rust',\n 'rut',\n 'sabbath',\n 'sabotage',\n 'sacrament',\n 'sacred',\n 'sacrifice',\n 'sadden',\n 'saddlebag',\n 'saddled',\n 'saddling',\n 'sadly',\n 'sadness',\n 'safari',\n 'safeguard',\n 'safehouse',\n 'safely',\n 'safeness',\n 'saffron',\n 'saga',\n 'sage',\n 'sagging',\n 'saggy',\n 'said',\n 'saint',\n 'sake',\n 'salad',\n 'salami',\n 'salaried',\n 'salary',\n 'saline',\n 'salon',\n 'saloon',\n 'salsa',\n 'salt',\n 'salutary',\n 'salute',\n 'salvage',\n 'salvaging',\n 'salvation',\n 'same',\n 'sample',\n 'sampling',\n 'sanction',\n 'sanctity',\n 'sanctuary',\n 'sandal',\n 'sandbag',\n 'sandbank',\n 'sandbar',\n 'sandblast',\n 'sandbox',\n 'sanded',\n 'sandfish',\n 'sanding',\n 'sandlot',\n 'sandpaper',\n 'sandpit',\n 'sandstone',\n 'sandstorm',\n 'sandworm',\n 'sandy',\n 'sanitary',\n 'sanitizer',\n 'sank',\n 'santa',\n 'sapling',\n 'sappiness',\n 'sappy',\n 'sarcasm',\n 'sarcastic',\n 'sardine',\n 'sash',\n 'sasquatch',\n 'sassy',\n 'satchel',\n 'satiable',\n 'satin',\n 'satirical',\n 'satisfied',\n 'satisfy',\n 'saturate',\n 'saturday',\n 'sauciness',\n 'saucy',\n 'sauna',\n 'savage',\n 'savanna',\n 'saved',\n 'savings',\n 'savior',\n 'savor',\n 'saxophone',\n 'say',\n 'scabbed',\n 'scabby',\n 'scalded',\n 'scalding',\n 'scale',\n 'scaling',\n 'scallion',\n 'scallop',\n 'scalping',\n 'scam',\n 'scandal',\n 'scanner',\n 'scanning',\n 'scant',\n 'scapegoat',\n 'scarce',\n 'scarcity',\n 'scarecrow',\n 'scared',\n 'scarf',\n 'scarily',\n 'scariness',\n 'scarring',\n 'scary',\n 'scavenger',\n 'scenic',\n 'schedule',\n 'schematic',\n 'scheme',\n 'scheming',\n 'schilling',\n 'schnapps',\n 'scholar',\n 'science',\n 'scientist',\n 'scion',\n 'scoff',\n 'scolding',\n 'scone',\n 'scoop',\n 'scooter',\n 'scope',\n 'scorch',\n 'scorebook',\n 'scorecard',\n 'scored',\n 'scoreless',\n 'scorer',\n 'scoring',\n 'scorn',\n 'scorpion',\n 'scotch',\n 'scoundrel',\n 'scoured',\n 'scouring',\n 'scouting',\n 'scouts',\n 'scowling',\n 'scrabble',\n 'scraggly',\n 'scrambled',\n 'scrambler',\n 'scrap',\n 'scratch',\n 'scrawny',\n 'screen',\n 'scribble',\n 'scribe',\n 'scribing',\n 'scrimmage',\n 'script',\n 'scroll',\n 'scrooge',\n 'scrounger',\n 'scrubbed',\n 'scrubber',\n 'scruffy',\n 'scrunch',\n 'scrutiny',\n 'scuba',\n 'scuff',\n 'sculptor',\n 'sculpture',\n 'scurvy',\n 'scuttle',\n 'secluded',\n 'secluding',\n 'seclusion',\n 'second',\n 'secrecy',\n 'secret',\n 'sectional',\n 'sector',\n 'secular',\n 'securely',\n 'security',\n 'sedan',\n 'sedate',\n 'sedation',\n 'sedative',\n 'sediment',\n 'seduce',\n 'seducing',\n 'segment',\n 'seismic',\n 'seizing',\n 'seldom',\n 'selected',\n 'selection',\n 'selective',\n 'selector',\n 'self',\n 'seltzer',\n 'semantic',\n 'semester',\n 'semicolon',\n 'semifinal',\n 'seminar',\n 'semisoft',\n 'semisweet',\n 'senate',\n 'senator',\n 'send',\n 'senior',\n 'senorita',\n 'sensation',\n 'sensitive',\n 'sensitize',\n 'sensually',\n 'sensuous',\n 'sepia',\n 'september',\n 'septic',\n 'septum',\n 'sequel',\n 'sequence',\n 'sequester',\n 'series',\n 'sermon',\n 'serotonin',\n 'serpent',\n 'serrated',\n 'serve',\n 'service',\n 'serving',\n 'sesame',\n 'sessions',\n 'setback',\n 'setting',\n 'settle',\n 'settling',\n 'setup',\n 'sevenfold',\n 'seventeen',\n 'seventh',\n 'seventy',\n 'severity',\n 'shabby',\n 'shack',\n 'shaded',\n 'shadily',\n 'shadiness',\n 'shading',\n 'shadow',\n 'shady',\n 'shaft',\n 'shakable',\n 'shakily',\n 'shakiness',\n 'shaking',\n 'shaky',\n 'shale',\n 'shallot',\n 'shallow',\n 'shame',\n 'shampoo',\n 'shamrock',\n 'shank',\n 'shanty',\n 'shape',\n 'shaping',\n 'share',\n 'sharpener',\n 'sharper',\n 'sharpie',\n 'sharply',\n 'sharpness',\n 'shawl',\n 'sheath',\n 'shed',\n 'sheep',\n 'sheet',\n 'shelf',\n 'shell',\n 'shelter',\n 'shelve',\n 'shelving',\n 'sherry',\n 'shield',\n 'shifter',\n 'shifting',\n 'shiftless',\n 'shifty',\n 'shimmer',\n 'shimmy',\n 'shindig',\n 'shine',\n 'shingle',\n 'shininess',\n 'shining',\n 'shiny',\n 'ship',\n 'shirt',\n 'shivering',\n 'shock',\n 'shone',\n 'shoplift',\n 'shopper',\n 'shopping',\n 'shoptalk',\n 'shore',\n 'shortage',\n 'shortcake',\n 'shortcut',\n 'shorten',\n 'shorter',\n 'shorthand',\n 'shortlist',\n 'shortly',\n 'shortness',\n 'shorts',\n 'shortwave',\n 'shorty',\n 'shout',\n 'shove',\n 'showbiz',\n 'showcase',\n 'showdown',\n 'shower',\n 'showgirl',\n 'showing',\n 'showman',\n 'shown',\n 'showoff',\n 'showpiece',\n 'showplace',\n 'showroom',\n 'showy',\n 'shrank',\n 'shrapnel',\n 'shredder',\n 'shredding',\n 'shrewdly',\n 'shriek',\n 'shrill',\n 'shrimp',\n 'shrine',\n 'shrink',\n 'shrivel',\n 'shrouded',\n 'shrubbery',\n 'shrubs',\n 'shrug',\n 'shrunk',\n 'shucking',\n 'shudder',\n 'shuffle',\n 'shuffling',\n 'shun',\n 'shush',\n 'shut',\n 'shy',\n 'siamese',\n 'siberian',\n 'sibling',\n 'siding',\n 'sierra',\n 'siesta',\n 'sift',\n 'sighing',\n 'silenced',\n 'silencer',\n 'silent',\n 'silica',\n 'silicon',\n 'silk',\n 'silliness',\n 'silly',\n 'silo',\n 'silt',\n 'silver',\n 'similarly',\n 'simile',\n 'simmering',\n 'simple',\n 'simplify',\n 'simply',\n 'sincere',\n 'sincerity',\n 'singer',\n 'singing',\n 'single',\n 'singular',\n 'sinister',\n 'sinless',\n 'sinner',\n 'sinuous',\n 'sip',\n 'siren',\n 'sister',\n 'sitcom',\n 'sitter',\n 'sitting',\n 'situated',\n 'situation',\n 'sixfold',\n 'sixteen',\n 'sixth',\n 'sixties',\n 'sixtieth',\n 'sixtyfold',\n 'sizable',\n 'sizably',\n 'size',\n 'sizing',\n 'sizzle',\n 'sizzling',\n 'skater',\n 'skating',\n 'skedaddle',\n 'skeletal',\n 'skeleton',\n 'skeptic',\n 'sketch',\n 'skewed',\n 'skewer',\n 'skid',\n 'skied',\n 'skier',\n 'skies',\n 'skiing',\n 'skilled',\n 'skillet',\n 'skillful',\n 'skimmed',\n 'skimmer',\n 'skimming',\n 'skimpily',\n 'skincare',\n 'skinhead',\n 'skinless',\n 'skinning',\n 'skinny',\n 'skintight',\n 'skipper',\n 'skipping',\n 'skirmish',\n 'skirt',\n 'skittle',\n 'skydiver',\n 'skylight',\n 'skyline',\n 'skype',\n 'skyrocket',\n 'skyward',\n 'slab',\n 'slacked',\n 'slacker',\n 'slacking',\n 'slackness',\n 'slacks',\n 'slain',\n 'slam',\n 'slander',\n 'slang',\n 'slapping',\n 'slapstick',\n 'slashed',\n 'slashing',\n 'slate',\n 'slather',\n 'slaw',\n 'sled',\n 'sleek',\n 'sleep',\n 'sleet',\n 'sleeve',\n 'slept',\n 'sliceable',\n 'sliced',\n 'slicer',\n 'slicing',\n 'slick',\n 'slider',\n 'slideshow',\n 'sliding',\n 'slighted',\n 'slighting',\n 'slightly',\n 'slimness',\n 'slimy',\n 'slinging',\n 'slingshot',\n 'slinky',\n 'slip',\n 'slit',\n 'sliver',\n 'slobbery',\n 'slogan',\n 'sloped',\n 'sloping',\n 'sloppily',\n 'sloppy',\n 'slot',\n 'slouching',\n 'slouchy',\n 'sludge',\n 'slug',\n 'slum',\n 'slurp',\n 'slush',\n 'sly',\n 'small',\n 'smartly',\n 'smartness',\n 'smasher',\n 'smashing',\n 'smashup',\n 'smell',\n 'smelting',\n 'smile',\n 'smilingly',\n 'smirk',\n 'smite',\n 'smith',\n 'smitten',\n 'smock',\n 'smog',\n 'smoked',\n 'smokeless',\n 'smokiness',\n 'smoking',\n 'smoky',\n 'smolder',\n 'smooth',\n 'smother',\n 'smudge',\n 'smudgy',\n 'smuggler',\n 'smuggling',\n 'smugly',\n 'smugness',\n 'snack',\n 'snagged',\n 'snaking',\n 'snap',\n 'snare',\n 'snarl',\n 'snazzy',\n 'sneak',\n 'sneer',\n 'sneeze',\n 'sneezing',\n 'snide',\n 'sniff',\n 'snippet',\n 'snipping',\n 'snitch',\n 'snooper',\n 'snooze',\n 'snore',\n 'snoring',\n 'snorkel',\n 'snort',\n 'snout',\n 'snowbird',\n 'snowboard',\n 'snowbound',\n 'snowcap',\n 'snowdrift',\n 'snowdrop',\n 'snowfall',\n 'snowfield',\n 'snowflake',\n 'snowiness',\n 'snowless',\n 'snowman',\n 'snowplow',\n 'snowshoe',\n 'snowstorm',\n 'snowsuit',\n 'snowy',\n 'snub',\n 'snuff',\n 'snuggle',\n 'snugly',\n 'snugness',\n 'speak',\n 'spearfish',\n 'spearhead',\n 'spearman',\n 'spearmint',\n 'species',\n 'specimen',\n 'specked',\n 'speckled',\n 'specks',\n 'spectacle',\n 'spectator',\n 'spectrum',\n 'speculate',\n 'speech',\n 'speed',\n 'spellbind',\n 'speller',\n 'spelling',\n 'spendable',\n 'spender',\n 'spending',\n 'spent',\n 'spew',\n 'sphere',\n 'spherical',\n 'sphinx',\n 'spider',\n 'spied',\n 'spiffy',\n 'spill',\n 'spilt',\n 'spinach',\n 'spinal',\n 'spindle',\n 'spinner',\n 'spinning',\n 'spinout',\n 'spinster',\n 'spiny',\n 'spiral',\n 'spirited',\n 'spiritism',\n 'spirits',\n 'spiritual',\n 'splashed',\n 'splashing',\n 'splashy',\n 'splatter',\n 'spleen',\n 'splendid',\n 'splendor',\n 'splice',\n 'splicing',\n 'splinter',\n 'splotchy',\n 'splurge',\n 'spoilage',\n 'spoiled',\n 'spoiler',\n 'spoiling',\n 'spoils',\n 'spoken',\n 'spokesman',\n 'sponge',\n 'spongy',\n 'sponsor',\n 'spoof',\n 'spookily',\n 'spooky',\n 'spool',\n 'spoon',\n 'spore',\n 'sporting',\n 'sports',\n 'sporty',\n 'spotless',\n 'spotlight',\n 'spotted',\n 'spotter',\n 'spotting',\n 'spotty',\n 'spousal',\n 'spouse',\n 'spout',\n 'sprain',\n 'sprang',\n 'sprawl',\n 'spray',\n 'spree',\n 'sprig',\n 'spring',\n 'sprinkled',\n 'sprinkler',\n 'sprint',\n 'sprite',\n 'sprout',\n 'spruce',\n 'sprung',\n 'spry',\n 'spud',\n 'spur',\n 'sputter',\n 'spyglass',\n 'squabble',\n 'squad',\n 'squall',\n 'squander',\n 'squash',\n 'squatted',\n 'squatter',\n 'squatting',\n 'squeak',\n 'squealer',\n 'squealing',\n 'squeamish',\n 'squeegee',\n 'squeeze',\n 'squeezing',\n 'squid',\n 'squiggle',\n 'squiggly',\n 'squint',\n 'squire',\n 'squirt',\n 'squishier',\n 'squishy',\n 'stability',\n 'stabilize',\n 'stable',\n 'stack',\n 'stadium',\n 'staff',\n 'stage',\n 'staging',\n 'stagnant',\n 'stagnate',\n 'stainable',\n 'stained',\n 'staining',\n 'stainless',\n 'stalemate',\n 'staleness',\n 'stalling',\n 'stallion',\n 'stamina',\n 'stammer',\n 'stamp',\n 'stand',\n 'stank',\n 'staple',\n 'stapling',\n 'starboard',\n 'starch',\n 'stardom',\n 'stardust',\n 'starfish',\n 'stargazer',\n 'staring',\n 'stark',\n 'starless',\n 'starlet',\n 'starlight',\n 'starlit',\n 'starring',\n 'starry',\n 'starship',\n 'starter',\n 'starting',\n 'startle',\n 'startling',\n 'startup',\n 'starved',\n 'starving',\n 'stash',\n 'state',\n 'static',\n 'statistic',\n 'statue',\n 'stature',\n 'status',\n 'statute',\n 'statutory',\n 'staunch',\n 'stays',\n 'steadfast',\n 'steadier',\n 'steadily',\n 'steadying',\n 'steam',\n 'steed',\n 'steep',\n 'steerable',\n 'steering',\n 'steersman',\n 'stegosaur',\n 'stellar',\n 'stem',\n 'stench',\n 'stencil',\n 'step',\n 'stereo',\n 'sterile',\n 'sterility',\n 'sterilize',\n 'sterling',\n 'sternness',\n 'sternum',\n 'stew',\n 'stick',\n 'stiffen',\n 'stiffly',\n 'stiffness',\n 'stifle',\n 'stifling',\n 'stillness',\n 'stilt',\n 'stimulant',\n 'stimulate',\n 'stimuli',\n 'stimulus',\n 'stinger',\n 'stingily',\n 'stinging',\n 'stingray',\n 'stingy',\n 'stinking',\n 'stinky',\n 'stipend',\n 'stipulate',\n 'stir',\n 'stitch',\n 'stock',\n 'stoic',\n 'stoke',\n 'stole',\n 'stomp',\n 'stonewall',\n 'stoneware',\n 'stonework',\n 'stoning',\n 'stony',\n 'stood',\n 'stooge',\n 'stool',\n 'stoop',\n 'stoplight',\n 'stoppable',\n 'stoppage',\n 'stopped',\n 'stopper',\n 'stopping',\n 'stopwatch',\n 'storable',\n 'storage',\n 'storeroom',\n 'storewide',\n 'storm',\n 'stout',\n 'stove',\n 'stowaway',\n 'stowing',\n 'straddle',\n 'straggler',\n 'strained',\n 'strainer',\n 'straining',\n 'strangely',\n 'stranger',\n 'strangle',\n 'strategic',\n 'strategy',\n 'stratus',\n 'straw',\n 'stray',\n 'streak',\n 'stream',\n 'street',\n 'strength',\n 'strenuous',\n 'strep',\n 'stress',\n 'stretch',\n 'strewn',\n 'stricken',\n 'strict',\n 'stride',\n 'strife',\n 'strike',\n 'striking',\n 'strive',\n 'striving',\n 'strobe',\n 'strode',\n 'stroller',\n 'strongbox',\n 'strongly',\n 'strongman',\n 'struck',\n 'structure',\n 'strudel',\n 'struggle',\n 'strum',\n 'strung',\n 'strut',\n 'stubbed',\n 'stubble',\n 'stubbly',\n 'stubborn',\n 'stucco',\n 'stuck',\n 'student',\n 'studied',\n 'studio',\n 'study',\n 'stuffed',\n 'stuffing',\n 'stuffy',\n 'stumble',\n 'stumbling',\n 'stump',\n 'stung',\n 'stunned',\n 'stunner',\n 'stunning',\n 'stunt',\n 'stupor',\n 'sturdily',\n 'sturdy',\n 'styling',\n 'stylishly',\n 'stylist',\n 'stylized',\n 'stylus',\n 'suave',\n 'subarctic',\n 'subatomic',\n 'subdivide',\n 'subdued',\n 'subduing',\n 'subfloor',\n 'subgroup',\n 'subheader',\n 'subject',\n 'sublease',\n 'sublet',\n 'sublevel',\n 'sublime',\n 'submarine',\n 'submerge',\n 'submersed',\n 'submitter',\n 'subpanel',\n 'subpar',\n 'subplot',\n 'subprime',\n 'subscribe',\n 'subscript',\n 'subsector',\n 'subside',\n 'subsiding',\n 'subsidize',\n 'subsidy',\n 'subsoil',\n 'subsonic',\n 'substance',\n 'subsystem',\n 'subtext',\n 'subtitle',\n 'subtly',\n 'subtotal',\n 'subtract',\n 'subtype',\n 'suburb',\n 'subway',\n 'subwoofer',\n 'subzero',\n 'succulent',\n 'such',\n 'suction',\n 'sudden',\n 'sudoku',\n 'suds',\n 'sufferer',\n 'suffering',\n 'suffice',\n 'suffix',\n 'suffocate',\n 'suffrage',\n 'sugar',\n 'suggest',\n 'suing',\n 'suitable',\n 'suitably',\n 'suitcase',\n 'suitor',\n 'sulfate',\n 'sulfide',\n 'sulfite',\n 'sulfur',\n 'sulk',\n 'sullen',\n 'sulphate',\n 'sulphuric',\n 'sultry',\n 'superbowl',\n 'superglue',\n 'superhero',\n 'superior',\n 'superjet',\n 'superman',\n 'supermom',\n 'supernova',\n 'supervise',\n 'supper',\n 'supplier',\n 'supply',\n 'support',\n 'supremacy',\n 'supreme',\n 'surcharge',\n 'surely',\n 'sureness',\n 'surface',\n 'surfacing',\n 'surfboard',\n 'surfer',\n 'surgery',\n 'surgical',\n 'surging',\n 'surname',\n 'surpass',\n 'surplus',\n 'surprise',\n 'surreal',\n 'surrender',\n 'surrogate',\n 'surround',\n 'survey',\n 'survival',\n 'survive',\n 'surviving',\n 'survivor',\n 'sushi',\n 'suspect',\n 'suspend',\n 'suspense',\n 'sustained',\n 'sustainer',\n 'swab',\n 'swaddling',\n 'swagger',\n 'swampland',\n 'swan',\n 'swapping',\n 'swarm',\n 'sway',\n 'swear',\n 'sweat',\n 'sweep',\n 'swell',\n 'swept',\n 'swerve',\n 'swifter',\n 'swiftly',\n 'swiftness',\n 'swimmable',\n 'swimmer',\n 'swimming',\n 'swimsuit',\n 'swimwear',\n 'swinger',\n 'swinging',\n 'swipe',\n 'swirl',\n 'switch',\n 'swivel',\n 'swizzle',\n 'swooned',\n 'swoop',\n 'swoosh',\n 'swore',\n 'sworn',\n 'swung',\n 'sycamore',\n 'sympathy',\n 'symphonic',\n 'symphony',\n 'symptom',\n 'synapse',\n 'syndrome',\n 'synergy',\n 'synopses',\n 'synopsis',\n 'synthesis',\n 'synthetic',\n 'syrup',\n 'system',\n 't-shirt',\n 'tabasco',\n 'tabby',\n 'tableful',\n 'tables',\n 'tablet',\n 'tableware',\n 'tabloid',\n 'tackiness',\n 'tacking',\n 'tackle',\n 'tackling',\n 'tacky',\n 'taco',\n 'tactful',\n 'tactical',\n 'tactics',\n 'tactile',\n 'tactless',\n 'tadpole',\n 'taekwondo',\n 'tag',\n 'tainted',\n 'take',\n 'taking',\n 'talcum',\n 'talisman',\n 'tall',\n 'talon',\n 'tamale',\n 'tameness',\n 'tamer',\n 'tamper',\n 'tank',\n 'tanned',\n 'tannery',\n 'tanning',\n 'tantrum',\n 'tapeless',\n 'tapered',\n 'tapering',\n 'tapestry',\n 'tapioca',\n 'tapping',\n 'taps',\n 'tarantula',\n 'target',\n 'tarmac',\n 'tarnish',\n 'tarot',\n 'tartar',\n 'tartly',\n 'tartness',\n 'task',\n 'tassel',\n 'taste',\n 'tastiness',\n 'tasting',\n 'tasty',\n 'tattered',\n 'tattle',\n 'tattling',\n 'tattoo',\n 'taunt',\n 'tavern',\n 'thank',\n 'that',\n 'thaw',\n 'theater',\n 'theatrics',\n 'thee',\n 'theft',\n 'theme',\n 'theology',\n 'theorize',\n 'thermal',\n 'thermos',\n 'thesaurus',\n 'these',\n 'thesis',\n 'thespian',\n 'thicken',\n 'thicket',\n 'thickness',\n 'thieving',\n 'thievish',\n 'thigh',\n 'thimble',\n 'thing',\n 'think',\n 'thinly',\n 'thinner',\n 'thinness',\n 'thinning',\n 'thirstily',\n 'thirsting',\n 'thirsty',\n 'thirteen',\n 'thirty',\n 'thong',\n 'thorn',\n 'those',\n 'thousand',\n 'thrash',\n 'thread',\n 'threaten',\n 'threefold',\n 'thrift',\n 'thrill',\n 'thrive',\n 'thriving',\n 'throat',\n 'throbbing',\n 'throng',\n 'throttle',\n 'throwaway',\n 'throwback',\n 'thrower',\n 'throwing',\n 'thud',\n 'thumb',\n 'thumping',\n 'thursday',\n 'thus',\n 'thwarting',\n 'thyself',\n 'tiara',\n 'tibia',\n 'tidal',\n 'tidbit',\n 'tidiness',\n 'tidings',\n 'tidy',\n 'tiger',\n 'tighten',\n 'tightly',\n 'tightness',\n 'tightrope',\n 'tightwad',\n 'tigress',\n 'tile',\n 'tiling',\n 'till',\n 'tilt',\n 'timid',\n 'timing',\n 'timothy',\n 'tinderbox',\n 'tinfoil',\n 'tingle',\n 'tingling',\n 'tingly',\n 'tinker',\n 'tinkling',\n 'tinsel',\n 'tinsmith',\n 'tint',\n 'tinwork',\n 'tiny',\n 'tipoff',\n 'tipped',\n 'tipper',\n 'tipping',\n 'tiptoeing',\n 'tiptop',\n 'tiring',\n 'tissue',\n 'trace',\n 'tracing',\n 'track',\n 'traction',\n 'tractor',\n 'trade',\n 'trading',\n 'tradition',\n 'traffic',\n 'tragedy',\n 'trailing',\n 'trailside',\n 'train',\n 'traitor',\n 'trance',\n 'tranquil',\n 'transfer',\n 'transform',\n 'translate',\n 'transpire',\n 'transport',\n 'transpose',\n 'trapdoor',\n 'trapeze',\n 'trapezoid',\n 'trapped',\n 'trapper',\n 'trapping',\n 'traps',\n 'trash',\n 'travel',\n 'traverse',\n 'travesty',\n 'tray',\n 'treachery',\n 'treading',\n 'treadmill',\n 'treason',\n 'treat',\n 'treble',\n 'tree',\n 'trekker',\n 'tremble',\n 'trembling',\n 'tremor',\n 'trench',\n 'trend',\n 'trespass',\n 'triage',\n 'trial',\n 'triangle',\n 'tribesman',\n 'tribunal',\n 'tribune',\n 'tributary',\n 'tribute',\n 'triceps',\n 'trickery',\n 'trickily',\n 'tricking',\n 'trickle',\n 'trickster',\n 'tricky',\n 'tricolor',\n 'tricycle',\n 'trident',\n 'tried',\n 'trifle',\n 'trifocals',\n 'trillion',\n 'trilogy',\n 'trimester',\n 'trimmer',\n 'trimming',\n 'trimness',\n 'trinity',\n 'trio',\n 'tripod',\n 'tripping',\n 'triumph',\n 'trivial',\n 'trodden',\n 'trolling',\n 'trombone',\n 'trophy',\n 'tropical',\n 'tropics',\n 'trouble',\n 'troubling',\n 'trough',\n 'trousers',\n 'trout',\n 'trowel',\n 'truce',\n 'truck',\n 'truffle',\n 'trump',\n 'trunks',\n 'trustable',\n 'trustee',\n 'trustful',\n 'trusting',\n 'trustless',\n 'truth',\n 'try',\n 'tubby',\n 'tubeless',\n 'tubular',\n 'tucking',\n 'tuesday',\n 'tug',\n 'tuition',\n 'tulip',\n 'tumble',\n 'tumbling',\n 'tummy',\n 'turban',\n 'turbine',\n 'turbofan',\n 'turbojet',\n 'turbulent',\n 'turf',\n 'turkey',\n 'turmoil',\n 'turret',\n 'turtle',\n 'tusk',\n 'tutor',\n 'tutu',\n 'tux',\n 'tweak',\n 'tweed',\n 'tweet',\n 'tweezers',\n 'twelve',\n 'twentieth',\n 'twenty',\n 'twerp',\n 'twice',\n 'twiddle',\n 'twiddling',\n 'twig',\n 'twilight',\n 'twine',\n 'twins',\n 'twirl',\n 'twistable',\n 'twisted',\n 'twister',\n 'twisting',\n 'twisty',\n 'twitch',\n 'twitter',\n 'tycoon',\n 'tying',\n 'tyke',\n 'udder',\n 'ultimate',\n 'ultimatum',\n 'ultra',\n 'umbilical',\n 'umbrella',\n 'umpire',\n 'unabashed',\n 'unable',\n 'unadorned',\n 'unadvised',\n 'unafraid',\n 'unaired',\n 'unaligned',\n 'unaltered',\n 'unarmored',\n 'unashamed',\n 'unaudited',\n 'unawake',\n 'unaware',\n 'unbaked',\n 'unbalance',\n 'unbeaten',\n 'unbend',\n 'unbent',\n 'unbiased',\n 'unbitten',\n 'unblended',\n 'unblessed',\n 'unblock',\n 'unbolted',\n 'unbounded',\n 'unboxed',\n 'unbraided',\n 'unbridle',\n 'unbroken',\n 'unbuckled',\n 'unbundle',\n 'unburned',\n 'unbutton',\n 'uncanny',\n 'uncapped',\n 'uncaring',\n 'uncertain',\n 'unchain',\n 'unchanged',\n 'uncharted',\n 'uncheck',\n 'uncivil',\n 'unclad',\n 'unclaimed',\n 'unclamped',\n 'unclasp',\n 'uncle',\n 'unclip',\n 'uncloak',\n 'unclog',\n 'unclothed',\n 'uncoated',\n 'uncoiled',\n 'uncolored',\n 'uncombed',\n 'uncommon',\n 'uncooked',\n 'uncork',\n 'uncorrupt',\n 'uncounted',\n 'uncouple',\n 'uncouth',\n 'uncover',\n 'uncross',\n 'uncrown',\n 'uncrushed',\n 'uncured',\n 'uncurious',\n 'uncurled',\n 'uncut',\n 'undamaged',\n 'undated',\n 'undaunted',\n 'undead',\n 'undecided',\n 'undefined',\n 'underage',\n 'underarm',\n 'undercoat',\n 'undercook',\n 'undercut',\n 'underdog',\n 'underdone',\n 'underfed',\n 'underfeed',\n 'underfoot',\n 'undergo',\n 'undergrad',\n 'underhand',\n 'underline',\n 'underling',\n 'undermine',\n 'undermost',\n 'underpaid',\n 'underpass',\n 'underpay',\n 'underrate',\n 'undertake',\n 'undertone',\n 'undertook',\n 'undertow',\n 'underuse',\n 'underwear',\n 'underwent',\n 'underwire',\n 'undesired',\n 'undiluted',\n 'undivided',\n 'undocked',\n 'undoing',\n 'undone',\n 'undrafted',\n 'undress',\n 'undrilled',\n 'undusted',\n 'undying',\n 'unearned',\n 'unearth',\n 'unease',\n 'uneasily',\n 'uneasy',\n 'uneatable',\n 'uneaten',\n 'unedited',\n 'unelected',\n 'unending',\n 'unengaged',\n 'unenvied',\n 'unequal',\n 'unethical',\n 'uneven',\n 'unexpired',\n 'unexposed',\n 'unfailing',\n 'unfair',\n 'unfasten',\n 'unfazed',\n 'unfeeling',\n 'unfiled',\n 'unfilled',\n 'unfitted',\n 'unfitting',\n 'unfixable',\n 'unfixed',\n 'unflawed',\n 'unfocused',\n 'unfold',\n 'unfounded',\n 'unframed',\n 'unfreeze',\n 'unfrosted',\n 'unfrozen',\n 'unfunded',\n 'unglazed',\n 'ungloved',\n 'unglue',\n 'ungodly',\n 'ungraded',\n 'ungreased',\n 'unguarded',\n 'unguided',\n 'unhappily',\n 'unhappy',\n 'unharmed',\n 'unhealthy',\n 'unheard',\n 'unhearing',\n 'unheated',\n 'unhelpful',\n 'unhidden',\n 'unhinge',\n 'unhitched',\n 'unholy',\n 'unhook',\n 'unicorn',\n 'unicycle',\n 'unified',\n 'unifier',\n 'uniformed',\n 'uniformly',\n 'unify',\n 'unimpeded',\n 'uninjured',\n 'uninstall',\n 'uninsured',\n 'uninvited',\n 'union',\n 'uniquely',\n 'unisexual',\n 'unison',\n 'unissued',\n 'unit',\n 'universal',\n 'universe',\n 'unjustly',\n 'unkempt',\n 'unkind',\n 'unknotted',\n 'unknowing',\n 'unknown',\n 'unlaced',\n 'unlatch',\n 'unlawful',\n 'unleaded',\n 'unlearned',\n 'unleash',\n 'unless',\n 'unleveled',\n 'unlighted',\n 'unlikable',\n 'unlimited',\n 'unlined',\n 'unlinked',\n 'unlisted',\n 'unlit',\n 'unlivable',\n 'unloaded',\n 'unloader',\n 'unlocked',\n 'unlocking',\n 'unlovable',\n 'unloved',\n 'unlovely',\n 'unloving',\n 'unluckily',\n 'unlucky',\n 'unmade',\n 'unmanaged',\n 'unmanned',\n 'unmapped',\n 'unmarked',\n 'unmasked',\n 'unmasking',\n 'unmatched',\n 'unmindful',\n 'unmixable',\n 'unmixed',\n 'unmolded',\n 'unmoral',\n 'unmovable',\n 'unmoved',\n 'unmoving',\n 'unnamable',\n 'unnamed',\n 'unnatural',\n 'unneeded',\n 'unnerve',\n 'unnerving',\n 'unnoticed',\n 'unopened',\n 'unopposed',\n 'unpack',\n 'unpadded',\n 'unpaid',\n 'unpainted',\n 'unpaired',\n 'unpaved',\n 'unpeeled',\n 'unpicked',\n 'unpiloted',\n 'unpinned',\n 'unplanned',\n 'unplanted',\n 'unpleased',\n 'unpledged',\n 'unplowed',\n 'unplug',\n 'unpopular',\n 'unproven',\n 'unquote',\n 'unranked',\n 'unrated',\n 'unraveled',\n 'unreached',\n 'unread',\n 'unreal',\n 'unreeling',\n 'unrefined',\n 'unrelated',\n 'unrented',\n 'unrest',\n 'unretired',\n 'unrevised',\n 'unrigged',\n 'unripe',\n 'unrivaled',\n 'unroasted',\n 'unrobed',\n 'unroll',\n 'unruffled',\n 'unruly',\n 'unrushed',\n 'unsaddle',\n 'unsafe',\n 'unsaid',\n 'unsalted',\n 'unsaved',\n 'unsavory',\n 'unscathed',\n 'unscented',\n 'unscrew',\n 'unsealed',\n 'unseated',\n 'unsecured',\n 'unseeing',\n 'unseemly',\n 'unseen',\n 'unselect',\n 'unselfish',\n 'unsent',\n 'unsettled',\n 'unshackle',\n 'unshaken',\n 'unshaved',\n 'unshaven',\n 'unsheathe',\n 'unshipped',\n 'unsightly',\n 'unsigned',\n 'unskilled',\n 'unsliced',\n 'unsmooth',\n 'unsnap',\n 'unsocial',\n 'unsoiled',\n 'unsold',\n 'unsolved',\n 'unsorted',\n 'unspoiled',\n 'unspoken',\n 'unstable',\n 'unstaffed',\n 'unstamped',\n 'unsteady',\n 'unsterile',\n 'unstirred',\n 'unstitch',\n 'unstopped',\n 'unstuck',\n 'unstuffed',\n 'unstylish',\n 'unsubtle',\n 'unsubtly',\n 'unsuited',\n 'unsure',\n 'unsworn',\n 'untagged',\n 'untainted',\n 'untaken',\n 'untamed',\n 'untangled',\n 'untapped',\n 'untaxed',\n 'unthawed',\n 'unthread',\n 'untidy',\n 'untie',\n 'until',\n 'untimed',\n 'untimely',\n 'untitled',\n 'untoasted',\n 'untold',\n 'untouched',\n 'untracked',\n 'untrained',\n 'untreated',\n 'untried',\n 'untrimmed',\n 'untrue',\n 'untruth',\n 'unturned',\n 'untwist',\n 'untying',\n 'unusable',\n 'unused',\n 'unusual',\n 'unvalued',\n 'unvaried',\n 'unvarying',\n 'unveiled',\n 'unveiling',\n 'unvented',\n 'unviable',\n 'unvisited',\n 'unvocal',\n 'unwanted',\n 'unwarlike',\n 'unwary',\n 'unwashed',\n 'unwatched',\n 'unweave',\n 'unwed',\n 'unwelcome',\n 'unwell',\n 'unwieldy',\n 'unwilling',\n 'unwind',\n 'unwired',\n 'unwitting',\n 'unwomanly',\n 'unworldly',\n 'unworn',\n 'unworried',\n 'unworthy',\n 'unwound',\n 'unwoven',\n 'unwrapped',\n 'unwritten',\n 'unzip',\n 'upbeat',\n 'upchuck',\n 'upcoming',\n 'upcountry',\n 'update',\n 'upfront',\n 'upgrade',\n 'upheaval',\n 'upheld',\n 'uphill',\n 'uphold',\n 'uplifted',\n 'uplifting',\n 'upload',\n 'upon',\n 'upper',\n 'upright',\n 'uprising',\n 'upriver',\n 'uproar',\n 'uproot',\n 'upscale',\n 'upside',\n 'upstage',\n 'upstairs',\n 'upstart',\n 'upstate',\n 'upstream',\n 'upstroke',\n 'upswing',\n 'uptake',\n 'uptight',\n 'uptown',\n 'upturned',\n 'upward',\n 'upwind',\n 'uranium',\n 'urban',\n 'urchin',\n 'urethane',\n 'urgency',\n 'urgent',\n 'urging',\n 'urologist',\n 'urology',\n 'usable',\n 'usage',\n 'useable',\n 'used',\n 'uselessly',\n 'user',\n 'usher',\n 'usual',\n 'utensil',\n 'utility',\n 'utilize',\n 'utmost',\n 'utopia',\n 'utter',\n 'vacancy',\n 'vacant',\n 'vacate',\n 'vacation',\n 'vagabond',\n 'vagrancy',\n 'vagrantly',\n 'vaguely',\n 'vagueness',\n 'valiant',\n 'valid',\n 'valium',\n 'valley',\n 'valuables',\n 'value',\n 'vanilla',\n 'vanish',\n 'vanity',\n 'vanquish',\n 'vantage',\n 'vaporizer',\n 'variable',\n 'variably',\n 'varied',\n 'variety',\n 'various',\n 'varmint',\n 'varnish',\n 'varsity',\n 'varying',\n 'vascular',\n 'vaseline',\n 'vastly',\n 'vastness',\n 'veal',\n 'vegan',\n 'veggie',\n 'vehicular',\n 'velcro',\n 'velocity',\n 'velvet',\n 'vendetta',\n 'vending',\n 'vendor',\n 'veneering',\n 'vengeful',\n 'venomous',\n 'ventricle',\n 'venture',\n 'venue',\n 'venus',\n 'verbalize',\n 'verbally',\n 'verbose',\n 'verdict',\n 'verify',\n 'verse',\n 'version',\n 'versus',\n 'vertebrae',\n 'vertical',\n 'vertigo',\n 'very',\n 'vessel',\n 'vest',\n 'veteran',\n 'veto',\n 'vexingly',\n 'viability',\n 'viable',\n 'vibes',\n 'vice',\n 'vicinity',\n 'victory',\n 'video',\n 'viewable',\n 'viewer',\n 'viewing',\n 'viewless',\n 'viewpoint',\n 'vigorous',\n 'village',\n 'villain',\n 'vindicate',\n 'vineyard',\n 'vintage',\n 'violate',\n 'violation',\n 'violator',\n 'violet',\n 'violin',\n 'viper',\n 'viral',\n 'virtual',\n 'virtuous',\n 'virus',\n 'visa',\n 'viscosity',\n 'viscous',\n 'viselike',\n 'visible',\n 'visibly',\n 'vision',\n 'visiting',\n 'visitor',\n 'visor',\n 'vista',\n 'vitality',\n 'vitalize',\n 'vitally',\n 'vitamins',\n 'vivacious',\n 'vividly',\n 'vividness',\n 'vixen',\n 'vocalist',\n 'vocalize',\n 'vocally',\n 'vocation',\n 'voice',\n 'voicing',\n 'void',\n 'volatile',\n 'volley',\n 'voltage',\n 'volumes',\n 'voter',\n 'voting',\n 'voucher',\n 'vowed',\n 'vowel',\n 'voyage',\n 'wackiness',\n 'wad',\n 'wafer',\n 'waffle',\n 'waged',\n 'wager',\n 'wages',\n 'waggle',\n 'wagon',\n 'wake',\n 'waking',\n 'walk',\n 'walmart',\n 'walnut',\n 'walrus',\n 'waltz',\n 'wand',\n 'wannabe',\n 'wanted',\n 'wanting',\n 'wasabi',\n 'washable',\n 'washbasin',\n 'washboard',\n 'washbowl',\n 'washcloth',\n 'washday',\n 'washed',\n 'washer',\n 'washhouse',\n 'washing',\n 'washout',\n 'washroom',\n 'washstand',\n 'washtub',\n 'wasp',\n 'wasting',\n 'watch',\n 'water',\n 'waviness',\n 'waving',\n 'wavy',\n 'whacking',\n 'whacky',\n 'wham',\n 'wharf',\n 'wheat',\n 'whenever',\n 'whiff',\n 'whimsical',\n 'whinny',\n 'whiny',\n 'whisking',\n 'whoever',\n 'whole',\n 'whomever',\n 'whoopee',\n 'whooping',\n 'whoops',\n 'why',\n 'wick',\n 'widely',\n 'widen',\n 'widget',\n 'widow',\n 'width',\n 'wieldable',\n 'wielder',\n 'wife',\n 'wifi',\n 'wikipedia',\n 'wildcard',\n 'wildcat',\n 'wilder',\n 'wildfire',\n 'wildfowl',\n 'wildland',\n 'wildlife',\n 'wildly',\n 'wildness',\n 'willed',\n 'willfully',\n 'willing',\n 'willow',\n 'willpower',\n 'wilt',\n 'wimp',\n 'wince',\n 'wincing',\n 'wind',\n 'wing',\n 'winking',\n 'winner',\n 'winnings',\n 'winter',\n 'wipe',\n 'wired',\n 'wireless',\n 'wiring',\n 'wiry',\n 'wisdom',\n 'wise',\n 'wish',\n 'wisplike',\n 'wispy',\n 'wistful',\n 'wizard',\n 'wobble',\n 'wobbling',\n 'wobbly',\n 'wok',\n 'wolf',\n 'wolverine',\n 'womanhood',\n 'womankind',\n 'womanless',\n 'womanlike',\n 'womanly',\n 'womb',\n 'woof',\n 'wooing',\n 'wool',\n 'woozy',\n 'word',\n 'work',\n 'worried',\n 'worrier',\n 'worrisome',\n 'worry',\n 'worsening',\n 'worshiper',\n 'worst',\n 'wound',\n 'woven',\n 'wow',\n 'wrangle',\n 'wrath',\n 'wreath',\n 'wreckage',\n 'wrecker',\n 'wrecking',\n 'wrench',\n 'wriggle',\n 'wriggly',\n 'wrinkle',\n 'wrinkly',\n 'wrist',\n 'writing',\n 'written',\n 'wrongdoer',\n 'wronged',\n 'wrongful',\n 'wrongly',\n 'wrongness',\n 'wrought',\n 'xbox',\n 'xerox',\n 'yahoo',\n 'yam',\n 'yanking',\n 'yapping',\n 'yard',\n 'yarn',\n 'yeah',\n 'yearbook',\n 'yearling',\n 'yearly',\n 'yearning',\n 'yeast',\n 'yelling',\n 'yelp',\n 'yen',\n 'yesterday',\n 'yiddish',\n 'yield',\n 'yin',\n 'yippee',\n 'yo-yo',\n 'yodel',\n 'yoga',\n 'yogurt',\n 'yonder',\n 'yoyo',\n 'yummy',\n 'zap',\n 'zealous',\n 'zebra',\n 'zen',\n 'zeppelin',\n 'zero',\n 'zestfully',\n 'zesty',\n 'zigzagged',\n 'zipfile',\n 'zipping',\n 'zippy',\n 'zips',\n 'zit',\n 'zodiac',\n 'zombie',\n 'zone',\n 'zoning',\n 'zookeeper',\n 'zoologist',\n 'zoology',\n 'zoom',\n];\n","import { EnvironmentUrls } from '../models/domain/environmentUrls';\n\nimport { ConstantsService } from './constants.service';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { EnvironmentService as EnvironmentServiceAbstraction } from '../abstractions/environment.service';\nimport { NotificationsService } from '../abstractions/notifications.service';\nimport { StorageService } from '../abstractions/storage.service';\n\nexport class EnvironmentService implements EnvironmentServiceAbstraction {\n baseUrl: string;\n webVaultUrl: string;\n apiUrl: string;\n identityUrl: string;\n iconsUrl: string;\n notificationsUrl: string;\n eventsUrl: string;\n enterpriseUrl: string;\n\n constructor(private apiService: ApiService, private storageService: StorageService,\n private notificationsService: NotificationsService) { }\n\n getWebVaultUrl(): string {\n if (this.webVaultUrl != null) {\n return this.webVaultUrl;\n } else if (this.baseUrl) {\n return this.baseUrl;\n }\n return null;\n }\n\n async setUrlsFromStorage(): Promise {\n const urlsObj: any = await this.storageService.get(ConstantsService.environmentUrlsKey);\n const urls = urlsObj || {\n base: null,\n api: null,\n identity: null,\n icons: null,\n notifications: null,\n events: null,\n webVault: null,\n enterprise: null,\n };\n\n const envUrls = new EnvironmentUrls();\n\n if (urls.base) {\n this.baseUrl = envUrls.base = urls.base;\n this.apiService.setUrls(envUrls);\n return;\n }\n\n this.webVaultUrl = urls.webVault;\n this.apiUrl = envUrls.api = urls.api;\n this.identityUrl = envUrls.identity = urls.identity;\n this.iconsUrl = urls.icons;\n this.notificationsUrl = urls.notifications;\n this.eventsUrl = envUrls.events = urls.events;\n this.enterpriseUrl = urls.enterprise;\n this.apiService.setUrls(envUrls);\n }\n\n async setUrls(urls: any): Promise {\n urls.base = this.formatUrl(urls.base);\n urls.webVault = this.formatUrl(urls.webVault);\n urls.api = this.formatUrl(urls.api);\n urls.identity = this.formatUrl(urls.identity);\n urls.icons = this.formatUrl(urls.icons);\n urls.notifications = this.formatUrl(urls.notifications);\n urls.events = this.formatUrl(urls.events);\n urls.enterprise = this.formatUrl(urls.enterprise);\n\n await this.storageService.save(ConstantsService.environmentUrlsKey, {\n base: urls.base,\n api: urls.api,\n identity: urls.identity,\n webVault: urls.webVault,\n icons: urls.icons,\n notifications: urls.notifications,\n events: urls.events,\n enterprise: urls.enterprise,\n });\n\n this.baseUrl = urls.base;\n this.webVaultUrl = urls.webVault;\n this.apiUrl = urls.api;\n this.identityUrl = urls.identity;\n this.iconsUrl = urls.icons;\n this.notificationsUrl = urls.notifications;\n this.eventsUrl = urls.events;\n this.enterpriseUrl = urls.enterprise;\n\n const envUrls = new EnvironmentUrls();\n if (this.baseUrl) {\n envUrls.base = this.baseUrl;\n } else {\n envUrls.api = this.apiUrl;\n envUrls.identity = this.identityUrl;\n envUrls.events = this.eventsUrl;\n }\n\n this.apiService.setUrls(envUrls);\n if (this.notificationsService != null) {\n this.notificationsService.init(this);\n }\n return urls;\n }\n\n private formatUrl(url: string): string {\n if (url == null || url === '') {\n return null;\n }\n\n url = url.replace(/\\/+$/g, '');\n if (!url.startsWith('http://') && !url.startsWith('https://')) {\n url = 'https://' + url;\n }\n\n return url.trim();\n }\n}\n","import { FolderData } from '../models/data/folderData';\n\nimport { Folder } from '../models/domain/folder';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\nimport { TreeNode } from '../models/domain/treeNode';\n\nimport { FolderRequest } from '../models/request/folderRequest';\n\nimport { FolderResponse } from '../models/response/folderResponse';\n\nimport { FolderView } from '../models/view/folderView';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { CipherService } from '../abstractions/cipher.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { FolderService as FolderServiceAbstraction } from '../abstractions/folder.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\nimport { CipherData } from '../models/data/cipherData';\n\nimport { ServiceUtils } from '../misc/serviceUtils';\nimport { Utils } from '../misc/utils';\n\nconst Keys = {\n foldersPrefix: 'folders_',\n ciphersPrefix: 'ciphers_',\n};\nconst NestingDelimiter = '/';\n\nexport class FolderService implements FolderServiceAbstraction {\n decryptedFolderCache: FolderView[];\n\n constructor(private cryptoService: CryptoService, private userService: UserService,\n private apiService: ApiService, private storageService: StorageService,\n private i18nService: I18nService, private cipherService: CipherService) { }\n\n clearCache(): void {\n this.decryptedFolderCache = null;\n }\n\n async encrypt(model: FolderView, key?: SymmetricCryptoKey): Promise {\n const folder = new Folder();\n folder.id = model.id;\n folder.name = await this.cryptoService.encrypt(model.name, key);\n return folder;\n }\n\n async get(id: string): Promise {\n const userId = await this.userService.getUserId();\n const folders = await this.storageService.get<{ [id: string]: FolderData; }>(\n Keys.foldersPrefix + userId);\n if (folders == null || !folders.hasOwnProperty(id)) {\n return null;\n }\n\n return new Folder(folders[id]);\n }\n\n async getAll(): Promise {\n const userId = await this.userService.getUserId();\n const folders = await this.storageService.get<{ [id: string]: FolderData; }>(\n Keys.foldersPrefix + userId);\n const response: Folder[] = [];\n for (const id in folders) {\n if (folders.hasOwnProperty(id)) {\n response.push(new Folder(folders[id]));\n }\n }\n return response;\n }\n\n async getAllDecrypted(): Promise {\n if (this.decryptedFolderCache != null) {\n return this.decryptedFolderCache;\n }\n\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error('No key.');\n }\n\n const decFolders: FolderView[] = [];\n const promises: Promise[] = [];\n const folders = await this.getAll();\n folders.forEach(folder => {\n promises.push(folder.decrypt().then(f => decFolders.push(f)));\n });\n\n await Promise.all(promises);\n decFolders.sort(Utils.getSortFunction(this.i18nService, 'name'));\n\n const noneFolder = new FolderView();\n noneFolder.name = this.i18nService.t('noneFolder');\n decFolders.push(noneFolder);\n\n this.decryptedFolderCache = decFolders;\n return this.decryptedFolderCache;\n }\n\n async getAllNested(): Promise[]> {\n const folders = await this.getAllDecrypted();\n const nodes: TreeNode[] = [];\n folders.forEach(f => {\n const folderCopy = new FolderView();\n folderCopy.id = f.id;\n folderCopy.revisionDate = f.revisionDate;\n const parts = f.name != null ? f.name.replace(/^\\/+|\\/+$/g, '').split(NestingDelimiter) : [];\n ServiceUtils.nestedTraverse(nodes, 0, parts, folderCopy, null, NestingDelimiter);\n });\n return nodes;\n }\n\n async getNested(id: string): Promise> {\n const folders = await this.getAllNested();\n return ServiceUtils.getTreeNodeObject(folders, id) as TreeNode;\n }\n\n async saveWithServer(folder: Folder): Promise {\n const request = new FolderRequest(folder);\n\n let response: FolderResponse;\n if (folder.id == null) {\n response = await this.apiService.postFolder(request);\n folder.id = response.id;\n } else {\n response = await this.apiService.putFolder(folder.id, request);\n }\n\n const userId = await this.userService.getUserId();\n const data = new FolderData(response, userId);\n await this.upsert(data);\n }\n\n async upsert(folder: FolderData | FolderData[]): Promise {\n const userId = await this.userService.getUserId();\n let folders = await this.storageService.get<{ [id: string]: FolderData; }>(\n Keys.foldersPrefix + userId);\n if (folders == null) {\n folders = {};\n }\n\n if (folder instanceof FolderData) {\n const f = folder as FolderData;\n folders[f.id] = f;\n } else {\n (folder as FolderData[]).forEach(f => {\n folders[f.id] = f;\n });\n }\n\n await this.storageService.save(Keys.foldersPrefix + userId, folders);\n this.decryptedFolderCache = null;\n }\n\n async replace(folders: { [id: string]: FolderData; }): Promise {\n const userId = await this.userService.getUserId();\n await this.storageService.save(Keys.foldersPrefix + userId, folders);\n this.decryptedFolderCache = null;\n }\n\n async clear(userId: string): Promise {\n await this.storageService.remove(Keys.foldersPrefix + userId);\n this.decryptedFolderCache = null;\n }\n\n async delete(id: string | string[]): Promise {\n const userId = await this.userService.getUserId();\n const folders = await this.storageService.get<{ [id: string]: FolderData; }>(\n Keys.foldersPrefix + userId);\n if (folders == null) {\n return;\n }\n\n if (typeof id === 'string') {\n if (folders[id] == null) {\n return;\n }\n delete folders[id];\n } else {\n (id as string[]).forEach(i => {\n delete folders[i];\n });\n }\n\n await this.storageService.save(Keys.foldersPrefix + userId, folders);\n this.decryptedFolderCache = null;\n\n // Items in a deleted folder are re-assigned to \"No Folder\"\n const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(Keys.ciphersPrefix + userId);\n if (ciphers != null) {\n const updates: CipherData[] = [];\n for (const cId in ciphers) {\n if (ciphers[cId].folderId === id) {\n ciphers[cId].folderId = null;\n updates.push(ciphers[cId]);\n }\n }\n if (updates.length > 0) {\n this.cipherService.upsert(updates);\n }\n }\n }\n\n async deleteWithServer(id: string): Promise {\n await this.apiService.deleteFolder(id);\n await this.delete(id);\n }\n}\n","import { I18nService as I18nServiceAbstraction } from '../abstractions/i18n.service';\n\nexport class I18nService implements I18nServiceAbstraction {\n locale: string;\n // First locale is the default (English)\n supportedTranslationLocales: string[] = ['en'];\n translationLocale: string;\n collator: Intl.Collator;\n localeNames = new Map([\n ['af', 'Afrikaans'],\n ['be', 'Беларуская'],\n ['bg', 'български'],\n ['ca', 'català'],\n ['cs', 'čeština'],\n ['da', 'dansk'],\n ['de', 'Deutsch'],\n ['el', 'Ελληνικά'],\n ['en', 'English'],\n ['en-GB', 'English (British)'],\n ['eo', 'Esperanto'],\n ['es', 'español'],\n ['et', 'eesti'],\n ['fa', 'فارسی'],\n ['fi', 'suomi'],\n ['fr', 'français'],\n ['he', 'עברית'],\n ['hi', 'हिन्दी'],\n ['hr', 'hrvatski'],\n ['hu', 'magyar'],\n ['id', 'Bahasa Indonesia'],\n ['it', 'italiano'],\n ['ja', '日本語'],\n ['ko', '한국어'],\n ['lv', 'Latvietis'],\n ['ml', 'മലയാളം'],\n ['nb', 'norsk (bokmål)'],\n ['nl', 'Nederlands'],\n ['pl', 'polski'],\n ['pt-BR', 'português do Brasil'],\n ['pt-PT', 'português'],\n ['ro', 'română'],\n ['ru', 'русский'],\n ['sk', 'slovenčina'],\n ['sr', 'Српски'],\n ['sv', 'svenska'],\n ['th', 'ไทย'],\n ['tr', 'Türkçe'],\n ['uk', 'українська'],\n ['vi', 'Tiếng Việt'],\n ['zh-CN', '中文(中国大陆)'],\n ['zh-TW', '中文(台灣)'],\n ]);\n\n protected inited: boolean;\n protected defaultMessages: any = {};\n protected localeMessages: any = {};\n\n constructor(protected systemLanguage: string, protected localesDirectory: string,\n protected getLocalesJson: (formattedLocale: string) => Promise) {\n this.systemLanguage = systemLanguage.replace('_', '-');\n }\n\n async init(locale?: string) {\n if (this.inited) {\n throw new Error('i18n already initialized.');\n }\n if (this.supportedTranslationLocales == null || this.supportedTranslationLocales.length === 0) {\n throw new Error('supportedTranslationLocales not set.');\n }\n\n this.inited = true;\n this.locale = this.translationLocale = locale != null ? locale : this.systemLanguage;\n\n try {\n this.collator = new Intl.Collator(this.locale, { numeric: true, sensitivity: 'base' });\n } catch {\n this.collator = null;\n }\n\n if (this.supportedTranslationLocales.indexOf(this.translationLocale) === -1) {\n this.translationLocale = this.translationLocale.slice(0, 2);\n\n if (this.supportedTranslationLocales.indexOf(this.translationLocale) === -1) {\n this.translationLocale = this.supportedTranslationLocales[0];\n }\n }\n\n if (this.localesDirectory != null) {\n await this.loadMessages(this.translationLocale, this.localeMessages);\n if (this.translationLocale !== this.supportedTranslationLocales[0]) {\n await this.loadMessages(this.supportedTranslationLocales[0], this.defaultMessages);\n }\n }\n }\n\n t(id: string, p1?: string, p2?: string, p3?: string): string {\n return this.translate(id, p1, p2, p3);\n }\n\n translate(id: string, p1?: string, p2?: string, p3?: string): string {\n let result: string;\n if (this.localeMessages.hasOwnProperty(id) && this.localeMessages[id]) {\n result = this.localeMessages[id];\n } else if (this.defaultMessages.hasOwnProperty(id) && this.defaultMessages[id]) {\n result = this.defaultMessages[id];\n } else {\n result = '';\n }\n\n if (result !== '') {\n if (p1 != null) {\n result = result.split('__$1__').join(p1);\n }\n if (p2 != null) {\n result = result.split('__$2__').join(p2);\n }\n if (p3 != null) {\n result = result.split('__$3__').join(p3);\n }\n }\n\n return result;\n }\n\n private async loadMessages(locale: string, messagesObj: any): Promise {\n const formattedLocale = locale.replace('-', '_');\n const locales = await this.getLocalesJson(formattedLocale);\n for (const prop in locales) {\n if (!locales.hasOwnProperty(prop)) {\n continue;\n }\n messagesObj[prop] = locales[prop].message;\n\n if (locales[prop].placeholders) {\n for (const placeProp in locales[prop].placeholders) {\n if (!locales[prop].placeholders.hasOwnProperty(placeProp) ||\n !locales[prop].placeholders[placeProp].content) {\n continue;\n }\n\n const replaceToken = '\\\\$' + placeProp.toUpperCase() + '\\\\$';\n let replaceContent = locales[prop].placeholders[placeProp].content;\n if (replaceContent === '$1' || replaceContent === '$2' || replaceContent === '$3') {\n replaceContent = '__$' + replaceContent + '__';\n }\n messagesObj[prop] = messagesObj[prop].replace(new RegExp(replaceToken, 'g'), replaceContent);\n }\n }\n }\n }\n\n}\n","import * as zxcvbn from 'zxcvbn';\n\nimport { EncString } from '../models/domain/encString';\nimport { GeneratedPasswordHistory } from '../models/domain/generatedPasswordHistory';\nimport { PasswordGeneratorPolicyOptions } from '../models/domain/passwordGeneratorPolicyOptions';\nimport { Policy } from '../models/domain/policy';\n\nimport { CryptoService } from '../abstractions/crypto.service';\nimport {\n PasswordGenerationService as PasswordGenerationServiceAbstraction,\n} from '../abstractions/passwordGeneration.service';\nimport { PolicyService } from '../abstractions/policy.service';\nimport { StorageService } from '../abstractions/storage.service';\n\nimport { EEFLongWordList } from '../misc/wordlist';\n\nimport { PolicyType } from '../enums/policyType';\n\nconst DefaultOptions = {\n length: 14,\n ambiguous: false,\n number: true,\n minNumber: 1,\n uppercase: true,\n minUppercase: 0,\n lowercase: true,\n minLowercase: 0,\n special: false,\n minSpecial: 1,\n type: 'password',\n numWords: 3,\n wordSeparator: '-',\n capitalize: false,\n includeNumber: false,\n};\n\nconst Keys = {\n options: 'passwordGenerationOptions',\n history: 'generatedPasswordHistory',\n};\n\nconst MaxPasswordsInHistory = 100;\n\nexport class PasswordGenerationService implements PasswordGenerationServiceAbstraction {\n private optionsCache: any;\n private history: GeneratedPasswordHistory[];\n\n constructor(private cryptoService: CryptoService, private storageService: StorageService,\n private policyService: PolicyService) { }\n\n async generatePassword(options: any): Promise {\n // overload defaults with given options\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.type === 'passphrase') {\n return this.generatePassphrase(options);\n }\n\n // sanitize\n this.sanitizePasswordLength(o, true);\n\n const minLength: number = o.minUppercase + o.minLowercase + o.minNumber + o.minSpecial;\n if (o.length < minLength) {\n o.length = minLength;\n }\n\n const positions: string[] = [];\n if (o.lowercase && o.minLowercase > 0) {\n for (let i = 0; i < o.minLowercase; i++) {\n positions.push('l');\n }\n }\n if (o.uppercase && o.minUppercase > 0) {\n for (let i = 0; i < o.minUppercase; i++) {\n positions.push('u');\n }\n }\n if (o.number && o.minNumber > 0) {\n for (let i = 0; i < o.minNumber; i++) {\n positions.push('n');\n }\n }\n if (o.special && o.minSpecial > 0) {\n for (let i = 0; i < o.minSpecial; i++) {\n positions.push('s');\n }\n }\n while (positions.length < o.length) {\n positions.push('a');\n }\n\n // shuffle\n await this.shuffleArray(positions);\n\n // build out the char sets\n let allCharSet = '';\n\n let lowercaseCharSet = 'abcdefghijkmnopqrstuvwxyz';\n if (o.ambiguous) {\n lowercaseCharSet += 'l';\n }\n if (o.lowercase) {\n allCharSet += lowercaseCharSet;\n }\n\n let uppercaseCharSet = 'ABCDEFGHJKLMNPQRSTUVWXYZ';\n if (o.ambiguous) {\n uppercaseCharSet += 'IO';\n }\n if (o.uppercase) {\n allCharSet += uppercaseCharSet;\n }\n\n let numberCharSet = '23456789';\n if (o.ambiguous) {\n numberCharSet += '01';\n }\n if (o.number) {\n allCharSet += numberCharSet;\n }\n\n const specialCharSet = '!@#$%^&*';\n if (o.special) {\n allCharSet += specialCharSet;\n }\n\n let password = '';\n for (let i = 0; i < o.length; i++) {\n let positionChars: string;\n switch (positions[i]) {\n case 'l':\n positionChars = lowercaseCharSet;\n break;\n case 'u':\n positionChars = uppercaseCharSet;\n break;\n case 'n':\n positionChars = numberCharSet;\n break;\n case 's':\n positionChars = specialCharSet;\n break;\n case 'a':\n positionChars = allCharSet;\n break;\n default:\n break;\n }\n\n const randomCharIndex = await this.cryptoService.randomNumber(0, positionChars.length - 1);\n password += positionChars.charAt(randomCharIndex);\n }\n\n return password;\n }\n\n async generatePassphrase(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.numWords == null || o.numWords <= 2) {\n o.numWords = DefaultOptions.numWords;\n }\n if (o.wordSeparator == null || o.wordSeparator.length === 0 || o.wordSeparator.length > 1) {\n o.wordSeparator = ' ';\n }\n if (o.capitalize == null) {\n o.capitalize = false;\n }\n if (o.includeNumber == null) {\n o.includeNumber = false;\n }\n\n const listLength = EEFLongWordList.length - 1;\n const wordList = new Array(o.numWords);\n for (let i = 0; i < o.numWords; i++) {\n const wordIndex = await this.cryptoService.randomNumber(0, listLength);\n if (o.capitalize) {\n wordList[i] = this.capitalize(EEFLongWordList[wordIndex]);\n } else {\n wordList[i] = EEFLongWordList[wordIndex];\n }\n }\n\n if (o.includeNumber) {\n await this.appendRandomNumberToRandomWord(wordList);\n }\n return wordList.join(o.wordSeparator);\n }\n\n async getOptions(): Promise<[any, PasswordGeneratorPolicyOptions]> {\n if (this.optionsCache == null) {\n const options = await this.storageService.get(Keys.options);\n if (options == null) {\n this.optionsCache = DefaultOptions;\n } else {\n this.optionsCache = Object.assign({}, DefaultOptions, options);\n }\n }\n const enforcedOptions = await this.enforcePasswordGeneratorPoliciesOnOptions(this.optionsCache);\n this.optionsCache = enforcedOptions[0];\n return [this.optionsCache, enforcedOptions[1]];\n }\n\n async enforcePasswordGeneratorPoliciesOnOptions(options: any): Promise<[any, PasswordGeneratorPolicyOptions]> {\n let enforcedPolicyOptions = await this.getPasswordGeneratorPolicyOptions();\n if (enforcedPolicyOptions != null) {\n if (options.length < enforcedPolicyOptions.minLength) {\n options.length = enforcedPolicyOptions.minLength;\n }\n\n if (enforcedPolicyOptions.useUppercase) {\n options.uppercase = true;\n }\n\n if (enforcedPolicyOptions.useLowercase) {\n options.lowercase = true;\n }\n\n if (enforcedPolicyOptions.useNumbers) {\n options.number = true;\n }\n\n if (options.minNumber < enforcedPolicyOptions.numberCount) {\n options.minNumber = enforcedPolicyOptions.numberCount;\n }\n\n if (enforcedPolicyOptions.useSpecial) {\n options.special = true;\n }\n\n if (options.minSpecial < enforcedPolicyOptions.specialCount) {\n options.minSpecial = enforcedPolicyOptions.specialCount;\n }\n\n // Must normalize these fields because the receiving call expects all options to pass the current rules\n if (options.minSpecial + options.minNumber > options.length) {\n options.minSpecial = options.length - options.minNumber;\n }\n\n if (options.numWords < enforcedPolicyOptions.minNumberWords) {\n options.numWords = enforcedPolicyOptions.minNumberWords;\n }\n\n if (enforcedPolicyOptions.capitalize) {\n options.capitalize = true;\n }\n\n if (enforcedPolicyOptions.includeNumber) {\n options.includeNumber = true;\n }\n\n // Force default type if password/passphrase selected via policy\n if (enforcedPolicyOptions.defaultType === 'password' ||\n enforcedPolicyOptions.defaultType === 'passphrase') {\n options.type = enforcedPolicyOptions.defaultType;\n }\n } else { // UI layer expects an instantiated object to prevent more explicit null checks\n enforcedPolicyOptions = new PasswordGeneratorPolicyOptions();\n }\n return [options, enforcedPolicyOptions];\n }\n\n async getPasswordGeneratorPolicyOptions(): Promise {\n const policies: Policy[] = this.policyService == null ? null :\n await this.policyService.getAll(PolicyType.PasswordGenerator);\n let enforcedOptions: PasswordGeneratorPolicyOptions = null;\n\n if (policies == null || policies.length === 0) {\n return enforcedOptions;\n }\n\n policies.forEach(currentPolicy => {\n if (!currentPolicy.enabled || currentPolicy.data == null) {\n return;\n }\n\n if (enforcedOptions == null) {\n enforcedOptions = new PasswordGeneratorPolicyOptions();\n }\n\n // Password wins in multi-org collisions\n if (currentPolicy.data.defaultType != null && enforcedOptions.defaultType !== 'password') {\n enforcedOptions.defaultType = currentPolicy.data.defaultType;\n }\n\n if (currentPolicy.data.minLength != null\n && currentPolicy.data.minLength > enforcedOptions.minLength) {\n enforcedOptions.minLength = currentPolicy.data.minLength;\n }\n\n if (currentPolicy.data.useUpper) {\n enforcedOptions.useUppercase = true;\n }\n\n if (currentPolicy.data.useLower) {\n enforcedOptions.useLowercase = true;\n }\n\n if (currentPolicy.data.useNumbers) {\n enforcedOptions.useNumbers = true;\n }\n\n if (currentPolicy.data.minNumbers != null\n && currentPolicy.data.minNumbers > enforcedOptions.numberCount) {\n enforcedOptions.numberCount = currentPolicy.data.minNumbers;\n }\n\n if (currentPolicy.data.useSpecial) {\n enforcedOptions.useSpecial = true;\n }\n\n if (currentPolicy.data.minSpecial != null\n && currentPolicy.data.minSpecial > enforcedOptions.specialCount) {\n enforcedOptions.specialCount = currentPolicy.data.minSpecial;\n }\n\n if (currentPolicy.data.minNumberWords != null\n && currentPolicy.data.minNumberWords > enforcedOptions.minNumberWords) {\n enforcedOptions.minNumberWords = currentPolicy.data.minNumberWords;\n }\n\n if (currentPolicy.data.capitalize) {\n enforcedOptions.capitalize = true;\n }\n\n if (currentPolicy.data.includeNumber) {\n enforcedOptions.includeNumber = true;\n }\n });\n\n return enforcedOptions;\n }\n\n async saveOptions(options: any) {\n await this.storageService.save(Keys.options, options);\n this.optionsCache = options;\n }\n\n async getHistory(): Promise {\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n return new Array();\n }\n\n if (!this.history) {\n const encrypted = await this.storageService.get(Keys.history);\n this.history = await this.decryptHistory(encrypted);\n }\n\n return this.history || new Array();\n }\n\n async addHistory(password: string): Promise {\n // Cannot add new history if no key is available\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n return;\n }\n\n const currentHistory = await this.getHistory();\n\n // Prevent duplicates\n if (this.matchesPrevious(password, currentHistory)) {\n return;\n }\n\n currentHistory.unshift(new GeneratedPasswordHistory(password, Date.now()));\n\n // Remove old items.\n if (currentHistory.length > MaxPasswordsInHistory) {\n currentHistory.pop();\n }\n\n const newHistory = await this.encryptHistory(currentHistory);\n return await this.storageService.save(Keys.history, newHistory);\n }\n\n async clear(): Promise {\n this.history = [];\n return await this.storageService.remove(Keys.history);\n }\n\n passwordStrength(password: string, userInputs: string[] = null): zxcvbn.ZXCVBNResult {\n if (password == null || password.length === 0) {\n return null;\n }\n let globalUserInputs = ['bitwarden', 'bit', 'warden'];\n if (userInputs != null && userInputs.length > 0) {\n globalUserInputs = globalUserInputs.concat(userInputs);\n }\n // Use a hash set to get rid of any duplicate user inputs\n const finalUserInputs = Array.from(new Set(globalUserInputs));\n const result = zxcvbn(password, finalUserInputs);\n return result;\n }\n\n normalizeOptions(options: any, enforcedPolicyOptions: PasswordGeneratorPolicyOptions) {\n options.minLowercase = 0;\n options.minUppercase = 0;\n\n if (!options.length || options.length < 5) {\n options.length = 5;\n } else if (options.length > 128) {\n options.length = 128;\n }\n\n if (options.length < enforcedPolicyOptions.minLength) {\n options.length = enforcedPolicyOptions.minLength;\n }\n\n if (!options.minNumber) {\n options.minNumber = 0;\n } else if (options.minNumber > options.length) {\n options.minNumber = options.length;\n } else if (options.minNumber > 9) {\n options.minNumber = 9;\n }\n\n if (options.minNumber < enforcedPolicyOptions.numberCount) {\n options.minNumber = enforcedPolicyOptions.numberCount;\n }\n\n if (!options.minSpecial) {\n options.minSpecial = 0;\n } else if (options.minSpecial > options.length) {\n options.minSpecial = options.length;\n } else if (options.minSpecial > 9) {\n options.minSpecial = 9;\n }\n\n if (options.minSpecial < enforcedPolicyOptions.specialCount) {\n options.minSpecial = enforcedPolicyOptions.specialCount;\n }\n\n if (options.minSpecial + options.minNumber > options.length) {\n options.minSpecial = options.length - options.minNumber;\n }\n\n if (options.numWords == null || options.length < 3) {\n options.numWords = 3;\n } else if (options.numWords > 20) {\n options.numWords = 20;\n }\n\n if (options.numWords < enforcedPolicyOptions.minNumberWords) {\n options.numWords = enforcedPolicyOptions.minNumberWords;\n }\n\n if (options.wordSeparator != null && options.wordSeparator.length > 1) {\n options.wordSeparator = options.wordSeparator[0];\n }\n\n this.sanitizePasswordLength(options, false);\n }\n\n private capitalize(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n\n private async appendRandomNumberToRandomWord(wordList: string[]) {\n if (wordList == null || wordList.length <= 0) {\n return;\n }\n const index = await this.cryptoService.randomNumber(0, wordList.length - 1);\n const num = await this.cryptoService.randomNumber(0, 9);\n wordList[index] = wordList[index] + num;\n }\n\n private async encryptHistory(history: GeneratedPasswordHistory[]): Promise {\n if (history == null || history.length === 0) {\n return Promise.resolve([]);\n }\n\n const promises = history.map(async item => {\n const encrypted = await this.cryptoService.encrypt(item.password);\n return new GeneratedPasswordHistory(encrypted.encryptedString, item.date);\n });\n\n return await Promise.all(promises);\n }\n\n private async decryptHistory(history: GeneratedPasswordHistory[]): Promise {\n if (history == null || history.length === 0) {\n return Promise.resolve([]);\n }\n\n const promises = history.map(async item => {\n const decrypted = await this.cryptoService.decryptToUtf8(new EncString(item.password));\n return new GeneratedPasswordHistory(decrypted, item.date);\n });\n\n return await Promise.all(promises);\n }\n\n private matchesPrevious(password: string, history: GeneratedPasswordHistory[]): boolean {\n if (history == null || history.length === 0) {\n return false;\n }\n\n return history[history.length - 1].password === password;\n }\n\n // ref: https://stackoverflow.com/a/12646864/1090359\n private async shuffleArray(array: string[]) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = await this.cryptoService.randomNumber(0, i);\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n\n private sanitizePasswordLength(options: any, forGeneration: boolean) {\n let minUppercaseCalc = 0;\n let minLowercaseCalc = 0;\n let minNumberCalc: number = options.minNumber;\n let minSpecialCalc: number = options.minSpecial;\n\n if (options.uppercase && options.minUppercase <= 0) {\n minUppercaseCalc = 1;\n } else if (!options.uppercase) {\n minUppercaseCalc = 0;\n }\n\n if (options.lowercase && options.minLowercase <= 0) {\n minLowercaseCalc = 1;\n } else if (!options.lowercase) {\n minLowercaseCalc = 0;\n }\n\n if (options.number && options.minNumber <= 0) {\n minNumberCalc = 1;\n } else if (!options.number) {\n minNumberCalc = 0;\n }\n\n if (options.special && options.minSpecial <= 0) {\n minSpecialCalc = 1;\n } else if (!options.special) {\n minSpecialCalc = 0;\n }\n\n // This should never happen but is a final safety net\n if (!options.length || options.length < 1) {\n options.length = 10;\n }\n\n const minLength: number = minUppercaseCalc + minLowercaseCalc + minNumberCalc + minSpecialCalc;\n // Normalize and Generation both require this modification\n if (options.length < minLength) {\n options.length = minLength;\n }\n\n // Apply other changes if the options object passed in is for generation\n if (forGeneration) {\n options.minUppercase = minUppercaseCalc;\n options.minLowercase = minLowercaseCalc;\n options.minNumber = minNumberCalc;\n options.minSpecial = minSpecialCalc;\n }\n }\n}\n","import { SettingsService as SettingsServiceAbstraction } from '../abstractions/settings.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\n\nconst Keys = {\n settingsPrefix: 'settings_',\n equivalentDomains: 'equivalentDomains',\n};\n\nexport class SettingsService implements SettingsServiceAbstraction {\n private settingsCache: any;\n\n constructor(private userService: UserService, private storageService: StorageService) {\n }\n\n clearCache(): void {\n this.settingsCache = null;\n }\n\n getEquivalentDomains(): Promise {\n return this.getSettingsKey(Keys.equivalentDomains);\n }\n\n async setEquivalentDomains(equivalentDomains: string[][]): Promise {\n await this.setSettingsKey(Keys.equivalentDomains, equivalentDomains);\n }\n\n async clear(userId: string): Promise {\n await this.storageService.remove(Keys.settingsPrefix + userId);\n this.clearCache();\n }\n\n // Helpers\n\n private async getSettings(): Promise {\n if (this.settingsCache == null) {\n const userId = await this.userService.getUserId();\n this.settingsCache = this.storageService.get(Keys.settingsPrefix + userId);\n }\n return this.settingsCache;\n }\n\n private async getSettingsKey(key: string): Promise {\n const settings = await this.getSettings();\n if (settings != null && settings[key]) {\n return settings[key];\n }\n return null;\n }\n\n private async setSettingsKey(key: string, value: any): Promise {\n const userId = await this.userService.getUserId();\n let settings = await this.getSettings();\n if (!settings) {\n settings = {};\n }\n\n settings[key] = value;\n await this.storageService.save(Keys.settingsPrefix + userId, settings);\n this.settingsCache = settings;\n }\n}\n","import { StateService as StateServiceAbstraction } from '../abstractions/state.service';\n\nexport class StateService implements StateServiceAbstraction {\n private state: any = {};\n\n get(key: string): Promise {\n if (this.state.hasOwnProperty(key)) {\n return Promise.resolve(this.state[key]);\n }\n return Promise.resolve(null);\n }\n\n save(key: string, obj: any): Promise {\n this.state[key] = obj;\n return Promise.resolve();\n }\n\n remove(key: string): Promise {\n delete this.state[key];\n return Promise.resolve();\n }\n\n purge(): Promise {\n this.state = {};\n return Promise.resolve();\n }\n}\n","import { ApiService } from '../abstractions/api.service';\nimport { CipherService } from '../abstractions/cipher.service';\nimport { CollectionService } from '../abstractions/collection.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { FolderService } from '../abstractions/folder.service';\nimport { MessagingService } from '../abstractions/messaging.service';\nimport { PolicyService } from '../abstractions/policy.service';\nimport { SendService } from '../abstractions/send.service';\nimport { SettingsService } from '../abstractions/settings.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { SyncService as SyncServiceAbstraction } from '../abstractions/sync.service';\nimport { UserService } from '../abstractions/user.service';\n\nimport { CipherData } from '../models/data/cipherData';\nimport { CollectionData } from '../models/data/collectionData';\nimport { FolderData } from '../models/data/folderData';\nimport { OrganizationData } from '../models/data/organizationData';\nimport { PolicyData } from '../models/data/policyData';\nimport { SendData } from '../models/data/sendData';\n\nimport { CipherResponse } from '../models/response/cipherResponse';\nimport { CollectionDetailsResponse } from '../models/response/collectionResponse';\nimport { DomainsResponse } from '../models/response/domainsResponse';\nimport { FolderResponse } from '../models/response/folderResponse';\nimport {\n SyncCipherNotification,\n SyncFolderNotification,\n SyncSendNotification,\n} from '../models/response/notificationResponse';\nimport { PolicyResponse } from '../models/response/policyResponse';\nimport { ProfileResponse } from '../models/response/profileResponse';\nimport { SendResponse } from '../models/response/sendResponse';\n\nconst Keys = {\n lastSyncPrefix: 'lastSync_',\n};\n\nexport class SyncService implements SyncServiceAbstraction {\n syncInProgress: boolean = false;\n\n constructor(private userService: UserService, private apiService: ApiService,\n private settingsService: SettingsService, private folderService: FolderService,\n private cipherService: CipherService, private cryptoService: CryptoService,\n private collectionService: CollectionService, private storageService: StorageService,\n private messagingService: MessagingService, private policyService: PolicyService,\n private sendService: SendService, private logoutCallback: (expired: boolean) => Promise) {\n }\n\n async getLastSync(): Promise {\n const userId = await this.userService.getUserId();\n if (userId == null) {\n return null;\n }\n\n const lastSync = await this.storageService.get(Keys.lastSyncPrefix + userId);\n if (lastSync) {\n return new Date(lastSync);\n }\n\n return null;\n }\n\n async setLastSync(date: Date): Promise {\n const userId = await this.userService.getUserId();\n if (userId == null) {\n return;\n }\n\n await this.storageService.save(Keys.lastSyncPrefix + userId, date.toJSON());\n }\n\n async fullSync(forceSync: boolean, allowThrowOnError = false): Promise {\n this.syncStarted();\n const isAuthenticated = await this.userService.isAuthenticated();\n if (!isAuthenticated) {\n return this.syncCompleted(false);\n }\n\n const now = new Date();\n let needsSync = false;\n try {\n needsSync = await this.needsSyncing(forceSync);\n } catch (e) {\n if (allowThrowOnError) {\n throw e;\n }\n }\n\n if (!needsSync) {\n await this.setLastSync(now);\n return this.syncCompleted(false);\n }\n\n const userId = await this.userService.getUserId();\n try {\n const response = await this.apiService.getSync();\n\n await this.syncProfile(response.profile);\n await this.syncFolders(userId, response.folders);\n await this.syncCollections(response.collections);\n await this.syncCiphers(userId, response.ciphers);\n await this.syncSends(userId, response.sends);\n await this.syncSettings(userId, response.domains);\n await this.syncPolicies(response.policies);\n\n await this.setLastSync(now);\n return this.syncCompleted(true);\n } catch (e) {\n if (allowThrowOnError) {\n throw e;\n } else {\n return this.syncCompleted(false);\n }\n }\n }\n\n async syncUpsertFolder(notification: SyncFolderNotification, isEdit: boolean): Promise {\n this.syncStarted();\n if (await this.userService.isAuthenticated()) {\n try {\n const localFolder = await this.folderService.get(notification.id);\n if ((!isEdit && localFolder == null) ||\n (isEdit && localFolder != null && localFolder.revisionDate < notification.revisionDate)) {\n const remoteFolder = await this.apiService.getFolder(notification.id);\n if (remoteFolder != null) {\n const userId = await this.userService.getUserId();\n await this.folderService.upsert(new FolderData(remoteFolder, userId));\n this.messagingService.send('syncedUpsertedFolder', { folderId: notification.id });\n return this.syncCompleted(true);\n }\n }\n } catch { }\n }\n return this.syncCompleted(false);\n }\n\n async syncDeleteFolder(notification: SyncFolderNotification): Promise {\n this.syncStarted();\n if (await this.userService.isAuthenticated()) {\n await this.folderService.delete(notification.id);\n this.messagingService.send('syncedDeletedFolder', { folderId: notification.id });\n this.syncCompleted(true);\n return true;\n }\n return this.syncCompleted(false);\n }\n\n async syncUpsertCipher(notification: SyncCipherNotification, isEdit: boolean): Promise {\n this.syncStarted();\n if (await this.userService.isAuthenticated()) {\n try {\n let shouldUpdate = true;\n const localCipher = await this.cipherService.get(notification.id);\n if (localCipher != null && localCipher.revisionDate >= notification.revisionDate) {\n shouldUpdate = false;\n }\n\n let checkCollections = false;\n if (shouldUpdate) {\n if (isEdit) {\n shouldUpdate = localCipher != null;\n checkCollections = true;\n } else {\n if (notification.collectionIds == null || notification.organizationId == null) {\n shouldUpdate = localCipher == null;\n } else {\n shouldUpdate = false;\n checkCollections = true;\n }\n }\n }\n\n if (!shouldUpdate && checkCollections && notification.organizationId != null &&\n notification.collectionIds != null && notification.collectionIds.length > 0) {\n const collections = await this.collectionService.getAll();\n if (collections != null) {\n for (let i = 0; i < collections.length; i++) {\n if (notification.collectionIds.indexOf(collections[i].id) > -1) {\n shouldUpdate = true;\n break;\n }\n }\n }\n }\n\n if (shouldUpdate) {\n const remoteCipher = await this.apiService.getCipher(notification.id);\n if (remoteCipher != null) {\n const userId = await this.userService.getUserId();\n await this.cipherService.upsert(new CipherData(remoteCipher, userId));\n this.messagingService.send('syncedUpsertedCipher', { cipherId: notification.id });\n return this.syncCompleted(true);\n }\n }\n } catch (e) {\n if (e != null && e.statusCode === 404 && isEdit) {\n await this.cipherService.delete(notification.id);\n this.messagingService.send('syncedDeletedCipher', { cipherId: notification.id });\n return this.syncCompleted(true);\n }\n }\n }\n return this.syncCompleted(false);\n }\n\n async syncDeleteCipher(notification: SyncCipherNotification): Promise {\n this.syncStarted();\n if (await this.userService.isAuthenticated()) {\n await this.cipherService.delete(notification.id);\n this.messagingService.send('syncedDeletedCipher', { cipherId: notification.id });\n return this.syncCompleted(true);\n }\n return this.syncCompleted(false);\n }\n\n async syncUpsertSend(notification: SyncSendNotification, isEdit: boolean): Promise {\n this.syncStarted();\n if (await this.userService.isAuthenticated()) {\n try {\n const localSend = await this.sendService.get(notification.id);\n if ((!isEdit && localSend == null) ||\n (isEdit && localSend != null && localSend.revisionDate < notification.revisionDate)) {\n const remoteSend = await this.apiService.getSend(notification.id);\n if (remoteSend != null) {\n const userId = await this.userService.getUserId();\n await this.sendService.upsert(new SendData(remoteSend, userId));\n this.messagingService.send('syncedUpsertedSend', { sendId: notification.id });\n return this.syncCompleted(true);\n }\n }\n } catch { }\n }\n return this.syncCompleted(false);\n }\n\n async syncDeleteSend(notification: SyncSendNotification): Promise {\n this.syncStarted();\n if (await this.userService.isAuthenticated()) {\n await this.sendService.delete(notification.id);\n this.messagingService.send('syncedDeletedSend', { sendId: notification.id });\n this.syncCompleted(true);\n return true;\n }\n return this.syncCompleted(false);\n }\n\n // Helpers\n\n private syncStarted() {\n this.syncInProgress = true;\n this.messagingService.send('syncStarted');\n }\n\n private syncCompleted(successfully: boolean): boolean {\n this.syncInProgress = false;\n this.messagingService.send('syncCompleted', { successfully: successfully });\n return successfully;\n }\n\n private async needsSyncing(forceSync: boolean) {\n if (forceSync) {\n return true;\n }\n\n const lastSync = await this.getLastSync();\n if (lastSync == null || lastSync.getTime() === 0) {\n return true;\n }\n\n const response = await this.apiService.getAccountRevisionDate();\n if (new Date(response) <= lastSync) {\n return false;\n }\n return true;\n }\n\n private async syncProfile(response: ProfileResponse) {\n const stamp = await this.userService.getSecurityStamp();\n if (stamp != null && stamp !== response.securityStamp) {\n if (this.logoutCallback != null) {\n await this.logoutCallback(true);\n }\n\n throw new Error('Stamp has changed');\n }\n\n await this.cryptoService.setEncKey(response.key);\n await this.cryptoService.setEncPrivateKey(response.privateKey);\n await this.cryptoService.setOrgKeys(response.organizations);\n await this.userService.setSecurityStamp(response.securityStamp);\n await this.userService.setEmailVerified(response.emailVerified);\n\n const organizations: { [id: string]: OrganizationData; } = {};\n response.organizations.forEach(o => {\n organizations[o.id] = new OrganizationData(o);\n });\n return await this.userService.replaceOrganizations(organizations);\n }\n\n private async syncFolders(userId: string, response: FolderResponse[]) {\n const folders: { [id: string]: FolderData; } = {};\n response.forEach(f => {\n folders[f.id] = new FolderData(f, userId);\n });\n return await this.folderService.replace(folders);\n }\n\n private async syncCollections(response: CollectionDetailsResponse[]) {\n const collections: { [id: string]: CollectionData; } = {};\n response.forEach(c => {\n collections[c.id] = new CollectionData(c);\n });\n return await this.collectionService.replace(collections);\n }\n\n private async syncCiphers(userId: string, response: CipherResponse[]) {\n const ciphers: { [id: string]: CipherData; } = {};\n response.forEach(c => {\n ciphers[c.id] = new CipherData(c, userId);\n });\n return await this.cipherService.replace(ciphers);\n }\n\n private async syncSends(userId: string, response: SendResponse[]) {\n const sends: { [id: string]: SendData; } = {};\n response.forEach(s => {\n sends[s.id] = new SendData(s, userId);\n });\n return await this.sendService.replace(sends);\n }\n\n private async syncSettings(userId: string, response: DomainsResponse) {\n let eqDomains: string[][] = [];\n if (response != null && response.equivalentDomains != null) {\n eqDomains = eqDomains.concat(response.equivalentDomains);\n }\n\n if (response != null && response.globalEquivalentDomains != null) {\n response.globalEquivalentDomains.forEach(global => {\n if (global.domains.length > 0) {\n eqDomains.push(global.domains);\n }\n });\n }\n\n return this.settingsService.setEquivalentDomains(eqDomains);\n }\n\n private async syncPolicies(response: PolicyResponse[]) {\n const policies: { [id: string]: PolicyData; } = {};\n if (response != null) {\n response.forEach(p => {\n policies[p.id] = new PolicyData(p);\n });\n }\n return await this.policyService.replace(policies);\n }\n}\n","import { SendType } from '../../enums/sendType';\n\nimport { SendFileData } from './sendFileData';\nimport { SendTextData } from './sendTextData';\n\nimport { SendResponse } from '../response/sendResponse';\n\nexport class SendData {\n id: string;\n accessId: string;\n userId: string;\n type: SendType;\n name: string;\n notes: string;\n file: SendFileData;\n text: SendTextData;\n key: string;\n maxAccessCount?: number;\n accessCount: number;\n revisionDate: string;\n expirationDate: string;\n deletionDate: string;\n password: string;\n disabled: boolean;\n hideEmail: boolean;\n\n constructor(response?: SendResponse, userId?: string) {\n if (response == null) {\n return;\n }\n\n this.id = response.id;\n this.accessId = response.accessId;\n this.userId = userId;\n this.type = response.type;\n this.name = response.name;\n this.notes = response.notes;\n this.key = response.key;\n this.maxAccessCount = response.maxAccessCount;\n this.accessCount = response.accessCount;\n this.revisionDate = response.revisionDate;\n this.expirationDate = response.expirationDate;\n this.deletionDate = response.deletionDate;\n this.password = response.password;\n this.disabled = response.disable;\n this.hideEmail = response.hideEmail;\n\n switch (this.type) {\n case SendType.Text:\n this.text = new SendTextData(response.text);\n break;\n case SendType.File:\n this.file = new SendFileData(response.file);\n break;\n default:\n break;\n }\n }\n}\n","import { ConstantsService } from './constants.service';\n\nimport { StorageService } from '../abstractions/storage.service';\nimport { TokenService as TokenServiceAbstraction } from '../abstractions/token.service';\n\nimport { Utils } from '../misc/utils';\n\nconst Keys = {\n accessToken: 'accessToken',\n refreshToken: 'refreshToken',\n twoFactorTokenPrefix: 'twoFactorToken_',\n};\n\nexport class TokenService implements TokenServiceAbstraction {\n token: string;\n decodedToken: any;\n refreshToken: string;\n\n constructor(private storageService: StorageService) {\n }\n\n async setTokens(accessToken: string, refreshToken: string): Promise {\n await this.setToken(accessToken);\n await this.setRefreshToken(refreshToken);\n }\n\n async setToken(token: string): Promise {\n this.token = token;\n this.decodedToken = null;\n\n if (await this.skipTokenStorage()) {\n // if we have a vault timeout and the action is log out, don't store token\n return;\n }\n\n return this.storageService.save(Keys.accessToken, token);\n }\n\n async getToken(): Promise {\n if (this.token != null) {\n return this.token;\n }\n\n this.token = await this.storageService.get(Keys.accessToken);\n return this.token;\n }\n\n async setRefreshToken(refreshToken: string): Promise {\n this.refreshToken = refreshToken;\n\n if (await this.skipTokenStorage()) {\n // if we have a vault timeout and the action is log out, don't store token\n return;\n }\n\n return this.storageService.save(Keys.refreshToken, refreshToken);\n }\n\n async getRefreshToken(): Promise {\n if (this.refreshToken != null) {\n return this.refreshToken;\n }\n\n this.refreshToken = await this.storageService.get(Keys.refreshToken);\n return this.refreshToken;\n }\n\n async toggleTokens(): Promise {\n const token = await this.getToken();\n const refreshToken = await this.getRefreshToken();\n const timeout = await this.storageService.get(ConstantsService.vaultTimeoutKey);\n const action = await this.storageService.get(ConstantsService.vaultTimeoutActionKey);\n if ((timeout != null || timeout === 0) && action === 'logOut') {\n // if we have a vault timeout and the action is log out, reset tokens\n await this.clearToken();\n this.token = token;\n this.refreshToken = refreshToken;\n return;\n }\n\n await this.setToken(token);\n await this.setRefreshToken(refreshToken);\n }\n\n setTwoFactorToken(token: string, email: string): Promise {\n return this.storageService.save(Keys.twoFactorTokenPrefix + email, token);\n }\n\n getTwoFactorToken(email: string): Promise {\n return this.storageService.get(Keys.twoFactorTokenPrefix + email);\n }\n\n clearTwoFactorToken(email: string): Promise {\n return this.storageService.remove(Keys.twoFactorTokenPrefix + email);\n }\n\n async clearToken(): Promise {\n this.token = null;\n this.decodedToken = null;\n this.refreshToken = null;\n\n await this.storageService.remove(Keys.accessToken);\n await this.storageService.remove(Keys.refreshToken);\n }\n\n // jwthelper methods\n // ref https://github.com/auth0/angular-jwt/blob/master/src/angularJwt/services/jwt.js\n\n decodeToken(): any {\n if (this.decodedToken) {\n return this.decodedToken;\n }\n\n if (this.token == null) {\n throw new Error('Token not found.');\n }\n\n const parts = this.token.split('.');\n if (parts.length !== 3) {\n throw new Error('JWT must have 3 parts');\n }\n\n const decoded = Utils.fromUrlB64ToUtf8(parts[1]);\n if (decoded == null) {\n throw new Error('Cannot decode the token');\n }\n\n this.decodedToken = JSON.parse(decoded);\n return this.decodedToken;\n }\n\n getTokenExpirationDate(): Date {\n const decoded = this.decodeToken();\n if (typeof decoded.exp === 'undefined') {\n return null;\n }\n\n const d = new Date(0); // The 0 here is the key, which sets the date to the epoch\n d.setUTCSeconds(decoded.exp);\n return d;\n }\n\n tokenSecondsRemaining(offsetSeconds: number = 0): number {\n const d = this.getTokenExpirationDate();\n if (d == null) {\n return 0;\n }\n\n const msRemaining = d.valueOf() - (new Date().valueOf() + (offsetSeconds * 1000));\n return Math.round(msRemaining / 1000);\n }\n\n tokenNeedsRefresh(minutes: number = 5): boolean {\n const sRemaining = this.tokenSecondsRemaining();\n return sRemaining < (60 * minutes);\n }\n\n getUserId(): string {\n const decoded = this.decodeToken();\n if (typeof decoded.sub === 'undefined') {\n throw new Error('No user id found');\n }\n\n return decoded.sub as string;\n }\n\n getEmail(): string {\n const decoded = this.decodeToken();\n if (typeof decoded.email === 'undefined') {\n throw new Error('No email found');\n }\n\n return decoded.email as string;\n }\n\n getEmailVerified(): boolean {\n const decoded = this.decodeToken();\n if (typeof decoded.email_verified === 'undefined') {\n throw new Error('No email verification found');\n }\n\n return decoded.email_verified as boolean;\n }\n\n getName(): string {\n const decoded = this.decodeToken();\n if (typeof decoded.name === 'undefined') {\n return null;\n }\n\n return decoded.name as string;\n }\n\n getPremium(): boolean {\n const decoded = this.decodeToken();\n if (typeof decoded.premium === 'undefined') {\n return false;\n }\n\n return decoded.premium as boolean;\n }\n\n getIssuer(): string {\n const decoded = this.decodeToken();\n if (typeof decoded.iss === 'undefined') {\n throw new Error('No issuer found');\n }\n\n return decoded.iss as string;\n }\n\n private async skipTokenStorage(): Promise {\n const timeout = await this.storageService.get(ConstantsService.vaultTimeoutKey);\n const action = await this.storageService.get(ConstantsService.vaultTimeoutActionKey);\n return timeout != null && action === 'logOut';\n }\n}\n","import { ConstantsService } from './constants.service';\n\nimport { CryptoFunctionService } from '../abstractions/cryptoFunction.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { TotpService as TotpServiceAbstraction } from '../abstractions/totp.service';\n\nimport { Utils } from '../misc/utils';\n\nconst B32Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';\nconst SteamChars = '23456789BCDFGHJKMNPQRTVWXY';\n\nexport class TotpService implements TotpServiceAbstraction {\n constructor(private storageService: StorageService, private cryptoFunctionService: CryptoFunctionService) { }\n\n async getCode(key: string): Promise {\n if (key == null) {\n return null;\n }\n let period = 30;\n let alg: 'sha1' | 'sha256' | 'sha512' = 'sha1';\n let digits = 6;\n let keyB32 = key;\n const isOtpAuth = key.toLowerCase().indexOf('otpauth://') === 0;\n const isSteamAuth = !isOtpAuth && key.toLowerCase().indexOf('steam://') === 0;\n if (isOtpAuth) {\n const params = Utils.getQueryParams(key);\n if (params.has('digits') && params.get('digits') != null) {\n try {\n const digitParams = parseInt(params.get('digits').trim(), null);\n if (digitParams > 10) {\n digits = 10;\n } else if (digitParams > 0) {\n digits = digitParams;\n }\n } catch { }\n }\n if (params.has('period') && params.get('period') != null) {\n try {\n const periodParam = parseInt(params.get('period').trim(), null);\n if (periodParam > 0) {\n period = periodParam;\n }\n } catch { }\n }\n if (params.has('secret') && params.get('secret') != null) {\n keyB32 = params.get('secret');\n }\n if (params.has('algorithm') && params.get('algorithm') != null) {\n const algParam = params.get('algorithm').toLowerCase();\n if (algParam === 'sha1' || algParam === 'sha256' || algParam === 'sha512') {\n alg = algParam;\n }\n }\n } else if (isSteamAuth) {\n keyB32 = key.substr('steam://'.length);\n digits = 5;\n }\n\n const epoch = Math.round(new Date().getTime() / 1000.0);\n const timeHex = this.leftPad(this.decToHex(Math.floor(epoch / period)), 16, '0');\n const timeBytes = Utils.fromHexToArray(timeHex);\n const keyBytes = this.b32ToBytes(keyB32);\n\n if (!keyBytes.length || !timeBytes.length) {\n return null;\n }\n\n const hash = await this.sign(keyBytes, timeBytes, alg);\n if (hash.length === 0) {\n return null;\n }\n\n /* tslint:disable */\n const offset = (hash[hash.length - 1] & 0xf);\n const binary = ((hash[offset] & 0x7f) << 24) | ((hash[offset + 1] & 0xff) << 16) |\n ((hash[offset + 2] & 0xff) << 8) | (hash[offset + 3] & 0xff);\n /* tslint:enable */\n\n let otp = '';\n if (isSteamAuth) {\n // tslint:disable-next-line\n let fullCode = binary & 0x7fffffff;\n for (let i = 0; i < digits; i++) {\n otp += SteamChars[fullCode % SteamChars.length];\n fullCode = Math.trunc(fullCode / SteamChars.length);\n }\n } else {\n otp = (binary % Math.pow(10, digits)).toString();\n otp = this.leftPad(otp, digits, '0');\n }\n\n return otp;\n }\n\n getTimeInterval(key: string): number {\n let period = 30;\n if (key != null && key.toLowerCase().indexOf('otpauth://') === 0) {\n const params = Utils.getQueryParams(key);\n if (params.has('period') && params.get('period') != null) {\n try {\n period = parseInt(params.get('period').trim(), null);\n } catch { }\n }\n }\n return period;\n }\n\n async isAutoCopyEnabled(): Promise {\n return !(await this.storageService.get(ConstantsService.disableAutoTotpCopyKey));\n }\n\n // Helpers\n\n private leftPad(s: string, l: number, p: string): string {\n if (l + 1 >= s.length) {\n s = Array(l + 1 - s.length).join(p) + s;\n }\n return s;\n }\n\n private decToHex(d: number): string {\n return (d < 15.5 ? '0' : '') + Math.round(d).toString(16);\n }\n\n private b32ToHex(s: string): string {\n s = s.toUpperCase();\n let cleanedInput = '';\n\n for (let i = 0; i < s.length; i++) {\n if (B32Chars.indexOf(s[i]) < 0) {\n continue;\n }\n\n cleanedInput += s[i];\n }\n s = cleanedInput;\n\n let bits = '';\n let hex = '';\n for (let i = 0; i < s.length; i++) {\n const byteIndex = B32Chars.indexOf(s.charAt(i));\n if (byteIndex < 0) {\n continue;\n }\n bits += this.leftPad(byteIndex.toString(2), 5, '0');\n }\n for (let i = 0; i + 4 <= bits.length; i += 4) {\n const chunk = bits.substr(i, 4);\n hex = hex + parseInt(chunk, 2).toString(16);\n }\n return hex;\n }\n\n private b32ToBytes(s: string): Uint8Array {\n return Utils.fromHexToArray(this.b32ToHex(s));\n }\n\n private async sign(keyBytes: Uint8Array, timeBytes: Uint8Array, alg: 'sha1' | 'sha256' | 'sha512') {\n const signature = await this.cryptoFunctionService.hmac(timeBytes.buffer, keyBytes.buffer, alg);\n return new Uint8Array(signature);\n }\n}\n","import { StorageService } from '../abstractions/storage.service';\nimport { TokenService } from '../abstractions/token.service';\nimport { UserService as UserServiceAbstraction } from '../abstractions/user.service';\n\nimport { OrganizationData } from '../models/data/organizationData';\nimport { Organization } from '../models/domain/organization';\n\nimport { KdfType } from '../enums/kdfType';\n\nconst Keys = {\n userId: 'userId',\n userEmail: 'userEmail',\n stamp: 'securityStamp',\n kdf: 'kdf',\n kdfIterations: 'kdfIterations',\n organizationsPrefix: 'organizations_',\n emailVerified: 'emailVerified',\n};\n\nexport class UserService implements UserServiceAbstraction {\n private userId: string;\n private email: string;\n private stamp: string;\n private kdf: KdfType;\n private kdfIterations: number;\n private emailVerified: boolean;\n\n constructor(private tokenService: TokenService, private storageService: StorageService) { }\n\n async setInformation(userId: string, email: string, kdf: KdfType, kdfIterations: number): Promise {\n this.email = email;\n this.userId = userId;\n this.kdf = kdf;\n this.kdfIterations = kdfIterations;\n\n await this.storageService.save(Keys.userEmail, email);\n await this.storageService.save(Keys.userId, userId);\n await this.storageService.save(Keys.kdf, kdf);\n await this.storageService.save(Keys.kdfIterations, kdfIterations);\n }\n\n setSecurityStamp(stamp: string): Promise {\n this.stamp = stamp;\n return this.storageService.save(Keys.stamp, stamp);\n }\n\n setEmailVerified(emailVerified: boolean) {\n this.emailVerified = emailVerified;\n return this.storageService.save(Keys.emailVerified, emailVerified);\n }\n\n async getUserId(): Promise {\n if (this.userId == null) {\n this.userId = await this.storageService.get(Keys.userId);\n }\n return this.userId;\n }\n\n async getEmail(): Promise {\n if (this.email == null) {\n this.email = await this.storageService.get(Keys.userEmail);\n }\n return this.email;\n }\n\n async getSecurityStamp(): Promise {\n if (this.stamp == null) {\n this.stamp = await this.storageService.get(Keys.stamp);\n }\n return this.stamp;\n }\n\n async getKdf(): Promise {\n if (this.kdf == null) {\n this.kdf = await this.storageService.get(Keys.kdf);\n }\n return this.kdf;\n }\n\n async getKdfIterations(): Promise {\n if (this.kdfIterations == null) {\n this.kdfIterations = await this.storageService.get(Keys.kdfIterations);\n }\n return this.kdfIterations;\n }\n\n async getEmailVerified(): Promise {\n if (this.emailVerified == null) {\n this.emailVerified = await this.storageService.get(Keys.emailVerified);\n }\n return this.emailVerified;\n }\n\n async clear(): Promise {\n const userId = await this.getUserId();\n\n await this.storageService.remove(Keys.userId);\n await this.storageService.remove(Keys.userEmail);\n await this.storageService.remove(Keys.stamp);\n await this.storageService.remove(Keys.kdf);\n await this.storageService.remove(Keys.kdfIterations);\n await this.clearOrganizations(userId);\n\n this.userId = this.email = this.stamp = null;\n this.kdf = null;\n this.kdfIterations = null;\n }\n\n async isAuthenticated(): Promise {\n const token = await this.tokenService.getToken();\n if (token == null) {\n return false;\n }\n\n const userId = await this.getUserId();\n return userId != null;\n }\n\n async canAccessPremium(): Promise {\n const authed = await this.isAuthenticated();\n if (!authed) {\n return false;\n }\n\n const tokenPremium = this.tokenService.getPremium();\n if (tokenPremium) {\n return true;\n }\n\n const orgs = await this.getAllOrganizations();\n for (let i = 0; i < orgs.length; i++) {\n if (orgs[i].usersGetPremium && orgs[i].enabled) {\n return true;\n }\n }\n return false;\n }\n\n async getOrganization(id: string): Promise {\n const userId = await this.getUserId();\n const organizations = await this.storageService.get<{ [id: string]: OrganizationData; }>(\n Keys.organizationsPrefix + userId);\n if (organizations == null || !organizations.hasOwnProperty(id)) {\n return null;\n }\n\n return new Organization(organizations[id]);\n }\n\n async getAllOrganizations(): Promise {\n const userId = await this.getUserId();\n const organizations = await this.storageService.get<{ [id: string]: OrganizationData; }>(\n Keys.organizationsPrefix + userId);\n const response: Organization[] = [];\n for (const id in organizations) {\n if (organizations.hasOwnProperty(id)) {\n response.push(new Organization(organizations[id]));\n }\n }\n return response;\n }\n\n async replaceOrganizations(organizations: { [id: string]: OrganizationData; }): Promise {\n const userId = await this.getUserId();\n await this.storageService.save(Keys.organizationsPrefix + userId, organizations);\n }\n\n async clearOrganizations(userId: string): Promise {\n await this.storageService.remove(Keys.organizationsPrefix + userId);\n }\n}\n","import { ConstantsService } from './constants.service';\n\nimport { CipherService } from '../abstractions/cipher.service';\nimport { CollectionService } from '../abstractions/collection.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { FolderService } from '../abstractions/folder.service';\nimport { MessagingService } from '../abstractions/messaging.service';\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\nimport { SearchService } from '../abstractions/search.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { TokenService } from '../abstractions/token.service';\nimport { UserService } from '../abstractions/user.service';\nimport { VaultTimeoutService as VaultTimeoutServiceAbstraction } from '../abstractions/vaultTimeout.service';\n\nimport { EncString } from '../models/domain/encString';\n\nexport class VaultTimeoutService implements VaultTimeoutServiceAbstraction {\n pinProtectedKey: EncString = null;\n biometricLocked: boolean = true;\n everBeenUnlocked: boolean = false;\n\n private inited = false;\n\n constructor(private cipherService: CipherService, private folderService: FolderService,\n private collectionService: CollectionService, private cryptoService: CryptoService,\n protected platformUtilsService: PlatformUtilsService, private storageService: StorageService,\n private messagingService: MessagingService, private searchService: SearchService,\n private userService: UserService, private tokenService: TokenService,\n private lockedCallback: () => Promise = null, private loggedOutCallback: () => Promise = null) {\n }\n\n init(checkOnInterval: boolean) {\n if (this.inited) {\n return;\n }\n\n this.inited = true;\n if (checkOnInterval) {\n this.startCheck();\n }\n }\n\n startCheck() {\n this.checkVaultTimeout();\n setInterval(() => this.checkVaultTimeout(), 10 * 1000); // check every 10 seconds\n }\n\n // Keys aren't stored for a device that is locked or logged out.\n async isLocked(): Promise {\n // Handle never lock startup situation\n if (await this.cryptoService.hasKeyStored('auto') && !this.everBeenUnlocked) {\n await this.cryptoService.getKey('auto');\n }\n\n return !this.cryptoService.hasKeyInMemory();\n }\n\n async checkVaultTimeout(): Promise {\n if (await this.platformUtilsService.isViewOpen()) {\n // Do not lock\n return;\n }\n\n // \"is logged out check\" - similar to isLocked, below\n const authed = await this.userService.isAuthenticated();\n if (!authed) {\n return;\n }\n\n if (await this.isLocked()) {\n return;\n }\n\n // This has the potential to be removed. Evaluate after all platforms complete with auto-logout\n let vaultTimeout = this.platformUtilsService.lockTimeout();\n if (vaultTimeout == null) {\n vaultTimeout = await this.storageService.get(ConstantsService.vaultTimeoutKey);\n }\n\n if (vaultTimeout == null || vaultTimeout < 0) {\n return;\n }\n\n const lastActive = await this.storageService.get(ConstantsService.lastActiveKey);\n if (lastActive == null) {\n return;\n }\n\n const vaultTimeoutSeconds = vaultTimeout * 60;\n const diffSeconds = ((new Date()).getTime() - lastActive) / 1000;\n if (diffSeconds >= vaultTimeoutSeconds) {\n // Pivot based on the saved vault timeout action\n const timeoutAction = await this.storageService.get(ConstantsService.vaultTimeoutActionKey);\n timeoutAction === 'logOut' ? await this.logOut() : await this.lock(true);\n }\n }\n\n async lock(allowSoftLock = false): Promise {\n const authed = await this.userService.isAuthenticated();\n if (!authed) {\n return;\n }\n\n this.biometricLocked = true;\n this.everBeenUnlocked = true;\n await this.cryptoService.clearKey(false);\n await this.cryptoService.clearOrgKeys(true);\n await this.cryptoService.clearKeyPair(true);\n await this.cryptoService.clearEncKey(true);\n\n this.folderService.clearCache();\n this.cipherService.clearCache();\n this.collectionService.clearCache();\n this.searchService.clearIndex();\n this.messagingService.send('locked');\n if (this.lockedCallback != null) {\n await this.lockedCallback();\n }\n }\n\n async logOut(): Promise {\n if (this.loggedOutCallback != null) {\n await this.loggedOutCallback();\n }\n }\n\n async setVaultTimeoutOptions(timeout: number, action: string): Promise {\n await this.storageService.save(ConstantsService.vaultTimeoutKey, timeout);\n await this.storageService.save(ConstantsService.vaultTimeoutActionKey, action);\n await this.cryptoService.toggleKey();\n await this.tokenService.toggleTokens();\n }\n\n async isPinLockSet(): Promise<[boolean, boolean]> {\n const protectedPin = await this.storageService.get(ConstantsService.protectedPin);\n const pinProtectedKey = await this.storageService.get(ConstantsService.pinProtectedKey);\n return [protectedPin != null, pinProtectedKey != null];\n }\n\n async isBiometricLockSet(): Promise {\n return await this.storageService.get(ConstantsService.biometricUnlockKey);\n }\n\n clear(): Promise {\n this.everBeenUnlocked = false;\n this.pinProtectedKey = null;\n return this.storageService.remove(ConstantsService.protectedPin);\n }\n}\n","import { LogLevelType } from '../enums/logLevelType';\n\nimport { LogService as LogServiceAbstraction } from '../abstractions/log.service';\n\nimport * as hrtime from 'browser-hrtime';\n\nexport class ConsoleLogService implements LogServiceAbstraction {\n protected timersMap: Map = new Map();\n\n constructor(protected isDev: boolean, protected filter: (level: LogLevelType) => boolean = null) { }\n\n debug(message: string) {\n if (!this.isDev) {\n return;\n }\n this.write(LogLevelType.Debug, message);\n }\n\n info(message: string) {\n this.write(LogLevelType.Info, message);\n }\n\n warning(message: string) {\n this.write(LogLevelType.Warning, message);\n }\n\n error(message: string) {\n this.write(LogLevelType.Error, message);\n }\n\n write(level: LogLevelType, message: string) {\n if (this.filter != null && this.filter(level)) {\n return;\n }\n\n switch (level) {\n case LogLevelType.Debug:\n // tslint:disable-next-line\n console.log(message);\n break;\n case LogLevelType.Info:\n // tslint:disable-next-line\n console.log(message);\n break;\n case LogLevelType.Warning:\n // tslint:disable-next-line\n console.warn(message);\n break;\n case LogLevelType.Error:\n // tslint:disable-next-line\n console.error(message);\n break;\n default:\n break;\n }\n }\n\n time(label: string = 'default') {\n if (!this.timersMap.has(label)) {\n this.timersMap.set(label, hrtime());\n }\n }\n\n timeEnd(label: string = 'default'): [number, number] {\n const elapsed = hrtime(this.timersMap.get(label));\n this.timersMap.delete(label);\n this.write(LogLevelType.Info, `${label}: ${elapsed[0] * 1000 + elapsed[1] / 10e6}ms`);\n return elapsed;\n }\n}\n","export enum LogLevelType {\n Debug,\n Info,\n Warning,\n Error,\n}\n","import { Cipher } from './cipher';\n\nimport { CipherView } from '../view/cipherView';\n\nimport { Cipher as CipherDomain } from '../domain/cipher';\n\nexport class CipherWithIds extends Cipher {\n id: string;\n collectionIds: string[];\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CipherView | CipherDomain) {\n this.id = o.id;\n super.build(o);\n this.collectionIds = o.collectionIds;\n }\n}\n","import { Collection } from './collection';\n\nimport { CollectionView } from '../view/collectionView';\n\nimport { Collection as CollectionDomain } from '../domain/collection';\n\nexport class CollectionWithId extends Collection {\n id: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CollectionView | CollectionDomain) {\n this.id = o.id;\n super.build(o);\n }\n}\n","import { Folder } from './folder';\n\nimport { FolderView } from '../view/folderView';\n\nimport { Folder as FolderDomain } from '../domain/folder';\n\nexport class FolderWithId extends Folder {\n id: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: FolderView | FolderDomain) {\n this.id = o.id;\n super.build(o);\n }\n}\n","import { ImportResult } from '../../models/domain/importResult';\nimport { BaseImporter } from '../baseImporter';\nimport { Importer } from '../importer';\n\nimport { CipherType } from '../../enums/cipherType';\nimport { FieldType } from '../../enums/fieldType';\nimport { CipherView } from '../../models/view';\nimport { CipherImportContext } from './cipherImportContext';\n\nexport const IgnoredProperties = ['ainfo', 'autosubmit', 'notesplain', 'ps', 'scope', 'tags', 'title', 'uuid', 'notes'];\n\nexport abstract class OnePasswordCsvImporter extends BaseImporter implements Importer {\n protected loginPropertyParsers = [this.setLoginUsername, this.setLoginPassword, this.setLoginUris];\n protected creditCardPropertyParsers = [this.setCreditCardNumber, this.setCreditCardVerification, this.setCreditCardCardholderName, this.setCreditCardExpiry];\n protected identityPropertyParsers = [this.setIdentityFirstName, this.setIdentityInitial, this.setIdentityLastName, this.setIdentityUserName, this.setIdentityEmail, this.setIdentityPhone, this.setIdentityCompany];\n\n abstract setCipherType(value: any, cipher: CipherView): void;\n\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true, {\n quoteChar: '\"',\n escapeChar: '\\\\',\n });\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (this.isNullOrWhitespace(this.getProp(value, 'title'))) {\n return;\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(this.getProp(value, 'title'), '--');\n\n this.setNotes(value, cipher);\n\n this.setCipherType(value, cipher);\n\n let altUsername: string = null;\n for (const property in value) {\n if (!value.hasOwnProperty(property) || this.isNullOrWhitespace(value[property])) {\n continue;\n }\n\n const context = new CipherImportContext(value, property, cipher);\n if (cipher.type === CipherType.Login && this.setKnownLoginValue(context)) {\n continue;\n } else if (cipher.type === CipherType.Card && this.setKnownCreditCardValue(context)) {\n continue;\n } else if (cipher.type === CipherType.Identity && this.setKnownIdentityValue(context)) {\n continue;\n }\n\n altUsername = this.setUnknownValue(context, altUsername);\n }\n\n if (cipher.type === CipherType.Login && !this.isNullOrWhitespace(altUsername) &&\n this.isNullOrWhitespace(cipher.login.username) && altUsername.indexOf('://') === -1) {\n cipher.login.username = altUsername;\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n protected getProp(obj: any, name: string): any {\n const lowerObj = Object.entries(obj).reduce((agg: any, entry: [string, any]) => {\n agg[entry[0].toLowerCase()] = entry[1];\n return agg;\n }, {});\n return lowerObj[name.toLowerCase()];\n }\n\n protected getPropByRegexp(obj: any, regexp: RegExp): any {\n const matchingKeys = Object.keys(obj).reduce((agg: string[], key: string) => {\n if (key.match(regexp)) {\n agg.push(key);\n }\n return agg;\n }, []);\n if (matchingKeys.length === 0) {\n return null;\n } else {\n return obj[matchingKeys[0]];\n }\n }\n\n protected getPropIncluding(obj: any, name: string): any {\n const includesMap = Object.keys(obj).reduce((agg: string[], entry: string) => {\n if (entry.toLowerCase().includes(name.toLowerCase())) {\n agg.push(entry);\n }\n return agg;\n }, []);\n if (includesMap.length === 0) {\n return null;\n } else {\n return obj[includesMap[0]];\n }\n }\n\n protected setNotes(importRecord: any, cipher: CipherView) {\n cipher.notes = this.getValueOrDefault(this.getProp(importRecord, 'notesPlain'), '') + '\\n' +\n this.getValueOrDefault(this.getProp(importRecord, 'notes'), '') + '\\n';\n cipher.notes.trim();\n\n }\n\n protected setKnownLoginValue(context: CipherImportContext): boolean {\n return this.loginPropertyParsers.reduce((agg: boolean, func) => {\n if (!agg) {\n agg = func.bind(this)(context);\n }\n return agg;\n }, false);\n }\n\n protected setKnownCreditCardValue(context: CipherImportContext): boolean {\n return this.creditCardPropertyParsers.reduce((agg: boolean, func) => {\n if (!agg) {\n agg = func.bind(this)(context);\n }\n return agg;\n }, false);\n }\n\n protected setKnownIdentityValue(context: CipherImportContext): boolean {\n return this.identityPropertyParsers.reduce((agg: boolean, func) => {\n if (!agg) {\n agg = func.bind(this)(context);\n }\n return agg;\n }, false);\n }\n\n protected setUnknownValue(context: CipherImportContext, altUsername: string): string {\n if (IgnoredProperties.indexOf(context.lowerProperty) === -1 && !context.lowerProperty.startsWith('section:') &&\n !context.lowerProperty.startsWith('section ')) {\n if (altUsername == null && context.lowerProperty === 'email') {\n return context.importRecord[context.property];\n }\n else if (context.lowerProperty === 'created date' || context.lowerProperty === 'modified date') {\n const readableDate = new Date(parseInt(context.importRecord[context.property], 10) * 1000).toUTCString();\n this.processKvp(context.cipher, '1Password ' + context.property, readableDate);\n return null;\n }\n if (context.lowerProperty.includes('password') || context.lowerProperty.includes('key') || context.lowerProperty.includes('secret')) {\n this.processKvp(context.cipher, context.property, context.importRecord[context.property], FieldType.Hidden);\n } else {\n this.processKvp(context.cipher, context.property, context.importRecord[context.property]);\n }\n }\n return null;\n }\n\n protected setIdentityFirstName(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.identity.firstName) && context.lowerProperty.includes('first name')) {\n context.cipher.identity.firstName = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setIdentityInitial(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.identity.middleName) && context.lowerProperty.includes('initial')) {\n context.cipher.identity.middleName = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setIdentityLastName(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.identity.lastName) && context.lowerProperty.includes('last name')) {\n context.cipher.identity.lastName = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setIdentityUserName(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.identity.username) && context.lowerProperty.includes('username')) {\n context.cipher.identity.username = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setIdentityCompany(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.identity.company) && context.lowerProperty.includes('company')) {\n context.cipher.identity.company = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setIdentityPhone(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.identity.phone) && context.lowerProperty.includes('default phone')) {\n context.cipher.identity.phone = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setIdentityEmail(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.identity.email) && context.lowerProperty.includes('email')) {\n context.cipher.identity.email = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setCreditCardNumber(context: CipherImportContext): boolean {\n if (this.isNullOrWhitespace(context.cipher.card.number) && context.lowerProperty.includes('number')) {\n context.cipher.card.number = context.importRecord[context.property];\n context.cipher.card.brand = this.getCardBrand(context.cipher.card.number);\n return true;\n }\n return false;\n }\n\n protected setCreditCardVerification(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.card.code) && context.lowerProperty.includes('verification number')) {\n context.cipher.card.code = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setCreditCardCardholderName(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.card.cardholderName) && context.lowerProperty.includes('cardholder name')) {\n context.cipher.card.cardholderName = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setCreditCardExpiry(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.card.expiration) && context.lowerProperty.includes('expiry date') &&\n context.importRecord[context.property].length === 7) {\n context.cipher.card.expMonth = (context.importRecord[context.property] as string).substr(0, 2);\n if (context.cipher.card.expMonth[0] === '0') {\n context.cipher.card.expMonth = context.cipher.card.expMonth.substr(1, 1);\n }\n context.cipher.card.expYear = (context.importRecord[context.property] as string).substr(3, 4);\n return true;\n }\n return false;\n }\n\n protected setLoginPassword(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.login.password) && context.lowerProperty === 'password') {\n context.cipher.login.password = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setLoginUsername(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.login.username) && context.lowerProperty === 'username') {\n context.cipher.login.username = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setLoginUris(context: CipherImportContext) {\n if ((context.cipher.login.uris == null || context.cipher.login.uris.length === 0) && context.lowerProperty === 'urls') {\n const urls = context.importRecord[context.property].split(this.newLineRegex);\n context.cipher.login.uris = this.makeUriArray(urls);\n return true;\n } else if ((context.lowerProperty === 'url')) {\n if (context.cipher.login.uris == null) {\n context.cipher.login.uris = [];\n }\n context.cipher.login.uris.concat(this.makeUriArray(context.importRecord[context.property]));\n return true;\n }\n return false;\n }\n}\n","export { AttachmentView } from './attachmentView';\nexport { CardView } from './cardView';\nexport { CipherView } from './cipherView';\nexport { FieldView } from './fieldView';\nexport { IdentityView } from './identityView';\nexport { LoginUriView } from './loginUriView';\nexport { LoginView } from './loginView';\nexport { SecureNoteView } from './secureNoteView';\nexport { View } from './view';\n","export enum NotificationType {\n SyncCipherUpdate = 0,\n SyncCipherCreate = 1,\n SyncLoginDelete = 2,\n SyncFolderDelete = 3,\n SyncCiphers = 4,\n\n SyncVault = 5,\n SyncOrgKeys = 6,\n SyncFolderCreate = 7,\n SyncFolderUpdate = 8,\n SyncCipherDelete = 9,\n SyncSettings = 10,\n\n LogOut = 11,\n\n SyncSendCreate = 12,\n SyncSendUpdate = 13,\n SyncSendDelete = 14,\n}\n","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport 'bootstrap';\nimport 'jquery';\nimport 'popper.js';\n\n// tslint:disable-next-line\nrequire('../scss/styles.scss');\n\nimport { AppModule } from './app.module';\n\nif (process.env.ENV === 'production') {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule, { preserveWhitespaces: true });\n","// extracted by mini-css-extract-plugin\nexport {};","import { ToasterModule } from 'angular2-toaster';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\n\nimport { AppRoutingModule } from './app-routing.module';\n\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\n\nimport { ServicesModule } from './services/services.module';\n\nimport { AppComponent } from './app.component';\nimport { ModalComponent } from './modal.component';\n\nimport { AvatarComponent } from './components/avatar.component';\nimport { PasswordStrengthComponent } from './components/password-strength.component';\n\nimport { FooterComponent } from './layouts/footer.component';\nimport { FrontendLayoutComponent } from './layouts/frontend-layout.component';\nimport { NavbarComponent } from './layouts/navbar.component';\nimport { OrganizationLayoutComponent } from './layouts/organization-layout.component';\nimport { UserLayoutComponent } from './layouts/user-layout.component';\n\nimport { AcceptEmergencyComponent } from './accounts/accept-emergency.component';\nimport { AcceptOrganizationComponent } from './accounts/accept-organization.component';\nimport { HintComponent } from './accounts/hint.component';\nimport { LockComponent } from './accounts/lock.component';\nimport { LoginComponent } from './accounts/login.component';\nimport { RecoverDeleteComponent } from './accounts/recover-delete.component';\nimport { RecoverTwoFactorComponent } from './accounts/recover-two-factor.component';\nimport { RegisterComponent } from './accounts/register.component';\nimport { SetPasswordComponent } from './accounts/set-password.component';\nimport { SsoComponent } from './accounts/sso.component';\nimport { TwoFactorOptionsComponent } from './accounts/two-factor-options.component';\nimport { TwoFactorComponent } from './accounts/two-factor.component';\nimport { VerifyEmailTokenComponent } from './accounts/verify-email-token.component';\nimport { VerifyRecoverDeleteComponent } from './accounts/verify-recover-delete.component';\n\nimport { BulkConfirmComponent as OrgBulkConfirmComponent } from './organizations/manage/bulk/bulk-confirm.component';\nimport { BulkRemoveComponent as OrgBulkRemoveComponent } from './organizations/manage/bulk/bulk-remove.component';\nimport { BulkStatusComponent as OrgBulkStatusComponent } from './organizations/manage/bulk/bulk-status.component';\nimport {\n CollectionAddEditComponent as OrgCollectionAddEditComponent,\n} from './organizations/manage/collection-add-edit.component';\nimport { CollectionsComponent as OrgManageCollectionsComponent } from './organizations/manage/collections.component';\nimport { EntityEventsComponent as OrgEntityEventsComponent } from './organizations/manage/entity-events.component';\nimport { EntityUsersComponent as OrgEntityUsersComponent } from './organizations/manage/entity-users.component';\nimport { EventsComponent as OrgEventsComponent } from './organizations/manage/events.component';\nimport { GroupAddEditComponent as OrgGroupAddEditComponent } from './organizations/manage/group-add-edit.component';\nimport { GroupsComponent as OrgGroupsComponent } from './organizations/manage/groups.component';\nimport { ManageComponent as OrgManageComponent } from './organizations/manage/manage.component';\nimport { PeopleComponent as OrgPeopleComponent } from './organizations/manage/people.component';\nimport { PoliciesComponent as OrgPoliciesComponent } from './organizations/manage/policies.component';\nimport { PolicyEditComponent as OrgPolicyEditComponent } from './organizations/manage/policy-edit.component';\nimport { ResetPasswordComponent as OrgResetPasswordComponent } from './organizations/manage/reset-password.component';\nimport { UserAddEditComponent as OrgUserAddEditComponent } from './organizations/manage/user-add-edit.component';\nimport { UserConfirmComponent as OrgUserConfirmComponent } from './organizations/manage/user-confirm.component';\nimport { UserGroupsComponent as OrgUserGroupsComponent } from './organizations/manage/user-groups.component';\n\nimport { AccountComponent as OrgAccountComponent } from './organizations/settings/account.component';\nimport { AdjustSeatsComponent } from './organizations/settings/adjust-seats.component';\nimport { ChangePlanComponent } from './organizations/settings/change-plan.component';\nimport { DeleteOrganizationComponent } from './organizations/settings/delete-organization.component';\nimport { DownloadLicenseComponent } from './organizations/settings/download-license.component';\nimport { OrganizationBillingComponent } from './organizations/settings/organization-billing.component';\nimport { OrganizationSubscriptionComponent } from './organizations/settings/organization-subscription.component';\nimport { SettingsComponent as OrgSettingComponent } from './organizations/settings/settings.component';\nimport {\n TwoFactorSetupComponent as OrgTwoFactorSetupComponent,\n} from './organizations/settings/two-factor-setup.component';\n\nimport { ExportComponent as OrgExportComponent } from './organizations/tools/export.component';\nimport {\n ExposedPasswordsReportComponent as OrgExposedPasswordsReportComponent,\n} from './organizations/tools/exposed-passwords-report.component';\nimport { ImportComponent as OrgImportComponent } from './organizations/tools/import.component';\nimport {\n InactiveTwoFactorReportComponent as OrgInactiveTwoFactorReportComponent,\n} from './organizations/tools/inactive-two-factor-report.component';\nimport {\n ReusedPasswordsReportComponent as OrgReusedPasswordsReportComponent,\n} from './organizations/tools/reused-passwords-report.component';\nimport { ToolsComponent as OrgToolsComponent } from './organizations/tools/tools.component';\nimport {\n UnsecuredWebsitesReportComponent as OrgUnsecuredWebsitesReportComponent,\n} from './organizations/tools/unsecured-websites-report.component';\nimport {\n WeakPasswordsReportComponent as OrgWeakPasswordsReportComponent,\n} from './organizations/tools/weak-passwords-report.component';\n\nimport { AddEditComponent as OrgAddEditComponent } from './organizations/vault/add-edit.component';\nimport { AttachmentsComponent as OrgAttachmentsComponent } from './organizations/vault/attachments.component';\nimport { CiphersComponent as OrgCiphersComponent } from './organizations/vault/ciphers.component';\nimport { CollectionsComponent as OrgCollectionsComponent } from './organizations/vault/collections.component';\nimport { GroupingsComponent as OrgGroupingsComponent } from './organizations/vault/groupings.component';\nimport { VaultComponent as OrgVaultComponent } from './organizations/vault/vault.component';\n\nimport { AccessComponent } from './send/access.component';\nimport { AddEditComponent as SendAddEditComponent } from './send/add-edit.component';\nimport { SendComponent } from './send/send.component';\n\nimport { AccountComponent } from './settings/account.component';\nimport { AddCreditComponent } from './settings/add-credit.component';\nimport { AdjustPaymentComponent } from './settings/adjust-payment.component';\nimport { AdjustStorageComponent } from './settings/adjust-storage.component';\nimport { ApiKeyComponent } from './settings/api-key.component';\nimport { ChangeEmailComponent } from './settings/change-email.component';\nimport { ChangeKdfComponent } from './settings/change-kdf.component';\nimport { ChangePasswordComponent } from './settings/change-password.component';\nimport { CreateOrganizationComponent } from './settings/create-organization.component';\nimport { DeauthorizeSessionsComponent } from './settings/deauthorize-sessions.component';\nimport { DeleteAccountComponent } from './settings/delete-account.component';\nimport { DomainRulesComponent } from './settings/domain-rules.component';\nimport { EmergencyAccessAddEditComponent } from './settings/emergency-access-add-edit.component';\nimport { EmergencyAccessAttachmentsComponent } from './settings/emergency-access-attachments.component';\nimport { EmergencyAccessConfirmComponent } from './settings/emergency-access-confirm.component';\nimport { EmergencyAccessTakeoverComponent } from './settings/emergency-access-takeover.component';\nimport { EmergencyAccessViewComponent } from './settings/emergency-access-view.component';\nimport { EmergencyAccessComponent } from './settings/emergency-access.component';\nimport { EmergencyAddEditComponent } from './settings/emergency-add-edit.component';\nimport { LinkSsoComponent } from './settings/link-sso.component';\nimport { OptionsComponent } from './settings/options.component';\nimport { OrganizationPlansComponent } from './settings/organization-plans.component';\nimport { OrganizationsComponent } from './settings/organizations.component';\nimport { PaymentComponent } from './settings/payment.component';\nimport { PremiumComponent } from './settings/premium.component';\nimport { ProfileComponent } from './settings/profile.component';\nimport { PurgeVaultComponent } from './settings/purge-vault.component';\nimport { SettingsComponent } from './settings/settings.component';\nimport { TaxInfoComponent } from './settings/tax-info.component';\nimport { TwoFactorAuthenticatorComponent } from './settings/two-factor-authenticator.component';\nimport { TwoFactorDuoComponent } from './settings/two-factor-duo.component';\nimport { TwoFactorEmailComponent } from './settings/two-factor-email.component';\nimport { TwoFactorRecoveryComponent } from './settings/two-factor-recovery.component';\nimport { TwoFactorSetupComponent } from './settings/two-factor-setup.component';\nimport { TwoFactorVerifyComponent } from './settings/two-factor-verify.component';\nimport { TwoFactorWebAuthnComponent } from './settings/two-factor-webauthn.component';\nimport { TwoFactorYubiKeyComponent } from './settings/two-factor-yubikey.component';\nimport { UpdateKeyComponent } from './settings/update-key.component';\nimport { UpdateLicenseComponent } from './settings/update-license.component';\nimport { UserBillingComponent } from './settings/user-billing.component';\nimport { UserSubscriptionComponent } from './settings/user-subscription.component';\nimport { VerifyEmailComponent } from './settings/verify-email.component';\n\nimport { BreachReportComponent } from './tools/breach-report.component';\nimport { ExportComponent } from './tools/export.component';\nimport { ExposedPasswordsReportComponent } from './tools/exposed-passwords-report.component';\nimport { ImportComponent } from './tools/import.component';\nimport { InactiveTwoFactorReportComponent } from './tools/inactive-two-factor-report.component';\nimport { PasswordGeneratorHistoryComponent } from './tools/password-generator-history.component';\nimport { PasswordGeneratorComponent } from './tools/password-generator.component';\nimport { ReusedPasswordsReportComponent } from './tools/reused-passwords-report.component';\nimport { ToolsComponent } from './tools/tools.component';\nimport { UnsecuredWebsitesReportComponent } from './tools/unsecured-websites-report.component';\nimport { WeakPasswordsReportComponent } from './tools/weak-passwords-report.component';\n\nimport { AddEditComponent } from './vault/add-edit.component';\nimport { AttachmentsComponent } from './vault/attachments.component';\nimport { BulkActionsComponent } from './vault/bulk-actions.component';\nimport { BulkDeleteComponent } from './vault/bulk-delete.component';\nimport { BulkMoveComponent } from './vault/bulk-move.component';\nimport { BulkRestoreComponent } from './vault/bulk-restore.component';\nimport { BulkShareComponent } from './vault/bulk-share.component';\nimport { CiphersComponent } from './vault/ciphers.component';\nimport { CollectionsComponent } from './vault/collections.component';\nimport { FolderAddEditComponent } from './vault/folder-add-edit.component';\nimport { GroupingsComponent } from './vault/groupings.component';\nimport { SendInfoComponent } from './vault/send-info.component';\nimport { ShareComponent } from './vault/share.component';\nimport { VaultComponent } from './vault/vault.component';\n\nimport { CalloutComponent } from 'jslib-angular/components/callout.component';\nimport { IconComponent } from 'jslib-angular/components/icon.component';\n\nimport { A11yTitleDirective } from 'jslib-angular/directives/a11y-title.directive';\nimport { ApiActionDirective } from 'jslib-angular/directives/api-action.directive';\nimport { AutofocusDirective } from 'jslib-angular/directives/autofocus.directive';\nimport { BlurClickDirective } from 'jslib-angular/directives/blur-click.directive';\nimport { BoxRowDirective } from 'jslib-angular/directives/box-row.directive';\nimport { FallbackSrcDirective } from 'jslib-angular/directives/fallback-src.directive';\nimport { InputVerbatimDirective } from 'jslib-angular/directives/input-verbatim.directive';\nimport { SelectCopyDirective } from 'jslib-angular/directives/select-copy.directive';\nimport { StopClickDirective } from 'jslib-angular/directives/stop-click.directive';\nimport { StopPropDirective } from 'jslib-angular/directives/stop-prop.directive';\nimport { TrueFalseValueDirective } from 'jslib-angular/directives/true-false-value.directive';\n\nimport { ColorPasswordPipe } from 'jslib-angular/pipes/color-password.pipe';\nimport { I18nPipe } from 'jslib-angular/pipes/i18n.pipe';\nimport { SearchCiphersPipe } from 'jslib-angular/pipes/search-ciphers.pipe';\nimport { SearchPipe } from 'jslib-angular/pipes/search.pipe';\n\nimport {\n DatePipe,\n registerLocaleData,\n} from '@angular/common';\nimport localeBg from '@angular/common/locales/bg';\nimport localeCa from '@angular/common/locales/ca';\nimport localeCs from '@angular/common/locales/cs';\nimport localeDa from '@angular/common/locales/da';\nimport localeDe from '@angular/common/locales/de';\nimport localeEl from '@angular/common/locales/el';\nimport localeEnGb from '@angular/common/locales/en-GB';\nimport localeEnIn from '@angular/common/locales/en-IN';\nimport localeEo from '@angular/common/locales/eo';\nimport localeEs from '@angular/common/locales/es';\nimport localeEt from '@angular/common/locales/et';\nimport localeFi from '@angular/common/locales/fi';\nimport localeFr from '@angular/common/locales/fr';\nimport localeHe from '@angular/common/locales/he';\nimport localeHr from '@angular/common/locales/hr';\nimport localeHu from '@angular/common/locales/hu';\nimport localeId from '@angular/common/locales/id';\nimport localeIt from '@angular/common/locales/it';\nimport localeJa from '@angular/common/locales/ja';\nimport localeKo from '@angular/common/locales/ko';\nimport localeLv from '@angular/common/locales/lv';\nimport localeMl from '@angular/common/locales/ml';\nimport localeNb from '@angular/common/locales/nb';\nimport localeNl from '@angular/common/locales/nl';\nimport localePl from '@angular/common/locales/pl';\nimport localePtBr from '@angular/common/locales/pt';\nimport localePtPt from '@angular/common/locales/pt-PT';\nimport localeRo from '@angular/common/locales/ro';\nimport localeRu from '@angular/common/locales/ru';\nimport localeSk from '@angular/common/locales/sk';\nimport localeSr from '@angular/common/locales/sr';\nimport localeSv from '@angular/common/locales/sv';\nimport localeTr from '@angular/common/locales/tr';\nimport localeUk from '@angular/common/locales/uk';\nimport localeZhCn from '@angular/common/locales/zh-Hans';\nimport localeZhTw from '@angular/common/locales/zh-Hant';\n\nregisterLocaleData(localeCa, 'ca');\nregisterLocaleData(localeCs, 'cs');\nregisterLocaleData(localeBg, 'bg');\nregisterLocaleData(localeDa, 'da');\nregisterLocaleData(localeDe, 'de');\nregisterLocaleData(localeEl, 'el');\nregisterLocaleData(localeEnGb, 'en-GB');\nregisterLocaleData(localeEnIn, 'en-IN');\nregisterLocaleData(localeEs, 'es');\nregisterLocaleData(localeEt, 'et');\nregisterLocaleData(localeEo, 'eo');\nregisterLocaleData(localeFi, 'fi');\nregisterLocaleData(localeFr, 'fr');\nregisterLocaleData(localeHe, 'he');\nregisterLocaleData(localeHr, 'hr');\nregisterLocaleData(localeHu, 'hu');\nregisterLocaleData(localeId, 'id');\nregisterLocaleData(localeIt, 'it');\nregisterLocaleData(localeJa, 'ja');\nregisterLocaleData(localeKo, 'ko');\nregisterLocaleData(localeLv, 'lv');\nregisterLocaleData(localeMl, 'ml');\nregisterLocaleData(localeNb, 'nb');\nregisterLocaleData(localeNl, 'nl');\nregisterLocaleData(localePl, 'pl');\nregisterLocaleData(localePtBr, 'pt-BR');\nregisterLocaleData(localePtPt, 'pt-PT');\nregisterLocaleData(localeRo, 'ro');\nregisterLocaleData(localeRu, 'ru');\nregisterLocaleData(localeSk, 'sk');\nregisterLocaleData(localeSr, 'sr');\nregisterLocaleData(localeSv, 'sv');\nregisterLocaleData(localeTr, 'tr');\nregisterLocaleData(localeUk, 'uk');\nregisterLocaleData(localeZhCn, 'zh-CN');\nregisterLocaleData(localeZhTw, 'zh-TW');\n\n@NgModule({\n imports: [\n BrowserModule,\n BrowserAnimationsModule,\n FormsModule,\n AppRoutingModule,\n ServicesModule,\n ToasterModule.forRoot(),\n InfiniteScrollModule,\n DragDropModule,\n ],\n declarations: [\n A11yTitleDirective,\n AcceptEmergencyComponent,\n AccessComponent,\n AcceptOrganizationComponent,\n AccountComponent,\n SetPasswordComponent,\n AddCreditComponent,\n AddEditComponent,\n AdjustPaymentComponent,\n AdjustSeatsComponent,\n AdjustStorageComponent,\n ApiActionDirective,\n ApiKeyComponent,\n AppComponent,\n AttachmentsComponent,\n AutofocusDirective,\n AvatarComponent,\n BlurClickDirective,\n BoxRowDirective,\n BreachReportComponent,\n BulkActionsComponent,\n BulkDeleteComponent,\n BulkMoveComponent,\n BulkRestoreComponent,\n BulkShareComponent,\n CalloutComponent,\n ChangeEmailComponent,\n ChangeKdfComponent,\n ChangePasswordComponent,\n ChangePlanComponent,\n CiphersComponent,\n CollectionsComponent,\n ColorPasswordPipe,\n CreateOrganizationComponent,\n DeauthorizeSessionsComponent,\n DeleteAccountComponent,\n DeleteOrganizationComponent,\n DomainRulesComponent,\n DownloadLicenseComponent,\n EmergencyAccessAddEditComponent,\n EmergencyAccessAttachmentsComponent,\n EmergencyAccessComponent,\n EmergencyAccessConfirmComponent,\n EmergencyAccessTakeoverComponent,\n EmergencyAccessViewComponent,\n EmergencyAddEditComponent,\n ExportComponent,\n ExposedPasswordsReportComponent,\n FallbackSrcDirective,\n FolderAddEditComponent,\n FooterComponent,\n FrontendLayoutComponent,\n GroupingsComponent,\n HintComponent,\n I18nPipe,\n IconComponent,\n ImportComponent,\n InactiveTwoFactorReportComponent,\n InputVerbatimDirective,\n LinkSsoComponent,\n LockComponent,\n LoginComponent,\n ModalComponent,\n NavbarComponent,\n OptionsComponent,\n OrgAccountComponent,\n OrgAddEditComponent,\n OrganizationBillingComponent,\n OrganizationPlansComponent,\n OrganizationSubscriptionComponent,\n OrgAttachmentsComponent,\n OrgBulkStatusComponent,\n OrgBulkConfirmComponent,\n OrgBulkRemoveComponent,\n OrgCiphersComponent,\n OrgCollectionAddEditComponent,\n OrgCollectionsComponent,\n OrgEntityEventsComponent,\n OrgEntityUsersComponent,\n OrgEventsComponent,\n OrgExportComponent,\n OrgExposedPasswordsReportComponent,\n OrgImportComponent,\n OrgInactiveTwoFactorReportComponent,\n OrgGroupAddEditComponent,\n OrgGroupingsComponent,\n OrgGroupsComponent,\n OrgManageCollectionsComponent,\n OrgManageComponent,\n OrgPeopleComponent,\n OrgPolicyEditComponent,\n OrgPoliciesComponent,\n OrgResetPasswordComponent,\n OrgReusedPasswordsReportComponent,\n OrgSettingComponent,\n OrgToolsComponent,\n OrgTwoFactorSetupComponent,\n OrgUserAddEditComponent,\n OrgUserConfirmComponent,\n OrgUserGroupsComponent,\n OrganizationsComponent,\n OrganizationLayoutComponent,\n OrgUnsecuredWebsitesReportComponent,\n OrgVaultComponent,\n OrgWeakPasswordsReportComponent,\n PasswordGeneratorComponent,\n PasswordGeneratorHistoryComponent,\n PasswordStrengthComponent,\n PaymentComponent,\n PremiumComponent,\n ProfileComponent,\n PurgeVaultComponent,\n RecoverDeleteComponent,\n RecoverTwoFactorComponent,\n RegisterComponent,\n ReusedPasswordsReportComponent,\n SearchCiphersPipe,\n SearchPipe,\n SelectCopyDirective,\n SendAddEditComponent,\n SendComponent,\n SendInfoComponent,\n SettingsComponent,\n ShareComponent,\n SsoComponent,\n StopClickDirective,\n StopPropDirective,\n TaxInfoComponent,\n ToolsComponent,\n TrueFalseValueDirective,\n TwoFactorAuthenticatorComponent,\n TwoFactorComponent,\n TwoFactorDuoComponent,\n TwoFactorEmailComponent,\n TwoFactorOptionsComponent,\n TwoFactorRecoveryComponent,\n TwoFactorSetupComponent,\n TwoFactorVerifyComponent,\n TwoFactorWebAuthnComponent,\n TwoFactorYubiKeyComponent,\n UnsecuredWebsitesReportComponent,\n UpdateKeyComponent,\n UpdateLicenseComponent,\n UserBillingComponent,\n UserLayoutComponent,\n UserSubscriptionComponent,\n VaultComponent,\n VerifyEmailComponent,\n VerifyEmailTokenComponent,\n VerifyRecoverDeleteComponent,\n WeakPasswordsReportComponent,\n ],\n entryComponents: [\n AddEditComponent,\n ApiKeyComponent,\n AttachmentsComponent,\n BulkActionsComponent,\n BulkDeleteComponent,\n BulkMoveComponent,\n BulkRestoreComponent,\n BulkShareComponent,\n CollectionsComponent,\n DeauthorizeSessionsComponent,\n DeleteAccountComponent,\n DeleteOrganizationComponent,\n EmergencyAccessAddEditComponent,\n EmergencyAccessAttachmentsComponent,\n EmergencyAccessConfirmComponent,\n EmergencyAccessTakeoverComponent,\n EmergencyAddEditComponent,\n FolderAddEditComponent,\n ModalComponent,\n OrgAddEditComponent,\n OrgAttachmentsComponent,\n OrgBulkStatusComponent,\n OrgBulkConfirmComponent,\n OrgBulkRemoveComponent,\n OrgCollectionAddEditComponent,\n OrgCollectionsComponent,\n OrgEntityEventsComponent,\n OrgEntityUsersComponent,\n OrgGroupAddEditComponent,\n OrgPolicyEditComponent,\n OrgResetPasswordComponent,\n OrgUserAddEditComponent,\n OrgUserConfirmComponent,\n OrgUserGroupsComponent,\n PasswordGeneratorHistoryComponent,\n PurgeVaultComponent,\n SendAddEditComponent,\n ShareComponent,\n TwoFactorAuthenticatorComponent,\n TwoFactorDuoComponent,\n TwoFactorEmailComponent,\n TwoFactorOptionsComponent,\n TwoFactorRecoveryComponent,\n TwoFactorWebAuthnComponent,\n TwoFactorYubiKeyComponent,\n UpdateKeyComponent,\n ],\n providers: [DatePipe, SearchPipe],\n bootstrap: [AppComponent],\n})\nexport class AppModule { }\n","import { NgModule } from '@angular/core';\nimport {\n RouterModule,\n Routes,\n} from '@angular/router';\n\nimport { FrontendLayoutComponent } from './layouts/frontend-layout.component';\nimport { OrganizationLayoutComponent } from './layouts/organization-layout.component';\nimport { UserLayoutComponent } from './layouts/user-layout.component';\n\nimport { AcceptEmergencyComponent } from './accounts/accept-emergency.component';\nimport { AcceptOrganizationComponent } from './accounts/accept-organization.component';\nimport { HintComponent } from './accounts/hint.component';\nimport { LockComponent } from './accounts/lock.component';\nimport { LoginComponent } from './accounts/login.component';\nimport { RecoverDeleteComponent } from './accounts/recover-delete.component';\nimport { RecoverTwoFactorComponent } from './accounts/recover-two-factor.component';\nimport { RegisterComponent } from './accounts/register.component';\nimport { SetPasswordComponent } from './accounts/set-password.component';\nimport { SsoComponent } from './accounts/sso.component';\nimport { TwoFactorComponent } from './accounts/two-factor.component';\nimport { VerifyEmailTokenComponent } from './accounts/verify-email-token.component';\nimport { VerifyRecoverDeleteComponent } from './accounts/verify-recover-delete.component';\n\nimport { CollectionsComponent as OrgManageCollectionsComponent } from './organizations/manage/collections.component';\nimport { EventsComponent as OrgEventsComponent } from './organizations/manage/events.component';\nimport { GroupsComponent as OrgGroupsComponent } from './organizations/manage/groups.component';\nimport { ManageComponent as OrgManageComponent } from './organizations/manage/manage.component';\nimport { PeopleComponent as OrgPeopleComponent } from './organizations/manage/people.component';\nimport { PoliciesComponent as OrgPoliciesComponent } from './organizations/manage/policies.component';\n\nimport { AccountComponent as OrgAccountComponent } from './organizations/settings/account.component';\nimport { OrganizationBillingComponent } from './organizations/settings/organization-billing.component';\nimport { OrganizationSubscriptionComponent } from './organizations/settings/organization-subscription.component';\nimport { SettingsComponent as OrgSettingsComponent } from './organizations/settings/settings.component';\nimport {\n TwoFactorSetupComponent as OrgTwoFactorSetupComponent,\n} from './organizations/settings/two-factor-setup.component';\n\nimport { ExportComponent as OrgExportComponent } from './organizations/tools/export.component';\nimport {\n ExposedPasswordsReportComponent as OrgExposedPasswordsReportComponent,\n} from './organizations/tools/exposed-passwords-report.component';\nimport { ImportComponent as OrgImportComponent } from './organizations/tools/import.component';\nimport {\n InactiveTwoFactorReportComponent as OrgInactiveTwoFactorReportComponent,\n} from './organizations/tools/inactive-two-factor-report.component';\nimport {\n ReusedPasswordsReportComponent as OrgReusedPasswordsReportComponent,\n} from './organizations/tools/reused-passwords-report.component';\nimport { ToolsComponent as OrgToolsComponent } from './organizations/tools/tools.component';\nimport {\n UnsecuredWebsitesReportComponent as OrgUnsecuredWebsitesReportComponent,\n} from './organizations/tools/unsecured-websites-report.component';\nimport {\n WeakPasswordsReportComponent as OrgWeakPasswordsReportComponent,\n} from './organizations/tools/weak-passwords-report.component';\n\nimport { VaultComponent as OrgVaultComponent } from './organizations/vault/vault.component';\n\nimport { AccessComponent } from './send/access.component';\nimport { SendComponent } from './send/send.component';\n\nimport { AccountComponent } from './settings/account.component';\nimport { CreateOrganizationComponent } from './settings/create-organization.component';\nimport { DomainRulesComponent } from './settings/domain-rules.component';\nimport { OptionsComponent } from './settings/options.component';\nimport { OrganizationsComponent } from './settings/organizations.component';\nimport { PremiumComponent } from './settings/premium.component';\nimport { SettingsComponent } from './settings/settings.component';\nimport { TwoFactorSetupComponent } from './settings/two-factor-setup.component';\nimport { UserBillingComponent } from './settings/user-billing.component';\nimport { UserSubscriptionComponent } from './settings/user-subscription.component';\n\nimport { BreachReportComponent } from './tools/breach-report.component';\nimport { ExportComponent } from './tools/export.component';\nimport { ExposedPasswordsReportComponent } from './tools/exposed-passwords-report.component';\nimport { ImportComponent } from './tools/import.component';\nimport { InactiveTwoFactorReportComponent } from './tools/inactive-two-factor-report.component';\nimport { PasswordGeneratorComponent } from './tools/password-generator.component';\nimport { ReusedPasswordsReportComponent } from './tools/reused-passwords-report.component';\nimport { ToolsComponent } from './tools/tools.component';\nimport { UnsecuredWebsitesReportComponent } from './tools/unsecured-websites-report.component';\nimport { WeakPasswordsReportComponent } from './tools/weak-passwords-report.component';\n\nimport { VaultComponent } from './vault/vault.component';\n\nimport { OrganizationGuardService } from './services/organization-guard.service';\nimport { OrganizationTypeGuardService } from './services/organization-type-guard.service';\n\nimport { AuthGuardService } from 'jslib-angular/services/auth-guard.service';\nimport { LockGuardService } from 'jslib-angular/services/lock-guard.service';\nimport { UnauthGuardService } from 'jslib-angular/services/unauth-guard.service';\n\nimport { Permissions } from 'jslib-common/enums/permissions';\n\nimport { EmergencyAccessViewComponent } from './settings/emergency-access-view.component';\nimport { EmergencyAccessComponent } from './settings/emergency-access.component';\n\nconst routes: Routes = [\n {\n path: '',\n component: FrontendLayoutComponent,\n children: [\n { path: '', pathMatch: 'full', component: LoginComponent, canActivate: [UnauthGuardService] },\n { path: '2fa', component: TwoFactorComponent, canActivate: [UnauthGuardService] },\n {\n path: 'register', component: RegisterComponent,\n canActivate: [UnauthGuardService],\n data: { titleId: 'createAccount' },\n },\n {\n path: 'sso', component: SsoComponent,\n canActivate: [UnauthGuardService],\n data: { titleId: 'enterpriseSingleSignOn' },\n },\n {\n path: 'set-password', component: SetPasswordComponent,\n data: { titleId: 'setMasterPassword' },\n },\n {\n path: 'hint', component: HintComponent,\n canActivate: [UnauthGuardService],\n data: { titleId: 'passwordHint' },\n },\n {\n path: 'lock',\n component: LockComponent,\n canActivate: [LockGuardService],\n },\n { path: 'verify-email', component: VerifyEmailTokenComponent },\n {\n path: 'accept-organization',\n component: AcceptOrganizationComponent,\n data: { titleId: 'joinOrganization' },\n },\n {\n path: 'accept-emergency',\n component: AcceptEmergencyComponent,\n data: { titleId: 'acceptEmergency' },\n },\n { path: 'recover', pathMatch: 'full', redirectTo: 'recover-2fa' },\n {\n path: 'recover-2fa',\n component: RecoverTwoFactorComponent,\n canActivate: [UnauthGuardService],\n data: { titleId: 'recoverAccountTwoStep' },\n },\n {\n path: 'recover-delete',\n component: RecoverDeleteComponent,\n canActivate: [UnauthGuardService],\n data: { titleId: 'deleteAccount' },\n },\n {\n path: 'verify-recover-delete',\n component: VerifyRecoverDeleteComponent,\n canActivate: [UnauthGuardService],\n data: { titleId: 'deleteAccount' },\n },\n {\n path: 'send/:sendId/:key',\n component: AccessComponent,\n data: { title: 'Bitwarden Send' },\n },\n ],\n },\n {\n path: '',\n component: UserLayoutComponent,\n canActivate: [AuthGuardService],\n children: [\n { path: 'vault', component: VaultComponent, data: { titleId: 'myVault' } },\n { path: 'sends', component: SendComponent, data: { title: 'Send' } },\n {\n path: 'settings',\n component: SettingsComponent,\n children: [\n { path: '', pathMatch: 'full', redirectTo: 'account' },\n { path: 'account', component: AccountComponent, data: { titleId: 'myAccount' } },\n { path: 'options', component: OptionsComponent, data: { titleId: 'options' } },\n { path: 'domain-rules', component: DomainRulesComponent, data: { titleId: 'domainRules' } },\n { path: 'two-factor', component: TwoFactorSetupComponent, data: { titleId: 'twoStepLogin' } },\n { path: 'premium', component: PremiumComponent, data: { titleId: 'goPremium' } },\n { path: 'billing', component: UserBillingComponent, data: { titleId: 'billing' } },\n {\n path: 'subscription',\n component: UserSubscriptionComponent,\n data: { titleId: 'premiumMembership' },\n },\n { path: 'organizations', component: OrganizationsComponent, data: { titleId: 'organizations' } },\n {\n path: 'create-organization',\n component: CreateOrganizationComponent,\n data: { titleId: 'newOrganization' },\n },\n {\n path: 'emergency-access',\n children: [\n {\n path: '',\n component: EmergencyAccessComponent,\n data: { titleId: 'emergencyAccess' },\n },\n {\n path: ':id',\n component: EmergencyAccessViewComponent,\n data: { titleId: 'emergencyAccess' },\n },\n ],\n },\n ],\n },\n {\n path: 'tools',\n component: ToolsComponent,\n canActivate: [AuthGuardService],\n children: [\n { path: '', pathMatch: 'full', redirectTo: 'generator' },\n { path: 'import', component: ImportComponent, data: { titleId: 'importData' } },\n { path: 'export', component: ExportComponent, data: { titleId: 'exportVault' } },\n {\n path: 'generator',\n component: PasswordGeneratorComponent,\n data: { titleId: 'passwordGenerator' },\n },\n { path: 'breach-report', component: BreachReportComponent, data: { titleId: 'dataBreachReport' } },\n {\n path: 'reused-passwords-report',\n component: ReusedPasswordsReportComponent,\n data: { titleId: 'reusedPasswordsReport' },\n },\n {\n path: 'unsecured-websites-report',\n component: UnsecuredWebsitesReportComponent,\n data: { titleId: 'unsecuredWebsitesReport' },\n },\n {\n path: 'weak-passwords-report',\n component: WeakPasswordsReportComponent,\n data: { titleId: 'weakPasswordsReport' },\n },\n {\n path: 'exposed-passwords-report',\n component: ExposedPasswordsReportComponent,\n data: { titleId: 'exposedPasswordsReport' },\n },\n {\n path: 'inactive-two-factor-report',\n component: InactiveTwoFactorReportComponent,\n data: { titleId: 'inactive2faReport' },\n },\n ],\n },\n ],\n },\n {\n path: 'organizations/:organizationId',\n component: OrganizationLayoutComponent,\n canActivate: [AuthGuardService, OrganizationGuardService],\n children: [\n { path: '', pathMatch: 'full', redirectTo: 'vault' },\n { path: 'vault', component: OrgVaultComponent, data: { titleId: 'vault' } },\n {\n path: 'tools',\n component: OrgToolsComponent,\n canActivate: [OrganizationTypeGuardService],\n data: { permissions: [Permissions.AccessImportExport, Permissions.AccessReports] },\n children: [\n {\n path: '',\n pathMatch: 'full',\n redirectTo: 'import',\n },\n {\n path: 'import',\n component: OrgImportComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: 'importData',\n permissions: [Permissions.AccessImportExport],\n },\n },\n {\n path: 'export',\n component: OrgExportComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: 'exportVault',\n permissions: [Permissions.AccessImportExport],\n },\n },\n {\n path: 'exposed-passwords-report',\n component: OrgExposedPasswordsReportComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: 'exposedPasswordsReport',\n permissions: [Permissions.AccessReports],\n },\n },\n {\n path: 'inactive-two-factor-report',\n component: OrgInactiveTwoFactorReportComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: 'inactive2faReport',\n permissions: [Permissions.AccessReports],\n },\n },\n {\n path: 'reused-passwords-report',\n component: OrgReusedPasswordsReportComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: 'reusedPasswordsReport',\n permissions: [Permissions.AccessReports],\n },\n },\n {\n path: 'unsecured-websites-report',\n component: OrgUnsecuredWebsitesReportComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: 'unsecuredWebsitesReport',\n permissions: [Permissions.AccessReports],\n },\n },\n {\n path: 'weak-passwords-report',\n component: OrgWeakPasswordsReportComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: 'weakPasswordsReport',\n permissions: [Permissions.AccessReports],\n },\n },\n ],\n },\n {\n path: 'manage',\n component: OrgManageComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n permissions: [\n Permissions.ManageAssignedCollections,\n Permissions.ManageAllCollections,\n Permissions.AccessEventLogs,\n Permissions.ManageGroups,\n Permissions.ManageUsers,\n Permissions.ManagePolicies,\n ],\n },\n children: [\n {\n path: '',\n pathMatch: 'full',\n redirectTo: 'people',\n },\n {\n path: 'collections',\n component: OrgManageCollectionsComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: 'collections',\n permissions: [Permissions.ManageAssignedCollections, Permissions.ManageAllCollections],\n },\n },\n {\n path: 'events',\n component: OrgEventsComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: 'eventLogs',\n permissions: [Permissions.AccessEventLogs],\n },\n },\n {\n path: 'groups',\n component: OrgGroupsComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: 'groups',\n permissions: [Permissions.ManageGroups],\n },\n },\n {\n path: 'people',\n component: OrgPeopleComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: 'people',\n permissions: [Permissions.ManageUsers, Permissions.ManageUsersPassword],\n },\n },\n {\n path: 'policies',\n component: OrgPoliciesComponent,\n canActivate: [OrganizationTypeGuardService],\n data: {\n titleId: 'policies',\n permissions: [Permissions.ManagePolicies],\n },\n },\n ],\n },\n {\n path: 'settings',\n component: OrgSettingsComponent,\n canActivate: [OrganizationTypeGuardService],\n data: { permissions: [Permissions.ManageOrganization] },\n children: [\n { path: '', pathMatch: 'full', redirectTo: 'account' },\n { path: 'account', component: OrgAccountComponent, data: { titleId: 'myOrganization' } },\n { path: 'two-factor', component: OrgTwoFactorSetupComponent, data: { titleId: 'twoStepLogin' } },\n {\n path: 'billing',\n component: OrganizationBillingComponent,\n data: { titleId: 'billing' },\n },\n {\n path: 'subscription',\n component: OrganizationSubscriptionComponent,\n data: { titleId: 'subscription' },\n },\n ],\n },\n ],\n },\n { path: '**', redirectTo: '' },\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes, {\n useHash: true,\n paramsInheritanceStrategy: 'always',\n /*enableTracing: true,*/\n })],\n exports: [RouterModule],\n})\nexport class AppRoutingModule { }\n","import { BroadcasterService as BroadcasterServiceAbstraction } from '../abstractions/broadcaster.service';\n\nexport class BroadcasterService implements BroadcasterServiceAbstraction {\n subscribers: Map any> = new Map any>();\n\n send(message: any, id?: string) {\n if (id != null) {\n if (this.subscribers.has(id)) {\n this.subscribers.get(id)(message);\n }\n return;\n }\n\n this.subscribers.forEach(value => {\n value(message);\n });\n }\n\n subscribe(id: string, messageCallback: (message: any) => any) {\n this.subscribers.set(id, messageCallback);\n }\n\n unsubscribe(id: string) {\n if (this.subscribers.has(id)) {\n this.subscribers.delete(id);\n }\n }\n}\n","export function getDomain(host: string): string | null {\n return null;\n}\n","export class EmergencyAccessAcceptRequest {\n token: string;\n}\n","export class OrganizationUserAcceptRequest {\n token: string;\n}\n","import { Router } from '@angular/router';\n\nimport { PasswordHintRequest } from 'jslib-common/models/request/passwordHintRequest';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nexport class HintComponent {\n email: string = '';\n formPromise: Promise;\n\n protected successRoute = 'login';\n protected onSuccessfulSubmit: () => void;\n\n constructor(protected router: Router, protected i18nService: I18nService,\n protected apiService: ApiService, protected platformUtilsService: PlatformUtilsService) { }\n\n async submit() {\n if (this.email == null || this.email === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('emailRequired'));\n return;\n }\n if (this.email.indexOf('@') === -1) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('invalidEmail'));\n return;\n }\n\n try {\n this.formPromise = this.apiService.postPasswordHint(new PasswordHintRequest(this.email));\n await this.formPromise;\n this.platformUtilsService.showToast('success', null, this.i18nService.t('masterPassSent'));\n if (this.onSuccessfulSubmit != null) {\n this.onSuccessfulSubmit();\n } else if (this.router != null) {\n this.router.navigate([this.successRoute]);\n }\n } catch { }\n }\n}\n","export class PasswordHintRequest {\n email: string;\n\n constructor(email: string) {\n this.email = email;\n }\n}\n","import { Directive, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\nimport { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service';\n\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\nimport { EncString } from 'jslib-common/models/domain/encString';\nimport { SymmetricCryptoKey } from 'jslib-common/models/domain/symmetricCryptoKey';\n\nimport { PasswordVerificationRequest } from 'jslib-common/models/request/passwordVerificationRequest';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\nimport { HashPurpose } from 'jslib-common/enums/hashPurpose';\n\n@Directive()\nexport class LockComponent implements OnInit {\n masterPassword: string = '';\n pin: string = '';\n showPassword: boolean = false;\n email: string;\n pinLock: boolean = false;\n webVaultHostname: string = '';\n formPromise: Promise;\n supportsBiometric: boolean;\n biometricLock: boolean;\n biometricText: string;\n\n protected successRoute: string = 'vault';\n protected onSuccessfulSubmit: () => void;\n\n private invalidPinAttempts = 0;\n private pinSet: [boolean, boolean];\n\n constructor(protected router: Router, protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService, protected messagingService: MessagingService,\n protected userService: UserService, protected cryptoService: CryptoService,\n protected storageService: StorageService, protected vaultTimeoutService: VaultTimeoutService,\n protected environmentService: EnvironmentService, protected stateService: StateService,\n protected apiService: ApiService) { }\n\n async ngOnInit() {\n this.pinSet = await this.vaultTimeoutService.isPinLockSet();\n this.pinLock = (this.pinSet[0] && this.vaultTimeoutService.pinProtectedKey != null) || this.pinSet[1];\n this.supportsBiometric = await this.platformUtilsService.supportsBiometric();\n this.biometricLock = await this.vaultTimeoutService.isBiometricLockSet() &&\n (await this.cryptoService.hasKeyStored('biometric') || !this.platformUtilsService.supportsSecureStorage());\n this.biometricText = await this.storageService.get(ConstantsService.biometricText);\n this.email = await this.userService.getEmail();\n let vaultUrl = this.environmentService.getWebVaultUrl();\n if (vaultUrl == null) {\n vaultUrl = 'https://bitwarden.com';\n }\n this.webVaultHostname = Utils.getHostname(vaultUrl);\n }\n\n async submit() {\n if (this.pinLock && (this.pin == null || this.pin === '')) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('pinRequired'));\n return;\n }\n if (!this.pinLock && (this.masterPassword == null || this.masterPassword === '')) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassRequired'));\n return;\n }\n\n const kdf = await this.userService.getKdf();\n const kdfIterations = await this.userService.getKdfIterations();\n\n if (this.pinLock) {\n let failed = true;\n try {\n if (this.pinSet[0]) {\n const key = await this.cryptoService.makeKeyFromPin(this.pin, this.email, kdf, kdfIterations,\n this.vaultTimeoutService.pinProtectedKey);\n const encKey = await this.cryptoService.getEncKey(key);\n const protectedPin = await this.storageService.get(ConstantsService.protectedPin);\n const decPin = await this.cryptoService.decryptToUtf8(new EncString(protectedPin), encKey);\n failed = decPin !== this.pin;\n if (!failed) {\n await this.setKeyAndContinue(key);\n }\n } else {\n const key = await this.cryptoService.makeKeyFromPin(this.pin, this.email, kdf, kdfIterations);\n failed = false;\n await this.setKeyAndContinue(key);\n }\n } catch {\n failed = true;\n }\n\n if (failed) {\n this.invalidPinAttempts++;\n if (this.invalidPinAttempts >= 5) {\n this.messagingService.send('logout');\n return;\n }\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('invalidPin'));\n }\n } else {\n const key = await this.cryptoService.makeKey(this.masterPassword, this.email, kdf, kdfIterations);\n const storedKeyHash = await this.cryptoService.getKeyHash();\n\n let passwordValid = false;\n\n if (storedKeyHash != null) {\n passwordValid = await this.cryptoService.compareAndUpdateKeyHash(this.masterPassword, key);\n } else {\n const request = new PasswordVerificationRequest();\n const serverKeyHash = await this.cryptoService.hashPassword(this.masterPassword, key,\n HashPurpose.ServerAuthorization);\n request.masterPasswordHash = serverKeyHash;\n try {\n this.formPromise = this.apiService.postAccountVerifyPassword(request);\n await this.formPromise;\n passwordValid = true;\n const localKeyHash = await this.cryptoService.hashPassword(this.masterPassword, key,\n HashPurpose.LocalAuthorization);\n await this.cryptoService.setKeyHash(localKeyHash);\n } catch { }\n }\n\n if (passwordValid) {\n if (this.pinSet[0]) {\n const protectedPin = await this.storageService.get(ConstantsService.protectedPin);\n const encKey = await this.cryptoService.getEncKey(key);\n const decPin = await this.cryptoService.decryptToUtf8(new EncString(protectedPin), encKey);\n const pinKey = await this.cryptoService.makePinKey(decPin, this.email, kdf, kdfIterations);\n this.vaultTimeoutService.pinProtectedKey = await this.cryptoService.encrypt(key.key, pinKey);\n }\n this.setKeyAndContinue(key);\n } else {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('invalidMasterPassword'));\n }\n }\n }\n\n async logOut() {\n const confirmed = await this.platformUtilsService.showDialog(this.i18nService.t('logOutConfirmation'),\n this.i18nService.t('logOut'), this.i18nService.t('logOut'), this.i18nService.t('cancel'));\n if (confirmed) {\n this.messagingService.send('logout');\n }\n }\n\n async unlockBiometric() {\n if (!this.biometricLock) {\n return;\n }\n\n const success = (await this.cryptoService.getKey('biometric')) != null;\n\n if (success) {\n await this.doContinue();\n }\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n document.getElementById(this.pinLock ? 'pin' : 'masterPassword').focus();\n }\n\n private async setKeyAndContinue(key: SymmetricCryptoKey) {\n await this.cryptoService.setKey(key);\n this.doContinue();\n }\n\n private async doContinue() {\n this.vaultTimeoutService.biometricLocked = false;\n this.vaultTimeoutService.everBeenUnlocked = true;\n const disableFavicon = await this.storageService.get(ConstantsService.disableFaviconKey);\n await this.stateService.save(ConstantsService.disableFaviconKey, !!disableFavicon);\n this.messagingService.send('unlocked');\n if (this.onSuccessfulSubmit != null) {\n this.onSuccessfulSubmit();\n } else if (this.router != null) {\n this.router.navigate([this.successRoute]);\n }\n }\n}\n","import {\n Directive,\n Input,\n OnInit,\n} from '@angular/core';\n\nimport { Router } from '@angular/router';\n\nimport { AuthResult } from 'jslib-common/models/domain/authResult';\n\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { CryptoFunctionService } from 'jslib-common/abstractions/cryptoFunction.service';\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\n\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\nconst Keys = {\n rememberedEmail: 'rememberedEmail',\n rememberEmail: 'rememberEmail',\n};\n\n@Directive()\nexport class LoginComponent implements OnInit {\n @Input() email: string = '';\n @Input() rememberEmail = true;\n\n masterPassword: string = '';\n showPassword: boolean = false;\n formPromise: Promise;\n onSuccessfulLogin: () => Promise;\n onSuccessfulLoginNavigate: () => Promise;\n onSuccessfulLoginTwoFactorNavigate: () => Promise;\n\n protected twoFactorRoute = '2fa';\n protected successRoute = 'vault';\n\n constructor(protected authService: AuthService, protected router: Router,\n protected platformUtilsService: PlatformUtilsService, protected i18nService: I18nService,\n protected stateService: StateService, protected environmentService: EnvironmentService,\n protected passwordGenerationService: PasswordGenerationService,\n protected cryptoFunctionService: CryptoFunctionService, private storageService: StorageService) { }\n\n async ngOnInit() {\n if (this.email == null || this.email === '') {\n this.email = await this.storageService.get(Keys.rememberedEmail);\n if (this.email == null) {\n this.email = '';\n }\n }\n this.rememberEmail = await this.storageService.get(Keys.rememberEmail);\n if (this.rememberEmail == null) {\n this.rememberEmail = true;\n }\n if (Utils.isBrowser) {\n document.getElementById(this.email == null || this.email === '' ? 'email' : 'masterPassword').focus();\n }\n }\n\n async submit() {\n if (this.email == null || this.email === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('emailRequired'));\n return;\n }\n if (this.email.indexOf('@') === -1) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('invalidEmail'));\n return;\n }\n if (this.masterPassword == null || this.masterPassword === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassRequired'));\n return;\n }\n\n try {\n this.formPromise = this.authService.logIn(this.email, this.masterPassword);\n const response = await this.formPromise;\n await this.storageService.save(Keys.rememberEmail, this.rememberEmail);\n if (this.rememberEmail) {\n await this.storageService.save(Keys.rememberedEmail, this.email);\n } else {\n await this.storageService.remove(Keys.rememberedEmail);\n }\n if (response.twoFactor) {\n if (this.onSuccessfulLoginTwoFactorNavigate != null) {\n this.onSuccessfulLoginTwoFactorNavigate();\n } else {\n this.router.navigate([this.twoFactorRoute]);\n }\n } else {\n const disableFavicon = await this.storageService.get(ConstantsService.disableFaviconKey);\n await this.stateService.save(ConstantsService.disableFaviconKey, !!disableFavicon);\n if (this.onSuccessfulLogin != null) {\n this.onSuccessfulLogin();\n }\n if (this.onSuccessfulLoginNavigate != null) {\n this.onSuccessfulLoginNavigate();\n } else {\n this.router.navigate([this.successRoute]);\n }\n }\n } catch { }\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n document.getElementById('masterPassword').focus();\n }\n\n async launchSsoBrowser(clientId: string, ssoRedirectUri: string) {\n // Generate necessary sso params\n const passwordOptions: any = {\n type: 'password',\n length: 64,\n uppercase: true,\n lowercase: true,\n numbers: true,\n special: false,\n };\n const state = await this.passwordGenerationService.generatePassword(passwordOptions);\n const ssoCodeVerifier = await this.passwordGenerationService.generatePassword(passwordOptions);\n const codeVerifierHash = await this.cryptoFunctionService.hash(ssoCodeVerifier, 'sha256');\n const codeChallenge = Utils.fromBufferToUrlB64(codeVerifierHash);\n\n // Save sso params\n await this.storageService.save(ConstantsService.ssoStateKey, state);\n await this.storageService.save(ConstantsService.ssoCodeVerifierKey, ssoCodeVerifier);\n\n // Build URI\n const webUrl = this.environmentService.getWebVaultUrl() == null ? 'https://vault.bitwarden.com' :\n this.environmentService.getWebVaultUrl();\n\n // Launch browser\n this.platformUtilsService.launchUri(webUrl + '/#/sso?clientId=' + clientId +\n '&redirectUri=' + encodeURIComponent(ssoRedirectUri) +\n '&state=' + state + '&codeChallenge=' + codeChallenge);\n }\n}\n","export class DeleteRecoverRequest {\n email: string;\n}\n","import { PasswordVerificationRequest } from './passwordVerificationRequest';\n\nexport class TwoFactorRecoveryRequest extends PasswordVerificationRequest {\n recoveryCode: string;\n email: string;\n}\n","import { Router } from '@angular/router';\n\nimport { KeysRequest } from 'jslib-common/models/request/keysRequest';\nimport { ReferenceEventRequest } from 'jslib-common/models/request/referenceEventRequest';\nimport { RegisterRequest } from 'jslib-common/models/request/registerRequest';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\n\nimport { KdfType } from 'jslib-common/enums/kdfType';\n\nexport class RegisterComponent {\n name: string = '';\n email: string = '';\n masterPassword: string = '';\n confirmMasterPassword: string = '';\n hint: string = '';\n showPassword: boolean = false;\n formPromise: Promise;\n masterPasswordScore: number;\n referenceData: ReferenceEventRequest;\n showTerms = true;\n acceptPolicies: boolean = false;\n\n protected successRoute = 'login';\n private masterPasswordStrengthTimeout: any;\n\n constructor(protected authService: AuthService, protected router: Router,\n protected i18nService: I18nService, protected cryptoService: CryptoService,\n protected apiService: ApiService, protected stateService: StateService,\n protected platformUtilsService: PlatformUtilsService,\n protected passwordGenerationService: PasswordGenerationService) {\n this.showTerms = !platformUtilsService.isSelfHost();\n }\n\n get masterPasswordScoreWidth() {\n return this.masterPasswordScore == null ? 0 : (this.masterPasswordScore + 1) * 20;\n }\n\n get masterPasswordScoreColor() {\n switch (this.masterPasswordScore) {\n case 4:\n return 'success';\n case 3:\n return 'primary';\n case 2:\n return 'warning';\n default:\n return 'danger';\n }\n }\n\n get masterPasswordScoreText() {\n switch (this.masterPasswordScore) {\n case 4:\n return this.i18nService.t('strong');\n case 3:\n return this.i18nService.t('good');\n case 2:\n return this.i18nService.t('weak');\n default:\n return this.masterPasswordScore != null ? this.i18nService.t('weak') : null;\n }\n }\n\n async submit() {\n if (!this.acceptPolicies && this.showTerms) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('acceptPoliciesError'));\n return;\n }\n\n if (this.email == null || this.email === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('emailRequired'));\n return;\n }\n if (this.email.indexOf('@') === -1) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('invalidEmail'));\n return;\n }\n if (this.masterPassword == null || this.masterPassword === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassRequired'));\n return;\n }\n if (this.masterPassword.length < 8) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassLength'));\n return;\n }\n if (this.masterPassword !== this.confirmMasterPassword) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('masterPassDoesntMatch'));\n return;\n }\n\n const strengthResult = this.passwordGenerationService.passwordStrength(this.masterPassword,\n this.getPasswordStrengthUserInput());\n if (strengthResult != null && strengthResult.score < 3) {\n const result = await this.platformUtilsService.showDialog(this.i18nService.t('weakMasterPasswordDesc'),\n this.i18nService.t('weakMasterPassword'), this.i18nService.t('yes'), this.i18nService.t('no'),\n 'warning');\n if (!result) {\n return;\n }\n }\n\n if (this.hint === this.masterPassword) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), this.i18nService.t('hintEqualsPassword'));\n return;\n }\n\n this.name = this.name === '' ? null : this.name;\n this.email = this.email.trim().toLowerCase();\n const kdf = KdfType.PBKDF2_SHA256;\n const useLowerKdf = this.platformUtilsService.isIE();\n const kdfIterations = useLowerKdf ? 10000 : 100000;\n const key = await this.cryptoService.makeKey(this.masterPassword, this.email, kdf, kdfIterations);\n const encKey = await this.cryptoService.makeEncKey(key);\n const hashedPassword = await this.cryptoService.hashPassword(this.masterPassword, key);\n const keys = await this.cryptoService.makeKeyPair(encKey[0]);\n const request = new RegisterRequest(this.email, this.name, hashedPassword,\n this.hint, encKey[1].encryptedString, kdf, kdfIterations, this.referenceData);\n request.keys = new KeysRequest(keys[0], keys[1].encryptedString);\n const orgInvite = await this.stateService.get('orgInvitation');\n if (orgInvite != null && orgInvite.token != null && orgInvite.organizationUserId != null) {\n request.token = orgInvite.token;\n request.organizationUserId = orgInvite.organizationUserId;\n }\n\n try {\n this.formPromise = this.apiService.postRegister(request);\n await this.formPromise;\n this.platformUtilsService.showToast('success', null, this.i18nService.t('newAccountCreated'));\n this.router.navigate([this.successRoute], { queryParams: { email: this.email } });\n } catch { }\n }\n\n togglePassword(confirmField: boolean) {\n this.showPassword = !this.showPassword;\n document.getElementById(confirmField ? 'masterPasswordRetype' : 'masterPassword').focus();\n }\n\n updatePasswordStrength() {\n if (this.masterPasswordStrengthTimeout != null) {\n clearTimeout(this.masterPasswordStrengthTimeout);\n }\n this.masterPasswordStrengthTimeout = setTimeout(() => {\n const strengthResult = this.passwordGenerationService.passwordStrength(this.masterPassword,\n this.getPasswordStrengthUserInput());\n this.masterPasswordScore = strengthResult == null ? null : strengthResult.score;\n }, 300);\n }\n\n private getPasswordStrengthUserInput() {\n let userInput: string[] = [];\n const atPosition = this.email.indexOf('@');\n if (atPosition > -1) {\n userInput = userInput.concat(this.email.substr(0, atPosition).trim().toLowerCase().split(/[^A-Za-z0-9]/));\n }\n if (this.name != null && this.name !== '') {\n userInput = userInput.concat(this.name.trim().toLowerCase().split(' '));\n }\n return userInput;\n }\n}\n","import { KeysRequest } from './keysRequest';\nimport { ReferenceEventRequest } from './referenceEventRequest';\n\nimport { KdfType } from '../../enums/kdfType';\n\nexport class RegisterRequest {\n name: string;\n email: string;\n masterPasswordHash: string;\n masterPasswordHint: string;\n key: string;\n keys: KeysRequest;\n token: string;\n organizationUserId: string;\n kdf: KdfType;\n kdfIterations: number;\n referenceData: ReferenceEventRequest;\n\n constructor(email: string, name: string, masterPasswordHash: string, masterPasswordHint: string, key: string,\n kdf: KdfType, kdfIterations: number, referenceData: ReferenceEventRequest) {\n this.name = name;\n this.email = email;\n this.masterPasswordHash = masterPasswordHash;\n this.masterPasswordHint = masterPasswordHint ? masterPasswordHint : null;\n this.key = key;\n this.kdf = kdf;\n this.kdfIterations = kdfIterations;\n this.referenceData = referenceData;\n }\n}\n","export class ReferenceEventRequest {\n id: string;\n layout: string;\n flow: string;\n}\n","import { Directive } from '@angular/core';\nimport {\n ActivatedRoute,\n Router\n} from '@angular/router';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { EncString } from 'jslib-common/models/domain/encString';\nimport { SymmetricCryptoKey } from 'jslib-common/models/domain/symmetricCryptoKey';\n\nimport { KeysRequest } from 'jslib-common/models/request/keysRequest';\nimport { SetPasswordRequest } from 'jslib-common/models/request/setPasswordRequest';\n\nimport { ChangePasswordComponent as BaseChangePasswordComponent } from './change-password.component';\n\nimport { HashPurpose } from 'jslib-common/enums/hashPurpose';\nimport { KdfType } from 'jslib-common/enums/kdfType';\n\n@Directive()\nexport class SetPasswordComponent extends BaseChangePasswordComponent {\n syncLoading: boolean = true;\n showPassword: boolean = false;\n hint: string = '';\n identifier: string = null;\n\n onSuccessfulChangePassword: () => Promise;\n successRoute = 'vault';\n\n constructor(i18nService: I18nService, cryptoService: CryptoService, messagingService: MessagingService,\n userService: UserService, passwordGenerationService: PasswordGenerationService,\n platformUtilsService: PlatformUtilsService, policyService: PolicyService, private router: Router,\n private apiService: ApiService, private syncService: SyncService, private route: ActivatedRoute) {\n super(i18nService, cryptoService, messagingService, userService, passwordGenerationService,\n platformUtilsService, policyService);\n }\n\n async ngOnInit() {\n await this.syncService.fullSync(true);\n this.syncLoading = false;\n\n const queryParamsSub = this.route.queryParams.subscribe(async qParams => {\n if (qParams.identifier != null) {\n this.identifier = qParams.identifier;\n }\n\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n\n super.ngOnInit();\n }\n\n async setupSubmitActions() {\n this.kdf = KdfType.PBKDF2_SHA256;\n const useLowerKdf = this.platformUtilsService.isIE();\n this.kdfIterations = useLowerKdf ? 10000 : 100000;\n return true;\n }\n\n async performSubmitActions(masterPasswordHash: string, key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString]) {\n const request = new SetPasswordRequest();\n request.masterPasswordHash = masterPasswordHash;\n request.key = encKey[1].encryptedString;\n request.masterPasswordHint = this.hint;\n request.kdf = this.kdf;\n request.kdfIterations = this.kdfIterations;\n request.orgIdentifier = this.identifier;\n\n const keys = await this.cryptoService.makeKeyPair(encKey[0]);\n request.keys = new KeysRequest(keys[0], keys[1].encryptedString);\n\n try {\n this.formPromise = this.apiService.setPassword(request);\n await this.formPromise;\n\n await this.userService.setInformation(await this.userService.getUserId(), await this.userService.getEmail(),\n this.kdf, this.kdfIterations);\n await this.cryptoService.setKey(key);\n await this.cryptoService.setEncKey(encKey[1].encryptedString);\n await this.cryptoService.setEncPrivateKey(keys[1].encryptedString);\n\n const localKeyHash = await this.cryptoService.hashPassword(this.masterPassword, key,\n HashPurpose.LocalAuthorization);\n await this.cryptoService.setKeyHash(localKeyHash);\n\n if (this.onSuccessfulChangePassword != null) {\n this.onSuccessfulChangePassword();\n } else {\n this.router.navigate([this.successRoute]);\n }\n } catch {\n this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred'));\n }\n }\n\n togglePassword(confirmField: boolean) {\n this.showPassword = !this.showPassword;\n document.getElementById(confirmField ? 'masterPasswordRetype' : 'masterPassword').focus();\n }\n}\n","import { KeysRequest } from './keysRequest';\n\nimport { KdfType } from '../../enums/kdfType';\n\nexport class SetPasswordRequest {\n masterPasswordHash: string;\n key: string;\n masterPasswordHint: string;\n keys: KeysRequest;\n kdf: KdfType;\n kdfIterations: number;\n orgIdentifier: string;\n}\n","import {\n Directive,\n EventEmitter,\n OnInit,\n Output,\n} from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\n\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\n@Directive()\nexport class TwoFactorOptionsComponent implements OnInit {\n @Output() onProviderSelected = new EventEmitter();\n @Output() onRecoverSelected = new EventEmitter();\n\n providers: any[] = [];\n\n constructor(protected authService: AuthService, protected router: Router,\n protected i18nService: I18nService, protected platformUtilsService: PlatformUtilsService,\n protected win: Window) { }\n\n ngOnInit() {\n this.providers = this.authService.getSupportedTwoFactorProviders(this.win);\n }\n\n choose(p: any) {\n this.onProviderSelected.emit(p.type);\n }\n\n recover() {\n this.platformUtilsService.launchUri('https://help.bitwarden.com/article/lost-two-step-device/');\n this.onRecoverSelected.emit();\n }\n}\n","import {\n Component,\n ComponentFactoryResolver,\n EventEmitter,\n OnDestroy,\n Output,\n Type,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\n\n@Component({\n selector: 'app-modal',\n template: ``,\n})\nexport class ModalComponent implements OnDestroy {\n @Output() onClose = new EventEmitter();\n @Output() onClosed = new EventEmitter();\n @Output() onShow = new EventEmitter();\n @Output() onShown = new EventEmitter();\n @ViewChild('container', { read: ViewContainerRef, static: true }) container: ViewContainerRef;\n parentContainer: ViewContainerRef = null;\n fade: boolean = true;\n\n constructor(protected componentFactoryResolver: ComponentFactoryResolver,\n protected messagingService: MessagingService) { }\n\n ngOnDestroy() {\n document.body.classList.remove('modal-open');\n document.body.removeChild(document.querySelector('.modal-backdrop'));\n }\n\n show(type: Type, parentContainer: ViewContainerRef, fade: boolean = true,\n setComponentParameters: (component: T) => void = null): T {\n this.onShow.emit();\n this.messagingService.send('modalShow');\n this.parentContainer = parentContainer;\n this.fade = fade;\n\n document.body.classList.add('modal-open');\n const backdrop = document.createElement('div');\n backdrop.className = 'modal-backdrop' + (this.fade ? ' fade' : '');\n document.body.appendChild(backdrop);\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(type);\n const componentRef = this.container.createComponent(factory);\n if (setComponentParameters != null) {\n setComponentParameters(componentRef.instance);\n }\n\n document.querySelector('.modal-dialog').addEventListener('click', (e: Event) => {\n e.stopPropagation();\n });\n\n const modals = Array.from(document.querySelectorAll('.modal, .modal *[data-dismiss=\"modal\"]'));\n for (const closeElement of modals) {\n closeElement.addEventListener('click', event => {\n this.close();\n });\n }\n\n this.onShown.emit();\n this.messagingService.send('modalShown');\n return componentRef.instance;\n }\n\n close() {\n this.onClose.emit();\n this.messagingService.send('modalClose');\n this.onClosed.emit();\n this.messagingService.send('modalClosed');\n if (this.parentContainer != null) {\n this.parentContainer.clear();\n }\n }\n}\n","import { Directive, OnDestroy, OnInit } from '@angular/core';\n\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\n\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\n\nimport { TwoFactorEmailRequest } from 'jslib-common/models/request/twoFactorEmailRequest';\n\nimport { AuthResult } from 'jslib-common/models/domain';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\n\nimport { TwoFactorProviders } from 'jslib-common/services/auth.service';\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\nimport * as DuoWebSDK from 'duo_web_sdk';\nimport { WebAuthn } from 'jslib-common/misc/webauthn';\n\n@Directive()\nexport class TwoFactorComponent implements OnInit, OnDestroy {\n token: string = '';\n remember: boolean = false;\n webAuthnReady: boolean = false;\n webAuthnNewTab: boolean = false;\n providers = TwoFactorProviders;\n providerType = TwoFactorProviderType;\n selectedProviderType: TwoFactorProviderType = TwoFactorProviderType.Authenticator;\n webAuthnSupported: boolean = false;\n webAuthn: WebAuthn = null;\n title: string = '';\n twoFactorEmail: string = null;\n formPromise: Promise;\n emailPromise: Promise;\n identifier: string = null;\n onSuccessfulLogin: () => Promise;\n onSuccessfulLoginNavigate: () => Promise;\n\n protected loginRoute = 'login';\n protected successRoute = 'vault';\n\n constructor(protected authService: AuthService, protected router: Router,\n protected i18nService: I18nService, protected apiService: ApiService,\n protected platformUtilsService: PlatformUtilsService, protected win: Window,\n protected environmentService: EnvironmentService, protected stateService: StateService,\n protected storageService: StorageService, protected route: ActivatedRoute) {\n this.webAuthnSupported = this.platformUtilsService.supportsWebAuthn(win);\n }\n\n async ngOnInit() {\n if (!this.authing || this.authService.twoFactorProvidersData == null) {\n this.router.navigate([this.loginRoute]);\n return;\n }\n\n const queryParamsSub = this.route.queryParams.subscribe(async qParams => {\n if (qParams.identifier != null) {\n this.identifier = qParams.identifier;\n }\n\n if (queryParamsSub != null) {\n queryParamsSub.unsubscribe();\n }\n });\n\n if (this.needsLock) {\n this.successRoute = 'lock';\n }\n\n if (this.win != null && this.webAuthnSupported) {\n let webVaultUrl = this.environmentService.getWebVaultUrl();\n if (webVaultUrl == null) {\n webVaultUrl = 'https://vault.bitwarden.com';\n }\n this.webAuthn = new WebAuthn(this.win, webVaultUrl, this.webAuthnNewTab, this.platformUtilsService,\n this.i18nService, (token: string) => {\n this.token = token;\n this.submit();\n }, (error: string) => {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), error);\n }, (info: string) => {\n if (info === 'ready') {\n this.webAuthnReady = true;\n }\n }\n );\n }\n\n this.selectedProviderType = this.authService.getDefaultTwoFactorProvider(this.webAuthnSupported);\n await this.init();\n }\n\n ngOnDestroy(): void {\n this.cleanupWebAuthn();\n this.webAuthn = null;\n }\n\n async init() {\n if (this.selectedProviderType == null) {\n this.title = this.i18nService.t('loginUnavailable');\n return;\n }\n\n this.cleanupWebAuthn();\n this.title = (TwoFactorProviders as any)[this.selectedProviderType].name;\n const providerData = this.authService.twoFactorProvidersData.get(this.selectedProviderType);\n switch (this.selectedProviderType) {\n case TwoFactorProviderType.WebAuthn:\n if (!this.webAuthnNewTab) {\n setTimeout(() => {\n this.authWebAuthn();\n }, 500);\n }\n break;\n case TwoFactorProviderType.Duo:\n case TwoFactorProviderType.OrganizationDuo:\n setTimeout(() => {\n DuoWebSDK.init({\n iframe: undefined,\n host: providerData.Host,\n sig_request: providerData.Signature,\n submit_callback: async (f: HTMLFormElement) => {\n const sig = f.querySelector('input[name=\"sig_response\"]') as HTMLInputElement;\n if (sig != null) {\n this.token = sig.value;\n await this.submit();\n }\n },\n });\n }, 0);\n break;\n case TwoFactorProviderType.Email:\n this.twoFactorEmail = providerData.Email;\n if (this.authService.twoFactorProvidersData.size > 1) {\n await this.sendEmail(false);\n }\n break;\n default:\n break;\n }\n }\n\n async submit() {\n if (this.token == null || this.token === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('verificationCodeRequired'));\n return;\n }\n\n if (this.selectedProviderType === TwoFactorProviderType.WebAuthn) {\n if (this.webAuthn != null) {\n this.webAuthn.stop();\n } else {\n return;\n }\n } else if (this.selectedProviderType === TwoFactorProviderType.Email ||\n this.selectedProviderType === TwoFactorProviderType.Authenticator) {\n this.token = this.token.replace(' ', '').trim();\n }\n\n try {\n await this.doSubmit();\n } catch {\n if (this.selectedProviderType === TwoFactorProviderType.WebAuthn && this.webAuthn != null) {\n this.webAuthn.start();\n }\n }\n }\n\n async doSubmit() {\n this.formPromise = this.authService.logInTwoFactor(this.selectedProviderType, this.token, this.remember);\n const response: AuthResult = await this.formPromise;\n const disableFavicon = await this.storageService.get(ConstantsService.disableFaviconKey);\n await this.stateService.save(ConstantsService.disableFaviconKey, !!disableFavicon);\n if (this.onSuccessfulLogin != null) {\n this.onSuccessfulLogin();\n }\n if (response.resetMasterPassword) {\n this.successRoute = 'set-password';\n }\n if (this.onSuccessfulLoginNavigate != null) {\n this.onSuccessfulLoginNavigate();\n } else {\n this.router.navigate([this.successRoute], {\n queryParams: {\n identifier: this.identifier,\n },\n });\n }\n }\n\n async sendEmail(doToast: boolean) {\n if (this.selectedProviderType !== TwoFactorProviderType.Email) {\n return;\n }\n\n if (this.emailPromise != null) {\n return;\n }\n\n try {\n const request = new TwoFactorEmailRequest(this.authService.email, this.authService.masterPasswordHash);\n this.emailPromise = this.apiService.postTwoFactorEmail(request);\n await this.emailPromise;\n if (doToast) {\n this.platformUtilsService.showToast('success', null,\n this.i18nService.t('verificationCodeEmailSent', this.twoFactorEmail));\n }\n } catch { }\n\n this.emailPromise = null;\n }\n\n authWebAuthn() {\n const providerData = this.authService.twoFactorProvidersData.get(this.selectedProviderType);\n\n if (!this.webAuthnSupported || this.webAuthn == null) {\n return;\n }\n\n this.webAuthn.init(providerData);\n }\n\n private cleanupWebAuthn() {\n if (this.webAuthn != null) {\n this.webAuthn.stop();\n this.webAuthn.cleanup();\n }\n }\n\n get authing(): boolean {\n return this.authService.authingWithPassword() || this.authService.authingWithSso() || this.authService.authingWithApiKey();\n }\n\n get needsLock(): boolean {\n return this.authService.authingWithSso() || this.authService.authingWithApiKey();\n }\n}\n","import { DeviceType } from '../../enums/deviceType';\n\nimport { PlatformUtilsService } from '../../abstractions/platformUtils.service';\n\nexport class DeviceRequest {\n type: DeviceType;\n name: string;\n identifier: string;\n pushToken?: string;\n\n constructor(appId: string, platformUtilsService: PlatformUtilsService) {\n this.type = platformUtilsService.getDevice();\n this.name = platformUtilsService.getDeviceString();\n this.identifier = appId;\n this.pushToken = null;\n }\n}\n","export class PreloginRequest {\n email: string;\n\n constructor(email: string) {\n this.email = email;\n }\n}\n","import { TwoFactorProviderType } from '../../enums/twoFactorProviderType';\n\nimport { DeviceRequest } from './deviceRequest';\n\nexport class TokenRequest {\n email: string;\n masterPasswordHash: string;\n code: string;\n codeVerifier: string;\n redirectUri: string;\n clientId: string;\n clientSecret: string;\n token: string;\n provider: TwoFactorProviderType;\n remember: boolean;\n device?: DeviceRequest;\n\n constructor(credentials: string[], codes: string[], clientIdClientSecret: string[], provider: TwoFactorProviderType,\n token: string, remember: boolean, device?: DeviceRequest) {\n if (credentials != null && credentials.length > 1) {\n this.email = credentials[0];\n this.masterPasswordHash = credentials[1];\n } else if (codes != null && codes.length > 2) {\n this.code = codes[0];\n this.codeVerifier = codes[1];\n this.redirectUri = codes[2];\n } else if (clientIdClientSecret != null && clientIdClientSecret.length > 1) {\n this.clientId = clientIdClientSecret[0];\n this.clientSecret = clientIdClientSecret[1];\n }\n this.token = token;\n this.provider = provider;\n this.remember = remember;\n this.device = device != null ? device : null;\n }\n\n toIdentityToken(clientId: string) {\n const obj: any = {\n scope: 'api offline_access',\n client_id: clientId,\n };\n\n if (this.clientSecret != null) {\n obj.scope = clientId.startsWith('organization') ? 'api.organization' : 'api';\n obj.grant_type = 'client_credentials';\n obj.client_secret = this.clientSecret;\n } else if (this.masterPasswordHash != null && this.email != null) {\n obj.grant_type = 'password';\n obj.username = this.email;\n obj.password = this.masterPasswordHash;\n } else if (this.code != null && this.codeVerifier != null && this.redirectUri != null) {\n obj.grant_type = 'authorization_code';\n obj.code = this.code;\n obj.code_verifier = this.codeVerifier;\n obj.redirect_uri = this.redirectUri;\n } else {\n throw new Error('must provide credentials or codes');\n }\n\n if (this.device) {\n obj.deviceType = this.device.type;\n obj.deviceIdentifier = this.device.identifier;\n obj.deviceName = this.device.name;\n // no push tokens for browser apps yet\n // obj.devicePushToken = this.device.pushToken;\n }\n\n if (this.token && this.provider != null) {\n obj.twoFactorToken = this.token;\n obj.twoFactorProvider = this.provider;\n obj.twoFactorRemember = this.remember ? '1' : '0';\n }\n\n return obj;\n }\n\n alterIdentityTokenHeaders(headers: Headers) {\n if (this.clientSecret == null && this.masterPasswordHash != null && this.email != null) {\n headers.set('Auth-Email', this.email);\n }\n }\n}\n","import { I18nService } from '../abstractions/i18n.service';\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\n\nexport class WebAuthn {\n private iframe: HTMLIFrameElement = null;\n private connectorLink: HTMLAnchorElement;\n private parseFunction = this.parseMessage.bind(this);\n\n constructor(private win: Window, private webVaultUrl: string, private webAuthnNewTab: boolean,\n private platformUtilsService: PlatformUtilsService, private i18nService: I18nService,\n private successCallback: Function, private errorCallback: Function, private infoCallback: Function) {\n this.connectorLink = win.document.createElement('a');\n }\n\n init(data: any): void {\n const params = new URLSearchParams({\n data: this.base64Encode(JSON.stringify(data)),\n parent: encodeURIComponent(this.win.document.location.href),\n btnText: encodeURIComponent(this.i18nService.t('webAuthnAuthenticate')),\n v: '1',\n });\n\n if (this.webAuthnNewTab) {\n // Firefox fallback which opens the webauthn page in a new tab\n params.append('locale', this.i18nService.translationLocale);\n this.platformUtilsService.launchUri(`${this.webVaultUrl}/webauthn-fallback-connector.html?${params}`);\n } else {\n this.connectorLink.href = `${this.webVaultUrl}/webauthn-connector.html?${params}`;\n this.iframe = this.win.document.getElementById('webauthn_iframe') as HTMLIFrameElement;\n this.iframe.allow = 'publickey-credentials-get ' + new URL(this.webVaultUrl).origin;\n this.iframe.src = this.connectorLink.href;\n\n this.win.addEventListener('message', this.parseFunction, false);\n }\n }\n\n stop() {\n this.sendMessage('stop');\n }\n\n start() {\n this.sendMessage('start');\n }\n\n sendMessage(message: any) {\n if (!this.iframe || !this.iframe.src || !this.iframe.contentWindow) {\n return;\n }\n\n this.iframe.contentWindow.postMessage(message, this.iframe.src);\n }\n\n base64Encode(str: string): string {\n return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) => {\n return String.fromCharCode(('0x' + p1) as any);\n }));\n }\n\n cleanup() {\n this.win.removeEventListener('message', this.parseFunction, false);\n }\n\n private parseMessage(event: MessageEvent) {\n if (!this.validMessage(event)) {\n return;\n }\n\n const parts: string[] = event.data.split('|');\n if (parts[0] === 'success' && this.successCallback) {\n this.successCallback(parts[1]);\n } else if (parts[0] === 'error' && this.errorCallback) {\n this.errorCallback(parts[1]);\n } else if (parts[0] === 'info' && this.infoCallback) {\n this.infoCallback(parts[1]);\n }\n }\n\n private validMessage(event: MessageEvent) {\n if (event.origin == null || event.origin === '' || event.origin !== (this.connectorLink as any).origin ||\n event.data == null || typeof (event.data) !== 'string') {\n return false;\n }\n\n return event.data.indexOf('success|') === 0 || event.data.indexOf('error|') === 0 ||\n event.data.indexOf('info|') === 0;\n }\n}\n","export class VerifyEmailRequest {\n userId: string;\n token: string;\n\n constructor(userId: string, token: string) {\n this.userId = userId;\n this.token = token;\n }\n}\n","export class VerifyDeleteRecoverRequest {\n userId: string;\n token: string;\n\n constructor(userId: string, token: string) {\n this.userId = userId;\n this.token = token;\n }\n}\n","import { EventType } from '../../enums/eventType';\n\nexport class EventView {\n message: string;\n humanReadableMessage: string;\n appIcon: string;\n appName: string;\n userId: string;\n userName: string;\n userEmail: string;\n date: string;\n ip: string;\n type: EventType;\n\n constructor(data: Required) {\n this.message = data.message;\n this.humanReadableMessage = data.humanReadableMessage;\n this.appIcon = data.appIcon;\n this.appName = data.appName;\n this.userId = data.userId;\n this.userName = data.userName;\n this.userEmail = data.userEmail;\n this.date = data.date;\n this.ip = data.ip;\n this.type = data.type;\n }\n}\n","import { SelectionReadOnlyRequest } from './selectionReadOnlyRequest';\n\nexport class GroupRequest {\n name: string;\n accessAll: boolean;\n externalId: string;\n collections: SelectionReadOnlyRequest[] = [];\n}\n","export class OrganizationUserConfirmRequest {\n key: string;\n}\n","type OrganizationUserBulkRequestEntry = {\n id: string;\n key: string;\n};\n\nexport class OrganizationUserBulkConfirmRequest {\n keys: OrganizationUserBulkRequestEntry[];\n\n constructor(keys: OrganizationUserBulkRequestEntry[]) {\n this.keys = keys;\n }\n}\n","export class OrganizationUserResetPasswordRequest {\n newMasterPasswordHash: string;\n key: string;\n}\n","import { SelectionReadOnlyRequest } from './selectionReadOnlyRequest';\n\nimport { OrganizationUserType } from '../../enums/organizationUserType';\nimport { PermissionsApi } from '../api/permissionsApi';\n\nexport class OrganizationUserInviteRequest {\n emails: string[] = [];\n type: OrganizationUserType;\n accessAll: boolean;\n collections: SelectionReadOnlyRequest[] = [];\n permissions: PermissionsApi;\n}\n","import { SelectionReadOnlyRequest } from './selectionReadOnlyRequest';\n\nimport { OrganizationUserType } from '../../enums/organizationUserType';\nimport { PermissionsApi } from '../api/permissionsApi';\n\nexport class OrganizationUserUpdateRequest {\n type: OrganizationUserType;\n accessAll: boolean;\n collections: SelectionReadOnlyRequest[] = [];\n permissions: PermissionsApi;\n}\n","export class OrganizationUserUpdateGroupsRequest {\n groupIds: string[] = [];\n}\n","export abstract class AppIdService {\n getAppId: () => Promise;\n getAnonymousAppId: () => Promise;\n}\n","import { LogLevelType } from '../enums/logLevelType';\n\nexport abstract class LogService {\n debug: (message: string) => void;\n info: (message: string) => void;\n warning: (message: string) => void;\n error: (message: string) => void;\n write: (level: LogLevelType, message: string) => void;\n time: (label: string) => void;\n timeEnd: (label: string) => [number, number];\n}\n","import { PolicyType } from '../../enums/policyType';\n\nexport class PolicyRequest {\n type: PolicyType;\n enabled: boolean;\n data: any;\n}\n","import { OrganizationKeysRequest } from './organizationKeysRequest';\n\nexport class OrganizationUpdateRequest {\n name: string;\n identifier: string;\n businessName: string;\n billingEmail: string;\n keys: OrganizationKeysRequest;\n}\n","export enum TransactionType {\n Charge = 0,\n Credit = 1,\n PromotionalCredit = 2,\n ReferralCredit = 3,\n Refund = 4,\n}\n","export class VerifyBankRequest {\n amount1: number;\n amount2: number;\n}\n","export class BitPayInvoiceRequest {\n userId: string;\n organizationId: string;\n credit: boolean;\n amount: number;\n returnUrl: string;\n name: string;\n email: string;\n}\n","import { PaymentMethodType } from '../../enums/paymentMethodType';\nimport { OrganizationTaxInfoUpdateRequest } from '../request/organizationTaxInfoUpdateRequest';\n\nexport class PaymentRequest extends OrganizationTaxInfoUpdateRequest {\n paymentMethodType: PaymentMethodType;\n paymentToken: string;\n}\n","import { PaymentMethodType } from '../../enums/paymentMethodType';\nimport { PlanType } from '../../enums/planType';\n\nimport { OrganizationKeysRequest } from './organizationKeysRequest';\n\nexport class OrganizationCreateRequest {\n name: string;\n businessName: string;\n billingEmail: string;\n planType: PlanType;\n key: string;\n keys: OrganizationKeysRequest;\n paymentMethodType: PaymentMethodType;\n paymentToken: string;\n additionalSeats: number;\n additionalStorageGb: number;\n premiumAccessAddon: boolean;\n collectionName: string;\n taxIdNumber: string;\n billingAddressLine1: string;\n billingAddressLine2: string;\n billingAddressCity: string;\n billingAddressState: string;\n billingAddressPostalCode: string;\n billingAddressCountry: string;\n}\n","import { PlanType } from '../../enums/planType';\n\nimport { OrganizationKeysRequest } from './organizationKeysRequest';\n\nexport class OrganizationUpgradeRequest {\n businessName: string;\n planType: PlanType;\n additionalSeats: number;\n additionalStorageGb: number;\n premiumAccessAddon: boolean;\n billingAddressCountry: string;\n billingAddressPostalCode: string;\n keys: OrganizationKeysRequest;\n}\n","export class SeatRequest {\n seatAdjustment: number;\n}\n","export class StorageRequest {\n storageGbAdjustment: number;\n}\n","import { PasswordVerificationRequest } from './passwordVerificationRequest';\n\nexport class UpdateTwoFactorDuoRequest extends PasswordVerificationRequest {\n integrationKey: string;\n secretKey: string;\n host: string;\n}\n","import { PasswordVerificationRequest } from './passwordVerificationRequest';\n\nimport { TwoFactorProviderType } from '../../enums/twoFactorProviderType';\n\nexport class TwoFactorProviderRequest extends PasswordVerificationRequest {\n type: TwoFactorProviderType;\n}\n","import { PasswordVerificationRequest } from './passwordVerificationRequest';\n\nexport class UpdateTwoFactorAuthenticatorRequest extends PasswordVerificationRequest {\n token: string;\n key: string;\n}\n","import { PasswordVerificationRequest } from './passwordVerificationRequest';\n\nexport class UpdateTwoFactorEmailRequest extends PasswordVerificationRequest {\n token: string;\n email: string;\n}\n","import { PasswordVerificationRequest } from './passwordVerificationRequest';\n\nexport class UpdateTwoFactorWebAuthnDeleteRequest extends PasswordVerificationRequest {\n id: number;\n}\n","import { PasswordVerificationRequest } from './passwordVerificationRequest';\n\nexport class UpdateTwoFactorWebAuthnRequest extends PasswordVerificationRequest {\n deviceResponse: PublicKeyCredential;\n name: string;\n id: number;\n}\n","import { PasswordVerificationRequest } from './passwordVerificationRequest';\n\nexport class UpdateTwoFactorYubioOtpRequest extends PasswordVerificationRequest {\n key1: string;\n key2: string;\n key3: string;\n key4: string;\n key5: string;\n nfc: boolean;\n}\n","import {\n Directive,\n EventEmitter,\n Output,\n} from '@angular/core';\n\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { EventService } from 'jslib-common/abstractions/event.service';\nimport { ExportService } from 'jslib-common/abstractions/export.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { EventType } from 'jslib-common/enums/eventType';\nimport { HashPurpose } from 'jslib-common/enums/hashPurpose';\n\n@Directive()\nexport class ExportComponent {\n @Output() onSaved = new EventEmitter();\n\n formPromise: Promise;\n masterPassword: string;\n format: 'json' | 'encrypted_json' | 'csv' = 'json';\n showPassword = false;\n\n constructor(protected cryptoService: CryptoService, protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService, protected exportService: ExportService,\n protected eventService: EventService, protected win: Window) { }\n\n get encryptedFormat() {\n return this.format === 'encrypted_json';\n }\n\n async submit() {\n if (this.masterPassword == null || this.masterPassword === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('invalidMasterPassword'));\n return;\n }\n\n const acceptedWarning = await this.warningDialog();\n if (!acceptedWarning) {\n return;\n }\n\n const passwordValid = await this.cryptoService.compareAndUpdateKeyHash(this.masterPassword, null);\n if (passwordValid) {\n try {\n this.formPromise = this.getExportData();\n const data = await this.formPromise;\n this.downloadFile(data);\n this.saved();\n await this.collectEvent();\n } catch { }\n } else {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('invalidMasterPassword'));\n }\n }\n\n async warningDialog() {\n if (this.encryptedFormat) {\n return await this.platformUtilsService.showDialog(\n '

' + this.i18nService.t('encExportKeyWarningDesc') +\n '

' + this.i18nService.t('encExportAccountWarningDesc'),\n this.i18nService.t('confirmVaultExport'), this.i18nService.t('exportVault'),\n this.i18nService.t('cancel'), 'warning',\n true);\n } else {\n return await this.platformUtilsService.showDialog(\n this.i18nService.t('exportWarningDesc'),\n this.i18nService.t('confirmVaultExport'), this.i18nService.t('exportVault'),\n this.i18nService.t('cancel'), 'warning');\n }\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n document.getElementById('masterPassword').focus();\n }\n\n protected saved() {\n this.onSaved.emit();\n }\n\n protected getExportData() {\n return this.exportService.getExport(this.format);\n }\n\n protected getFileName(prefix?: string) {\n let extension = this.format;\n if (this.format === 'encrypted_json') {\n if (prefix == null) {\n prefix = 'encrypted';\n } else {\n prefix = 'encrypted_' + prefix;\n }\n extension = 'json';\n }\n return this.exportService.getFileName(prefix, extension);\n }\n\n protected async collectEvent(): Promise {\n await this.eventService.collect(EventType.User_ClientExportedVault);\n }\n\n private downloadFile(csv: string): void {\n const fileName = this.getFileName();\n this.platformUtilsService.saveFile(this.win, csv, { type: 'text/plain' }, fileName);\n }\n}\n","export class AttachmentRequest {\n fileName: string;\n key: string;\n fileSize: number;\n adminRequest: boolean;\n}\n","import {\n CdkDragDrop,\n moveItemInArray,\n} from '@angular/cdk/drag-drop';\nimport {\n Directive,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { CipherRepromptType } from 'jslib-common/enums/cipherRepromptType';\nimport { CipherType } from 'jslib-common/enums/cipherType';\nimport { EventType } from 'jslib-common/enums/eventType';\nimport { FieldType } from 'jslib-common/enums/fieldType';\nimport { OrganizationUserStatusType } from 'jslib-common/enums/organizationUserStatusType';\nimport { PolicyType } from 'jslib-common/enums/policyType';\nimport { SecureNoteType } from 'jslib-common/enums/secureNoteType';\nimport { UriMatchType } from 'jslib-common/enums/uriMatchType';\n\nimport { AuditService } from 'jslib-common/abstractions/audit.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { EventService } from 'jslib-common/abstractions/event.service';\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { Cipher } from 'jslib-common/models/domain/cipher';\n\nimport { CardView } from 'jslib-common/models/view/cardView';\nimport { CipherView } from 'jslib-common/models/view/cipherView';\nimport { CollectionView } from 'jslib-common/models/view/collectionView';\nimport { FieldView } from 'jslib-common/models/view/fieldView';\nimport { FolderView } from 'jslib-common/models/view/folderView';\nimport { IdentityView } from 'jslib-common/models/view/identityView';\nimport { LoginUriView } from 'jslib-common/models/view/loginUriView';\nimport { LoginView } from 'jslib-common/models/view/loginView';\nimport { SecureNoteView } from 'jslib-common/models/view/secureNoteView';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\n@Directive()\nexport class AddEditComponent implements OnInit {\n @Input() cloneMode: boolean = false;\n @Input() folderId: string = null;\n @Input() cipherId: string;\n @Input() type: CipherType;\n @Input() collectionIds: string[];\n @Input() organizationId: string = null;\n @Output() onSavedCipher = new EventEmitter();\n @Output() onDeletedCipher = new EventEmitter();\n @Output() onRestoredCipher = new EventEmitter();\n @Output() onCancelled = new EventEmitter();\n @Output() onEditAttachments = new EventEmitter();\n @Output() onShareCipher = new EventEmitter();\n @Output() onEditCollections = new EventEmitter();\n @Output() onGeneratePassword = new EventEmitter();\n\n editMode: boolean = false;\n cipher: CipherView;\n folders: FolderView[];\n collections: CollectionView[] = [];\n title: string;\n formPromise: Promise;\n deletePromise: Promise;\n restorePromise: Promise;\n checkPasswordPromise: Promise;\n showPassword: boolean = false;\n showCardNumber: boolean = false;\n showCardCode: boolean = false;\n cipherType = CipherType;\n fieldType = FieldType;\n addFieldType: FieldType = FieldType.Text;\n typeOptions: any[];\n cardBrandOptions: any[];\n cardExpMonthOptions: any[];\n identityTitleOptions: any[];\n addFieldTypeOptions: any[];\n uriMatchOptions: any[];\n ownershipOptions: any[] = [];\n autofillOnPageLoadOptions: any[];\n currentDate = new Date();\n allowPersonal = true;\n reprompt: boolean = false;\n\n protected writeableCollections: CollectionView[];\n private previousCipherId: string;\n\n constructor(protected cipherService: CipherService, protected folderService: FolderService,\n protected i18nService: I18nService, protected platformUtilsService: PlatformUtilsService,\n protected auditService: AuditService, protected stateService: StateService,\n protected userService: UserService, protected collectionService: CollectionService,\n protected messagingService: MessagingService, protected eventService: EventService,\n protected policyService: PolicyService) {\n this.typeOptions = [\n { name: i18nService.t('typeLogin'), value: CipherType.Login },\n { name: i18nService.t('typeCard'), value: CipherType.Card },\n { name: i18nService.t('typeIdentity'), value: CipherType.Identity },\n { name: i18nService.t('typeSecureNote'), value: CipherType.SecureNote },\n ];\n this.cardBrandOptions = [\n { name: '-- ' + i18nService.t('select') + ' --', value: null },\n { name: 'Visa', value: 'Visa' },\n { name: 'Mastercard', value: 'Mastercard' },\n { name: 'American Express', value: 'Amex' },\n { name: 'Discover', value: 'Discover' },\n { name: 'Diners Club', value: 'Diners Club' },\n { name: 'JCB', value: 'JCB' },\n { name: 'Maestro', value: 'Maestro' },\n { name: 'UnionPay', value: 'UnionPay' },\n { name: i18nService.t('other'), value: 'Other' },\n ];\n this.cardExpMonthOptions = [\n { name: '-- ' + i18nService.t('select') + ' --', value: null },\n { name: '01 - ' + i18nService.t('january'), value: '1' },\n { name: '02 - ' + i18nService.t('february'), value: '2' },\n { name: '03 - ' + i18nService.t('march'), value: '3' },\n { name: '04 - ' + i18nService.t('april'), value: '4' },\n { name: '05 - ' + i18nService.t('may'), value: '5' },\n { name: '06 - ' + i18nService.t('june'), value: '6' },\n { name: '07 - ' + i18nService.t('july'), value: '7' },\n { name: '08 - ' + i18nService.t('august'), value: '8' },\n { name: '09 - ' + i18nService.t('september'), value: '9' },\n { name: '10 - ' + i18nService.t('october'), value: '10' },\n { name: '11 - ' + i18nService.t('november'), value: '11' },\n { name: '12 - ' + i18nService.t('december'), value: '12' },\n ];\n this.identityTitleOptions = [\n { name: '-- ' + i18nService.t('select') + ' --', value: null },\n { name: i18nService.t('mr'), value: i18nService.t('mr') },\n { name: i18nService.t('mrs'), value: i18nService.t('mrs') },\n { name: i18nService.t('ms'), value: i18nService.t('ms') },\n { name: i18nService.t('dr'), value: i18nService.t('dr') },\n ];\n this.addFieldTypeOptions = [\n { name: i18nService.t('cfTypeText'), value: FieldType.Text },\n { name: i18nService.t('cfTypeHidden'), value: FieldType.Hidden },\n { name: i18nService.t('cfTypeBoolean'), value: FieldType.Boolean },\n ];\n this.uriMatchOptions = [\n { name: i18nService.t('defaultMatchDetection'), value: null },\n { name: i18nService.t('baseDomain'), value: UriMatchType.Domain },\n { name: i18nService.t('host'), value: UriMatchType.Host },\n { name: i18nService.t('startsWith'), value: UriMatchType.StartsWith },\n { name: i18nService.t('regEx'), value: UriMatchType.RegularExpression },\n { name: i18nService.t('exact'), value: UriMatchType.Exact },\n { name: i18nService.t('never'), value: UriMatchType.Never },\n ];\n this.autofillOnPageLoadOptions = [\n { name: i18nService.t('autoFillOnPageLoadUseDefault'), value: null },\n { name: i18nService.t('autoFillOnPageLoadYes'), value: true },\n { name: i18nService.t('autoFillOnPageLoadNo'), value: false },\n ];\n }\n\n async ngOnInit() {\n await this.init();\n }\n\n async init() {\n const policies = await this.policyService.getAll(PolicyType.PersonalOwnership);\n const myEmail = await this.userService.getEmail();\n this.ownershipOptions.push({ name: myEmail, value: null });\n const orgs = await this.userService.getAllOrganizations();\n orgs.sort(Utils.getSortFunction(this.i18nService, 'name')).forEach(o => {\n if (o.enabled && o.status === OrganizationUserStatusType.Confirmed) {\n this.ownershipOptions.push({ name: o.name, value: o.id });\n if (policies != null && o.usePolicies && !o.canManagePolicies && this.allowPersonal) {\n for (const policy of policies) {\n if (policy.organizationId === o.id && policy.enabled) {\n this.allowPersonal = false;\n this.ownershipOptions.splice(0, 1);\n // Default to the organization who owns this policy for now (if necessary)\n if (this.organizationId == null) {\n this.organizationId = o.id;\n }\n break;\n }\n }\n }\n }\n });\n this.writeableCollections = await this.loadCollections();\n }\n\n async load() {\n this.editMode = this.cipherId != null;\n if (this.editMode) {\n this.editMode = true;\n if (this.cloneMode) {\n this.cloneMode = true;\n this.title = this.i18nService.t('addItem');\n } else {\n this.title = this.i18nService.t('editItem');\n }\n } else {\n this.title = this.i18nService.t('addItem');\n }\n\n const addEditCipherInfo: any = await this.stateService.get('addEditCipherInfo');\n if (addEditCipherInfo != null) {\n this.cipher = addEditCipherInfo.cipher;\n this.collectionIds = addEditCipherInfo.collectionIds;\n }\n await this.stateService.remove('addEditCipherInfo');\n\n if (this.cipher == null) {\n if (this.editMode) {\n const cipher = await this.loadCipher();\n this.cipher = await cipher.decrypt();\n\n // Adjust Cipher Name if Cloning\n if (this.cloneMode) {\n this.cipher.name += ' - ' + this.i18nService.t('clone');\n // If not allowing personal ownership, update cipher's org Id to prompt downstream changes\n if (this.cipher.organizationId == null && !this.allowPersonal) {\n this.cipher.organizationId = this.organizationId;\n }\n }\n } else {\n this.cipher = new CipherView();\n this.cipher.organizationId = this.organizationId == null ? null : this.organizationId;\n this.cipher.folderId = this.folderId;\n this.cipher.type = this.type == null ? CipherType.Login : this.type;\n this.cipher.login = new LoginView();\n this.cipher.login.uris = [new LoginUriView()];\n this.cipher.card = new CardView();\n this.cipher.identity = new IdentityView();\n this.cipher.secureNote = new SecureNoteView();\n this.cipher.secureNote.type = SecureNoteType.Generic;\n this.cipher.reprompt = CipherRepromptType.None;\n }\n }\n\n if (this.cipher != null && (!this.editMode || addEditCipherInfo != null || this.cloneMode)) {\n await this.organizationChanged();\n if (this.collectionIds != null && this.collectionIds.length > 0 && this.collections.length > 0) {\n this.collections.forEach(c => {\n if (this.collectionIds.indexOf(c.id) > -1) {\n (c as any).checked = true;\n }\n });\n }\n }\n\n this.folders = await this.folderService.getAllDecrypted();\n\n if (this.editMode && this.previousCipherId !== this.cipherId) {\n this.eventService.collect(EventType.Cipher_ClientViewed, this.cipherId);\n }\n this.previousCipherId = this.cipherId;\n this.reprompt = this.cipher.reprompt !== CipherRepromptType.None;\n }\n\n async submit(): Promise {\n if (this.cipher.isDeleted) {\n return this.restore();\n }\n\n if (this.cipher.name == null || this.cipher.name === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('nameRequired'));\n return false;\n }\n\n if ((!this.editMode || this.cloneMode) && !this.allowPersonal && this.cipher.organizationId == null) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('personalOwnershipSubmitError'));\n return false;\n }\n\n if ((!this.editMode || this.cloneMode) && this.cipher.type === CipherType.Login &&\n this.cipher.login.uris != null && this.cipher.login.uris.length === 1 &&\n (this.cipher.login.uris[0].uri == null || this.cipher.login.uris[0].uri === '')) {\n this.cipher.login.uris = null;\n }\n\n // Allows saving of selected collections during \"Add\" and \"Clone\" flows\n if ((!this.editMode || this.cloneMode) && this.cipher.organizationId != null) {\n this.cipher.collectionIds = this.collections == null ? [] :\n this.collections.filter(c => (c as any).checked).map(c => c.id);\n }\n\n // Clear current Cipher Id to trigger \"Add\" cipher flow\n if (this.cloneMode) {\n this.cipher.id = null;\n }\n\n const cipher = await this.encryptCipher();\n try {\n this.formPromise = this.saveCipher(cipher);\n await this.formPromise;\n this.cipher.id = cipher.id;\n this.platformUtilsService.showToast('success', null,\n this.i18nService.t(this.editMode && !this.cloneMode ? 'editedItem' : 'addedItem'));\n this.onSavedCipher.emit(this.cipher);\n this.messagingService.send(this.editMode && !this.cloneMode ? 'editedCipher' : 'addedCipher');\n return true;\n } catch { }\n\n return false;\n }\n\n addUri() {\n if (this.cipher.type !== CipherType.Login) {\n return;\n }\n\n if (this.cipher.login.uris == null) {\n this.cipher.login.uris = [];\n }\n\n this.cipher.login.uris.push(new LoginUriView());\n }\n\n removeUri(uri: LoginUriView) {\n if (this.cipher.type !== CipherType.Login || this.cipher.login.uris == null) {\n return;\n }\n\n const i = this.cipher.login.uris.indexOf(uri);\n if (i > -1) {\n this.cipher.login.uris.splice(i, 1);\n }\n }\n\n addField() {\n if (this.cipher.fields == null) {\n this.cipher.fields = [];\n }\n\n const f = new FieldView();\n f.type = this.addFieldType;\n f.newField = true;\n this.cipher.fields.push(f);\n }\n\n removeField(field: FieldView) {\n const i = this.cipher.fields.indexOf(field);\n if (i > -1) {\n this.cipher.fields.splice(i, 1);\n }\n }\n\n trackByFunction(index: number, item: any) {\n return index;\n }\n\n cancel() {\n this.onCancelled.emit(this.cipher);\n }\n\n attachments() {\n this.onEditAttachments.emit(this.cipher);\n }\n\n share() {\n this.onShareCipher.emit(this.cipher);\n }\n\n editCollections() {\n this.onEditCollections.emit(this.cipher);\n }\n\n async delete(): Promise {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(this.cipher.isDeleted ? 'permanentlyDeleteItemConfirmation' : 'deleteItemConfirmation'),\n this.i18nService.t('deleteItem'), this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.deleteCipher();\n await this.deletePromise;\n this.platformUtilsService.showToast('success', null,\n this.i18nService.t(this.cipher.isDeleted ? 'permanentlyDeletedItem' : 'deletedItem'));\n this.onDeletedCipher.emit(this.cipher);\n this.messagingService.send(this.cipher.isDeleted ? 'permanentlyDeletedCipher' : 'deletedCipher');\n } catch { }\n\n return true;\n }\n\n async restore(): Promise {\n if (!this.cipher.isDeleted) {\n return false;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('restoreItemConfirmation'), this.i18nService.t('restoreItem'),\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.restorePromise = this.restoreCipher();\n await this.restorePromise;\n this.platformUtilsService.showToast('success', null, this.i18nService.t('restoredItem'));\n this.onRestoredCipher.emit(this.cipher);\n this.messagingService.send('restoredCipher');\n } catch { }\n\n return true;\n }\n\n async generatePassword(): Promise {\n if (this.cipher.login != null && this.cipher.login.password != null && this.cipher.login.password.length) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('overwritePasswordConfirmation'), this.i18nService.t('overwritePassword'),\n this.i18nService.t('yes'), this.i18nService.t('no'));\n if (!confirmed) {\n return false;\n }\n }\n\n this.onGeneratePassword.emit();\n return true;\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n document.getElementById('loginPassword').focus();\n if (this.editMode && this.showPassword) {\n this.eventService.collect(EventType.Cipher_ClientToggledPasswordVisible, this.cipherId);\n }\n }\n\n async toggleCardNumber() {\n this.showCardNumber = !this.showCardNumber;\n if (this.showCardNumber) {\n this.eventService.collect(EventType.Cipher_ClientToggledCardNumberVisible, this.cipherId);\n }\n }\n\n toggleCardCode() {\n this.showCardCode = !this.showCardCode;\n document.getElementById('cardCode').focus();\n if (this.editMode && this.showCardCode) {\n this.eventService.collect(EventType.Cipher_ClientToggledCardCodeVisible, this.cipherId);\n }\n }\n\n toggleFieldValue(field: FieldView) {\n const f = (field as any);\n f.showValue = !f.showValue;\n if (this.editMode && f.showValue) {\n this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, this.cipherId);\n }\n }\n\n toggleUriOptions(uri: LoginUriView) {\n const u = (uri as any);\n u.showOptions = u.showOptions == null && uri.match != null ? false : !u.showOptions;\n }\n\n loginUriMatchChanged(uri: LoginUriView) {\n const u = (uri as any);\n u.showOptions = u.showOptions == null ? true : u.showOptions;\n }\n\n drop(event: CdkDragDrop) {\n moveItemInArray(this.cipher.fields, event.previousIndex, event.currentIndex);\n }\n\n async organizationChanged() {\n if (this.writeableCollections != null) {\n this.writeableCollections.forEach(c => (c as any).checked = false);\n }\n if (this.cipher.organizationId != null) {\n this.collections = this.writeableCollections.filter(c => c.organizationId === this.cipher.organizationId);\n const org = await this.userService.getOrganization(this.cipher.organizationId);\n if (org != null) {\n this.cipher.organizationUseTotp = org.useTotp;\n }\n } else {\n this.collections = [];\n }\n }\n\n async checkPassword() {\n if (this.checkPasswordPromise != null) {\n return;\n }\n\n if (this.cipher.login == null || this.cipher.login.password == null || this.cipher.login.password === '') {\n return;\n }\n\n this.checkPasswordPromise = this.auditService.passwordLeaked(this.cipher.login.password);\n const matches = await this.checkPasswordPromise;\n this.checkPasswordPromise = null;\n\n if (matches > 0) {\n this.platformUtilsService.showToast('warning', null,\n this.i18nService.t('passwordExposed', matches.toString()));\n } else {\n this.platformUtilsService.showToast('success', null, this.i18nService.t('passwordSafe'));\n }\n }\n\n repromptChanged() {\n this.reprompt = !this.reprompt;\n if (this.reprompt) {\n this.cipher.reprompt = CipherRepromptType.Password;\n } else {\n this.cipher.reprompt = CipherRepromptType.None;\n }\n }\n\n protected async loadCollections() {\n const allCollections = await this.collectionService.getAllDecrypted();\n return allCollections.filter(c => !c.readOnly);\n }\n\n protected loadCipher() {\n return this.cipherService.get(this.cipherId);\n }\n\n protected encryptCipher() {\n return this.cipherService.encrypt(this.cipher);\n }\n\n protected saveCipher(cipher: Cipher) {\n return this.cipherService.saveWithServer(cipher);\n }\n\n protected deleteCipher() {\n return this.cipher.isDeleted ? this.cipherService.deleteWithServer(this.cipher.id)\n : this.cipherService.softDeleteWithServer(this.cipher.id);\n }\n\n protected restoreCipher() {\n return this.cipherService.restoreWithServer(this.cipher.id);\n }\n}\n","export { AttachmentResponse } from './attachmentResponse';\nexport { CipherResponse } from './cipherResponse';\nexport { CollectionResponse } from './collectionResponse';\nexport { DeviceResponse } from './deviceResponse';\nexport { DomainsResponse } from './domainsResponse';\nexport { ErrorResponse } from './errorResponse';\nexport { FolderResponse } from './folderResponse';\nexport { GlobalDomainResponse } from './globalDomainResponse';\nexport { IdentityTokenResponse } from './identityTokenResponse';\nexport { IdentityTwoFactorResponse } from './identityTwoFactorResponse';\nexport { KeysResponse } from './keysResponse';\nexport { ListResponse } from './listResponse';\nexport { ProfileOrganizationResponse } from './profileOrganizationResponse';\nexport { ProfileResponse } from './profileResponse';\nexport { SyncResponse } from './syncResponse';\n","import { BaseResponse } from './baseResponse';\n\nexport class PasswordHistoryResponse extends BaseResponse {\n password: string;\n lastUsedDate: string;\n\n constructor(response: any) {\n super(response);\n this.password = this.getResponseProperty('Password');\n this.lastUsedDate = this.getResponseProperty('LastUsedDate');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { DeviceType } from '../../enums/deviceType';\n\nexport class DeviceResponse extends BaseResponse {\n id: string;\n name: number;\n identifier: string;\n type: DeviceType;\n creationDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.name = this.getResponseProperty('Name');\n this.identifier = this.getResponseProperty('Identifier');\n this.type = this.getResponseProperty('Type');\n this.creationDate = this.getResponseProperty('CreationDate');\n }\n}\n","import {\n Directive,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\n\nimport { SearchService } from 'jslib-common/abstractions/search.service';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\n@Directive()\nexport class CiphersComponent {\n @Input() activeCipherId: string = null;\n @Output() onCipherClicked = new EventEmitter();\n @Output() onCipherRightClicked = new EventEmitter();\n @Output() onAddCipher = new EventEmitter();\n @Output() onAddCipherOptions = new EventEmitter();\n\n loaded: boolean = false;\n ciphers: CipherView[] = [];\n pagedCiphers: CipherView[] = [];\n searchText: string;\n searchPlaceholder: string = null;\n filter: (cipher: CipherView) => boolean = null;\n deleted: boolean = false;\n\n protected searchPending = false;\n protected didScroll = false;\n protected pageSize = 100;\n\n private searchTimeout: any = null;\n private pagedCiphersCount = 0;\n private refreshing = false;\n\n constructor(protected searchService: SearchService) { }\n\n async load(filter: (cipher: CipherView) => boolean = null, deleted: boolean = false) {\n this.deleted = deleted || false;\n await this.applyFilter(filter);\n this.loaded = true;\n }\n\n loadMore() {\n if (this.ciphers.length <= this.pageSize) {\n return;\n }\n const pagedLength = this.pagedCiphers.length;\n let pagedSize = this.pageSize;\n if (this.refreshing && pagedLength === 0 && this.pagedCiphersCount > this.pageSize) {\n pagedSize = this.pagedCiphersCount;\n }\n if (this.ciphers.length > pagedLength) {\n this.pagedCiphers = this.pagedCiphers.concat(this.ciphers.slice(pagedLength, pagedLength + pagedSize));\n }\n this.pagedCiphersCount = this.pagedCiphers.length;\n this.didScroll = this.pagedCiphers.length > this.pageSize;\n }\n\n async reload(filter: (cipher: CipherView) => boolean = null, deleted: boolean = false) {\n this.loaded = false;\n this.ciphers = [];\n await this.load(filter, deleted);\n }\n\n async refresh() {\n try {\n this.refreshing = true;\n await this.reload(this.filter, this.deleted);\n } finally {\n this.refreshing = false;\n }\n }\n\n async applyFilter(filter: (cipher: CipherView) => boolean = null) {\n this.filter = filter;\n await this.search(null);\n }\n\n async search(timeout: number = null, indexedCiphers?: CipherView[]) {\n this.searchPending = false;\n if (this.searchTimeout != null) {\n clearTimeout(this.searchTimeout);\n }\n const deletedFilter: (cipher: CipherView) => boolean = c => c.isDeleted === this.deleted;\n if (timeout == null) {\n this.ciphers = await this.searchService.searchCiphers(this.searchText, [this.filter, deletedFilter], indexedCiphers);\n await this.resetPaging();\n return;\n }\n this.searchPending = true;\n this.searchTimeout = setTimeout(async () => {\n this.ciphers = await this.searchService.searchCiphers(this.searchText, [this.filter, deletedFilter], indexedCiphers);\n await this.resetPaging();\n this.searchPending = false;\n }, timeout);\n }\n\n selectCipher(cipher: CipherView) {\n this.onCipherClicked.emit(cipher);\n }\n\n rightClickCipher(cipher: CipherView) {\n this.onCipherRightClicked.emit(cipher);\n }\n\n addCipher() {\n this.onAddCipher.emit();\n }\n\n addCipherOptions() {\n this.onAddCipherOptions.emit();\n }\n\n isSearching() {\n return !this.searchPending && this.searchService.isSearchable(this.searchText);\n }\n\n isPaging() {\n const searching = this.isSearching();\n if (searching && this.didScroll) {\n this.resetPaging();\n }\n return !searching && this.ciphers.length > this.pageSize;\n }\n\n async resetPaging() {\n this.pagedCiphers = [];\n this.loadMore();\n }\n}\n","import {\n Directive,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\nimport { CollectionView } from 'jslib-common/models/view/collectionView';\n\nimport { Cipher } from 'jslib-common/models/domain/cipher';\n\n@Directive()\nexport class CollectionsComponent implements OnInit {\n @Input() cipherId: string;\n @Input() allowSelectNone = false;\n @Output() onSavedCollections = new EventEmitter();\n\n formPromise: Promise;\n cipher: CipherView;\n collectionIds: string[];\n collections: CollectionView[] = [];\n\n protected cipherDomain: Cipher;\n\n constructor(protected collectionService: CollectionService, protected platformUtilsService: PlatformUtilsService,\n protected i18nService: I18nService, protected cipherService: CipherService) { }\n\n async ngOnInit() {\n await this.load();\n }\n\n async load() {\n this.cipherDomain = await this.loadCipher();\n this.collectionIds = this.loadCipherCollections();\n this.cipher = await this.cipherDomain.decrypt();\n this.collections = await this.loadCollections();\n\n this.collections.forEach(c => (c as any).checked = false);\n if (this.collectionIds != null) {\n this.collections.forEach(c => {\n (c as any).checked = this.collectionIds != null && this.collectionIds.indexOf(c.id) > -1;\n });\n }\n }\n\n async submit() {\n const selectedCollectionIds = this.collections\n .filter(c => !!(c as any).checked)\n .map(c => c.id);\n if (!this.allowSelectNone && selectedCollectionIds.length === 0) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('selectOneCollection'));\n return;\n }\n this.cipherDomain.collectionIds = selectedCollectionIds;\n try {\n this.formPromise = this.saveCollections();\n await this.formPromise;\n this.onSavedCollections.emit();\n this.platformUtilsService.showToast('success', null, this.i18nService.t('editedItem'));\n } catch { }\n }\n\n protected loadCipher() {\n return this.cipherService.get(this.cipherId);\n }\n\n protected loadCipherCollections() {\n return this.cipherDomain.collectionIds;\n }\n\n protected async loadCollections() {\n const allCollections = await this.collectionService.getAllDecrypted();\n return allCollections.filter(c => !c.readOnly && c.organizationId === this.cipher.organizationId);\n }\n\n protected saveCollections() {\n return this.cipherService.saveCollectionsWithServer(this.cipherDomain);\n }\n}\n","import {\n Directive,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\n\nimport { CipherType } from 'jslib-common/enums/cipherType';\n\nimport { CollectionView } from 'jslib-common/models/view/collectionView';\nimport { FolderView } from 'jslib-common/models/view/folderView';\n\nimport { TreeNode } from 'jslib-common/models/domain/treeNode';\n\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\n@Directive()\nexport class GroupingsComponent {\n @Input() showFolders = true;\n @Input() showCollections = true;\n @Input() showFavorites = true;\n @Input() showTrash = true;\n\n @Output() onAllClicked = new EventEmitter();\n @Output() onFavoritesClicked = new EventEmitter();\n @Output() onTrashClicked = new EventEmitter();\n @Output() onCipherTypeClicked = new EventEmitter();\n @Output() onFolderClicked = new EventEmitter();\n @Output() onAddFolder = new EventEmitter();\n @Output() onEditFolder = new EventEmitter();\n @Output() onCollectionClicked = new EventEmitter();\n\n folders: FolderView[];\n nestedFolders: TreeNode[];\n collections: CollectionView[];\n nestedCollections: TreeNode[];\n loaded: boolean = false;\n cipherType = CipherType;\n selectedAll: boolean = false;\n selectedFavorites: boolean = false;\n selectedTrash: boolean = false;\n selectedType: CipherType = null;\n selectedFolder: boolean = false;\n selectedFolderId: string = null;\n selectedCollectionId: string = null;\n\n private collapsedGroupings: Set;\n private collapsedGroupingsKey: string;\n\n constructor(protected collectionService: CollectionService, protected folderService: FolderService,\n protected storageService: StorageService, protected userService: UserService) { }\n\n async load(setLoaded = true) {\n const userId = await this.userService.getUserId();\n this.collapsedGroupingsKey = ConstantsService.collapsedGroupingsKey + '_' + userId;\n const collapsedGroupings = await this.storageService.get(this.collapsedGroupingsKey);\n if (collapsedGroupings == null) {\n this.collapsedGroupings = new Set();\n } else {\n this.collapsedGroupings = new Set(collapsedGroupings);\n }\n\n await this.loadFolders();\n await this.loadCollections();\n\n if (setLoaded) {\n this.loaded = true;\n }\n }\n\n async loadCollections(organizationId?: string) {\n if (!this.showCollections) {\n return;\n }\n const collections = await this.collectionService.getAllDecrypted();\n if (organizationId != null) {\n this.collections = collections.filter(c => c.organizationId === organizationId);\n } else {\n this.collections = collections;\n }\n this.nestedCollections = await this.collectionService.getAllNested(this.collections);\n }\n\n async loadFolders() {\n if (!this.showFolders) {\n return;\n }\n this.folders = await this.folderService.getAllDecrypted();\n this.nestedFolders = await this.folderService.getAllNested();\n }\n\n selectAll() {\n this.clearSelections();\n this.selectedAll = true;\n this.onAllClicked.emit();\n }\n\n selectFavorites() {\n this.clearSelections();\n this.selectedFavorites = true;\n this.onFavoritesClicked.emit();\n }\n\n selectTrash() {\n this.clearSelections();\n this.selectedTrash = true;\n this.onTrashClicked.emit();\n }\n\n selectType(type: CipherType) {\n this.clearSelections();\n this.selectedType = type;\n this.onCipherTypeClicked.emit(type);\n }\n\n selectFolder(folder: FolderView) {\n this.clearSelections();\n this.selectedFolder = true;\n this.selectedFolderId = folder.id;\n this.onFolderClicked.emit(folder);\n }\n\n addFolder() {\n this.onAddFolder.emit();\n }\n\n editFolder(folder: FolderView) {\n this.onEditFolder.emit(folder);\n }\n\n selectCollection(collection: CollectionView) {\n this.clearSelections();\n this.selectedCollectionId = collection.id;\n this.onCollectionClicked.emit(collection);\n }\n\n clearSelections() {\n this.selectedAll = false;\n this.selectedFavorites = false;\n this.selectedTrash = false;\n this.selectedType = null;\n this.selectedFolder = false;\n this.selectedFolderId = null;\n this.selectedCollectionId = null;\n }\n\n collapse(grouping: FolderView | CollectionView, idPrefix = '') {\n if (grouping.id == null) {\n return;\n }\n const id = idPrefix + grouping.id;\n if (this.isCollapsed(grouping, idPrefix)) {\n this.collapsedGroupings.delete(id);\n } else {\n this.collapsedGroupings.add(id);\n }\n this.storageService.save(this.collapsedGroupingsKey, this.collapsedGroupings);\n }\n\n isCollapsed(grouping: FolderView | CollectionView, idPrefix = '') {\n return this.collapsedGroupings.has(idPrefix + grouping.id);\n }\n}\n","import { SendType } from '../../enums/sendType';\n\nimport { SendAccessResponse } from '../response/sendAccessResponse';\n\nimport { SendAccessView } from '../view/sendAccessView';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\nimport { SendFile } from './sendFile';\nimport { SendText } from './sendText';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class SendAccess extends Domain {\n id: string;\n type: SendType;\n name: EncString;\n file: SendFile;\n text: SendText;\n expirationDate: Date;\n creatorIdentifier: string;\n\n constructor(obj?: SendAccessResponse, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(this, obj, {\n id: null,\n name: null,\n expirationDate: null,\n creatorIdentifier: null,\n }, alreadyEncrypted, ['id', 'expirationDate', 'creatorIdentifier']);\n\n this.type = obj.type;\n\n switch (this.type) {\n case SendType.Text:\n this.text = new SendText(obj.text, alreadyEncrypted);\n break;\n case SendType.File:\n this.file = new SendFile(obj.file, alreadyEncrypted);\n break;\n default:\n break;\n }\n }\n\n async decrypt(key: SymmetricCryptoKey): Promise {\n const model = new SendAccessView(this);\n\n await this.decryptObj(model, {\n name: null,\n }, null, key);\n\n switch (this.type) {\n case SendType.File:\n model.file = await this.file.decrypt(key);\n break;\n case SendType.Text:\n model.text = await this.text.decrypt(key);\n break;\n default:\n break;\n }\n\n return model;\n }\n}\n","import { SendType } from '../../enums/sendType';\n\nimport { SendAccess } from '../domain/sendAccess';\n\nimport { SendFileView } from './sendFileView';\nimport { SendTextView } from './sendTextView';\nimport { View } from './view';\n\nexport class SendAccessView implements View {\n id: string = null;\n name: string = null;\n type: SendType = null;\n text = new SendTextView();\n file = new SendFileView();\n expirationDate: Date = null;\n creatorIdentifier: string = null;\n\n constructor(s?: SendAccess) {\n if (!s) {\n return;\n }\n\n this.id = s.id;\n this.type = s.type;\n this.expirationDate = s.expirationDate;\n this.creatorIdentifier = s.creatorIdentifier;\n }\n}\n","export class SendAccessRequest {\n password: string;\n}\n","import {\n Directive,\n NgZone,\n OnInit,\n} from '@angular/core';\n\nimport { OrganizationUserStatusType } from 'jslib-common/enums/organizationUserStatusType';\nimport { PolicyType } from 'jslib-common/enums/policyType';\nimport { SendType } from 'jslib-common/enums/sendType';\n\nimport { SendView } from 'jslib-common/models/view/sendView';\n\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { SearchService } from 'jslib-common/abstractions/search.service';\nimport { SendService } from 'jslib-common/abstractions/send.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\n@Directive()\nexport class SendComponent implements OnInit {\n\n disableSend = false;\n sendType = SendType;\n loaded = false;\n loading = true;\n refreshing = false;\n expired: boolean = false;\n type: SendType = null;\n sends: SendView[] = [];\n filteredSends: SendView[] = [];\n searchText: string;\n selectedType: SendType;\n selectedAll: boolean;\n searchPlaceholder: string;\n filter: (cipher: SendView) => boolean;\n searchPending = false;\n hasSearched = false; // search() function called - returns true if text qualifies for search\n\n actionPromise: any;\n onSuccessfulRemovePassword: () => Promise;\n onSuccessfulDelete: () => Promise;\n onSuccessfulLoad: () => Promise;\n\n private searchTimeout: any;\n\n constructor(protected sendService: SendService, protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService, protected environmentService: EnvironmentService,\n protected ngZone: NgZone, protected searchService: SearchService,\n protected policyService: PolicyService, protected userService: UserService) { }\n\n async ngOnInit() {\n const policies = await this.policyService.getAll(PolicyType.DisableSend);\n const organizations = await this.userService.getAllOrganizations();\n this.disableSend = organizations.some(o => {\n return o.enabled &&\n o.status === OrganizationUserStatusType.Confirmed &&\n o.usePolicies &&\n !o.canManagePolicies &&\n policies.some(p => p.organizationId === o.id && p.enabled);\n });\n }\n\n async load(filter: (send: SendView) => boolean = null) {\n this.loading = true;\n const sends = await this.sendService.getAllDecrypted();\n this.sends = sends;\n if (this.onSuccessfulLoad != null) {\n await this.onSuccessfulLoad();\n } else {\n // Default action\n this.selectAll();\n }\n this.loading = false;\n this.loaded = true;\n }\n\n async reload(filter: (send: SendView) => boolean = null) {\n this.loaded = false;\n this.sends = [];\n await this.load(filter);\n }\n\n async refresh() {\n try {\n this.refreshing = true;\n await this.reload(this.filter);\n } finally {\n this.refreshing = false;\n }\n }\n\n async applyFilter(filter: (send: SendView) => boolean = null) {\n this.filter = filter;\n await this.search(null);\n }\n\n async search(timeout: number = null) {\n this.searchPending = false;\n if (this.searchTimeout != null) {\n clearTimeout(this.searchTimeout);\n }\n if (timeout == null) {\n this.hasSearched = this.searchService.isSearchable(this.searchText);\n this.filteredSends = this.sends.filter(s => this.filter == null || this.filter(s));\n this.applyTextSearch();\n return;\n }\n this.searchPending = true;\n this.searchTimeout = setTimeout(async () => {\n this.hasSearched = this.searchService.isSearchable(this.searchText);\n this.filteredSends = this.sends.filter(s => this.filter == null || this.filter(s));\n this.applyTextSearch();\n this.searchPending = false;\n }, timeout);\n }\n\n async removePassword(s: SendView): Promise {\n if (this.actionPromise != null || s.password == null) {\n return;\n }\n const confirmed = await this.platformUtilsService.showDialog(this.i18nService.t('removePasswordConfirmation'),\n this.i18nService.t('removePassword'),\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.sendService.removePasswordWithServer(s.id);\n await this.actionPromise;\n if (this.onSuccessfulRemovePassword != null) {\n this.onSuccessfulRemovePassword();\n } else {\n // Default actions\n this.platformUtilsService.showToast('success', null, this.i18nService.t('removedPassword'));\n await this.load();\n }\n } catch { }\n this.actionPromise = null;\n }\n\n async delete(s: SendView): Promise {\n if (this.actionPromise != null) {\n return false;\n }\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('deleteSendConfirmation'),\n this.i18nService.t('deleteSend'),\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.sendService.deleteWithServer(s.id);\n await this.actionPromise;\n\n if (this.onSuccessfulDelete != null) {\n this.onSuccessfulDelete();\n } else {\n // Default actions\n this.platformUtilsService.showToast('success', null, this.i18nService.t('deletedSend'));\n await this.refresh();\n }\n } catch { }\n this.actionPromise = null;\n return true;\n }\n\n copy(s: SendView) {\n let sendLinkBaseUrl = 'https://send.bitwarden.com/#';\n const webVaultUrl = this.environmentService.getWebVaultUrl();\n if (webVaultUrl != null) {\n sendLinkBaseUrl = webVaultUrl + '/#/send/';\n }\n const link = sendLinkBaseUrl + s.accessId + '/' + s.urlB64Key;\n this.platformUtilsService.copyToClipboard(link);\n this.platformUtilsService.showToast('success', null,\n this.i18nService.t('valueCopied', this.i18nService.t('sendLink')));\n }\n\n searchTextChanged() {\n this.search(200);\n }\n\n selectAll() {\n this.clearSelections();\n this.selectedAll = true;\n this.applyFilter(null);\n }\n\n selectType(type: SendType) {\n this.clearSelections();\n this.selectedType = type;\n this.applyFilter(s => s.type === type);\n }\n\n clearSelections() {\n this.selectedAll = false;\n this.selectedType = null;\n }\n\n private applyTextSearch() {\n if (this.searchText != null) {\n this.filteredSends = this.searchService.searchSends(this.filteredSends, this.searchText);\n }\n }\n}\n","import { DatePipe } from '@angular/common';\nimport {\n Directive,\n EventEmitter,\n Input,\n OnInit,\n Output\n} from '@angular/core';\n\nimport { OrganizationUserStatusType } from 'jslib-common/enums/organizationUserStatusType';\nimport { PolicyType } from 'jslib-common/enums/policyType';\nimport { SendType } from 'jslib-common/enums/sendType';\n\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { SendService } from 'jslib-common/abstractions/send.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { SendFileView } from 'jslib-common/models/view/sendFileView';\nimport { SendTextView } from 'jslib-common/models/view/sendTextView';\nimport { SendView } from 'jslib-common/models/view/sendView';\n\nimport { EncArrayBuffer } from 'jslib-common/models/domain/encArrayBuffer';\nimport { Send } from 'jslib-common/models/domain/send';\n\n// TimeOption is used for the dropdown implementation of custom times\n// Standard = displayed time; Military = stored time\ninterface TimeOption {\n standard: string;\n military: string;\n}\n\nenum DateField {\n DeletionDate = 'deletion',\n ExpriationDate = 'expiration',\n}\n\n@Directive()\nexport class AddEditComponent implements OnInit {\n @Input() sendId: string;\n @Input() type: SendType;\n\n @Output() onSavedSend = new EventEmitter();\n @Output() onDeletedSend = new EventEmitter();\n @Output() onCancelled = new EventEmitter();\n\n copyLink = false;\n disableSend = false;\n disableHideEmail = false;\n send: SendView;\n deletionDate: string;\n deletionDateFallback: string;\n deletionTimeFallback: string;\n expirationDate: string = null;\n expirationDateFallback: string;\n expirationTimeFallback: string;\n hasPassword: boolean;\n password: string;\n showPassword = false;\n formPromise: Promise;\n deletePromise: Promise;\n sendType = SendType;\n typeOptions: any[];\n deletionDateOptions: any[];\n expirationDateOptions: any[];\n deletionDateSelect = 168;\n expirationDateSelect: number = null;\n canAccessPremium = true;\n emailVerified = true;\n alertShown = false;\n showOptions = false;\n\n safariDeletionTime: string;\n safariExpirationTime: string;\n safariDeletionTimeOptions: TimeOption[];\n safariExpirationTimeOptions: TimeOption[];\n\n private sendLinkBaseUrl: string;\n\n constructor(protected i18nService: I18nService, protected platformUtilsService: PlatformUtilsService,\n protected environmentService: EnvironmentService, protected datePipe: DatePipe,\n protected sendService: SendService, protected userService: UserService,\n protected messagingService: MessagingService, protected policyService: PolicyService) {\n this.typeOptions = [\n { name: i18nService.t('sendTypeFile'), value: SendType.File },\n { name: i18nService.t('sendTypeText'), value: SendType.Text },\n ];\n this.deletionDateOptions = this.expirationDateOptions = [\n { name: i18nService.t('oneHour'), value: 1 },\n { name: i18nService.t('oneDay'), value: 24 },\n { name: i18nService.t('days', '2'), value: 48 },\n { name: i18nService.t('days', '3'), value: 72 },\n { name: i18nService.t('days', '7'), value: 168 },\n { name: i18nService.t('days', '30'), value: 720 },\n { name: i18nService.t('custom'), value: 0 },\n ];\n this.expirationDateOptions = [\n { name: i18nService.t('never'), value: null },\n ].concat([...this.deletionDateOptions]);\n\n const webVaultUrl = this.environmentService.getWebVaultUrl();\n if (webVaultUrl == null) {\n this.sendLinkBaseUrl = 'https://send.bitwarden.com/#';\n } else {\n this.sendLinkBaseUrl = webVaultUrl + '/#/send/';\n }\n }\n\n get link(): string {\n if (this.send.id != null && this.send.accessId != null) {\n return this.sendLinkBaseUrl + this.send.accessId + '/' + this.send.urlB64Key;\n }\n return null;\n }\n\n get isSafari() {\n return this.platformUtilsService.isSafari();\n }\n\n get isDateTimeLocalSupported(): boolean {\n return !(this.platformUtilsService.isFirefox() || this.platformUtilsService.isSafari());\n }\n\n async ngOnInit() {\n await this.load();\n }\n\n get editMode(): boolean {\n return this.sendId != null;\n }\n\n get title(): string {\n return this.i18nService.t(\n this.editMode ?\n 'editSend' :\n 'createSend'\n );\n }\n\n get expirationDateTimeFallback() {\n return this.nullOrWhiteSpaceCount([this.expirationDateFallback, this.expirationTimeFallback]) > 0 ?\n null :\n `${this.formatDateFallbacks(this.expirationDateFallback)}T${this.expirationTimeFallback}`;\n }\n\n get deletionDateTimeFallback() {\n return this.nullOrWhiteSpaceCount([this.deletionDateFallback, this.deletionTimeFallback]) > 0 ?\n null :\n `${this.formatDateFallbacks(this.deletionDateFallback)}T${this.deletionTimeFallback}`;\n }\n\n async load() {\n const disableSendPolicies = await this.policyService.getAll(PolicyType.DisableSend);\n const organizations = await this.userService.getAllOrganizations();\n this.disableSend = organizations.some(o => {\n return o.enabled &&\n o.status === OrganizationUserStatusType.Confirmed &&\n o.usePolicies &&\n !o.canManagePolicies &&\n disableSendPolicies.some(p => p.organizationId === o.id && p.enabled);\n });\n\n const sendOptionsPolicies = await this.policyService.getAll(PolicyType.SendOptions);\n this.disableHideEmail = await organizations.some(o => {\n return o.enabled &&\n o.status === OrganizationUserStatusType.Confirmed &&\n o.usePolicies &&\n !o.canManagePolicies &&\n sendOptionsPolicies.some(p => p.organizationId === o.id && p.enabled && p.data.disableHideEmail);\n });\n\n this.canAccessPremium = await this.userService.canAccessPremium();\n this.emailVerified = await this.userService.getEmailVerified();\n if (!this.canAccessPremium || !this.emailVerified) {\n this.type = SendType.Text;\n }\n\n if (this.send == null) {\n if (this.editMode) {\n const send = await this.loadSend();\n this.send = await send.decrypt();\n } else {\n this.send = new SendView();\n this.send.type = this.type == null ? SendType.File : this.type;\n this.send.file = new SendFileView();\n this.send.text = new SendTextView();\n this.send.deletionDate = new Date();\n this.send.deletionDate.setDate(this.send.deletionDate.getDate() + 7);\n }\n }\n\n this.hasPassword = this.send.password != null && this.send.password.trim() !== '';\n\n // Parse dates\n if (!this.isDateTimeLocalSupported) {\n const deletionDateParts = this.dateToSplitString(this.send.deletionDate);\n if (deletionDateParts !== undefined && deletionDateParts.length > 0) {\n this.deletionDateFallback = deletionDateParts[0];\n this.deletionTimeFallback = deletionDateParts[1];\n if (this.isSafari) {\n this.safariDeletionTime = this.deletionTimeFallback;\n }\n }\n\n const expirationDateParts = this.dateToSplitString(this.send.expirationDate);\n if (expirationDateParts !== undefined && expirationDateParts.length > 0) {\n this.expirationDateFallback = expirationDateParts[0];\n this.expirationTimeFallback = expirationDateParts[1];\n if (this.isSafari) {\n this.safariExpirationTime = this.expirationTimeFallback;\n }\n }\n } else {\n this.deletionDate = this.dateToString(this.send.deletionDate);\n this.expirationDate = this.dateToString(this.send.expirationDate);\n }\n\n if (this.isSafari) {\n this.safariDeletionTimeOptions = this.safariTimeOptions(DateField.DeletionDate);\n this.safariExpirationTimeOptions = this.safariTimeOptions(DateField.ExpriationDate);\n }\n }\n\n async submit(): Promise {\n if (!this.isDateTimeLocalSupported) {\n if (this.isSafari) {\n this.expirationTimeFallback = this.safariExpirationTime ?? this.expirationTimeFallback;\n this.deletionTimeFallback = this.safariDeletionTime ?? this.deletionTimeFallback;\n }\n this.deletionDate = this.deletionDateTimeFallback;\n if (this.expirationDateTimeFallback != null && isNaN(Date.parse(this.expirationDateTimeFallback))) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('expirationDateIsInvalid'));\n return;\n }\n if (isNaN(Date.parse(this.deletionDateTimeFallback))) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('deletionDateIsInvalid'));\n return;\n }\n if (this.nullOrWhiteSpaceCount([this.expirationDateFallback, this.expirationTimeFallback]) === 1) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('expirationDateAndTimeRequired'));\n return;\n }\n if (this.editMode || this.expirationDateSelect === 0) {\n this.expirationDate = this.expirationDateTimeFallback;\n }\n }\n\n if (this.disableSend) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('sendDisabledWarning'));\n return false;\n }\n\n if (this.send.name == null || this.send.name === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('nameRequired'));\n return false;\n }\n\n let file: File = null;\n if (this.send.type === SendType.File && !this.editMode) {\n const fileEl = document.getElementById('file') as HTMLInputElement;\n const files = fileEl.files;\n if (files == null || files.length === 0) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('selectFile'));\n return;\n }\n\n file = files[0];\n if (files[0].size > 524288000) { // 500 MB\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('maxFileSize'));\n return;\n }\n }\n\n if (!this.editMode) {\n const now = new Date();\n if (this.deletionDateSelect > 0) {\n const d = new Date();\n d.setHours(now.getHours() + this.deletionDateSelect);\n this.deletionDate = this.dateToString(d);\n }\n if (this.expirationDateSelect != null && this.expirationDateSelect > 0) {\n const d = new Date();\n d.setHours(now.getHours() + this.expirationDateSelect);\n this.expirationDate = this.dateToString(d);\n }\n }\n\n if (this.password != null && this.password.trim() === '') {\n this.password = null;\n }\n\n this.formPromise = this.encryptSend(file)\n .then(async encSend => {\n const uploadPromise = this.sendService.saveWithServer(encSend);\n await uploadPromise;\n if (this.send.id == null) {\n this.send.id = encSend[0].id;\n }\n if (this.send.accessId == null) {\n this.send.accessId = encSend[0].accessId;\n }\n this.onSavedSend.emit(this.send);\n if (this.copyLink && this.link != null) {\n const copySuccess = await this.copyLinkToClipboard(this.link);\n if (copySuccess ?? true) {\n this.platformUtilsService.showToast('success', null,\n this.i18nService.t(this.editMode ? 'editedSend' : 'createdSend'));\n } else {\n await this.platformUtilsService.showDialog(\n this.i18nService.t(this.editMode ? 'editedSend' : 'createdSend'), null,\n this.i18nService.t('ok'), null, 'success', null);\n await this.copyLinkToClipboard(this.link);\n }\n }\n });\n\n try {\n await this.formPromise;\n return true;\n } catch { }\n return false;\n }\n\n clearExpiration() {\n this.expirationDate = null;\n this.expirationDateFallback = null;\n this.expirationTimeFallback = null;\n this.safariExpirationTime = null;\n }\n\n async copyLinkToClipboard(link: string): Promise {\n return Promise.resolve(this.platformUtilsService.copyToClipboard(link));\n }\n\n async delete(): Promise {\n if (this.deletePromise != null) {\n return false;\n }\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('deleteSendConfirmation'),\n this.i18nService.t('deleteSend'),\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.sendService.deleteWithServer(this.send.id);\n await this.deletePromise;\n this.platformUtilsService.showToast('success', null, this.i18nService.t('deletedSend'));\n await this.load();\n this.onDeletedSend.emit(this.send);\n return true;\n } catch { }\n\n return false;\n }\n\n typeChanged() {\n if (this.send.type === SendType.File && !this.alertShown)\n {\n if (!this.canAccessPremium) {\n this.alertShown = true;\n this.messagingService.send('premiumRequired');\n } else if (!this.emailVerified) {\n this.alertShown = true;\n this.messagingService.send('emailVerificationRequired');\n }\n }\n }\n\n toggleOptions() {\n this.showOptions = !this.showOptions;\n }\n\n expirationDateFallbackChanged() {\n this.isSafari ?\n this.safariExpirationTime = this.safariExpirationTime ?? '00:00' :\n this.expirationTimeFallback = this.expirationTimeFallback ?? this.datePipe.transform(new Date(), 'HH:mm');\n }\n\n protected async loadSend(): Promise {\n return this.sendService.get(this.sendId);\n }\n\n protected async encryptSend(file: File): Promise<[Send, EncArrayBuffer]> {\n const sendData = await this.sendService.encrypt(this.send, file, this.password, null);\n\n // Parse dates\n try {\n sendData[0].deletionDate = this.deletionDate == null ? null : new Date(this.deletionDate);\n } catch {\n sendData[0].deletionDate = null;\n }\n try {\n sendData[0].expirationDate = this.expirationDate == null ? null : new Date(this.expirationDate);\n } catch {\n sendData[0].expirationDate = null;\n }\n\n return sendData;\n }\n\n protected dateToString(d: Date) {\n return d == null ? null : this.datePipe.transform(d, 'yyyy-MM-ddTHH:mm');\n }\n\n protected formatDateFallbacks(dateString: string) {\n try {\n // The Firefox date picker doesn't supply a time, safari's polyfill does.\n // Unknown if Safari's native date picker will or not when it releases.\n if (!this.isSafari) {\n dateString += ' 00:00';\n }\n return this.datePipe.transform(new Date(dateString), 'yyyy-MM-dd');\n } catch {\n // this should never happen\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('dateParsingError'));\n }\n }\n\n protected dateToSplitString(d: Date) {\n if (d != null) {\n const date = !this.isSafari ?\n this.datePipe.transform(d, 'yyyy-MM-dd') :\n this.datePipe.transform(d, 'MM/dd/yyyy');\n const time = this.datePipe.transform(d, 'HH:mm');\n return [date, time];\n }\n }\n\n protected togglePasswordVisible() {\n this.showPassword = !this.showPassword;\n document.getElementById('password').focus();\n }\n\n protected nullOrWhiteSpaceCount(strarray: string[]): number {\n return strarray.filter(str => str == null || str.trim() === '').length;\n }\n\n protected safariTimeOptions(field: DateField): TimeOption[] {\n // init individual arrays for major sort groups\n const noon: TimeOption[] = [];\n const midnight: TimeOption[] = [];\n const ams: TimeOption[] = [];\n const pms: TimeOption[] = [];\n\n // determine minute skip (5 min, 10 min, 15 min, etc.)\n const minuteIncrementer = 15;\n\n // loop through each hour on a 12 hour system\n for (let h = 1; h <= 12; h++) {\n // loop through each minute in the hour using the skip to incriment\n for (let m = 0; m < 60; m += minuteIncrementer) {\n // init the final strings that will be added to the lists\n let hour = h.toString();\n let minutes = m.toString();\n\n // add prepending 0s to single digit hours/minutes\n if (h < 10) {\n hour = '0' + hour;\n }\n if (m < 10) {\n minutes = '0' + minutes;\n }\n\n // build time strings and push to relevant sort groups\n if (h === 12) {\n const midnightOption: TimeOption = {\n standard: `${hour}:${minutes} AM`,\n military: `00:${minutes}`,\n };\n midnight.push(midnightOption);\n\n const noonOption: TimeOption = {\n standard: `${hour}:${minutes} PM`,\n military: `${hour}:${minutes}`,\n };\n noon.push(noonOption);\n } else {\n const amOption: TimeOption = {\n standard: `${hour}:${minutes} AM`,\n military: `${hour}:${minutes}`,\n };\n ams.push(amOption);\n\n const pmOption: TimeOption = {\n standard: `${hour}:${minutes} PM`,\n military: `${h + 12}:${minutes}`,\n };\n pms.push(pmOption);\n }\n }\n }\n\n // bring all the arrays together in the right order\n const validTimes = [...midnight, ...ams, ...noon, ...pms];\n\n // determine if an unsupported value already exists on the send & add that to the top of the option list\n // example: if the Send was created with a different client\n if (field === DateField.ExpriationDate && this.expirationDateTimeFallback != null && this.editMode) {\n const previousValue: TimeOption = {\n standard: this.datePipe.transform(this.expirationDateTimeFallback, 'hh:mm a'),\n military: this.datePipe.transform(this.expirationDateTimeFallback, 'HH:mm'),\n };\n return [previousValue, { standard: null, military: null }, ...validTimes];\n } else if (field === DateField.DeletionDate && this.deletionDateTimeFallback != null && this.editMode) {\n const previousValue: TimeOption = {\n standard: this.datePipe.transform(this.deletionDateTimeFallback, 'hh:mm a'),\n military: this.datePipe.transform(this.deletionDateTimeFallback, 'HH:mm'),\n };\n return [previousValue, ...validTimes];\n } else {\n return [{ standard: null, military: null }, ...validTimes];\n }\n }\n}\n","export class UpdateProfileRequest {\n name: string;\n masterPasswordHint: string;\n culture = 'en-US'; // deprecated\n\n constructor(name: string, masterPasswordHint: string) {\n this.name = name;\n this.masterPasswordHint = masterPasswordHint ? masterPasswordHint : null;\n }\n}\n","import { EmailTokenRequest } from './emailTokenRequest';\n\nexport class EmailRequest extends EmailTokenRequest {\n newMasterPasswordHash: string;\n token: string;\n key: string;\n}\n","import { PasswordRequest } from './passwordRequest';\n\nimport { KdfType } from '../../enums/kdfType';\n\nexport class KdfRequest extends PasswordRequest {\n kdf: KdfType;\n kdfIterations: number;\n}\n","export class UpdateDomainsRequest {\n equivalentDomains: string[][];\n excludedGlobalEquivalentDomains: number[];\n}\n","import {\n Directive,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { PasswordGeneratorPolicyOptions } from 'jslib-common/models/domain/passwordGeneratorPolicyOptions';\n\n@Directive()\nexport class PasswordGeneratorComponent implements OnInit {\n @Input() showSelect: boolean = false;\n @Output() onSelected = new EventEmitter();\n\n options: any = {};\n password: string = '-';\n showOptions = false;\n avoidAmbiguous = false;\n enforcedPolicyOptions: PasswordGeneratorPolicyOptions;\n\n constructor(protected passwordGenerationService: PasswordGenerationService,\n protected platformUtilsService: PlatformUtilsService, protected i18nService: I18nService,\n private win: Window) { }\n\n async ngOnInit() {\n const optionsResponse = await this.passwordGenerationService.getOptions();\n this.options = optionsResponse[0];\n this.enforcedPolicyOptions = optionsResponse[1];\n this.avoidAmbiguous = !this.options.ambiguous;\n this.options.type = this.options.type === 'passphrase' ? 'passphrase' : 'password';\n this.password = await this.passwordGenerationService.generatePassword(this.options);\n await this.passwordGenerationService.addHistory(this.password);\n }\n\n async sliderChanged() {\n this.saveOptions(false);\n await this.passwordGenerationService.addHistory(this.password);\n }\n\n async sliderInput() {\n this.normalizeOptions();\n this.password = await this.passwordGenerationService.generatePassword(this.options);\n }\n\n async saveOptions(regenerate: boolean = true) {\n this.normalizeOptions();\n await this.passwordGenerationService.saveOptions(this.options);\n\n if (regenerate) {\n await this.regenerate();\n }\n }\n\n async regenerate() {\n this.password = await this.passwordGenerationService.generatePassword(this.options);\n await this.passwordGenerationService.addHistory(this.password);\n }\n\n copy() {\n const copyOptions = this.win != null ? { window: this.win } : null;\n this.platformUtilsService.copyToClipboard(this.password, copyOptions);\n this.platformUtilsService.showToast('info', null,\n this.i18nService.t('valueCopied', this.i18nService.t('password')));\n }\n\n select() {\n this.onSelected.emit(this.password);\n }\n\n toggleOptions() {\n this.showOptions = !this.showOptions;\n }\n\n private normalizeOptions() {\n // Application level normalize options depedent on class variables\n this.options.ambiguous = !this.avoidAmbiguous;\n\n if (!this.options.uppercase && !this.options.lowercase && !this.options.number && !this.options.special) {\n this.options.lowercase = true;\n if (this.win != null) {\n const lowercase = this.win.document.querySelector('#lowercase') as HTMLInputElement;\n if (lowercase) {\n lowercase.checked = true;\n }\n }\n }\n\n this.passwordGenerationService.normalizeOptions(this.options, this.enforcedPolicyOptions);\n }\n}\n","import { Directive, OnInit } from '@angular/core';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { GeneratedPasswordHistory } from 'jslib-common/models/domain/generatedPasswordHistory';\n\n@Directive()\nexport class PasswordGeneratorHistoryComponent implements OnInit {\n history: GeneratedPasswordHistory[] = [];\n\n constructor(protected passwordGenerationService: PasswordGenerationService,\n protected platformUtilsService: PlatformUtilsService, protected i18nService: I18nService,\n private win: Window) { }\n\n async ngOnInit() {\n this.history = await this.passwordGenerationService.getHistory();\n }\n\n clear() {\n this.history = [];\n this.passwordGenerationService.clear();\n }\n\n copy(password: string) {\n const copyOptions = this.win != null ? { window: this.win } : null;\n this.platformUtilsService.copyToClipboard(password, copyOptions);\n this.platformUtilsService.showToast('info', null,\n this.i18nService.t('valueCopied', this.i18nService.t('password')));\n }\n}\n","import {\n Directive,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { FolderView } from 'jslib-common/models/view/folderView';\n\n@Directive()\nexport class FolderAddEditComponent implements OnInit {\n @Input() folderId: string;\n @Output() onSavedFolder = new EventEmitter();\n @Output() onDeletedFolder = new EventEmitter();\n\n editMode: boolean = false;\n folder: FolderView = new FolderView();\n title: string;\n formPromise: Promise;\n deletePromise: Promise;\n\n constructor(protected folderService: FolderService, protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService) { }\n\n async ngOnInit() {\n await this.init();\n }\n\n async submit(): Promise {\n if (this.folder.name == null || this.folder.name === '') {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('nameRequired'));\n return false;\n }\n\n try {\n const folder = await this.folderService.encrypt(this.folder);\n this.formPromise = this.folderService.saveWithServer(folder);\n await this.formPromise;\n this.platformUtilsService.showToast('success', null,\n this.i18nService.t(this.editMode ? 'editedFolder' : 'addedFolder'));\n this.onSavedFolder.emit(this.folder);\n return true;\n } catch { }\n\n return false;\n }\n\n async delete(): Promise {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('deleteFolderConfirmation'), this.i18nService.t('deleteFolder'),\n this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.folderService.deleteWithServer(this.folder.id);\n await this.deletePromise;\n this.platformUtilsService.showToast('success', null, this.i18nService.t('deletedFolder'));\n this.onDeletedFolder.emit(this.folder);\n } catch { }\n\n return true;\n }\n\n protected async init() {\n this.editMode = this.folderId != null;\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t('editFolder');\n const folder = await this.folderService.get(this.folderId);\n this.folder = await folder.decrypt();\n } else {\n this.title = this.i18nService.t('addFolder');\n }\n }\n}\n","import {\n Directive,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { OrganizationUserStatusType } from 'jslib-common/enums/organizationUserStatusType';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\nimport { CipherView } from 'jslib-common/models/view/cipherView';\nimport { CollectionView } from 'jslib-common/models/view/collectionView';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\n@Directive()\nexport class ShareComponent implements OnInit {\n @Input() cipherId: string;\n @Input() organizationId: string;\n @Output() onSharedCipher = new EventEmitter();\n\n formPromise: Promise;\n cipher: CipherView;\n collections: CollectionView[] = [];\n organizations: Organization[] = [];\n\n protected writeableCollections: CollectionView[] = [];\n\n constructor(protected collectionService: CollectionService, protected platformUtilsService: PlatformUtilsService,\n protected i18nService: I18nService, protected userService: UserService,\n protected cipherService: CipherService) { }\n\n async ngOnInit() {\n await this.load();\n }\n\n async load() {\n const allCollections = await this.collectionService.getAllDecrypted();\n this.writeableCollections = allCollections.map(c => c).filter(c => !c.readOnly);\n const orgs = await this.userService.getAllOrganizations();\n this.organizations = orgs.sort(Utils.getSortFunction(this.i18nService, 'name'))\n .filter(o => o.enabled && o.status === OrganizationUserStatusType.Confirmed);\n\n const cipherDomain = await this.cipherService.get(this.cipherId);\n this.cipher = await cipherDomain.decrypt();\n if (this.organizationId == null && this.organizations.length > 0) {\n this.organizationId = this.organizations[0].id;\n }\n this.filterCollections();\n }\n\n filterCollections() {\n this.writeableCollections.forEach(c => (c as any).checked = false);\n if (this.organizationId == null || this.writeableCollections.length === 0) {\n this.collections = [];\n } else {\n this.collections = this.writeableCollections.filter(c => c.organizationId === this.organizationId);\n }\n }\n\n async submit(): Promise {\n const selectedCollectionIds = this.collections\n .filter(c => !!(c as any).checked)\n .map(c => c.id);\n if (selectedCollectionIds.length === 0) {\n this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n this.i18nService.t('selectOneCollection'));\n return;\n }\n\n const cipherDomain = await this.cipherService.get(this.cipherId);\n const cipherView = await cipherDomain.decrypt();\n\n try {\n this.formPromise = this.cipherService.shareWithServer(cipherView, this.organizationId,\n selectedCollectionIds).then(async () => {\n this.onSharedCipher.emit();\n this.platformUtilsService.showToast('success', null, this.i18nService.t('sharedItem'));\n });\n await this.formPromise;\n return true;\n } catch { }\n return false;\n }\n\n get canSave() {\n if (this.collections != null) {\n for (let i = 0; i < this.collections.length; i++) {\n if ((this.collections[i] as any).checked) {\n return true;\n }\n }\n }\n return false;\n }\n}\n","export { AttachmentData } from './attachmentData';\nexport { CardData } from './cardData';\nexport { CipherData } from './cipherData';\nexport { CollectionData } from './collectionData';\nexport { FieldData } from './fieldData';\nexport { FolderData } from './folderData';\nexport { IdentityData } from './identityData';\nexport { LoginData } from './loginData';\nexport { LoginUriData } from './loginUriData';\nexport { SecureNoteData } from './secureNoteData';\n","export { Attachment } from './attachment';\nexport { AuthResult } from './authResult';\nexport { Card } from './card';\nexport { Cipher } from './cipher';\nexport { EncString } from './encString';\nexport { Collection } from './collection';\nexport { EncryptedObject } from './encryptedObject';\nexport { EnvironmentUrls } from './environmentUrls';\nexport { Field } from './field';\nexport { Folder } from './folder';\nexport { Identity } from './identity';\nexport { Login } from './login';\nexport { LoginUri } from './loginUri';\nexport { GeneratedPasswordHistory } from './generatedPasswordHistory';\nexport { SecureNote } from './secureNote';\nexport { SymmetricCryptoKey } from './symmetricCryptoKey';\n","export class EmergencyAccessConfirmRequest {\n key: string;\n}\n","import { EmergencyAccessType } from '../../enums/emergencyAccessType';\n\nexport class EmergencyAccessInviteRequest {\n email: string;\n type: EmergencyAccessType;\n waitTimeDays: number;\n}\n","export class EmergencyAccessPasswordRequest {\n newMasterPasswordHash: string;\n key: string;\n}\n","import {\n APP_INITIALIZER,\n LOCALE_ID,\n NgModule,\n} from '@angular/core';\n\nimport { ToasterModule } from 'angular2-toaster';\n\nimport { BroadcasterMessagingService } from '../../services/broadcasterMessaging.service';\nimport { HtmlStorageService } from '../../services/htmlStorage.service';\nimport { I18nService } from '../../services/i18n.service';\nimport { MemoryStorageService } from '../../services/memoryStorage.service';\nimport { WebPlatformUtilsService } from '../../services/webPlatformUtils.service';\n\nimport { EventService } from './event.service';\nimport { OrganizationGuardService } from './organization-guard.service';\nimport { OrganizationTypeGuardService } from './organization-type-guard.service';\nimport { RouterService } from './router.service';\n\nimport { AuthGuardService } from 'jslib-angular/services/auth-guard.service';\nimport { BroadcasterService } from 'jslib-angular/services/broadcaster.service';\nimport { LockGuardService } from 'jslib-angular/services/lock-guard.service';\nimport { UnauthGuardService } from 'jslib-angular/services/unauth-guard.service';\nimport { ValidationService } from 'jslib-angular/services/validation.service';\n\nimport { ApiService } from 'jslib-common/services/api.service';\nimport { AppIdService } from 'jslib-common/services/appId.service';\nimport { AuditService } from 'jslib-common/services/audit.service';\nimport { AuthService } from 'jslib-common/services/auth.service';\nimport { CipherService } from 'jslib-common/services/cipher.service';\nimport { CollectionService } from 'jslib-common/services/collection.service';\nimport { ConsoleLogService } from 'jslib-common/services/consoleLog.service';\nimport { ConstantsService } from 'jslib-common/services/constants.service';\nimport { ContainerService } from 'jslib-common/services/container.service';\nimport { CryptoService } from 'jslib-common/services/crypto.service';\nimport { EnvironmentService } from 'jslib-common/services/environment.service';\nimport { EventService as EventLoggingService } from 'jslib-common/services/event.service';\nimport { ExportService } from 'jslib-common/services/export.service';\nimport { FileUploadService } from 'jslib-common/services/fileUpload.service';\nimport { FolderService } from 'jslib-common/services/folder.service';\nimport { ImportService } from 'jslib-common/services/import.service';\nimport { NotificationsService } from 'jslib-common/services/notifications.service';\nimport { PasswordGenerationService } from 'jslib-common/services/passwordGeneration.service';\nimport { PasswordRepromptService } from 'jslib-common/services/passwordReprompt.service';\nimport { PolicyService } from 'jslib-common/services/policy.service';\nimport { SearchService } from 'jslib-common/services/search.service';\nimport { SendService } from 'jslib-common/services/send.service';\nimport { SettingsService } from 'jslib-common/services/settings.service';\nimport { StateService } from 'jslib-common/services/state.service';\nimport { SyncService } from 'jslib-common/services/sync.service';\nimport { TokenService } from 'jslib-common/services/token.service';\nimport { TotpService } from 'jslib-common/services/totp.service';\nimport { UserService } from 'jslib-common/services/user.service';\nimport { VaultTimeoutService } from 'jslib-common/services/vaultTimeout.service';\nimport { WebCryptoFunctionService } from 'jslib-common/services/webCryptoFunction.service';\n\nimport { ApiService as ApiServiceAbstraction } from 'jslib-common/abstractions/api.service';\nimport { AuditService as AuditServiceAbstraction } from 'jslib-common/abstractions/audit.service';\nimport { AuthService as AuthServiceAbstraction } from 'jslib-common/abstractions/auth.service';\nimport { CipherService as CipherServiceAbstraction } from 'jslib-common/abstractions/cipher.service';\nimport { CollectionService as CollectionServiceAbstraction } from 'jslib-common/abstractions/collection.service';\nimport { CryptoService as CryptoServiceAbstraction } from 'jslib-common/abstractions/crypto.service';\nimport { CryptoFunctionService as CryptoFunctionServiceAbstraction } from 'jslib-common/abstractions/cryptoFunction.service';\nimport { EnvironmentService as EnvironmentServiceAbstraction } from 'jslib-common/abstractions/environment.service';\nimport { EventService as EventLoggingServiceAbstraction } from 'jslib-common/abstractions/event.service';\nimport { ExportService as ExportServiceAbstraction } from 'jslib-common/abstractions/export.service';\nimport { FileUploadService as FileUploadServiceAbstraction } from 'jslib-common/abstractions/fileUpload.service';\nimport { FolderService as FolderServiceAbstraction } from 'jslib-common/abstractions/folder.service';\nimport { I18nService as I18nServiceAbstraction } from 'jslib-common/abstractions/i18n.service';\nimport { ImportService as ImportServiceAbstraction } from 'jslib-common/abstractions/import.service';\nimport { MessagingService as MessagingServiceAbstraction } from 'jslib-common/abstractions/messaging.service';\nimport { NotificationsService as NotificationsServiceAbstraction } from 'jslib-common/abstractions/notifications.service';\nimport {\n PasswordGenerationService as PasswordGenerationServiceAbstraction,\n} from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PasswordRepromptService as PasswordRepromptServiceAbstraction } from 'jslib-common/abstractions/passwordReprompt.service';\nimport { PlatformUtilsService as PlatformUtilsServiceAbstraction } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService as PolicyServiceAbstraction } from 'jslib-common/abstractions/policy.service';\nimport { SearchService as SearchServiceAbstraction } from 'jslib-common/abstractions/search.service';\nimport { SendService as SendServiceAbstraction } from 'jslib-common/abstractions/send.service';\nimport { SettingsService as SettingsServiceAbstraction } from 'jslib-common/abstractions/settings.service';\nimport { StateService as StateServiceAbstraction } from 'jslib-common/abstractions/state.service';\nimport { StorageService as StorageServiceAbstraction } from 'jslib-common/abstractions/storage.service';\nimport { SyncService as SyncServiceAbstraction } from 'jslib-common/abstractions/sync.service';\nimport { TokenService as TokenServiceAbstraction } from 'jslib-common/abstractions/token.service';\nimport { TotpService as TotpServiceAbstraction } from 'jslib-common/abstractions/totp.service';\nimport { UserService as UserServiceAbstraction } from 'jslib-common/abstractions/user.service';\nimport { VaultTimeoutService as VaultTimeoutServiceAbstraction } from 'jslib-common/abstractions/vaultTimeout.service';\n\nconst i18nService = new I18nService(window.navigator.language, 'locales');\nconst stateService = new StateService();\nconst broadcasterService = new BroadcasterService();\nconst messagingService = new BroadcasterMessagingService(broadcasterService);\nconst consoleLogService = new ConsoleLogService(false);\nconst platformUtilsService = new WebPlatformUtilsService(i18nService, messagingService, consoleLogService);\nconst storageService: StorageServiceAbstraction = new HtmlStorageService(platformUtilsService);\nconst secureStorageService: StorageServiceAbstraction = new MemoryStorageService();\nconst cryptoFunctionService: CryptoFunctionServiceAbstraction = new WebCryptoFunctionService(window,\n platformUtilsService);\nconst cryptoService = new CryptoService(storageService,\n platformUtilsService.isDev() ? storageService : secureStorageService, cryptoFunctionService, platformUtilsService,\n consoleLogService);\nconst tokenService = new TokenService(storageService);\nconst appIdService = new AppIdService(storageService);\nconst apiService = new ApiService(tokenService, platformUtilsService,\n async (expired: boolean) => messagingService.send('logout', { expired: expired }));\nconst userService = new UserService(tokenService, storageService);\nconst settingsService = new SettingsService(userService, storageService);\nexport let searchService: SearchService = null;\nconst fileUploadService = new FileUploadService(consoleLogService, apiService);\nconst cipherService = new CipherService(cryptoService, userService, settingsService,\n apiService, fileUploadService, storageService, i18nService, () => searchService);\nconst folderService = new FolderService(cryptoService, userService, apiService, storageService,\n i18nService, cipherService);\nconst collectionService = new CollectionService(cryptoService, userService, storageService, i18nService);\nsearchService = new SearchService(cipherService, consoleLogService, i18nService);\nconst policyService = new PolicyService(userService, storageService);\nconst sendService = new SendService(cryptoService, userService, apiService, fileUploadService, storageService,\n i18nService, cryptoFunctionService);\nconst vaultTimeoutService = new VaultTimeoutService(cipherService, folderService, collectionService,\n cryptoService, platformUtilsService, storageService, messagingService, searchService, userService, tokenService,\n null, async () => messagingService.send('logout', { expired: false }));\nconst syncService = new SyncService(userService, apiService, settingsService,\n folderService, cipherService, cryptoService, collectionService, storageService, messagingService, policyService,\n sendService, async (expired: boolean) => messagingService.send('logout', { expired: expired }));\nconst passwordGenerationService = new PasswordGenerationService(cryptoService, storageService, policyService);\nconst totpService = new TotpService(storageService, cryptoFunctionService);\nconst containerService = new ContainerService(cryptoService);\nconst authService = new AuthService(cryptoService, apiService,\n userService, tokenService, appIdService, i18nService, platformUtilsService, messagingService, vaultTimeoutService,\n consoleLogService);\nconst exportService = new ExportService(folderService, cipherService, apiService, cryptoService);\nconst importService = new ImportService(cipherService, folderService, apiService, i18nService, collectionService,\n platformUtilsService, cryptoService);\nconst notificationsService = new NotificationsService(userService, syncService, appIdService,\n apiService, vaultTimeoutService, async () => messagingService.send('logout', { expired: true }), consoleLogService);\nconst environmentService = new EnvironmentService(apiService, storageService, notificationsService);\nconst auditService = new AuditService(cryptoFunctionService, apiService);\nconst eventLoggingService = new EventLoggingService(storageService, apiService, userService, cipherService);\nconst passwordRepromptService = new PasswordRepromptService(i18nService, cryptoService, platformUtilsService);\n\ncontainerService.attachToWindow(window);\n\nexport function initFactory(): Function {\n return async () => {\n await (storageService as HtmlStorageService).init();\n\n if (process.env.ENV !== 'production' || platformUtilsService.isSelfHost()) {\n environmentService.baseUrl = window.location.origin;\n } else {\n environmentService.notificationsUrl = 'https://notifications.bitwarden.com';\n environmentService.enterpriseUrl = 'https://portal.bitwarden.com';\n }\n\n apiService.setUrls({\n base: window.location.origin,\n api: null,\n identity: null,\n events: null,\n });\n setTimeout(() => notificationsService.init(environmentService), 3000);\n\n vaultTimeoutService.init(true);\n const locale = await storageService.get(ConstantsService.localeKey);\n await i18nService.init(locale);\n eventLoggingService.init(true);\n authService.init();\n const htmlEl = window.document.documentElement;\n htmlEl.classList.add('locale_' + i18nService.translationLocale);\n let theme = await storageService.get(ConstantsService.themeKey);\n if (theme == null) {\n theme = 'light';\n }\n htmlEl.classList.add('theme_' + theme);\n stateService.save(ConstantsService.disableFaviconKey,\n await storageService.get(ConstantsService.disableFaviconKey));\n stateService.save('enableGravatars', await storageService.get('enableGravatars'));\n };\n}\n\n@NgModule({\n imports: [\n ToasterModule,\n ],\n declarations: [],\n providers: [\n ValidationService,\n AuthGuardService,\n OrganizationGuardService,\n OrganizationTypeGuardService,\n UnauthGuardService,\n RouterService,\n EventService,\n LockGuardService,\n { provide: AuditServiceAbstraction, useValue: auditService },\n { provide: AuthServiceAbstraction, useValue: authService },\n { provide: CipherServiceAbstraction, useValue: cipherService },\n { provide: FolderServiceAbstraction, useValue: folderService },\n { provide: CollectionServiceAbstraction, useValue: collectionService },\n { provide: EnvironmentServiceAbstraction, useValue: environmentService },\n { provide: TotpServiceAbstraction, useValue: totpService },\n { provide: TokenServiceAbstraction, useValue: tokenService },\n { provide: I18nServiceAbstraction, useValue: i18nService },\n { provide: CryptoServiceAbstraction, useValue: cryptoService },\n { provide: PlatformUtilsServiceAbstraction, useValue: platformUtilsService },\n { provide: PasswordGenerationServiceAbstraction, useValue: passwordGenerationService },\n { provide: ApiServiceAbstraction, useValue: apiService },\n { provide: FileUploadServiceAbstraction, useValue: fileUploadService },\n { provide: SyncServiceAbstraction, useValue: syncService },\n { provide: UserServiceAbstraction, useValue: userService },\n { provide: MessagingServiceAbstraction, useValue: messagingService },\n { provide: BroadcasterService, useValue: broadcasterService },\n { provide: SettingsServiceAbstraction, useValue: settingsService },\n { provide: VaultTimeoutServiceAbstraction, useValue: vaultTimeoutService },\n { provide: StorageServiceAbstraction, useValue: storageService },\n { provide: StateServiceAbstraction, useValue: stateService },\n { provide: ExportServiceAbstraction, useValue: exportService },\n { provide: SearchServiceAbstraction, useValue: searchService },\n { provide: ImportServiceAbstraction, useValue: importService },\n { provide: NotificationsServiceAbstraction, useValue: notificationsService },\n { provide: CryptoFunctionServiceAbstraction, useValue: cryptoFunctionService },\n { provide: EventLoggingServiceAbstraction, useValue: eventLoggingService },\n { provide: PolicyServiceAbstraction, useValue: policyService },\n { provide: SendServiceAbstraction, useValue: sendService },\n { provide: PasswordRepromptServiceAbstraction, useValue: passwordRepromptService },\n {\n provide: APP_INITIALIZER,\n useFactory: initFactory,\n deps: [],\n multi: true,\n },\n {\n provide: LOCALE_ID,\n useFactory: () => i18nService.translationLocale,\n deps: [],\n },\n ],\n})\nexport class ServicesModule {\n}\n","import { MessagingService } from 'jslib-common/abstractions/messaging.service';\n\nimport { BroadcasterService } from 'jslib-angular/services/broadcaster.service';\n\nexport class BroadcasterMessagingService implements MessagingService {\n constructor(private broadcasterService: BroadcasterService) { }\n\n send(subscriber: string, arg: any = {}) {\n const message = Object.assign({}, { command: subscriber }, arg);\n this.broadcasterService.send(message);\n }\n}\n","import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\nimport { ConstantsService } from 'jslib-common/services';\n\nexport class HtmlStorageService implements StorageService {\n private localStorageKeys = new Set(['appId', 'anonymousAppId', 'rememberedEmail', 'passwordGenerationOptions',\n ConstantsService.disableFaviconKey, 'rememberEmail', 'enableGravatars', 'enableFullWidth',\n ConstantsService.localeKey, ConstantsService.autoConfirmFingerprints,\n ConstantsService.vaultTimeoutKey, ConstantsService.vaultTimeoutActionKey, ConstantsService.ssoCodeVerifierKey,\n ConstantsService.ssoStateKey, 'ssoOrgIdentifier']);\n private localStorageStartsWithKeys = ['twoFactorToken_', ConstantsService.collapsedGroupingsKey + '_'];\n private memoryStorageStartsWithKeys = ['ciphers_', 'folders_', 'collections_', 'settings_', 'lastSync_'];\n private memoryStorage = new Map();\n\n constructor(private platformUtilsService: PlatformUtilsService) { }\n\n async init() {\n // LockOption -> VaultTimeout (uses the same legacy string value for backwards compat)\n const vaultTimeout = await this.get(ConstantsService.vaultTimeoutKey);\n if (vaultTimeout == null && !this.platformUtilsService.isDev()) {\n await this.save(ConstantsService.vaultTimeoutKey, 15);\n }\n\n // Default Action to lock\n const vaultTimeoutAction = await this.get(ConstantsService.vaultTimeoutActionKey);\n if (vaultTimeoutAction == null) {\n await this.save(ConstantsService.vaultTimeoutActionKey, 'lock');\n }\n }\n\n get(key: string): Promise {\n let json: string = null;\n if (this.isLocalStorage(key)) {\n json = window.localStorage.getItem(key);\n } else if (this.isMemoryStorage(key)) {\n json = this.memoryStorage.get(key);\n } else {\n json = window.sessionStorage.getItem(key);\n }\n if (json != null) {\n const obj = JSON.parse(json);\n return Promise.resolve(obj as T);\n }\n return Promise.resolve(null);\n }\n\n async has(key: string): Promise {\n return await this.get(key) != null;\n }\n\n save(key: string, obj: any): Promise {\n if (obj == null) {\n return this.remove(key);\n }\n\n if (obj instanceof Set) {\n obj = Array.from(obj);\n }\n\n const json = JSON.stringify(obj);\n if (this.isLocalStorage(key)) {\n window.localStorage.setItem(key, json);\n } else if (this.isMemoryStorage(key)) {\n this.memoryStorage.set(key, json);\n } else {\n window.sessionStorage.setItem(key, json);\n }\n return Promise.resolve();\n }\n\n remove(key: string): Promise {\n if (this.isLocalStorage(key)) {\n window.localStorage.removeItem(key);\n } else if (this.isMemoryStorage(key)) {\n this.memoryStorage.delete(key);\n } else {\n window.sessionStorage.removeItem(key);\n }\n return Promise.resolve();\n }\n\n private isLocalStorage(key: string): boolean {\n if (this.localStorageKeys.has(key)) {\n return true;\n }\n for (const swKey of this.localStorageStartsWithKeys) {\n if (key.startsWith(swKey)) {\n return true;\n }\n }\n return false;\n }\n\n private isMemoryStorage(key: string): boolean {\n for (const swKey of this.memoryStorageStartsWithKeys) {\n if (key.startsWith(swKey)) {\n return true;\n }\n }\n return false;\n }\n}\n","export { ApiService } from './api.service';\nexport { AppIdService } from './appId.service';\nexport { AuditService } from './audit.service';\nexport { AuthService } from './auth.service';\nexport { CipherService } from './cipher.service';\nexport { CollectionService } from './collection.service';\nexport { ConstantsService } from './constants.service';\nexport { ContainerService } from './container.service';\nexport { CryptoService } from './crypto.service';\nexport { EnvironmentService } from './environment.service';\nexport { FolderService } from './folder.service';\nexport { I18nService } from './i18n.service';\nexport { PasswordGenerationService } from './passwordGeneration.service';\nexport { SettingsService } from './settings.service';\nexport { StateService } from './state.service';\nexport { SyncService } from './sync.service';\nexport { TokenService } from './token.service';\nexport { TotpService } from './totp.service';\nexport { UserService } from './user.service';\nexport { VaultTimeoutService } from './vaultTimeout.service';\n","import { BaseResponse } from './baseResponse';\n\nexport class ApiKeyResponse extends BaseResponse {\n apiKey: string;\n\n constructor(response: any) {\n super(response);\n this.apiKey = this.getResponseProperty('ApiKey');\n }\n}\n","import { FileUploadType } from '../../enums/fileUploadType';\nimport { BaseResponse } from './baseResponse';\nimport { CipherResponse } from './cipherResponse';\n\nexport class AttachmentUploadDataResponse extends BaseResponse {\n attachmentId: string;\n fileUploadType: FileUploadType;\n cipherResponse: CipherResponse;\n cipherMiniResponse: CipherResponse;\n url: string = null;\n constructor(response: any) {\n super(response);\n this.attachmentId = this.getResponseProperty('AttachmentId');\n this.fileUploadType = this.getResponseProperty('FileUploadType');\n const cipherResponse = this.getResponseProperty('CipherResponse');\n const cipherMiniResponse = this.getResponseProperty('CipherMiniResponse');\n this.cipherResponse = cipherResponse == null ? null : new CipherResponse(cipherResponse);\n this.cipherMiniResponse = cipherMiniResponse == null ? null : new CipherResponse(cipherMiniResponse);\n this.url = this.getResponseProperty('Url');\n }\n\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { PaymentMethodType } from '../../enums/paymentMethodType';\nimport { TransactionType } from '../../enums/transactionType';\n\nexport class BillingResponse extends BaseResponse {\n balance: number;\n paymentSource: BillingSourceResponse;\n invoices: BillingInvoiceResponse[] = [];\n transactions: BillingTransactionResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.balance = this.getResponseProperty('Balance');\n const paymentSource = this.getResponseProperty('PaymentSource');\n const transactions = this.getResponseProperty('Transactions');\n const invoices = this.getResponseProperty('Invoices');\n this.paymentSource = paymentSource == null ? null : new BillingSourceResponse(paymentSource);\n if (transactions != null) {\n this.transactions = transactions.map((t: any) => new BillingTransactionResponse(t));\n }\n if (invoices != null) {\n this.invoices = invoices.map((i: any) => new BillingInvoiceResponse(i));\n }\n }\n}\n\nexport class BillingSourceResponse extends BaseResponse {\n type: PaymentMethodType;\n cardBrand: string;\n description: string;\n needsVerification: boolean;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty('Type');\n this.cardBrand = this.getResponseProperty('CardBrand');\n this.description = this.getResponseProperty('Description');\n this.needsVerification = this.getResponseProperty('NeedsVerification');\n }\n}\n\nexport class BillingInvoiceResponse extends BaseResponse {\n url: string;\n pdfUrl: string;\n number: string;\n paid: boolean;\n date: string;\n amount: number;\n\n constructor(response: any) {\n super(response);\n this.url = this.getResponseProperty('Url');\n this.pdfUrl = this.getResponseProperty('PdfUrl');\n this.number = this.getResponseProperty('Number');\n this.paid = this.getResponseProperty('Paid');\n this.date = this.getResponseProperty('Date');\n this.amount = this.getResponseProperty('Amount');\n }\n}\n\nexport class BillingTransactionResponse extends BaseResponse {\n createdDate: string;\n amount: number;\n refunded: boolean;\n partiallyRefunded: boolean;\n refundedAmount: number;\n type: TransactionType;\n paymentMethodType: PaymentMethodType;\n details: string;\n\n constructor(response: any) {\n super(response);\n this.createdDate = this.getResponseProperty('CreatedDate');\n this.amount = this.getResponseProperty('Amount');\n this.refunded = this.getResponseProperty('Refunded');\n this.partiallyRefunded = this.getResponseProperty('PartiallyRefunded');\n this.refundedAmount = this.getResponseProperty('RefundedAmount');\n this.type = this.getResponseProperty('Type');\n this.paymentMethodType = this.getResponseProperty('PaymentMethodType');\n this.details = this.getResponseProperty('Details');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class BreachAccountResponse extends BaseResponse {\n addedDate: string;\n breachDate: string;\n dataClasses: string[];\n description: string;\n domain: string;\n isActive: boolean;\n isVerified: boolean;\n logoPath: string;\n modifiedDate: string;\n name: string;\n pwnCount: number;\n title: string;\n\n constructor(response: any) {\n super(response);\n this.addedDate = this.getResponseProperty('AddedDate');\n this.breachDate = this.getResponseProperty('BreachDate');\n this.dataClasses = this.getResponseProperty('DataClasses');\n this.description = this.getResponseProperty('Description');\n this.domain = this.getResponseProperty('Domain');\n this.isActive = this.getResponseProperty('IsActive');\n this.isVerified = this.getResponseProperty('IsVerified');\n this.logoPath = this.getResponseProperty('LogoPath');\n this.modifiedDate = this.getResponseProperty('ModifiedDate');\n this.name = this.getResponseProperty('Name');\n this.pwnCount = this.getResponseProperty('PwnCount');\n this.title = this.getResponseProperty('Title');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { DeviceType } from '../../enums/deviceType';\nimport { EventType } from '../../enums/eventType';\n\nexport class EventResponse extends BaseResponse {\n type: EventType;\n userId: string;\n organizationId: string;\n cipherId: string;\n collectionId: string;\n groupId: string;\n policyId: string;\n organizationUserId: string;\n actingUserId: string;\n date: string;\n deviceType: DeviceType;\n ipAddress: string;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty('Type');\n this.userId = this.getResponseProperty('UserId');\n this.organizationId = this.getResponseProperty('OrganizationId');\n this.cipherId = this.getResponseProperty('CipherId');\n this.collectionId = this.getResponseProperty('CollectionId');\n this.groupId = this.getResponseProperty('GroupId');\n this.policyId = this.getResponseProperty('PolicyId');\n this.organizationUserId = this.getResponseProperty('OrganizationUserId');\n this.actingUserId = this.getResponseProperty('ActingUserId');\n this.date = this.getResponseProperty('Date');\n this.deviceType = this.getResponseProperty('DeviceType');\n this.ipAddress = this.getResponseProperty('IpAddress');\n }\n}\n","import { BaseResponse } from './baseResponse';\nimport { SelectionReadOnlyResponse } from './selectionReadOnlyResponse';\n\nexport class GroupResponse extends BaseResponse {\n id: string;\n organizationId: string;\n name: string;\n accessAll: boolean;\n externalId: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.organizationId = this.getResponseProperty('OrganizationId');\n this.name = this.getResponseProperty('Name');\n this.accessAll = this.getResponseProperty('AccessAll');\n this.externalId = this.getResponseProperty('ExternalId');\n }\n}\n\nexport class GroupDetailsResponse extends GroupResponse {\n collections: SelectionReadOnlyResponse[] = [];\n\n constructor(response: any) {\n super(response);\n const collections = this.getResponseProperty('Collections');\n if (collections != null) {\n this.collections = collections.map((c: any) => new SelectionReadOnlyResponse(c));\n }\n }\n}\n","import { KeysResponse } from './keysResponse';\n\nexport class OrganizationKeysResponse extends KeysResponse {\n constructor(response: any) {\n super(response);\n }\n}\n","import { OrganizationResponse } from './organizationResponse';\nimport {\n BillingSubscriptionResponse,\n BillingSubscriptionUpcomingInvoiceResponse,\n} from './subscriptionResponse';\n\nexport class OrganizationSubscriptionResponse extends OrganizationResponse {\n storageName: string;\n storageGb: number;\n subscription: BillingSubscriptionResponse;\n upcomingInvoice: BillingSubscriptionUpcomingInvoiceResponse;\n expiration: string;\n\n constructor(response: any) {\n super(response);\n this.storageName = this.getResponseProperty('StorageName');\n this.storageGb = this.getResponseProperty('StorageGb');\n const subscription = this.getResponseProperty('Subscription');\n this.subscription = subscription == null ? null : new BillingSubscriptionResponse(subscription);\n const upcomingInvoice = this.getResponseProperty('UpcomingInvoice');\n this.upcomingInvoice = upcomingInvoice == null ? null :\n new BillingSubscriptionUpcomingInvoiceResponse(upcomingInvoice);\n this.expiration = this.getResponseProperty('Expiration');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class OrganizationUserBulkPublicKeyResponse extends BaseResponse {\n id: string;\n key: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.key = this.getResponseProperty('Key');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class OrganizationUserBulkResponse extends BaseResponse {\n id: string;\n error: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.error = this.getResponseProperty('Error');\n }\n}\n","import { BaseResponse } from './baseResponse';\nimport { SelectionReadOnlyResponse } from './selectionReadOnlyResponse';\n\nimport { PermissionsApi } from '../api/permissionsApi';\n\nimport { KdfType } from '../../enums/kdfType';\nimport { OrganizationUserStatusType } from '../../enums/organizationUserStatusType';\nimport { OrganizationUserType } from '../../enums/organizationUserType';\n\nexport class OrganizationUserResponse extends BaseResponse {\n id: string;\n userId: string;\n type: OrganizationUserType;\n status: OrganizationUserStatusType;\n accessAll: boolean;\n permissions: PermissionsApi;\n resetPasswordEnrolled: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.userId = this.getResponseProperty('UserId');\n this.type = this.getResponseProperty('Type');\n this.status = this.getResponseProperty('Status');\n this.permissions = new PermissionsApi(this.getResponseProperty('Permissions'));\n this.accessAll = this.getResponseProperty('AccessAll');\n this.resetPasswordEnrolled = this.getResponseProperty('ResetPasswordEnrolled');\n }\n}\n\nexport class OrganizationUserUserDetailsResponse extends OrganizationUserResponse {\n name: string;\n email: string;\n twoFactorEnabled: boolean;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty('Name');\n this.email = this.getResponseProperty('Email');\n this.twoFactorEnabled = this.getResponseProperty('TwoFactorEnabled');\n }\n}\n\nexport class OrganizationUserDetailsResponse extends OrganizationUserResponse {\n collections: SelectionReadOnlyResponse[] = [];\n\n constructor(response: any) {\n super(response);\n const collections = this.getResponseProperty('Collections');\n if (collections != null) {\n this.collections = collections.map((c: any) => new SelectionReadOnlyResponse(c));\n }\n }\n}\n\nexport class OrganizationUserResetPasswordDetailsReponse extends BaseResponse {\n kdf: KdfType;\n kdfIterations: number;\n resetPasswordKey: string;\n encryptedPrivateKey: string;\n\n constructor(response: any) {\n super(response);\n this.kdf = this.getResponseProperty('Kdf');\n this.kdfIterations = this.getResponseProperty('KdfIterations');\n this.resetPasswordKey = this.getResponseProperty('ResetPasswordKey');\n this.encryptedPrivateKey = this.getResponseProperty('EncryptedPrivateKey');\n }\n}\n","import { BaseResponse } from './baseResponse';\nimport { ProfileResponse } from './profileResponse';\n\nexport class PaymentResponse extends BaseResponse {\n userProfile: ProfileResponse;\n paymentIntentClientSecret: string;\n success: boolean;\n\n constructor(response: any) {\n super(response);\n const userProfile = this.getResponseProperty('UserProfile');\n if (userProfile != null) {\n this.userProfile = new ProfileResponse(userProfile);\n }\n this.paymentIntentClientSecret = this.getResponseProperty('PaymentIntentClientSecret');\n this.success = this.getResponseProperty('Success');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { KdfType } from '../../enums/kdfType';\n\nexport class PreloginResponse extends BaseResponse {\n kdf: KdfType;\n kdfIterations: number;\n\n constructor(response: any) {\n super(response);\n this.kdf = this.getResponseProperty('Kdf');\n this.kdfIterations = this.getResponseProperty('KdfIterations');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { SendType } from '../../enums/sendType';\n\nimport { SendFileApi } from '../api/sendFileApi';\nimport { SendTextApi } from '../api/sendTextApi';\n\nexport class SendAccessResponse extends BaseResponse {\n id: string;\n type: SendType;\n name: string;\n file: SendFileApi;\n text: SendTextApi;\n expirationDate: Date;\n creatorIdentifier: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.type = this.getResponseProperty('Type');\n this.name = this.getResponseProperty('Name');\n\n const text = this.getResponseProperty('Text');\n if (text != null) {\n this.text = new SendTextApi(text);\n }\n\n const file = this.getResponseProperty('File');\n if (file != null) {\n this.file = new SendFileApi(file);\n }\n\n this.expirationDate = this.getResponseProperty('ExpirationDate');\n this.creatorIdentifier = this.getResponseProperty('CreatorIdentifier');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class SendFileDownloadDataResponse extends BaseResponse {\n\n id: string = null;\n url: string = null;\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.url = this.getResponseProperty('Url');\n }\n}\n","import { FileUploadType } from '../../enums/fileUploadType';\n\nimport { BaseResponse } from './baseResponse';\nimport { SendResponse } from './sendResponse';\n\nexport class SendFileUploadDataResponse extends BaseResponse {\n\n fileUploadType: FileUploadType;\n sendResponse: SendResponse;\n url: string = null;\n constructor(response: any) {\n super(response);\n this.fileUploadType = this.getResponseProperty('FileUploadType');\n const sendResponse = this.getResponseProperty('SendResponse');\n this.sendResponse = sendResponse == null ? null : new SendResponse(sendResponse);\n this.url = this.getResponseProperty('Url');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TaxInfoResponse extends BaseResponse {\n taxId: string;\n taxIdType: string;\n line1: string;\n line2: string;\n city: string;\n state: string;\n country: string;\n postalCode: string;\n\n constructor(response: any) {\n super(response);\n this.taxId = this.getResponseProperty('TaxIdNumber');\n this.taxIdType = this.getResponseProperty('TaxIdType');\n this.line1 = this.getResponseProperty('Line1');\n this.line2 = this.getResponseProperty('Line2');\n this.city = this.getResponseProperty('City');\n this.state = this.getResponseProperty('State');\n this.postalCode = this.getResponseProperty('PostalCode');\n this.country = this.getResponseProperty('Country');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TaxRateResponse extends BaseResponse {\n id: string;\n country: string;\n state: string;\n postalCode: string;\n rate: number;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.country = this.getResponseProperty('Country');\n this.state = this.getResponseProperty('State');\n this.postalCode = this.getResponseProperty('PostalCode');\n this.rate = this.getResponseProperty('Rate');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TwoFactorAuthenticatorResponse extends BaseResponse {\n enabled: boolean;\n key: string;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty('Enabled');\n this.key = this.getResponseProperty('Key');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TwoFactorDuoResponse extends BaseResponse {\n enabled: boolean;\n host: string;\n secretKey: string;\n integrationKey: string;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty('Enabled');\n this.host = this.getResponseProperty('Host');\n this.secretKey = this.getResponseProperty('SecretKey');\n this.integrationKey = this.getResponseProperty('IntegrationKey');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TwoFactorEmailResponse extends BaseResponse {\n enabled: boolean;\n email: string;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty('Enabled');\n this.email = this.getResponseProperty('Email');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { TwoFactorProviderType } from '../../enums/twoFactorProviderType';\n\nexport class TwoFactorProviderResponse extends BaseResponse {\n enabled: boolean;\n type: TwoFactorProviderType;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty('Enabled');\n this.type = this.getResponseProperty('Type');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TwoFactorRecoverResponse extends BaseResponse {\n code: string;\n\n constructor(response: any) {\n super(response);\n this.code = this.getResponseProperty('Code');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TwoFactorYubiKeyResponse extends BaseResponse {\n enabled: boolean;\n key1: string;\n key2: string;\n key3: string;\n key4: string;\n key5: string;\n nfc: boolean;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty('Enabled');\n this.key1 = this.getResponseProperty('Key1');\n this.key2 = this.getResponseProperty('Key2');\n this.key3 = this.getResponseProperty('Key3');\n this.key4 = this.getResponseProperty('Key4');\n this.key5 = this.getResponseProperty('Key5');\n this.nfc = this.getResponseProperty('Nfc');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class UserKeyResponse extends BaseResponse {\n userId: string;\n publicKey: string;\n\n constructor(response: any) {\n super(response);\n this.userId = this.getResponseProperty('UserId');\n this.publicKey = this.getResponseProperty('PublicKey');\n }\n}\n","/**\n * Use as a Decorator on async functions, it will limit how many times the function can be\n * in-flight at a time.\n *\n * Calls beyond the limit will be queued, and run when one of the active calls finishes\n */\nexport function throttle(limit: number, throttleKey: (args: any[]) => string) {\n return (target: any, propertyKey: string | symbol,\n descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise>) => {\n const originalMethod: () => Promise = descriptor.value;\n const allThrottles = new Map void)[]>>();\n\n const getThrottles = (obj: any) => {\n let throttles = allThrottles.get(obj);\n if (throttles != null) {\n return throttles;\n }\n throttles = new Map void)[]>();\n allThrottles.set(obj, throttles);\n return throttles;\n };\n\n return {\n value: function(...args: any[]) {\n const throttles = getThrottles(this);\n const argsThrottleKey = throttleKey(args);\n let queue = throttles.get(argsThrottleKey);\n if (queue == null) {\n queue = [];\n throttles.set(argsThrottleKey, queue);\n }\n\n return new Promise((resolve, reject) => {\n const exec = () => {\n const onFinally = () => {\n queue.splice(queue.indexOf(exec), 1);\n if (queue.length >= limit) {\n queue[limit - 1]();\n } else if (queue.length === 0) {\n throttles.delete(argsThrottleKey);\n if (throttles.size === 0) {\n allThrottles.delete(this);\n }\n }\n };\n originalMethod.apply(this, args).then((val: any) => {\n onFinally();\n return val;\n }).catch((err: any) => {\n onFinally();\n throw err;\n }).then(resolve, reject);\n };\n queue.push(exec);\n if (queue.length <= limit) {\n exec();\n }\n });\n },\n };\n };\n}\n","export class CipherBulkMoveRequest {\n ids: string[];\n folderId: string;\n\n constructor(ids: string[], folderId: string) {\n this.ids = ids == null ? [] : ids;\n this.folderId = folderId;\n }\n}\n","export class CipherBulkRestoreRequest {\n ids: string[];\n\n constructor(ids: string[]) {\n this.ids = ids == null ? [] : ids;\n }\n}\n","import { CipherWithIdRequest } from './cipherWithIdRequest';\n\nimport { Cipher } from '../domain/cipher';\n\nexport class CipherBulkShareRequest {\n ciphers: CipherWithIdRequest[];\n collectionIds: string[];\n\n constructor(ciphers: Cipher[], collectionIds: string[]) {\n if (ciphers != null) {\n this.ciphers = [];\n ciphers.forEach(c => {\n this.ciphers.push(new CipherWithIdRequest(c));\n });\n }\n this.collectionIds = collectionIds;\n }\n}\n","import { CipherRequest } from './cipherRequest';\n\nimport { Cipher } from '../domain/cipher';\n\nexport class CipherShareRequest {\n cipher: CipherRequest;\n collectionIds: string[];\n\n constructor(cipher: Cipher) {\n this.cipher = new CipherRequest(cipher);\n this.collectionIds = cipher.collectionIds;\n }\n}\n","import { CipherView } from '../view';\n\nconst CacheTTL = 3000;\n\nexport class SortedCiphersCache {\n private readonly sortedCiphersByUrl: Map = new Map();\n private readonly timeouts: Map = new Map();\n\n constructor(private readonly comparator: (a: CipherView, b: CipherView) => number) { }\n\n isCached(url: string) {\n return this.sortedCiphersByUrl.has(url);\n }\n\n addCiphers(url: string, ciphers: CipherView[]) {\n ciphers.sort(this.comparator);\n this.sortedCiphersByUrl.set(url, new Ciphers(ciphers));\n this.resetTimer(url);\n }\n\n getLastUsed(url: string) {\n this.resetTimer(url);\n return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getLastUsed() : null;\n }\n\n getLastLaunched(url: string) {\n return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getLastLaunched() : null;\n }\n\n getNext(url: string) {\n this.resetTimer(url);\n return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getNext() : null;\n }\n\n updateLastUsedIndex(url: string) {\n if (this.isCached(url)) {\n this.sortedCiphersByUrl.get(url).updateLastUsedIndex();\n }\n }\n\n clear() {\n this.sortedCiphersByUrl.clear();\n this.timeouts.clear();\n }\n\n private resetTimer(url: string) {\n clearTimeout(this.timeouts.get(url));\n this.timeouts.set(url, setTimeout(() => {\n this.sortedCiphersByUrl.delete(url);\n this.timeouts.delete(url);\n }, CacheTTL));\n }\n}\n\nclass Ciphers {\n lastUsedIndex = -1;\n\n constructor(private readonly ciphers: CipherView[]) { }\n\n getLastUsed() {\n this.lastUsedIndex = Math.max(this.lastUsedIndex, 0);\n return this.ciphers[this.lastUsedIndex];\n }\n\n getLastLaunched() {\n const usedCiphers = this.ciphers.filter(cipher => cipher.localData?.lastLaunched);\n const sortedCiphers = usedCiphers.sort((x, y) => y.localData.lastLaunched.valueOf() - x.localData.lastLaunched.valueOf());\n return sortedCiphers[0];\n }\n\n getNextIndex() {\n return (this.lastUsedIndex + 1) % this.ciphers.length;\n }\n\n getNext() {\n return this.ciphers[this.getNextIndex()];\n }\n\n updateLastUsedIndex() {\n this.lastUsedIndex = this.getNextIndex();\n }\n}\n","export class TreeNode {\n parent: T;\n node: T;\n children: TreeNode[] = [];\n\n constructor(node: T, name: string, parent: T) {\n this.parent = parent;\n this.node = node;\n this.node.name = name;\n }\n}\n\nexport interface ITreeNodeObject {\n id: string;\n name: string;\n}\n","export class EncArrayBuffer {\n constructor(public buffer: ArrayBuffer) { }\n}\n","import Domain from './domainBase';\n\nexport class PasswordGeneratorPolicyOptions extends Domain {\n defaultType: string = '';\n minLength: number = 0;\n useUppercase: boolean = false;\n useLowercase: boolean = false;\n useNumbers: boolean = false;\n numberCount: number = 0;\n useSpecial: boolean = false;\n specialCount: number = 0;\n minNumberWords: number = 0;\n capitalize: boolean = false;\n includeNumber: boolean = false;\n\n inEffect() {\n return this.defaultType !== '' ||\n this.minLength > 0 ||\n this.numberCount > 0 ||\n this.specialCount > 0 ||\n this.useUppercase ||\n this.useLowercase ||\n this.useNumbers ||\n this.useSpecial ||\n this.minNumberWords > 0 ||\n this.capitalize ||\n this.includeNumber;\n }\n}\n","import { ProfileOrganizationResponse } from '../response/profileOrganizationResponse';\n\nimport { OrganizationUserStatusType } from '../../enums/organizationUserStatusType';\nimport { OrganizationUserType } from '../../enums/organizationUserType';\nimport { PermissionsApi } from '../api/permissionsApi';\n\nexport class OrganizationData {\n id: string;\n name: string;\n status: OrganizationUserStatusType;\n type: OrganizationUserType;\n enabled: boolean;\n usePolicies: boolean;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useBusinessPortal: boolean;\n useSso: boolean;\n useResetPassword: boolean;\n selfHost: boolean;\n usersGetPremium: boolean;\n seats: number;\n maxCollections: number;\n maxStorageGb?: number;\n ssoBound: boolean;\n identifier: string;\n permissions: PermissionsApi;\n resetPasswordEnrolled: boolean;\n userId: string;\n hasPublicAndPrivateKeys: boolean;\n\n constructor(response: ProfileOrganizationResponse) {\n this.id = response.id;\n this.name = response.name;\n this.status = response.status;\n this.type = response.type;\n this.enabled = response.enabled;\n this.usePolicies = response.usePolicies;\n this.useGroups = response.useGroups;\n this.useDirectory = response.useDirectory;\n this.useEvents = response.useEvents;\n this.useTotp = response.useTotp;\n this.use2fa = response.use2fa;\n this.useApi = response.useApi;\n this.useBusinessPortal = response.useBusinessPortal;\n this.useSso = response.useSso;\n this.useResetPassword = response.useResetPassword;\n this.selfHost = response.selfHost;\n this.usersGetPremium = response.usersGetPremium;\n this.seats = response.seats;\n this.maxCollections = response.maxCollections;\n this.maxStorageGb = response.maxStorageGb;\n this.ssoBound = response.ssoBound;\n this.identifier = response.identifier;\n this.permissions = response.permissions;\n this.resetPasswordEnrolled = response.resetPasswordEnrolled;\n this.userId = response.userId;\n this.hasPublicAndPrivateKeys = response.hasPublicAndPrivateKeys;\n }\n}\n","import { SendFileApi } from '../api/sendFileApi';\n\nexport class SendFileData {\n id: string;\n fileName: string;\n key: string;\n size: string;\n sizeName: string;\n\n constructor(data?: SendFileApi) {\n if (data == null) {\n return;\n }\n\n this.id = data.id;\n this.fileName = data.fileName;\n this.key = data.key;\n this.size = data.size;\n this.sizeName = data.sizeName;\n }\n}\n","import { SendTextApi } from '../api/sendTextApi';\n\nexport class SendTextData {\n text: string;\n hidden: boolean;\n\n constructor(data?: SendTextApi) {\n if (data == null) {\n return;\n }\n\n this.text = data.text;\n this.hidden = data.hidden;\n }\n}\n","import { I18nService as BaseI18nService } from 'jslib-common/services/i18n.service';\n\nexport class I18nService extends BaseI18nService {\n constructor(systemLanguage: string, localesDirectory: string) {\n super(systemLanguage || 'en-US', localesDirectory, async (formattedLocale: string) => {\n const filePath = this.localesDirectory + '/' + formattedLocale + '/messages.json?cache=' +\n process.env.CACHE_TAG;\n const localesResult = await fetch(filePath);\n const locales = await localesResult.json();\n return locales;\n });\n\n this.supportedTranslationLocales = [\n 'en', 'bg', 'ca', 'cs', 'da', 'de', 'el', 'eo', 'en-GB', 'en-IN', 'es', 'et', 'fi', 'fr', 'he', 'hr', 'hu', 'id', 'it', 'ja', 'ko', 'lv', 'ml', 'nb',\n 'nl', 'pl', 'pt-PT', 'pt-BR', 'ro', 'ru', 'sk', 'sr', 'sv', 'tr', 'uk', 'zh-CN', 'zh-TW',\n ];\n }\n}\n","import { StorageService } from 'jslib-common/abstractions/storage.service';\n\nexport class MemoryStorageService implements StorageService {\n private store = new Map();\n\n get(key: string): Promise {\n if (this.store.has(key)) {\n const obj = this.store.get(key);\n return Promise.resolve(obj as T);\n }\n return Promise.resolve(null);\n }\n\n async has(key: string): Promise {\n return this.get(key) != null;\n }\n\n save(key: string, obj: any): Promise {\n if (obj == null) {\n return this.remove(key);\n }\n this.store.set(key, obj);\n return Promise.resolve();\n }\n\n remove(key: string): Promise {\n this.store.delete(key);\n return Promise.resolve();\n }\n}\n","import Swal, { SweetAlertIcon } from 'sweetalert2';\n\nimport { DeviceType } from 'jslib-common/enums/deviceType';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nexport class WebPlatformUtilsService implements PlatformUtilsService {\n identityClientId: string = 'web';\n\n private browserCache: DeviceType = null;\n\n constructor(private i18nService: I18nService, private messagingService: MessagingService,\n private logService: LogService) { }\n\n getDevice(): DeviceType {\n if (this.browserCache != null) {\n return this.browserCache;\n }\n\n if (navigator.userAgent.indexOf(' Firefox/') !== -1 || navigator.userAgent.indexOf(' Gecko/') !== -1) {\n this.browserCache = DeviceType.FirefoxBrowser;\n } else if (navigator.userAgent.indexOf(' OPR/') >= 0) {\n this.browserCache = DeviceType.OperaBrowser;\n } else if (navigator.userAgent.indexOf(' Edg/') !== -1) {\n this.browserCache = DeviceType.EdgeBrowser;\n } else if (navigator.userAgent.indexOf(' Vivaldi/') !== -1) {\n this.browserCache = DeviceType.VivaldiBrowser;\n } else if (navigator.userAgent.indexOf(' Safari/') !== -1 && navigator.userAgent.indexOf('Chrome') === -1) {\n this.browserCache = DeviceType.SafariBrowser;\n } else if ((window as any).chrome && navigator.userAgent.indexOf(' Chrome/') !== -1) {\n this.browserCache = DeviceType.ChromeBrowser;\n } else if (navigator.userAgent.indexOf(' Trident/') !== -1) {\n this.browserCache = DeviceType.IEBrowser;\n } else {\n this.browserCache = DeviceType.UnknownBrowser;\n }\n\n return this.browserCache;\n }\n\n getDeviceString(): string {\n const device = DeviceType[this.getDevice()].toLowerCase();\n return device.replace('browser', '');\n }\n\n isFirefox(): boolean {\n return this.getDevice() === DeviceType.FirefoxBrowser;\n }\n\n isChrome(): boolean {\n return this.getDevice() === DeviceType.ChromeBrowser;\n }\n\n isEdge(): boolean {\n return this.getDevice() === DeviceType.EdgeBrowser;\n }\n\n isOpera(): boolean {\n return this.getDevice() === DeviceType.OperaBrowser;\n }\n\n isVivaldi(): boolean {\n return this.getDevice() === DeviceType.VivaldiBrowser;\n }\n\n isSafari(): boolean {\n return this.getDevice() === DeviceType.SafariBrowser;\n }\n\n isIE(): boolean {\n return this.getDevice() === DeviceType.IEBrowser;\n }\n\n isMacAppStore(): boolean {\n return false;\n }\n\n isViewOpen(): Promise {\n return Promise.resolve(false);\n }\n\n lockTimeout(): number {\n return null;\n }\n\n launchUri(uri: string, options?: any): void {\n const a = document.createElement('a');\n a.href = uri;\n if (options == null || !options.sameWindow) {\n a.target = '_blank';\n a.rel = 'noreferrer noopener';\n }\n a.classList.add('d-none');\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n }\n\n saveFile(win: Window, blobData: any, blobOptions: any, fileName: string): void {\n let blob: Blob = null;\n let type: string = null;\n const fileNameLower = fileName.toLowerCase();\n let doDownload = true;\n if (fileNameLower.endsWith('.pdf')) {\n type = 'application/pdf';\n doDownload = false;\n } else if (fileNameLower.endsWith('.xlsx')) {\n type = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n } else if (fileNameLower.endsWith('.docx')) {\n type = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n } else if (fileNameLower.endsWith('.pptx')) {\n type = 'application/vnd.openxmlformats-officedocument.presentationml.presentation';\n } else if (fileNameLower.endsWith('.csv')) {\n type = 'text/csv';\n } else if (fileNameLower.endsWith('.png')) {\n type = 'image/png';\n } else if (fileNameLower.endsWith('.jpg') || fileNameLower.endsWith('.jpeg')) {\n type = 'image/jpeg';\n } else if (fileNameLower.endsWith('.gif')) {\n type = 'image/gif';\n }\n if (type != null) {\n blobOptions = blobOptions || {};\n if (blobOptions.type == null) {\n blobOptions.type = type;\n }\n }\n if (blobOptions != null && !this.isIE()) {\n blob = new Blob([blobData], blobOptions);\n } else {\n blob = new Blob([blobData]);\n }\n if (navigator.msSaveOrOpenBlob) {\n navigator.msSaveBlob(blob, fileName);\n } else {\n const a = win.document.createElement('a');\n if (doDownload) {\n a.download = fileName;\n } else if (!this.isSafari()) {\n a.target = '_blank';\n }\n a.href = URL.createObjectURL(blob);\n a.style.position = 'fixed';\n win.document.body.appendChild(a);\n a.click();\n win.document.body.removeChild(a);\n }\n }\n\n getApplicationVersion(): Promise {\n return Promise.resolve(process.env.APPLICATION_VERSION || '-');\n }\n\n supportsWebAuthn(win: Window): boolean {\n return (typeof(PublicKeyCredential) !== 'undefined');\n }\n\n supportsDuo(): boolean {\n return true;\n }\n\n showToast(type: 'error' | 'success' | 'warning' | 'info', title: string, text: string | string[],\n options?: any): void {\n this.messagingService.send('showToast', {\n text: text,\n title: title,\n type: type,\n options: options,\n });\n }\n\n async showDialog(body: string, title?: string, confirmText?: string, cancelText?: string, type?: string,\n bodyIsHtml: boolean = false) {\n let iconClasses: string = null;\n if (type != null) {\n // If you add custom types to this part, the type to SweetAlertIcon cast below needs to be changed.\n switch (type) {\n case 'success':\n iconClasses = 'fa-check text-success';\n break;\n case 'warning':\n iconClasses = 'fa-warning text-warning';\n break;\n case 'error':\n iconClasses = 'fa-bolt text-danger';\n break;\n case 'info':\n iconClasses = 'fa-info-circle text-info';\n break;\n default:\n break;\n }\n }\n\n const bootstrapModal = document.querySelector('div.modal');\n if (bootstrapModal != null) {\n bootstrapModal.removeAttribute('tabindex');\n }\n\n const iconHtmlStr = iconClasses != null ? `` : undefined;\n const confirmed = await Swal.fire({\n heightAuto: false,\n buttonsStyling: false,\n icon: type as SweetAlertIcon, // required to be any of the SweetAlertIcons to output the iconHtml.\n iconHtml: iconHtmlStr,\n text: bodyIsHtml ? null : body,\n html: bodyIsHtml ? body : null,\n titleText: title,\n showCancelButton: (cancelText != null),\n cancelButtonText: cancelText,\n showConfirmButton: true,\n confirmButtonText: confirmText == null ? this.i18nService.t('ok') : confirmText,\n });\n\n if (bootstrapModal != null) {\n bootstrapModal.setAttribute('tabindex', '-1');\n }\n\n return confirmed.value;\n }\n\n async showPasswordDialog(title: string, body: string, passwordValidation: (value: string) => Promise):\n Promise {\n const result = await Swal.fire({\n heightAuto: false,\n titleText: title,\n input: 'password',\n text: body,\n confirmButtonText: this.i18nService.t('ok'),\n showCancelButton: true,\n cancelButtonText: this.i18nService.t('cancel'),\n inputAttributes: {\n autocapitalize: 'off',\n autocorrect: 'off',\n },\n inputValidator: async (value: string): Promise => {\n if (await passwordValidation(value)) {\n return false;\n }\n\n return this.i18nService.t('invalidMasterPassword');\n },\n });\n\n return result.isConfirmed;\n }\n\n isDev(): boolean {\n return process.env.ENV === 'development';\n }\n\n isSelfHost(): boolean {\n return process.env.SELF_HOST.toString() === 'true';\n }\n\n copyToClipboard(text: string, options?: any): void | boolean {\n let win = window;\n let doc = window.document;\n if (options && (options.window || options.win)) {\n win = options.window || options.win;\n doc = win.document;\n } else if (options && options.doc) {\n doc = options.doc;\n }\n if ((win as any).clipboardData && (win as any).clipboardData.setData) {\n // IE specific code path to prevent textarea being shown while dialog is visible.\n (win as any).clipboardData.setData('Text', text);\n } else if (doc.queryCommandSupported && doc.queryCommandSupported('copy')) {\n const textarea = doc.createElement('textarea');\n textarea.textContent = text;\n // Prevent scrolling to bottom of page in MS Edge.\n textarea.style.position = 'fixed';\n let copyEl = doc.body;\n // For some reason copy command won't work when modal is open if appending to body\n if (doc.body.classList.contains('modal-open')) {\n copyEl = doc.body.querySelector('.modal');\n }\n copyEl.appendChild(textarea);\n textarea.select();\n let success = false;\n try {\n // Security exception may be thrown by some browsers.\n success = doc.execCommand('copy');\n if (!success) {\n this.logService.debug('Copy command unsupported or disabled.');\n }\n } catch (e) {\n // tslint:disable-next-line\n console.warn('Copy to clipboard failed.', e);\n } finally {\n copyEl.removeChild(textarea);\n }\n return success;\n }\n }\n\n readFromClipboard(options?: any): Promise {\n throw new Error('Cannot read from clipboard on web.');\n }\n\n supportsBiometric() {\n return Promise.resolve(false);\n }\n\n authenticateBiometric() {\n return Promise.resolve(false);\n }\n\n supportsSecureStorage() {\n return false;\n }\n\n getDefaultSystemTheme() {\n return Promise.resolve(null as 'light' | 'dark');\n }\n\n onDefaultSystemThemeChange() {\n /* noop */\n }\n}\n","import { EventType } from '../enums/eventType';\n\nimport { EventData } from '../models/data/eventData';\n\nimport { EventRequest } from '../models/request/eventRequest';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { CipherService } from '../abstractions/cipher.service';\nimport { EventService as EventServiceAbstraction } from '../abstractions/event.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\n\nimport { ConstantsService } from './constants.service';\n\nexport class EventService implements EventServiceAbstraction {\n private inited = false;\n\n constructor(private storageService: StorageService, private apiService: ApiService,\n private userService: UserService, private cipherService: CipherService) { }\n\n init(checkOnInterval: boolean) {\n if (this.inited) {\n return;\n }\n\n this.inited = true;\n if (checkOnInterval) {\n this.uploadEvents();\n setInterval(() => this.uploadEvents(), 60 * 1000); // check every 60 seconds\n }\n }\n\n async collect(eventType: EventType, cipherId: string = null, uploadImmediately = false): Promise {\n const authed = await this.userService.isAuthenticated();\n if (!authed) {\n return;\n }\n const organizations = await this.userService.getAllOrganizations();\n if (organizations == null) {\n return;\n }\n const orgIds = new Set(organizations.filter(o => o.useEvents).map(o => o.id));\n if (orgIds.size === 0) {\n return;\n }\n if (cipherId != null) {\n const cipher = await this.cipherService.get(cipherId);\n if (cipher == null || cipher.organizationId == null || !orgIds.has(cipher.organizationId)) {\n return;\n }\n }\n let eventCollection = await this.storageService.get(ConstantsService.eventCollectionKey);\n if (eventCollection == null) {\n eventCollection = [];\n }\n const event = new EventData();\n event.type = eventType;\n event.cipherId = cipherId;\n event.date = new Date().toISOString();\n eventCollection.push(event);\n await this.storageService.save(ConstantsService.eventCollectionKey, eventCollection);\n if (uploadImmediately) {\n await this.uploadEvents();\n }\n }\n\n async uploadEvents(): Promise {\n const authed = await this.userService.isAuthenticated();\n if (!authed) {\n return;\n }\n const eventCollection = await this.storageService.get(ConstantsService.eventCollectionKey);\n if (eventCollection == null || eventCollection.length === 0) {\n return;\n }\n const request = eventCollection.map(e => {\n const req = new EventRequest();\n req.type = e.type;\n req.cipherId = e.cipherId;\n req.date = e.date;\n return req;\n });\n try {\n await this.apiService.postEventsCollect(request);\n this.clearEvents();\n } catch { }\n }\n\n async clearEvents(): Promise {\n await this.storageService.remove(ConstantsService.eventCollectionKey);\n }\n}\n","import { EventType } from '../../enums/eventType';\n\nexport class EventData {\n type: EventType;\n cipherId: string;\n date: string;\n}\n","import { EventType } from '../../enums/eventType';\n\nexport class EventRequest {\n type: EventType;\n cipherId: string;\n date: string;\n}\n","import * as papa from 'papaparse';\n\nimport { CipherType } from '../enums/cipherType';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { CipherService } from '../abstractions/cipher.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { ExportService as ExportServiceAbstraction } from '../abstractions/export.service';\nimport { FolderService } from '../abstractions/folder.service';\n\nimport { CipherView } from '../models/view/cipherView';\nimport { CollectionView } from '../models/view/collectionView';\nimport { FolderView } from '../models/view/folderView';\n\nimport { Cipher } from '../models/domain/cipher';\nimport { Collection } from '../models/domain/collection';\nimport { Folder } from '../models/domain/folder';\n\nimport { CipherData } from '../models/data/cipherData';\nimport { CollectionData } from '../models/data/collectionData';\nimport { CollectionDetailsResponse } from '../models/response/collectionResponse';\n\nimport { CipherWithIds as CipherExport } from '../models/export/cipherWithIds';\nimport { CollectionWithId as CollectionExport } from '../models/export/collectionWithId';\nimport { Event } from '../models/export/event';\nimport { FolderWithId as FolderExport } from '../models/export/folderWithId';\nimport { EventView } from '../models/view/eventView';\n\nimport { Utils } from '../misc/utils';\n\nexport class ExportService implements ExportServiceAbstraction {\n constructor(private folderService: FolderService, private cipherService: CipherService,\n private apiService: ApiService, private cryptoService: CryptoService) { }\n\n async getExport(format: 'csv' | 'json' | 'encrypted_json' = 'csv'): Promise {\n if (format === 'encrypted_json') {\n return this.getEncryptedExport();\n } else {\n return this.getDecryptedExport(format);\n }\n }\n\n async getOrganizationExport(organizationId: string,\n format: 'csv' | 'json' | 'encrypted_json' = 'csv'): Promise {\n if (format === 'encrypted_json') {\n return this.getOrganizationEncryptedExport(organizationId);\n } else {\n return this.getOrganizationDecryptedExport(organizationId, format);\n }\n }\n\n async getEventExport(events: EventView[]): Promise {\n return papa.unparse(events.map(e => new Event(e)));\n }\n\n getFileName(prefix: string = null, extension: string = 'csv'): string {\n const now = new Date();\n const dateString =\n now.getFullYear() + '' + this.padNumber(now.getMonth() + 1, 2) + '' + this.padNumber(now.getDate(), 2) +\n this.padNumber(now.getHours(), 2) + '' + this.padNumber(now.getMinutes(), 2) +\n this.padNumber(now.getSeconds(), 2);\n\n return 'bitwarden' + (prefix ? ('_' + prefix) : '') + '_export_' + dateString + '.' + extension;\n }\n\n private async getDecryptedExport(format: 'json' | 'csv'): Promise {\n let decFolders: FolderView[] = [];\n let decCiphers: CipherView[] = [];\n const promises = [];\n\n promises.push(this.folderService.getAllDecrypted().then(folders => {\n decFolders = folders;\n }));\n\n promises.push(this.cipherService.getAllDecrypted().then(ciphers => {\n decCiphers = ciphers.filter(f => f.deletedDate == null);\n }));\n\n await Promise.all(promises);\n\n if (format === 'csv') {\n const foldersMap = new Map();\n decFolders.forEach(f => {\n if (f.id != null) {\n foldersMap.set(f.id, f);\n }\n });\n\n const exportCiphers: any[] = [];\n decCiphers.forEach(c => {\n // only export logins and secure notes\n if (c.type !== CipherType.Login && c.type !== CipherType.SecureNote) {\n return;\n }\n if (c.organizationId != null) {\n return;\n }\n\n const cipher: any = {};\n cipher.folder = c.folderId != null && foldersMap.has(c.folderId) ?\n foldersMap.get(c.folderId).name : null;\n cipher.favorite = c.favorite ? 1 : null;\n this.buildCommonCipher(cipher, c);\n exportCiphers.push(cipher);\n });\n\n return papa.unparse(exportCiphers);\n } else {\n const jsonDoc: any = {\n encrypted: false,\n folders: [],\n items: [],\n };\n\n decFolders.forEach(f => {\n if (f.id == null) {\n return;\n }\n const folder = new FolderExport();\n folder.build(f);\n jsonDoc.folders.push(folder);\n });\n\n decCiphers.forEach(c => {\n if (c.organizationId != null) {\n return;\n }\n const cipher = new CipherExport();\n cipher.build(c);\n cipher.collectionIds = null;\n jsonDoc.items.push(cipher);\n });\n\n return JSON.stringify(jsonDoc, null, ' ');\n }\n }\n\n private async getEncryptedExport(): Promise {\n let folders: Folder[] = [];\n let ciphers: Cipher[] = [];\n const promises = [];\n\n promises.push(this.folderService.getAll().then(f => {\n folders = f;\n }));\n\n promises.push(this.cipherService.getAll().then(c => {\n ciphers = c.filter(f => f.deletedDate == null);\n }));\n\n await Promise.all(promises);\n\n const encKeyValidation = await this.cryptoService.encrypt(Utils.newGuid());\n\n const jsonDoc: any = {\n encrypted: true,\n encKeyValidation_DO_NOT_EDIT: encKeyValidation.encryptedString,\n folders: [],\n items: [],\n };\n\n folders.forEach(f => {\n if (f.id == null) {\n return;\n }\n const folder = new FolderExport();\n folder.build(f);\n jsonDoc.folders.push(folder);\n });\n\n ciphers.forEach(c => {\n if (c.organizationId != null) {\n return;\n }\n const cipher = new CipherExport();\n cipher.build(c);\n cipher.collectionIds = null;\n jsonDoc.items.push(cipher);\n });\n\n return JSON.stringify(jsonDoc, null, ' ');\n }\n\n private async getOrganizationDecryptedExport(organizationId: string, format: 'json' | 'csv'): Promise {\n const decCollections: CollectionView[] = [];\n const decCiphers: CipherView[] = [];\n const promises = [];\n\n promises.push(this.apiService.getCollections(organizationId).then(collections => {\n const collectionPromises: any = [];\n if (collections != null && collections.data != null && collections.data.length > 0) {\n collections.data.forEach(c => {\n const collection = new Collection(new CollectionData(c as CollectionDetailsResponse));\n collectionPromises.push(collection.decrypt().then(decCol => {\n decCollections.push(decCol);\n }));\n });\n }\n return Promise.all(collectionPromises);\n }));\n\n promises.push(this.apiService.getCiphersOrganization(organizationId).then(ciphers => {\n const cipherPromises: any = [];\n if (ciphers != null && ciphers.data != null && ciphers.data.length > 0) {\n ciphers.data.filter(c => c.deletedDate === null).forEach(c => {\n const cipher = new Cipher(new CipherData(c));\n cipherPromises.push(cipher.decrypt().then(decCipher => {\n decCiphers.push(decCipher);\n }));\n });\n }\n return Promise.all(cipherPromises);\n }));\n\n await Promise.all(promises);\n\n if (format === 'csv') {\n const collectionsMap = new Map();\n decCollections.forEach(c => {\n collectionsMap.set(c.id, c);\n });\n\n const exportCiphers: any[] = [];\n decCiphers.forEach(c => {\n // only export logins and secure notes\n if (c.type !== CipherType.Login && c.type !== CipherType.SecureNote) {\n return;\n }\n\n const cipher: any = {};\n cipher.collections = [];\n if (c.collectionIds != null) {\n cipher.collections = c.collectionIds.filter(id => collectionsMap.has(id))\n .map(id => collectionsMap.get(id).name);\n }\n this.buildCommonCipher(cipher, c);\n exportCiphers.push(cipher);\n });\n\n return papa.unparse(exportCiphers);\n } else {\n const jsonDoc: any = {\n encrypted: false,\n collections: [],\n items: [],\n };\n\n decCollections.forEach(c => {\n const collection = new CollectionExport();\n collection.build(c);\n jsonDoc.collections.push(collection);\n });\n\n decCiphers.forEach(c => {\n const cipher = new CipherExport();\n cipher.build(c);\n jsonDoc.items.push(cipher);\n });\n return JSON.stringify(jsonDoc, null, ' ');\n }\n }\n\n private async getOrganizationEncryptedExport(organizationId: string): Promise {\n const collections: Collection[] = [];\n const ciphers: Cipher[] = [];\n const promises = [];\n\n promises.push(this.apiService.getCollections(organizationId).then(c => {\n const collectionPromises: any = [];\n if (c != null && c.data != null && c.data.length > 0) {\n c.data.forEach(r => {\n const collection = new Collection(new CollectionData(r as CollectionDetailsResponse));\n collections.push(collection);\n });\n }\n return Promise.all(collectionPromises);\n }));\n\n promises.push(this.apiService.getCiphersOrganization(organizationId).then(c => {\n const cipherPromises: any = [];\n if (c != null && c.data != null && c.data.length > 0) {\n c.data.filter(item => item.deletedDate === null).forEach(item => {\n const cipher = new Cipher(new CipherData(item));\n ciphers.push(cipher);\n });\n }\n return Promise.all(cipherPromises);\n }));\n\n await Promise.all(promises);\n\n const orgKey = await this.cryptoService.getOrgKey(organizationId);\n const encKeyValidation = await this.cryptoService.encrypt(Utils.newGuid(), orgKey);\n\n const jsonDoc: any = {\n encrypted: true,\n encKeyValidation_DO_NOT_EDIT: encKeyValidation.encryptedString,\n collections: [],\n items: [],\n };\n\n collections.forEach(c => {\n const collection = new CollectionExport();\n collection.build(c);\n jsonDoc.collections.push(collection);\n });\n\n ciphers.forEach(c => {\n const cipher = new CipherExport();\n cipher.build(c);\n jsonDoc.items.push(cipher);\n });\n return JSON.stringify(jsonDoc, null, ' ');\n }\n\n private padNumber(num: number, width: number, padCharacter: string = '0'): string {\n const numString = num.toString();\n return numString.length >= width ? numString :\n new Array(width - numString.length + 1).join(padCharacter) + numString;\n }\n\n private buildCommonCipher(cipher: any, c: CipherView) {\n cipher.type = null;\n cipher.name = c.name;\n cipher.notes = c.notes;\n cipher.fields = null;\n cipher.reprompt = c.reprompt;\n // Login props\n cipher.login_uri = null;\n cipher.login_username = null;\n cipher.login_password = null;\n cipher.login_totp = null;\n\n if (c.fields) {\n c.fields.forEach((f: any) => {\n if (!cipher.fields) {\n cipher.fields = '';\n } else {\n cipher.fields += '\\n';\n }\n\n cipher.fields += ((f.name || '') + ': ' + f.value);\n });\n }\n\n switch (c.type) {\n case CipherType.Login:\n cipher.type = 'login';\n cipher.login_username = c.login.username;\n cipher.login_password = c.login.password;\n cipher.login_totp = c.login.totp;\n\n if (c.login.uris) {\n cipher.login_uri = [];\n c.login.uris.forEach(u => {\n cipher.login_uri.push(u.uri);\n });\n }\n break;\n case CipherType.SecureNote:\n cipher.type = 'note';\n break;\n default:\n return;\n }\n\n return cipher;\n }\n}\n","import { CipherRepromptType } from '../../enums/cipherRepromptType';\nimport { CipherType } from '../../enums/cipherType';\n\nimport { CipherView } from '../view/cipherView';\n\nimport { Cipher as CipherDomain } from '../domain/cipher';\nimport { EncString } from '../domain/encString';\n\nimport { Card } from './card';\nimport { Field } from './field';\nimport { Identity } from './identity';\nimport { Login } from './login';\nimport { SecureNote } from './secureNote';\n\nexport class Cipher {\n static template(): Cipher {\n const req = new Cipher();\n req.organizationId = null;\n req.collectionIds = null;\n req.folderId = null;\n req.type = CipherType.Login;\n req.name = 'Item name';\n req.notes = 'Some notes about this item.';\n req.favorite = false;\n req.fields = [];\n req.login = null;\n req.secureNote = null;\n req.card = null;\n req.identity = null;\n req.reprompt = CipherRepromptType.None;\n return req;\n }\n\n static toView(req: Cipher, view = new CipherView()) {\n view.type = req.type;\n view.folderId = req.folderId;\n if (view.organizationId == null) {\n view.organizationId = req.organizationId;\n }\n if (view.collectionIds || req.collectionIds) {\n const set = new Set((view.collectionIds ?? []).concat(req.collectionIds ?? []));\n view.collectionIds = Array.from(set.values());\n }\n view.name = req.name;\n view.notes = req.notes;\n view.favorite = req.favorite;\n view.reprompt = req.reprompt ?? CipherRepromptType.None;\n\n if (req.fields != null) {\n view.fields = req.fields.map(f => Field.toView(f));\n }\n\n switch (req.type) {\n case CipherType.Login:\n view.login = Login.toView(req.login);\n break;\n case CipherType.SecureNote:\n view.secureNote = SecureNote.toView(req.secureNote);\n break;\n case CipherType.Card:\n view.card = Card.toView(req.card);\n break;\n case CipherType.Identity:\n view.identity = Identity.toView(req.identity);\n break;\n }\n\n return view;\n }\n\n static toDomain(req: Cipher, domain = new CipherDomain()) {\n domain.type = req.type;\n domain.folderId = req.folderId;\n if (domain.organizationId == null) {\n domain.organizationId = req.organizationId;\n }\n domain.name = req.name != null ? new EncString(req.name) : null;\n domain.notes = req.notes != null ? new EncString(req.notes) : null;\n domain.favorite = req.favorite;\n domain.reprompt = req.reprompt ?? CipherRepromptType.None;\n\n if (req.fields != null) {\n domain.fields = req.fields.map(f => Field.toDomain(f));\n }\n\n switch (req.type) {\n case CipherType.Login:\n domain.login = Login.toDomain(req.login);\n break;\n case CipherType.SecureNote:\n domain.secureNote = SecureNote.toDomain(req.secureNote);\n break;\n case CipherType.Card:\n domain.card = Card.toDomain(req.card);\n break;\n case CipherType.Identity:\n domain.identity = Identity.toDomain(req.identity);\n break;\n }\n\n return domain;\n }\n\n type: CipherType;\n folderId: string;\n organizationId: string;\n collectionIds: string[];\n name: string;\n notes: string;\n favorite: boolean;\n fields: Field[];\n login: Login;\n secureNote: SecureNote;\n card: Card;\n identity: Identity;\n reprompt: CipherRepromptType;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CipherView | CipherDomain) {\n this.organizationId = o.organizationId;\n this.folderId = o.folderId;\n this.type = o.type;\n this.reprompt = o.reprompt;\n\n if (o instanceof CipherView) {\n this.name = o.name;\n this.notes = o.notes;\n } else {\n this.name = o.name?.encryptedString;\n this.notes = o.notes?.encryptedString;\n }\n\n this.favorite = o.favorite;\n\n if (o.fields != null) {\n if (o instanceof CipherView) {\n this.fields = o.fields.map(f => new Field(f));\n } else {\n this.fields = o.fields.map(f => new Field(f));\n }\n }\n\n switch (o.type) {\n case CipherType.Login:\n this.login = new Login(o.login);\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNote(o.secureNote);\n break;\n case CipherType.Card:\n this.card = new Card(o.card);\n break;\n case CipherType.Identity:\n this.identity = new Identity(o.identity);\n break;\n }\n }\n}\n","import { CardView } from '../view/cardView';\n\nimport { Card as CardDomain } from '../domain/card';\nimport { EncString } from '../domain/encString';\n\nexport class Card {\n static template(): Card {\n const req = new Card();\n req.cardholderName = 'John Doe';\n req.brand = 'visa';\n req.number = '4242424242424242';\n req.expMonth = '04';\n req.expYear = '2023';\n req.code = '123';\n return req;\n }\n\n static toView(req: Card, view = new CardView()) {\n view.cardholderName = req.cardholderName;\n view.brand = req.brand;\n view.number = req.number;\n view.expMonth = req.expMonth;\n view.expYear = req.expYear;\n view.code = req.code;\n return view;\n }\n\n static toDomain(req: Card, domain = new CardDomain()) {\n domain.cardholderName = req.cardholderName != null ? new EncString(req.cardholderName) : null;\n domain.brand = req.brand != null ? new EncString(req.brand) : null;\n domain.number = req.number != null ? new EncString(req.number) : null;\n domain.expMonth = req.expMonth != null ? new EncString(req.expMonth) : null;\n domain.expYear = req.expYear != null ? new EncString(req.expYear) : null;\n domain.code = req.code != null ? new EncString(req.code) : null;\n return domain;\n }\n\n cardholderName: string;\n brand: string;\n number: string;\n expMonth: string;\n expYear: string;\n code: string;\n\n constructor(o?: CardView | CardDomain) {\n if (o == null) {\n return;\n }\n\n if (o instanceof CardView) {\n this.cardholderName = o.cardholderName;\n this.brand = o.brand;\n this.number = o.number;\n this.expMonth = o.expMonth;\n this.expYear = o.expYear;\n this.code = o.code;\n } else {\n this.cardholderName = o.cardholderName?.encryptedString;\n this.brand = o.brand?.encryptedString;\n this.number = o.number?.encryptedString;\n this.expMonth = o.expMonth?.encryptedString;\n this.expYear = o.expYear?.encryptedString;\n this.code = o.code?.encryptedString;\n }\n }\n}\n","import { FieldType } from '../../enums/fieldType';\n\nimport { FieldView } from '../view/fieldView';\n\nimport { EncString } from '../domain/encString';\nimport { Field as FieldDomain } from '../domain/field';\n\nexport class Field {\n static template(): Field {\n const req = new Field();\n req.name = 'Field name';\n req.value = 'Some value';\n req.type = FieldType.Text;\n return req;\n }\n\n static toView(req: Field, view = new FieldView()) {\n view.type = req.type;\n view.value = req.value;\n view.name = req.name;\n return view;\n }\n\n static toDomain(req: Field, domain = new FieldDomain()) {\n domain.type = req.type;\n domain.value = req.value != null ? new EncString(req.value) : null;\n domain.name = req.name != null ? new EncString(req.name) : null;\n return domain;\n }\n\n name: string;\n value: string;\n type: FieldType;\n\n constructor(o?: FieldView | FieldDomain) {\n if (o == null) {\n return;\n }\n\n if (o instanceof FieldView) {\n this.name = o.name;\n this.value = o.value;\n } else {\n this.name = o.name?.encryptedString;\n this.value = o.value?.encryptedString;\n }\n this.type = o.type;\n }\n}\n","import { IdentityView } from '../view/identityView';\n\nimport { EncString } from '../domain/encString';\nimport { Identity as IdentityDomain } from '../domain/identity';\n\nexport class Identity {\n static template(): Identity {\n const req = new Identity();\n req.title = 'Mr';\n req.firstName = 'John';\n req.middleName = 'William';\n req.lastName = 'Doe';\n req.address1 = '123 Any St';\n req.address2 = 'Apt #123';\n req.address3 = null;\n req.city = 'New York';\n req.state = 'NY';\n req.postalCode = '10001';\n req.country = 'US';\n req.company = 'Acme Inc.';\n req.email = 'john@company.com';\n req.phone = '5555551234';\n req.ssn = '000-123-4567';\n req.username = 'jdoe';\n req.passportNumber = 'US-123456789';\n req.licenseNumber = 'D123-12-123-12333';\n return req;\n }\n\n static toView(req: Identity, view = new IdentityView()) {\n view.title = req.title;\n view.firstName = req.firstName;\n view.middleName = req.middleName;\n view.lastName = req.lastName;\n view.address1 = req.address1;\n view.address2 = req.address2;\n view.address3 = req.address3;\n view.city = req.city;\n view.state = req.state;\n view.postalCode = req.postalCode;\n view.country = req.country;\n view.company = req.company;\n view.email = req.email;\n view.phone = req.phone;\n view.ssn = req.ssn;\n view.username = req.username;\n view.passportNumber = req.passportNumber;\n view.licenseNumber = req.licenseNumber;\n return view;\n }\n\n static toDomain(req: Identity, domain = new IdentityDomain()) {\n domain.title = req.title != null ? new EncString(req.title) : null;\n domain.firstName = req.firstName != null ? new EncString(req.firstName) : null;\n domain.middleName = req.middleName != null ? new EncString(req.middleName) : null;\n domain.lastName = req.lastName != null ? new EncString(req.lastName) : null;\n domain.address1 = req.address1 != null ? new EncString(req.address1) : null;\n domain.address2 = req.address2 != null ? new EncString(req.address2) : null;\n domain.address3 = req.address3 != null ? new EncString(req.address3) : null;\n domain.city = req.city != null ? new EncString(req.city) : null;\n domain.state = req.state != null ? new EncString(req.state) : null;\n domain.postalCode = req.postalCode != null ? new EncString(req.postalCode) : null;\n domain.country = req.country != null ? new EncString(req.country) : null;\n domain.company = req.company != null ? new EncString(req.company) : null;\n domain.email = req.email != null ? new EncString(req.email) : null;\n domain.phone = req.phone != null ? new EncString(req.phone) : null;\n domain.ssn = req.ssn != null ? new EncString(req.ssn) : null;\n domain.username = req.username != null ? new EncString(req.username) : null;\n domain.passportNumber = req.passportNumber != null ? new EncString(req.passportNumber) : null;\n domain.licenseNumber = req.licenseNumber != null ? new EncString(req.licenseNumber) : null;\n return domain;\n }\n\n title: string;\n firstName: string;\n middleName: string;\n lastName: string;\n address1: string;\n address2: string;\n address3: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n company: string;\n email: string;\n phone: string;\n ssn: string;\n username: string;\n passportNumber: string;\n licenseNumber: string;\n\n constructor(o?: IdentityView | IdentityDomain) {\n if (o == null) {\n return;\n }\n\n if (o instanceof IdentityView) {\n this.title = o.title;\n this.firstName = o.firstName;\n this.middleName = o.middleName;\n this.lastName = o.lastName;\n this.address1 = o.address1;\n this.address2 = o.address2;\n this.address3 = o.address3;\n this.city = o.city;\n this.state = o.state;\n this.postalCode = o.postalCode;\n this.country = o.country;\n this.company = o.company;\n this.email = o.email;\n this.phone = o.phone;\n this.ssn = o.ssn;\n this.username = o.username;\n this.passportNumber = o.passportNumber;\n this.licenseNumber = o.licenseNumber;\n } else {\n this.title = o.title?.encryptedString;\n this.firstName = o.firstName?.encryptedString;\n this.middleName = o.middleName?.encryptedString;\n this.lastName = o.lastName?.encryptedString;\n this.address1 = o.address1?.encryptedString;\n this.address2 = o.address2?.encryptedString;\n this.address3 = o.address3?.encryptedString;\n this.city = o.city?.encryptedString;\n this.state = o.state?.encryptedString;\n this.postalCode = o.postalCode?.encryptedString;\n this.country = o.country?.encryptedString;\n this.company = o.company?.encryptedString;\n this.email = o.email?.encryptedString;\n this.phone = o.phone?.encryptedString;\n this.ssn = o.ssn?.encryptedString;\n this.username = o.username?.encryptedString;\n this.passportNumber = o.passportNumber?.encryptedString;\n this.licenseNumber = o.licenseNumber?.encryptedString;\n }\n }\n}\n","import { LoginUri } from './loginUri';\n\nimport { LoginView } from '../view/loginView';\n\nimport { EncString } from '../domain/encString';\nimport { Login as LoginDomain } from '../domain/login';\n\nexport class Login {\n static template(): Login {\n const req = new Login();\n req.uris = [];\n req.username = 'jdoe';\n req.password = 'myp@ssword123';\n req.totp = 'JBSWY3DPEHPK3PXP';\n return req;\n }\n\n static toView(req: Login, view = new LoginView()) {\n if (req.uris != null) {\n view.uris = req.uris.map(u => LoginUri.toView(u));\n }\n view.username = req.username;\n view.password = req.password;\n view.totp = req.totp;\n return view;\n }\n\n static toDomain(req: Login, domain = new LoginDomain()) {\n if (req.uris != null) {\n domain.uris = req.uris.map(u => LoginUri.toDomain(u));\n }\n domain.username = req.username != null ? new EncString(req.username) : null;\n domain.password = req.password != null ? new EncString(req.password) : null;\n domain.totp = req.totp != null ? new EncString(req.totp) : null;\n return domain;\n }\n\n uris: LoginUri[];\n username: string;\n password: string;\n totp: string;\n\n constructor(o?: LoginView | LoginDomain) {\n if (o == null) {\n return;\n }\n\n if (o.uris != null) {\n if (o instanceof LoginView) {\n this.uris = o.uris.map(u => new LoginUri(u));\n } else {\n this.uris = o.uris.map(u => new LoginUri(u));\n }\n }\n\n if (o instanceof LoginView) {\n this.username = o.username;\n this.password = o.password;\n this.totp = o.totp;\n } else {\n this.username = o.username?.encryptedString;\n this.password = o.password?.encryptedString;\n this.totp = o.totp?.encryptedString;\n }\n }\n}\n","import { UriMatchType } from '../../enums/uriMatchType';\n\nimport { LoginUriView } from '../view/loginUriView';\n\nimport { EncString } from '../domain/encString';\nimport { LoginUri as LoginUriDomain } from '../domain/loginUri';\n\nexport class LoginUri {\n static template(): LoginUri {\n const req = new LoginUri();\n req.uri = 'https://google.com';\n req.match = null;\n return req;\n }\n\n static toView(req: LoginUri, view = new LoginUriView()) {\n view.uri = req.uri;\n view.match = req.match;\n return view;\n }\n\n static toDomain(req: LoginUri, domain = new LoginUriDomain()) {\n domain.uri = req.uri != null ? new EncString(req.uri) : null;\n domain.match = req.match;\n return domain;\n }\n\n uri: string;\n match: UriMatchType = null;\n\n constructor(o?: LoginUriView | LoginUriDomain) {\n if (o == null) {\n return;\n }\n\n if (o instanceof LoginUriView) {\n this.uri = o.uri;\n } else {\n this.uri = o.uri?.encryptedString;\n }\n this.match = o.match;\n }\n}\n","import { SecureNoteType } from '../../enums/secureNoteType';\n\nimport { SecureNoteView } from '../view/secureNoteView';\n\nimport { SecureNote as SecureNoteDomain } from '../domain/secureNote';\n\nexport class SecureNote {\n static template(): SecureNote {\n const req = new SecureNote();\n req.type = SecureNoteType.Generic;\n return req;\n }\n\n static toView(req: SecureNote, view = new SecureNoteView()) {\n view.type = req.type;\n return view;\n }\n\n static toDomain(req: SecureNote, view = new SecureNoteDomain()) {\n view.type = req.type;\n return view;\n }\n\n type: SecureNoteType;\n\n constructor(o?: SecureNoteView | SecureNoteDomain) {\n if (o == null) {\n return;\n }\n\n this.type = o.type;\n }\n}\n","import { CollectionView } from '../view/collectionView';\n\nimport { Collection as CollectionDomain } from '../domain/collection';\nimport { EncString } from '../domain/encString';\n\nexport class Collection {\n static template(): Collection {\n const req = new Collection();\n req.organizationId = '00000000-0000-0000-0000-000000000000';\n req.name = 'Collection name';\n req.externalId = null;\n return req;\n }\n\n static toView(req: Collection, view = new CollectionView()) {\n view.name = req.name;\n view.externalId = req.externalId;\n if (view.organizationId == null) {\n view.organizationId = req.organizationId;\n }\n return view;\n }\n\n static toDomain(req: Collection, domain = new CollectionDomain()) {\n domain.name = req.name != null ? new EncString(req.name) : null;\n domain.externalId = req.externalId;\n if (domain.organizationId == null) {\n domain.organizationId = req.organizationId;\n }\n return domain;\n }\n\n organizationId: string;\n name: string;\n externalId: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CollectionView | CollectionDomain) {\n this.organizationId = o.organizationId;\n if (o instanceof CollectionView) {\n this.name = o.name;\n } else {\n this.name = o.name?.encryptedString;\n }\n this.externalId = o.externalId;\n }\n}\n","import { EventType } from '../../enums/eventType';\nimport { EventView } from '../view/eventView';\n\nexport class Event {\n message: string;\n appIcon: string;\n appName: string;\n userId: string;\n userName: string;\n userEmail: string;\n date: string;\n ip: string;\n type: string;\n\n constructor(event: EventView) {\n this.message = event.humanReadableMessage;\n this.appIcon = event.appIcon;\n this.appName = event.appName;\n this.userId = event.userId;\n this.userName = event.userName;\n this.userEmail = event.userEmail;\n this.date = event.date;\n this.ip = event.ip;\n this.type = EventType[event.type];\n }\n}\n","import { FolderView } from '../view/folderView';\n\nimport { EncString } from '../domain/encString';\nimport { Folder as FolderDomain } from '../domain/folder';\n\nexport class Folder {\n static template(): Folder {\n const req = new Folder();\n req.name = 'Folder name';\n return req;\n }\n\n static toView(req: Folder, view = new FolderView()) {\n view.name = req.name;\n return view;\n }\n\n static toDomain(req: Folder, domain = new FolderDomain()) {\n domain.name = req.name != null ? new EncString(req.name) : null;\n return domain;\n }\n\n name: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: FolderView | FolderDomain) {\n if (o instanceof FolderView) {\n this.name = o.name;\n } else {\n this.name = o.name?.encryptedString;\n }\n }\n}\n","import { ApiService } from '../abstractions/api.service';\nimport { FileUploadService as FileUploadServiceAbstraction } from '../abstractions/fileUpload.service';\nimport { LogService } from '../abstractions/log.service';\n\nimport { FileUploadType } from '../enums/fileUploadType';\n\nimport { EncArrayBuffer } from '../models/domain/encArrayBuffer';\nimport { EncString } from '../models/domain/encString';\n\nimport { AttachmentUploadDataResponse } from '../models/response/attachmentUploadDataResponse';\nimport { SendFileUploadDataResponse } from '../models/response/sendFileUploadDataResponse';\n\nimport { AzureFileUploadService } from './azureFileUpload.service';\nimport { BitwardenFileUploadService } from './bitwardenFileUpload.service';\n\nexport class FileUploadService implements FileUploadServiceAbstraction {\n private azureFileUploadService: AzureFileUploadService;\n private bitwardenFileUploadService: BitwardenFileUploadService;\n\n constructor(private logService: LogService, private apiService: ApiService) {\n this.azureFileUploadService = new AzureFileUploadService(logService);\n this.bitwardenFileUploadService = new BitwardenFileUploadService(apiService);\n }\n\n async uploadSendFile(uploadData: SendFileUploadDataResponse, fileName: EncString, encryptedFileData: EncArrayBuffer) {\n try {\n switch (uploadData.fileUploadType) {\n case FileUploadType.Direct:\n await this.bitwardenFileUploadService.upload(fileName.encryptedString, encryptedFileData,\n fd => this.apiService.postSendFile(uploadData.sendResponse.id, uploadData.sendResponse.file.id, fd));\n break;\n case FileUploadType.Azure:\n const renewalCallback = async () => {\n const renewalResponse = await this.apiService.renewSendFileUploadUrl(uploadData.sendResponse.id,\n uploadData.sendResponse.file.id);\n return renewalResponse.url;\n };\n await this.azureFileUploadService.upload(uploadData.url, encryptedFileData,\n renewalCallback);\n break;\n default:\n throw new Error('Unknown file upload type');\n }\n } catch (e) {\n await this.apiService.deleteSend(uploadData.sendResponse.id);\n throw e;\n }\n }\n\n async uploadCipherAttachment(admin: boolean, uploadData: AttachmentUploadDataResponse, encryptedFileName: EncString,\n encryptedFileData: EncArrayBuffer) {\n const response = admin ? uploadData.cipherMiniResponse : uploadData.cipherResponse;\n try {\n switch (uploadData.fileUploadType) {\n case FileUploadType.Direct:\n await this.bitwardenFileUploadService.upload(encryptedFileName.encryptedString, encryptedFileData,\n fd => this.apiService.postAttachmentFile(response.id, uploadData.attachmentId, fd));\n break;\n case FileUploadType.Azure:\n const renewalCallback = async () => {\n const renewalResponse = await this.apiService.renewAttachmentUploadUrl(response.id,\n uploadData.attachmentId);\n return renewalResponse.url;\n };\n await this.azureFileUploadService.upload(uploadData.url, encryptedFileData, renewalCallback);\n break;\n default:\n throw new Error('Unknown file upload type.');\n }\n } catch (e) {\n if (admin) {\n await this.apiService.deleteCipherAttachmentAdmin(response.id, uploadData.attachmentId);\n } else {\n await this.apiService.deleteCipherAttachment(response.id, uploadData.attachmentId);\n }\n throw e;\n }\n }\n}\n","export enum FileUploadType {\n Direct = 0,\n Azure = 1,\n}\n","import { LogService } from '../abstractions/log.service';\n\nimport { Utils } from '../misc/utils';\n\nimport { EncArrayBuffer } from '../models/domain/encArrayBuffer';\n\nconst MAX_SINGLE_BLOB_UPLOAD_SIZE = 256 * 1024 * 1024; // 256 MiB\nconst MAX_BLOCKS_PER_BLOB = 50000;\n\nexport class AzureFileUploadService {\n constructor(private logService: LogService) { }\n\n async upload(url: string, data: EncArrayBuffer, renewalCallback: () => Promise) {\n if (data.buffer.byteLength <= MAX_SINGLE_BLOB_UPLOAD_SIZE) {\n return await this.azureUploadBlob(url, data);\n } else {\n return await this.azureUploadBlocks(url, data, renewalCallback);\n }\n }\n private async azureUploadBlob(url: string, data: EncArrayBuffer) {\n const urlObject = Utils.getUrl(url);\n const headers = new Headers({\n 'x-ms-date': new Date().toUTCString(),\n 'x-ms-version': urlObject.searchParams.get('sv'),\n 'Content-Length': data.buffer.byteLength.toString(),\n 'x-ms-blob-type': 'BlockBlob',\n });\n\n const request = new Request(url, {\n body: data.buffer,\n cache: 'no-store',\n method: 'PUT',\n headers: headers,\n });\n\n const blobResponse = await fetch(request);\n\n if (blobResponse.status !== 201) {\n throw new Error(`Failed to create Azure blob: ${blobResponse.status}`);\n }\n }\n private async azureUploadBlocks(url: string, data: EncArrayBuffer, renewalCallback: () => Promise) {\n const baseUrl = Utils.getUrl(url);\n const blockSize = this.getMaxBlockSize(baseUrl.searchParams.get('sv'));\n let blockIndex = 0;\n const numBlocks = Math.ceil(data.buffer.byteLength / blockSize);\n const blocksStaged: string[] = [];\n\n if (numBlocks > MAX_BLOCKS_PER_BLOB) {\n throw new Error(`Cannot upload file, exceeds maximum size of ${blockSize * MAX_BLOCKS_PER_BLOB}`);\n }\n\n try {\n while (blockIndex < numBlocks) {\n url = await this.renewUrlIfNecessary(url, renewalCallback);\n const blockUrl = Utils.getUrl(url);\n const blockId = this.encodedBlockId(blockIndex);\n blockUrl.searchParams.append('comp', 'block');\n blockUrl.searchParams.append('blockid', blockId);\n const start = blockIndex * blockSize;\n const blockData = data.buffer.slice(start, start + blockSize);\n const blockHeaders = new Headers({\n 'x-ms-date': new Date().toUTCString(),\n 'x-ms-version': blockUrl.searchParams.get('sv'),\n 'Content-Length': blockData.byteLength.toString(),\n });\n\n const blockRequest = new Request(blockUrl.toString(), {\n body: blockData,\n cache: 'no-store',\n method: 'PUT',\n headers: blockHeaders,\n });\n\n const blockResponse = await fetch(blockRequest);\n\n if (blockResponse.status !== 201) {\n const message = `Unsuccessful block PUT. Received status ${blockResponse.status}`;\n this.logService.error(message + '\\n' + await blockResponse.json());\n throw new Error(message);\n }\n\n blocksStaged.push(blockId);\n blockIndex++;\n }\n\n url = await this.renewUrlIfNecessary(url, renewalCallback);\n const blockListUrl = Utils.getUrl(url);\n const blockListXml = this.blockListXml(blocksStaged);\n blockListUrl.searchParams.append('comp', 'blocklist');\n const headers = new Headers({\n 'x-ms-date': new Date().toUTCString(),\n 'x-ms-version': blockListUrl.searchParams.get('sv'),\n 'Content-Length': blockListXml.length.toString(),\n });\n\n const request = new Request(blockListUrl.toString(), {\n body: blockListXml,\n cache: 'no-store',\n method: 'PUT',\n headers: headers,\n });\n\n const response = await fetch(request);\n\n if (response.status !== 201) {\n const message = `Unsuccessful block list PUT. Received status ${response.status}`;\n this.logService.error(message + '\\n' + await response.json());\n throw new Error(message);\n }\n } catch (e) {\n throw e;\n }\n }\n\n private async renewUrlIfNecessary(url: string, renewalCallback: () => Promise): Promise {\n const urlObject = Utils.getUrl(url);\n const expiry = new Date(urlObject.searchParams.get('se') ?? '');\n\n if (isNaN(expiry.getTime())) {\n expiry.setTime(Date.now() + 3600000);\n }\n\n if (expiry.getTime() < Date.now() + 1000) {\n return await renewalCallback();\n }\n return url;\n }\n\n private encodedBlockId(blockIndex: number) {\n // Encoded blockId max size is 64, so pre-encoding max size is 48\n const utfBlockId = ('000000000000000000000000000000000000000000000000' + blockIndex.toString()).slice(-48);\n return Utils.fromUtf8ToB64(utfBlockId);\n }\n\n private blockListXml(blockIdList: string[]) {\n let xml = '';\n blockIdList.forEach(blockId => {\n xml += `${blockId}`;\n });\n xml += '';\n return xml;\n }\n\n private getMaxBlockSize(version: string) {\n if (Version.compare(version, '2019-12-12') >= 0) {\n return 4000 * 1024 * 1024; // 4000 MiB\n } else if (Version.compare(version, '2016-05-31') >= 0) {\n return 100 * 1024 * 1024; // 100 MiB\n } else {\n return 4 * 1024 * 1024; // 4 MiB\n }\n }\n}\n\nclass Version {\n /**\n * Compares two Azure Versions against each other\n * @param a Version to compare\n * @param b Version to compare\n * @returns a number less than zero if b is newer than a, 0 if equal,\n * and greater than zero if a is newer than b\n */\n static compare(a: Required | string, b: Required | string) {\n if (typeof (a) === 'string') {\n a = new Version(a);\n }\n\n if (typeof (b) === 'string') {\n b = new Version(b);\n }\n\n return a.year !== b.year ? a.year - b.year :\n a.month !== b.month ? a.month - b.month :\n a.day !== b.day ? a.day - b.day :\n 0;\n }\n year = 0;\n month = 0;\n day = 0;\n\n constructor(version: string) {\n try {\n const parts = version.split('-').map(v => Number.parseInt(v, 10));\n this.year = parts[0];\n this.month = parts[1];\n this.day = parts[2];\n } catch { }\n }\n /**\n * Compares two Azure Versions against each other\n * @param compareTo Version to compare against\n * @returns a number less than zero if compareTo is newer, 0 if equal,\n * and greater than zero if this is greater than compareTo\n */\n compare(compareTo: Required | string) {\n return Version.compare(this, compareTo);\n }\n}\n","import { ApiService } from '../abstractions/api.service';\n\nimport { EncArrayBuffer } from '../models/domain/encArrayBuffer';\n\nimport { Utils } from '../misc/utils';\n\nexport class BitwardenFileUploadService\n{\n constructor(private apiService: ApiService) { }\n\n async upload(encryptedFileName: string, encryptedFileData: EncArrayBuffer, apiCall: (fd: FormData) => Promise) {\n const fd = new FormData();\n try {\n const blob = new Blob([encryptedFileData.buffer], { type: 'application/octet-stream' });\n fd.append('data', blob, encryptedFileName);\n } catch (e) {\n if (Utils.isNode && !Utils.isBrowser) {\n fd.append('data', Buffer.from(encryptedFileData.buffer) as any, {\n filepath: encryptedFileName,\n contentType: 'application/octet-stream',\n } as any);\n } else {\n throw e;\n }\n }\n\n await apiCall(fd);\n }\n}\n","import { ApiService } from '../abstractions/api.service';\nimport { CipherService } from '../abstractions/cipher.service';\nimport { CollectionService } from '../abstractions/collection.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { FolderService } from '../abstractions/folder.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport {\n ImportOption,\n ImportService as ImportServiceAbstraction,\n} from '../abstractions/import.service';\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherType } from '../enums/cipherType';\n\nimport { Utils } from '../misc/utils';\n\nimport { CipherRequest } from '../models/request/cipherRequest';\nimport { CollectionRequest } from '../models/request/collectionRequest';\nimport { FolderRequest } from '../models/request/folderRequest';\nimport { ImportCiphersRequest } from '../models/request/importCiphersRequest';\nimport { ImportOrganizationCiphersRequest } from '../models/request/importOrganizationCiphersRequest';\nimport { KvpRequest } from '../models/request/kvpRequest';\n\nimport { ErrorResponse } from '../models/response/errorResponse';\nimport { CipherView } from '../models/view/cipherView';\n\nimport { AscendoCsvImporter } from '../importers/ascendoCsvImporter';\nimport { AvastCsvImporter } from '../importers/avastCsvImporter';\nimport { AvastJsonImporter } from '../importers/avastJsonImporter';\nimport { AviraCsvImporter } from '../importers/aviraCsvImporter';\nimport { BitwardenCsvImporter } from '../importers/bitwardenCsvImporter';\nimport { BitwardenJsonImporter } from '../importers/bitwardenJsonImporter';\nimport { BlackBerryCsvImporter } from '../importers/blackBerryCsvImporter';\nimport { BlurCsvImporter } from '../importers/blurCsvImporter';\nimport { ButtercupCsvImporter } from '../importers/buttercupCsvImporter';\nimport { ChromeCsvImporter } from '../importers/chromeCsvImporter';\nimport { ClipperzHtmlImporter } from '../importers/clipperzHtmlImporter';\nimport { CodebookCsvImporter } from '../importers/codebookCsvImporter';\nimport { DashlaneJsonImporter } from '../importers/dashlaneJsonImporter';\nimport { EncryptrCsvImporter } from '../importers/encryptrCsvImporter';\nimport { EnpassCsvImporter } from '../importers/enpassCsvImporter';\nimport { EnpassJsonImporter } from '../importers/enpassJsonImporter';\nimport { FirefoxCsvImporter } from '../importers/firefoxCsvImporter';\nimport { FSecureFskImporter } from '../importers/fsecureFskImporter';\nimport { GnomeJsonImporter } from '../importers/gnomeJsonImporter';\nimport { Importer } from '../importers/importer';\nimport { KasperskyTxtImporter } from '../importers/kasperskyTxtImporter';\nimport { KeePass2XmlImporter } from '../importers/keepass2XmlImporter';\nimport { KeePassXCsvImporter } from '../importers/keepassxCsvImporter';\nimport { KeeperCsvImporter } from '../importers/keeperCsvImporter';\nimport { LastPassCsvImporter } from '../importers/lastpassCsvImporter';\nimport { LogMeOnceCsvImporter } from '../importers/logMeOnceCsvImporter';\nimport { MeldiumCsvImporter } from '../importers/meldiumCsvImporter';\nimport { MSecureCsvImporter } from '../importers/msecureCsvImporter';\nimport { MykiCsvImporter } from '../importers/mykiCsvImporter';\nimport { NordPassCsvImporter } from '../importers/nordpassCsvImporter';\nimport { OnePassword1PifImporter } from '../importers/onepasswordImporters/onepassword1PifImporter';\nimport { OnePasswordMacCsvImporter } from '../importers/onepasswordImporters/onepasswordMacCsvImporter';\nimport { OnePasswordWinCsvImporter } from '../importers/onepasswordImporters/onepasswordWinCsvImporter';\nimport { PadlockCsvImporter } from '../importers/padlockCsvImporter';\nimport { PassKeepCsvImporter } from '../importers/passkeepCsvImporter';\nimport { PassmanJsonImporter } from '../importers/passmanJsonImporter';\nimport { PasspackCsvImporter } from '../importers/passpackCsvImporter';\nimport { PasswordAgentCsvImporter } from '../importers/passwordAgentCsvImporter';\nimport { PasswordBossJsonImporter } from '../importers/passwordBossJsonImporter';\nimport { PasswordDragonXmlImporter } from '../importers/passwordDragonXmlImporter';\nimport { PasswordSafeXmlImporter } from '../importers/passwordSafeXmlImporter';\nimport { PasswordWalletTxtImporter } from '../importers/passwordWalletTxtImporter';\nimport { RememBearCsvImporter } from '../importers/rememBearCsvImporter';\nimport { RoboFormCsvImporter } from '../importers/roboformCsvImporter';\nimport { SafeInCloudXmlImporter } from '../importers/safeInCloudXmlImporter';\nimport { SaferPassCsvImporter } from '../importers/saferpassCsvImport';\nimport { SecureSafeCsvImporter } from '../importers/secureSafeCsvImporter';\nimport { SplashIdCsvImporter } from '../importers/splashIdCsvImporter';\nimport { StickyPasswordXmlImporter } from '../importers/stickyPasswordXmlImporter';\nimport { TrueKeyCsvImporter } from '../importers/truekeyCsvImporter';\nimport { UpmCsvImporter } from '../importers/upmCsvImporter';\nimport { YotiCsvImporter } from '../importers/yotiCsvImporter';\nimport { ZohoVaultCsvImporter } from '../importers/zohoVaultCsvImporter';\n\nexport class ImportService implements ImportServiceAbstraction {\n featuredImportOptions = [\n { id: 'bitwardenjson', name: 'Bitwarden (json)' },\n { id: 'bitwardencsv', name: 'Bitwarden (csv)' },\n { id: 'lastpasscsv', name: 'LastPass (csv)' },\n { id: 'chromecsv', name: 'Chrome (csv)' },\n { id: 'firefoxcsv', name: 'Firefox (csv)' },\n { id: 'keepass2xml', name: 'KeePass 2 (xml)' },\n { id: '1password1pif', name: '1Password (1pif)' },\n { id: 'dashlanejson', name: 'Dashlane (json)' },\n ];\n\n regularImportOptions: ImportOption[] = [\n { id: 'keepassxcsv', name: 'KeePassX (csv)' },\n { id: '1passwordwincsv', name: '1Password 6 and 7 Windows (csv)' },\n { id: '1passwordmaccsv', name: '1Password 6 and 7 Mac (csv)' },\n { id: 'roboformcsv', name: 'RoboForm (csv)' },\n { id: 'keepercsv', name: 'Keeper (csv)' },\n { id: 'enpasscsv', name: 'Enpass (csv)' },\n { id: 'enpassjson', name: 'Enpass (json)' },\n { id: 'safeincloudxml', name: 'SafeInCloud (xml)' },\n { id: 'pwsafexml', name: 'Password Safe (xml)' },\n { id: 'stickypasswordxml', name: 'Sticky Password (xml)' },\n { id: 'msecurecsv', name: 'mSecure (csv)' },\n { id: 'truekeycsv', name: 'True Key (csv)' },\n { id: 'passwordbossjson', name: 'Password Boss (json)' },\n { id: 'zohovaultcsv', name: 'Zoho Vault (csv)' },\n { id: 'splashidcsv', name: 'SplashID (csv)' },\n { id: 'passworddragonxml', name: 'Password Dragon (xml)' },\n { id: 'padlockcsv', name: 'Padlock (csv)' },\n { id: 'passboltcsv', name: 'Passbolt (csv)' },\n { id: 'clipperzhtml', name: 'Clipperz (html)' },\n { id: 'aviracsv', name: 'Avira (csv)' },\n { id: 'saferpasscsv', name: 'SaferPass (csv)' },\n { id: 'upmcsv', name: 'Universal Password Manager (csv)' },\n { id: 'ascendocsv', name: 'Ascendo DataVault (csv)' },\n { id: 'meldiumcsv', name: 'Meldium (csv)' },\n { id: 'passkeepcsv', name: 'PassKeep (csv)' },\n { id: 'operacsv', name: 'Opera (csv)' },\n { id: 'vivaldicsv', name: 'Vivaldi (csv)' },\n { id: 'gnomejson', name: 'GNOME Passwords and Keys/Seahorse (json)' },\n { id: 'blurcsv', name: 'Blur (csv)' },\n { id: 'passwordagentcsv', name: 'Password Agent (csv)' },\n { id: 'passpackcsv', name: 'Passpack (csv)' },\n { id: 'passmanjson', name: 'Passman (json)' },\n { id: 'avastcsv', name: 'Avast Passwords (csv)' },\n { id: 'avastjson', name: 'Avast Passwords (json)' },\n { id: 'fsecurefsk', name: 'F-Secure KEY (fsk)' },\n { id: 'kasperskytxt', name: 'Kaspersky Password Manager (txt)' },\n { id: 'remembearcsv', name: 'RememBear (csv)' },\n { id: 'passwordwallettxt', name: 'PasswordWallet (txt)' },\n { id: 'mykicsv', name: 'Myki (csv)' },\n { id: 'securesafecsv', name: 'SecureSafe (csv)' },\n { id: 'logmeoncecsv', name: 'LogMeOnce (csv)' },\n { id: 'blackberrycsv', name: 'BlackBerry Password Keeper (csv)' },\n { id: 'buttercupcsv', name: 'Buttercup (csv)' },\n { id: 'codebookcsv', name: 'Codebook (csv)' },\n { id: 'encryptrcsv', name: 'Encryptr (csv)' },\n { id: 'yoticsv', name: 'Yoti (csv)' },\n { id: 'nordpasscsv', name: 'Nordpass (csv)' },\n ];\n\n constructor(private cipherService: CipherService, private folderService: FolderService,\n private apiService: ApiService, private i18nService: I18nService,\n private collectionService: CollectionService, private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService) { }\n\n getImportOptions(): ImportOption[] {\n return this.featuredImportOptions.concat(this.regularImportOptions);\n }\n\n async import(importer: Importer, fileContents: string, organizationId: string = null): Promise {\n const importResult = await importer.parse(fileContents);\n if (importResult.success) {\n if (importResult.folders.length === 0 && importResult.ciphers.length === 0) {\n return new Error(this.i18nService.t('importNothingError'));\n } else if (importResult.ciphers.length > 0) {\n const halfway = Math.floor(importResult.ciphers.length / 2);\n const last = importResult.ciphers.length - 1;\n\n if (this.badData(importResult.ciphers[0]) &&\n this.badData(importResult.ciphers[halfway]) &&\n this.badData(importResult.ciphers[last])) {\n return new Error(this.i18nService.t('importFormatError'));\n }\n }\n try {\n await this.postImport(importResult, organizationId);\n } catch (error) {\n const errorResponse = new ErrorResponse(error, 400);\n return this.handleServerError(errorResponse, importResult);\n }\n return null;\n } else {\n if (!Utils.isNullOrWhitespace(importResult.errorMessage)) {\n return new Error(importResult.errorMessage);\n } else {\n return new Error(this.i18nService.t('importFormatError'));\n }\n }\n }\n\n getImporter(format: string, organizationId: string = null): Importer {\n const importer = this.getImporterInstance(format);\n if (importer == null) {\n return null;\n }\n importer.organizationId = organizationId;\n return importer;\n }\n\n private getImporterInstance(format: string) {\n if (format == null || format === '') {\n return null;\n }\n\n switch (format) {\n case 'bitwardencsv':\n return new BitwardenCsvImporter();\n case 'bitwardenjson':\n return new BitwardenJsonImporter(this.cryptoService, this.i18nService);\n case 'lastpasscsv':\n case 'passboltcsv':\n return new LastPassCsvImporter();\n case 'keepassxcsv':\n return new KeePassXCsvImporter();\n case 'aviracsv':\n return new AviraCsvImporter();\n case 'blurcsv':\n return new BlurCsvImporter();\n case 'safeincloudxml':\n return new SafeInCloudXmlImporter();\n case 'padlockcsv':\n return new PadlockCsvImporter();\n case 'keepass2xml':\n return new KeePass2XmlImporter();\n case 'chromecsv':\n case 'operacsv':\n case 'vivaldicsv':\n return new ChromeCsvImporter();\n case 'firefoxcsv':\n return new FirefoxCsvImporter();\n case 'upmcsv':\n return new UpmCsvImporter();\n case 'saferpasscsv':\n return new SaferPassCsvImporter();\n case 'meldiumcsv':\n return new MeldiumCsvImporter();\n case '1password1pif':\n return new OnePassword1PifImporter();\n case '1passwordwincsv':\n return new OnePasswordWinCsvImporter();\n case '1passwordmaccsv':\n return new OnePasswordMacCsvImporter();\n case 'keepercsv':\n return new KeeperCsvImporter();\n case 'passworddragonxml':\n return new PasswordDragonXmlImporter();\n case 'enpasscsv':\n return new EnpassCsvImporter();\n case 'enpassjson':\n return new EnpassJsonImporter();\n case 'pwsafexml':\n return new PasswordSafeXmlImporter();\n case 'dashlanejson':\n return new DashlaneJsonImporter();\n case 'msecurecsv':\n return new MSecureCsvImporter();\n case 'stickypasswordxml':\n return new StickyPasswordXmlImporter();\n case 'truekeycsv':\n return new TrueKeyCsvImporter();\n case 'clipperzhtml':\n return new ClipperzHtmlImporter();\n case 'roboformcsv':\n return new RoboFormCsvImporter();\n case 'ascendocsv':\n return new AscendoCsvImporter();\n case 'passwordbossjson':\n return new PasswordBossJsonImporter();\n case 'zohovaultcsv':\n return new ZohoVaultCsvImporter();\n case 'splashidcsv':\n return new SplashIdCsvImporter();\n case 'passkeepcsv':\n return new PassKeepCsvImporter();\n case 'gnomejson':\n return new GnomeJsonImporter();\n case 'passwordagentcsv':\n return new PasswordAgentCsvImporter();\n case 'passpackcsv':\n return new PasspackCsvImporter();\n case 'passmanjson':\n return new PassmanJsonImporter();\n case 'avastcsv':\n return new AvastCsvImporter();\n case 'avastjson':\n return new AvastJsonImporter();\n case 'fsecurefsk':\n return new FSecureFskImporter();\n case 'kasperskytxt':\n return new KasperskyTxtImporter();\n case 'remembearcsv':\n return new RememBearCsvImporter();\n case 'passwordwallettxt':\n return new PasswordWalletTxtImporter();\n case 'mykicsv':\n return new MykiCsvImporter();\n case 'securesafecsv':\n return new SecureSafeCsvImporter();\n case 'logmeoncecsv':\n return new LogMeOnceCsvImporter();\n case 'blackberrycsv':\n return new BlackBerryCsvImporter();\n case 'buttercupcsv':\n return new ButtercupCsvImporter();\n case 'codebookcsv':\n return new CodebookCsvImporter();\n case 'encryptrcsv':\n return new EncryptrCsvImporter();\n case 'yoticsv':\n return new YotiCsvImporter();\n case 'nordpasscsv':\n return new NordPassCsvImporter();\n default:\n return null;\n }\n }\n\n private async postImport(importResult: ImportResult, organizationId: string = null) {\n if (organizationId == null) {\n const request = new ImportCiphersRequest();\n for (let i = 0; i < importResult.ciphers.length; i++) {\n const c = await this.cipherService.encrypt(importResult.ciphers[i]);\n request.ciphers.push(new CipherRequest(c));\n }\n if (importResult.folders != null) {\n for (let i = 0; i < importResult.folders.length; i++) {\n const f = await this.folderService.encrypt(importResult.folders[i]);\n request.folders.push(new FolderRequest(f));\n }\n }\n if (importResult.folderRelationships != null) {\n importResult.folderRelationships.forEach(r =>\n request.folderRelationships.push(new KvpRequest(r[0], r[1])));\n }\n return await this.apiService.postImportCiphers(request);\n } else {\n const request = new ImportOrganizationCiphersRequest();\n for (let i = 0; i < importResult.ciphers.length; i++) {\n importResult.ciphers[i].organizationId = organizationId;\n const c = await this.cipherService.encrypt(importResult.ciphers[i]);\n request.ciphers.push(new CipherRequest(c));\n }\n if (importResult.collections != null) {\n for (let i = 0; i < importResult.collections.length; i++) {\n importResult.collections[i].organizationId = organizationId;\n const c = await this.collectionService.encrypt(importResult.collections[i]);\n request.collections.push(new CollectionRequest(c));\n }\n }\n if (importResult.collectionRelationships != null) {\n importResult.collectionRelationships.forEach(r =>\n request.collectionRelationships.push(new KvpRequest(r[0], r[1])));\n }\n return await this.apiService.postImportOrganizationCiphers(organizationId, request);\n }\n }\n\n private badData(c: CipherView) {\n return (c.name == null || c.name === '--') &&\n (c.type === CipherType.Login && c.login != null && Utils.isNullOrWhitespace(c.login.password));\n }\n\n private handleServerError(errorResponse: ErrorResponse, importResult: ImportResult): Error {\n if (errorResponse.validationErrors == null) {\n return new Error(errorResponse.message);\n }\n\n let errorMessage = '';\n\n Object.entries(errorResponse.validationErrors).forEach(([key, value], index) => {\n let item;\n let itemType;\n const i = Number(key.match(/[0-9]+/)[0]);\n\n switch (key.match(/^\\w+/)[0]) {\n case 'Ciphers':\n item = importResult.ciphers[i];\n itemType = CipherType[item.type];\n break;\n case 'Folders':\n item = importResult.folders[i];\n itemType = 'Folder';\n break;\n case 'Collections':\n item = importResult.collections[i];\n itemType = 'Collection';\n break;\n default:\n return;\n }\n\n if (index > 0) {\n errorMessage += '\\n\\n';\n }\n\n if (itemType !== 'Folder' && itemType !== 'Collection') {\n errorMessage += '[' + (i + 1) + '] ';\n }\n\n errorMessage += '[' + itemType + '] \"' + item.name + '\": ' + value;\n });\n\n return new Error(errorMessage);\n }\n}\n","import { CipherRequest } from './cipherRequest';\nimport { FolderRequest } from './folderRequest';\nimport { KvpRequest } from './kvpRequest';\n\nexport class ImportCiphersRequest {\n ciphers: CipherRequest[] = [];\n folders: FolderRequest[] = [];\n folderRelationships: KvpRequest[] = [];\n}\n","import { CipherRequest } from './cipherRequest';\nimport { CollectionRequest } from './collectionRequest';\nimport { KvpRequest } from './kvpRequest';\n\nexport class ImportOrganizationCiphersRequest {\n ciphers: CipherRequest[] = [];\n collections: CollectionRequest[] = [];\n collectionRelationships: KvpRequest[] = [];\n}\n","export class KvpRequest {\n key: TK;\n value: TV;\n\n constructor(key: TK, value: TV) {\n this.key = key;\n this.value = value;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class AscendoCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (value.length < 2) {\n return;\n }\n\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value[value.length - 1]);\n cipher.name = this.getValueOrDefault(value[0], '--');\n\n if (value.length > 2 && (value.length % 2) === 0) {\n for (let i = 0; i < value.length - 2; i += 2) {\n const val: string = value[i + 2];\n const field: string = value[i + 1];\n if (this.isNullOrWhitespace(val) || this.isNullOrWhitespace(field)) {\n continue;\n }\n\n const fieldLower = field.toLowerCase();\n if (cipher.login.password == null && this.passwordFieldNames.indexOf(fieldLower) > -1) {\n cipher.login.password = this.getValueOrDefault(val);\n } else if (cipher.login.username == null &&\n this.usernameFieldNames.indexOf(fieldLower) > -1) {\n cipher.login.username = this.getValueOrDefault(val);\n } else if ((cipher.login.uris == null || cipher.login.uris.length === 0) &&\n this.uriFieldNames.indexOf(fieldLower) > -1) {\n cipher.login.uris = this.makeUriArray(val);\n } else {\n this.processKvp(cipher, field, val);\n }\n }\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class AvastCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.name);\n cipher.login.uris = this.makeUriArray(value.web);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.username = this.getValueOrDefault(value.login);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nexport class AvastJsonImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n if (results.logins != null) {\n results.logins.forEach((value: any) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.custName);\n cipher.notes = this.getValueOrDefault(value.note);\n cipher.login.uris = this.makeUriArray(value.url);\n cipher.login.password = this.getValueOrDefault(value.pwd);\n cipher.login.username = this.getValueOrDefault(value.loginName);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n }\n\n if (results.notes != null) {\n results.notes.forEach((value: any) => {\n const cipher = this.initLoginCipher();\n cipher.type = CipherType.SecureNote;\n cipher.secureNote.type = SecureNoteType.Generic;\n cipher.name = this.getValueOrDefault(value.label);\n cipher.notes = this.getValueOrDefault(value.text);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n }\n\n if (results.cards != null) {\n results.cards.forEach((value: any) => {\n const cipher = this.initLoginCipher();\n cipher.type = CipherType.Card;\n cipher.name = this.getValueOrDefault(value.custName);\n cipher.notes = this.getValueOrDefault(value.note);\n cipher.card.cardholderName = this.getValueOrDefault(value.holderName);\n cipher.card.number = this.getValueOrDefault(value.cardNumber);\n cipher.card.code = this.getValueOrDefault(value.cvv);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n if (value.expirationDate != null) {\n if (value.expirationDate.month != null) {\n cipher.card.expMonth = value.expirationDate.month + '';\n }\n if (value.expirationDate.year != null) {\n cipher.card.expYear = value.expirationDate.year + '';\n }\n }\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class AviraCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.name,\n this.getValueOrDefault(this.nameFromUrl(value.website), '--'));\n cipher.login.uris = this.makeUriArray(value.website);\n cipher.login.password = this.getValueOrDefault(value.password);\n\n if (this.isNullOrWhitespace(value.username) && !this.isNullOrWhitespace(value.secondary_username)) {\n cipher.login.username = value.secondary_username;\n } else {\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.notes = this.getValueOrDefault(value.secondary_username);\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherView } from '../models/view/cipherView';\nimport { CollectionView } from '../models/view/collectionView';\nimport { FieldView } from '../models/view/fieldView';\nimport { FolderView } from '../models/view/folderView';\nimport { LoginView } from '../models/view/loginView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { CipherRepromptType } from '../enums/cipherRepromptType';\nimport { CipherType } from '../enums/cipherType';\nimport { FieldType } from '../enums/fieldType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nexport class BitwardenCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (this.organization && !this.isNullOrWhitespace(value.collections)) {\n const collections = (value.collections as string).split(',');\n collections.forEach(col => {\n let addCollection = true;\n let collectionIndex = result.collections.length;\n\n for (let i = 0; i < result.collections.length; i++) {\n if (result.collections[i].name === col) {\n addCollection = false;\n collectionIndex = i;\n break;\n }\n }\n\n if (addCollection) {\n const collection = new CollectionView();\n collection.name = col;\n result.collections.push(collection);\n }\n\n result.collectionRelationships.push([result.ciphers.length, collectionIndex]);\n });\n } else if (!this.organization) {\n this.processFolder(result, value.folder);\n }\n\n const cipher = new CipherView();\n cipher.favorite = !this.organization && this.getValueOrDefault(value.favorite, '0') !== '0' ? true : false;\n cipher.type = CipherType.Login;\n cipher.notes = this.getValueOrDefault(value.notes);\n cipher.name = this.getValueOrDefault(value.name, '--');\n try {\n cipher.reprompt = parseInt(this.getValueOrDefault(value.reprompt, CipherRepromptType.None.toString()), 10);\n } catch (e) {\n // tslint:disable-next-line\n console.error('Unable to parse reprompt value', e);\n cipher.reprompt = CipherRepromptType.None;\n }\n\n if (!this.isNullOrWhitespace(value.fields)) {\n const fields = this.splitNewLine(value.fields);\n for (let i = 0; i < fields.length; i++) {\n if (this.isNullOrWhitespace(fields[i])) {\n continue;\n }\n\n const delimPosition = fields[i].lastIndexOf(': ');\n if (delimPosition === -1) {\n continue;\n }\n\n if (cipher.fields == null) {\n cipher.fields = [];\n }\n\n const field = new FieldView();\n field.name = fields[i].substr(0, delimPosition);\n field.value = null;\n field.type = FieldType.Text;\n if (fields[i].length > (delimPosition + 2)) {\n field.value = fields[i].substr(delimPosition + 2);\n }\n cipher.fields.push(field);\n }\n }\n\n const valueType = value.type != null ? value.type.toLowerCase() : null;\n switch (valueType) {\n case 'note':\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n break;\n default:\n cipher.type = CipherType.Login;\n cipher.login = new LoginView();\n cipher.login.totp = this.getValueOrDefault(value.login_totp || value.totp);\n cipher.login.username = this.getValueOrDefault(value.login_username || value.username);\n cipher.login.password = this.getValueOrDefault(value.login_password || value.password);\n const uris = this.parseSingleRowCsv(value.login_uri || value.uri);\n cipher.login.uris = this.makeUriArray(uris);\n break;\n }\n\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { EncString } from '../models/domain/encString';\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherWithIds } from '../models/export/cipherWithIds';\nimport { CollectionWithId } from '../models/export/collectionWithId';\nimport { FolderWithId } from '../models/export/folderWithId';\n\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { I18nService } from '../abstractions/i18n.service';\n\nexport class BitwardenJsonImporter extends BaseImporter implements Importer {\n private results: any;\n private result: ImportResult;\n\n constructor(private cryptoService: CryptoService, private i18nService: I18nService) {\n super();\n }\n\n async parse(data: string): Promise {\n this.result = new ImportResult();\n this.results = JSON.parse(data);\n if (this.results == null || this.results.items == null || this.results.items.length === 0) {\n this.result.success = false;\n return this.result;\n }\n\n if (this.results.encrypted) {\n await this.parseEncrypted();\n } else {\n this.parseDecrypted();\n }\n\n return this.result;\n }\n\n private async parseEncrypted() {\n if (this.results.encKeyValidation_DO_NOT_EDIT != null) {\n const orgKey = await this.cryptoService.getOrgKey(this.organizationId);\n const encKeyValidation = new EncString(this.results.encKeyValidation_DO_NOT_EDIT);\n const encKeyValidationDecrypt = await this.cryptoService.decryptToUtf8(encKeyValidation, orgKey);\n if (encKeyValidationDecrypt === null) {\n this.result.success = false;\n this.result.errorMessage = this.i18nService.t('importEncKeyError');\n return;\n }\n }\n\n const groupingsMap = new Map();\n\n if (this.organization && this.results.collections != null) {\n for (const c of this.results.collections as CollectionWithId[]) {\n const collection = CollectionWithId.toDomain(c);\n if (collection != null) {\n collection.id = null;\n collection.organizationId = this.organizationId;\n const view = await collection.decrypt();\n groupingsMap.set(c.id, this.result.collections.length);\n this.result.collections.push(view);\n }\n }\n } else if (!this.organization && this.results.folders != null) {\n for (const f of this.results.folders as FolderWithId[]) {\n const folder = FolderWithId.toDomain(f);\n if (folder != null) {\n folder.id = null;\n const view = await folder.decrypt();\n groupingsMap.set(f.id, this.result.folders.length);\n this.result.folders.push(view);\n }\n }\n }\n\n for (const c of this.results.items as CipherWithIds[]) {\n const cipher = CipherWithIds.toDomain(c);\n // reset ids incase they were set for some reason\n cipher.id = null;\n cipher.folderId = null;\n cipher.organizationId = this.organizationId;\n cipher.collectionIds = null;\n\n // make sure password history is limited\n if (cipher.passwordHistory != null && cipher.passwordHistory.length > 5) {\n cipher.passwordHistory = cipher.passwordHistory.slice(0, 5);\n }\n\n if (!this.organization && c.folderId != null && groupingsMap.has(c.folderId)) {\n this.result.folderRelationships.push([this.result.ciphers.length, groupingsMap.get(c.folderId)]);\n } else if (this.organization && c.collectionIds != null) {\n c.collectionIds.forEach(cId => {\n if (groupingsMap.has(cId)) {\n this.result.collectionRelationships.push([this.result.ciphers.length, groupingsMap.get(cId)]);\n }\n });\n }\n\n const view = await cipher.decrypt();\n this.cleanupCipher(view);\n this.result.ciphers.push(view);\n }\n\n this.result.success = true;\n }\n\n private parseDecrypted() {\n const groupingsMap = new Map();\n if (this.organization && this.results.collections != null) {\n this.results.collections.forEach((c: CollectionWithId) => {\n const collection = CollectionWithId.toView(c);\n if (collection != null) {\n collection.id = null;\n collection.organizationId = null;\n groupingsMap.set(c.id, this.result.collections.length);\n this.result.collections.push(collection);\n }\n });\n } else if (!this.organization && this.results.folders != null) {\n this.results.folders.forEach((f: FolderWithId) => {\n const folder = FolderWithId.toView(f);\n if (folder != null) {\n folder.id = null;\n groupingsMap.set(f.id, this.result.folders.length);\n this.result.folders.push(folder);\n }\n });\n }\n\n this.results.items.forEach((c: CipherWithIds) => {\n const cipher = CipherWithIds.toView(c);\n // reset ids incase they were set for some reason\n cipher.id = null;\n cipher.folderId = null;\n cipher.organizationId = null;\n cipher.collectionIds = null;\n\n // make sure password history is limited\n if (cipher.passwordHistory != null && cipher.passwordHistory.length > 5) {\n cipher.passwordHistory = cipher.passwordHistory.slice(0, 5);\n }\n\n if (!this.organization && c.folderId != null && groupingsMap.has(c.folderId)) {\n this.result.folderRelationships.push([this.result.ciphers.length, groupingsMap.get(c.folderId)]);\n } else if (this.organization && c.collectionIds != null) {\n c.collectionIds.forEach(cId => {\n if (groupingsMap.has(cId)) {\n this.result.collectionRelationships.push([this.result.ciphers.length, groupingsMap.get(cId)]);\n }\n });\n }\n\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n\n this.result.success = true;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class BlackBerryCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (value.grouping === 'list') {\n return;\n }\n const cipher = this.initLoginCipher();\n cipher.favorite = value.fav === '1';\n cipher.name = this.getValueOrDefault(value.name);\n cipher.notes = this.getValueOrDefault(value.extra);\n if (value.grouping !== 'note') {\n cipher.login.uris = this.makeUriArray(value.url);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.username = this.getValueOrDefault(value.username);\n }\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class BlurCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (value.label === 'null') {\n value.label = null;\n }\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.label,\n this.getValueOrDefault(this.nameFromUrl(value.domain), '--'));\n cipher.login.uris = this.makeUriArray(value.domain);\n cipher.login.password = this.getValueOrDefault(value.password);\n\n if (this.isNullOrWhitespace(value.email) && !this.isNullOrWhitespace(value.username)) {\n cipher.login.username = value.username;\n } else {\n cipher.login.username = this.getValueOrDefault(value.email);\n cipher.notes = this.getValueOrDefault(value.username);\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nconst OfficialProps = [\n '!group_id', '!group_name', 'title', 'username', 'password', 'URL', 'id',\n];\n\nexport class ButtercupCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n this.processFolder(result, this.getValueOrDefault(value['!group_name']));\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.title, '--');\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.URL);\n\n let processingCustomFields = false;\n for (const prop in value) {\n if (value.hasOwnProperty(prop)) {\n if (!processingCustomFields && OfficialProps.indexOf(prop) === -1) {\n processingCustomFields = true;\n }\n if (processingCustomFields) {\n this.processKvp(cipher, prop, value[prop]);\n }\n }\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class ChromeCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.name, '--');\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.url);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class ClipperzHtmlImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const doc = this.parseXml(data);\n if (doc == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const textarea = doc.querySelector('textarea');\n if (textarea == null || this.isNullOrWhitespace(textarea.textContent)) {\n result.errorMessage = 'Missing textarea.';\n result.success = false;\n return Promise.resolve(result);\n }\n\n const entries = JSON.parse(textarea.textContent);\n entries.forEach((entry: any) => {\n const cipher = this.initLoginCipher();\n if (!this.isNullOrWhitespace(entry.label)) {\n cipher.name = entry.label.split(' ')[0];\n }\n if (entry.data != null && !this.isNullOrWhitespace(entry.data.notes)) {\n cipher.notes = entry.data.notes.split('\\\\n').join('\\n');\n }\n\n if (entry.currentVersion != null && entry.currentVersion.fields != null) {\n for (const property in entry.currentVersion.fields) {\n if (!entry.currentVersion.fields.hasOwnProperty(property)) {\n continue;\n }\n\n const field = entry.currentVersion.fields[property];\n const actionType = field.actionType != null ? field.actionType.toLowerCase() : null;\n switch (actionType) {\n case 'password':\n cipher.login.password = this.getValueOrDefault(field.value);\n break;\n case 'email':\n case 'username':\n case 'user':\n case 'name':\n cipher.login.username = this.getValueOrDefault(field.value);\n break;\n case 'url':\n cipher.login.uris = this.makeUriArray(field.value);\n break;\n default:\n const labelLower = field.label != null ? field.label.toLowerCase() : null;\n if (cipher.login.password == null && this.passwordFieldNames.indexOf(labelLower) > -1) {\n cipher.login.password = this.getValueOrDefault(field.value);\n } else if (cipher.login.username == null &&\n this.usernameFieldNames.indexOf(labelLower) > -1) {\n cipher.login.username = this.getValueOrDefault(field.value);\n } else if ((cipher.login.uris == null || cipher.login.uris.length === 0) &&\n this.uriFieldNames.indexOf(labelLower) > -1) {\n cipher.login.uris = this.makeUriArray(field.value);\n } else {\n this.processKvp(cipher, field.label, field.value);\n }\n break;\n }\n }\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class CodebookCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n this.processFolder(result, this.getValueOrDefault(value.Category));\n\n const cipher = this.initLoginCipher();\n cipher.favorite = this.getValueOrDefault(value.Favorite) === 'True';\n cipher.name = this.getValueOrDefault(value.Entry, '--');\n cipher.notes = this.getValueOrDefault(value.Note);\n cipher.login.username = this.getValueOrDefault(value.Username, value.Email);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.totp = this.getValueOrDefault(value.TOTP);\n cipher.login.uris = this.makeUriArray(value.Website);\n\n if (!this.isNullOrWhitespace(value.Username)) {\n this.processKvp(cipher, 'Email', value.Email);\n }\n this.processKvp(cipher, 'Phone', value.Phone);\n this.processKvp(cipher, 'PIN', value.PIN);\n this.processKvp(cipher, 'Account', value.Account);\n this.processKvp(cipher, 'Date', value.Date);\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\nimport { CipherView } from '../models/view/cipherView';\nimport { IdentityView } from '../models/view/identityView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nconst HandledResults = new Set(['ADDRESS', 'AUTHENTIFIANT', 'BANKSTATEMENT', 'IDCARD', 'IDENTITY',\n 'PAYMENTMEANS_CREDITCARD', 'PAYMENTMEAN_PAYPAL', 'EMAIL']);\n\nexport class DashlaneJsonImporter extends BaseImporter implements Importer {\n private result: ImportResult;\n\n parse(data: string): Promise {\n this.result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.length === 0) {\n this.result.success = false;\n return Promise.resolve(this.result);\n }\n\n if (results.ADDRESS != null) {\n this.processAddress(results.ADDRESS);\n }\n if (results.AUTHENTIFIANT != null) {\n this.processAuth(results.AUTHENTIFIANT);\n }\n if (results.BANKSTATEMENT != null) {\n this.processNote(results.BANKSTATEMENT, 'BankAccountName');\n }\n if (results.IDCARD != null) {\n this.processNote(results.IDCARD, 'Fullname');\n }\n if (results.PAYMENTMEANS_CREDITCARD != null) {\n this.processCard(results.PAYMENTMEANS_CREDITCARD);\n }\n if (results.IDENTITY != null) {\n this.processIdentity(results.IDENTITY);\n }\n\n for (const key in results) {\n if (results.hasOwnProperty(key) && !HandledResults.has(key)) {\n this.processNote(results[key], null, 'Generic Note');\n }\n }\n\n this.result.success = true;\n return Promise.resolve(this.result);\n }\n\n private processAuth(results: any[]) {\n results.forEach((credential: any) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(credential.title);\n\n cipher.login.username = this.getValueOrDefault(credential.login,\n this.getValueOrDefault(credential.secondaryLogin));\n if (this.isNullOrWhitespace(cipher.login.username)) {\n cipher.login.username = this.getValueOrDefault(credential.email);\n } else if (!this.isNullOrWhitespace(credential.email)) {\n cipher.notes = ('Email: ' + credential.email + '\\n');\n }\n\n cipher.login.password = this.getValueOrDefault(credential.password);\n cipher.login.uris = this.makeUriArray(credential.domain);\n cipher.notes += this.getValueOrDefault(credential.note, '');\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n\n private processIdentity(results: any[]) {\n results.forEach((obj: any) => {\n const cipher = new CipherView();\n cipher.identity = new IdentityView();\n cipher.type = CipherType.Identity;\n cipher.name = this.getValueOrDefault(obj.fullName, '');\n const nameParts = cipher.name.split(' ');\n if (nameParts.length > 0) {\n cipher.identity.firstName = this.getValueOrDefault(nameParts[0]);\n }\n if (nameParts.length === 2) {\n cipher.identity.lastName = this.getValueOrDefault(nameParts[1]);\n } else if (nameParts.length === 3) {\n cipher.identity.middleName = this.getValueOrDefault(nameParts[1]);\n cipher.identity.lastName = this.getValueOrDefault(nameParts[2]);\n }\n cipher.identity.username = this.getValueOrDefault(obj.pseudo);\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n\n private processAddress(results: any[]) {\n results.forEach((obj: any) => {\n const cipher = new CipherView();\n cipher.identity = new IdentityView();\n cipher.type = CipherType.Identity;\n cipher.name = this.getValueOrDefault(obj.addressName);\n cipher.identity.address1 = this.getValueOrDefault(obj.addressFull);\n cipher.identity.city = this.getValueOrDefault(obj.city);\n cipher.identity.state = this.getValueOrDefault(obj.state);\n cipher.identity.postalCode = this.getValueOrDefault(obj.zipcode);\n cipher.identity.country = this.getValueOrDefault(obj.country);\n if (cipher.identity.country != null) {\n cipher.identity.country = cipher.identity.country.toUpperCase();\n }\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n\n private processCard(results: any[]) {\n results.forEach((obj: any) => {\n const cipher = new CipherView();\n cipher.card = new CardView();\n cipher.type = CipherType.Card;\n cipher.name = this.getValueOrDefault(obj.bank);\n cipher.card.number = this.getValueOrDefault(obj.cardNumber);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.cardholderName = this.getValueOrDefault(obj.owner);\n if (!this.isNullOrWhitespace(cipher.card.brand)) {\n if (this.isNullOrWhitespace(cipher.name)) {\n cipher.name = cipher.card.brand;\n } else {\n cipher.name += (' - ' + cipher.card.brand);\n }\n }\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n\n private processNote(results: any[], nameProperty: string, name: string = null) {\n results.forEach((obj: any) => {\n const cipher = new CipherView();\n cipher.secureNote = new SecureNoteView();\n cipher.type = CipherType.SecureNote;\n cipher.secureNote.type = SecureNoteType.Generic;\n if (name != null) {\n cipher.name = name;\n } else {\n cipher.name = this.getValueOrDefault(obj[nameProperty]);\n }\n for (const key in obj) {\n if (obj.hasOwnProperty(key) && key !== nameProperty) {\n this.processKvp(cipher, key, obj[key].toString());\n }\n }\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\n\nimport { CipherType } from '../enums/cipherType';\n\nexport class EncryptrCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.Label, '--');\n cipher.notes = this.getValueOrDefault(value.Notes);\n const text = this.getValueOrDefault(value.Text);\n if (!this.isNullOrWhitespace(text)) {\n if (this.isNullOrWhitespace(cipher.notes)) {\n cipher.notes = text;\n } else {\n cipher.notes += ('\\n\\n' + text);\n }\n }\n\n const type = value['Entry Type'];\n if (type === 'Password') {\n cipher.login.username = this.getValueOrDefault(value.Username);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value['Site URL']);\n } else if (type === 'Credit Card') {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n cipher.card.cardholderName = this.getValueOrDefault(value['Name on card']);\n cipher.card.number = this.getValueOrDefault(value['Card Number']);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.code = this.getValueOrDefault(value.CVV);\n const expiry = this.getValueOrDefault(value.Expiry);\n if (!this.isNullOrWhitespace(expiry)) {\n const expParts = expiry.split('/');\n if (expParts.length > 1) {\n cipher.card.expMonth = parseInt(expParts[0], null).toString();\n cipher.card.expYear = (2000 + parseInt(expParts[1], null)).toString();\n }\n }\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nimport { CardView } from '../models/view/cardView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nexport class EnpassCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n let firstRow = true;\n results.forEach(value => {\n if (value.length < 2 || (firstRow && (value[0] === 'Title' || value[0] === 'title'))) {\n firstRow = false;\n return;\n }\n\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value[value.length - 1]);\n cipher.name = this.getValueOrDefault(value[0], '--');\n\n if (value.length === 2 || (!this.containsField(value, 'username') &&\n !this.containsField(value, 'password') && !this.containsField(value, 'email') &&\n !this.containsField(value, 'url'))) {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n }\n\n if (this.containsField(value, 'cardholder') && this.containsField(value, 'number') &&\n this.containsField(value, 'expiry date')) {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n }\n\n if (value.length > 2 && (value.length % 2) === 0) {\n for (let i = 0; i < value.length - 2; i += 2) {\n const fieldValue: string = value[i + 2];\n if (this.isNullOrWhitespace(fieldValue)) {\n continue;\n }\n\n const fieldName: string = value[i + 1];\n const fieldNameLower = fieldName.toLowerCase();\n\n if (cipher.type === CipherType.Login) {\n if (fieldNameLower === 'url' && (cipher.login.uris == null || cipher.login.uris.length === 0)) {\n cipher.login.uris = this.makeUriArray(fieldValue);\n continue;\n } else if ((fieldNameLower === 'username' || fieldNameLower === 'email') &&\n this.isNullOrWhitespace(cipher.login.username)) {\n cipher.login.username = fieldValue;\n continue;\n } else if (fieldNameLower === 'password' && this.isNullOrWhitespace(cipher.login.password)) {\n cipher.login.password = fieldValue;\n continue;\n } else if (fieldNameLower === 'totp' && this.isNullOrWhitespace(cipher.login.totp)) {\n cipher.login.totp = fieldValue;\n continue;\n }\n } else if (cipher.type === CipherType.Card) {\n if (fieldNameLower === 'cardholder' && this.isNullOrWhitespace(cipher.card.cardholderName)) {\n cipher.card.cardholderName = fieldValue;\n continue;\n } else if (fieldNameLower === 'number' && this.isNullOrWhitespace(cipher.card.number)) {\n cipher.card.number = fieldValue;\n cipher.card.brand = this.getCardBrand(fieldValue);\n continue;\n } else if (fieldNameLower === 'cvc' && this.isNullOrWhitespace(cipher.card.code)) {\n cipher.card.code = fieldValue;\n continue;\n } else if (fieldNameLower === 'expiry date' && this.isNullOrWhitespace(cipher.card.expMonth) &&\n this.isNullOrWhitespace(cipher.card.expYear)) {\n if (this.setCardExpiration(cipher, fieldValue)) {\n continue;\n }\n } else if (fieldNameLower === 'type') {\n // Skip since brand was determined from number above\n continue;\n }\n }\n\n this.processKvp(cipher, fieldName, fieldValue);\n }\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private containsField(fields: any[], name: string) {\n if (fields == null || name == null) {\n return false;\n }\n return fields.filter(f => !this.isNullOrWhitespace(f) &&\n f.toLowerCase() === name.toLowerCase()).length > 0;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\nimport { CipherView } from '../models/view/cipherView';\nimport { FolderView } from '../models/view/folderView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { FieldType } from '../enums/fieldType';\n\nexport class EnpassJsonImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.items == null || results.items.length === 0) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const foldersMap = new Map();\n const foldersIndexMap = new Map();\n const folderTree = this.buildFolderTree(results.folders);\n this.flattenFolderTree(null, folderTree, foldersMap);\n foldersMap.forEach((val, key) => {\n foldersIndexMap.set(key, result.folders.length);\n const f = new FolderView();\n f.name = val;\n result.folders.push(f);\n });\n\n results.items.forEach((item: any) => {\n if (item.folders != null && item.folders.length > 0 && foldersIndexMap.has(item.folders[0])) {\n result.folderRelationships.push([result.ciphers.length, foldersIndexMap.get(item.folders[0])]);\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(item.title);\n cipher.favorite = item.favorite > 0;\n\n if (item.template_type != null && item.fields != null && item.fields.length > 0) {\n if (item.template_type.indexOf('login.') === 0 || item.template_type.indexOf('password.') === 0) {\n this.processLogin(cipher, item.fields);\n } else if (item.template_type.indexOf('creditcard.') === 0) {\n this.processCard(cipher, item.fields);\n } else if (item.template_type.indexOf('identity.') < 0 &&\n item.fields.some((f: any) => f.type === 'password' && !this.isNullOrWhitespace(f.value))) {\n this.processLogin(cipher, item.fields);\n } else {\n this.processNote(cipher, item.fields);\n }\n }\n\n cipher.notes += ('\\n' + this.getValueOrDefault(item.note, ''));\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private processLogin(cipher: CipherView, fields: any[]) {\n const urls: string[] = [];\n fields.forEach((field: any) => {\n if (this.isNullOrWhitespace(field.value) || field.type === 'section') {\n return;\n }\n\n if ((field.type === 'username' || field.type === 'email') &&\n this.isNullOrWhitespace(cipher.login.username)) {\n cipher.login.username = field.value;\n } else if (field.type === 'password' && this.isNullOrWhitespace(cipher.login.password)) {\n cipher.login.password = field.value;\n } else if (field.type === 'totp' && this.isNullOrWhitespace(cipher.login.totp)) {\n cipher.login.totp = field.value;\n } else if (field.type === 'url') {\n urls.push(field.value);\n } else {\n this.processKvp(cipher, field.label, field.value,\n field.sensitive === 1 ? FieldType.Hidden : FieldType.Text);\n }\n });\n cipher.login.uris = this.makeUriArray(urls);\n }\n\n private processCard(cipher: CipherView, fields: any[]) {\n cipher.card = new CardView();\n cipher.type = CipherType.Card;\n fields.forEach((field: any) => {\n if (this.isNullOrWhitespace(field.value) || field.type === 'section' || field.type === 'ccType') {\n return;\n }\n\n if (field.type === 'ccName' && this.isNullOrWhitespace(cipher.card.cardholderName)) {\n cipher.card.cardholderName = field.value;\n } else if (field.type === 'ccNumber' && this.isNullOrWhitespace(cipher.card.number)) {\n cipher.card.number = field.value;\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n } else if (field.type === 'ccCvc' && this.isNullOrWhitespace(cipher.card.code)) {\n cipher.card.code = field.value;\n } else if (field.type === 'ccExpiry' && this.isNullOrWhitespace(cipher.card.expYear)) {\n if (!this.setCardExpiration(cipher, field.value)) {\n this.processKvp(cipher, field.label, field.value,\n field.sensitive === 1 ? FieldType.Hidden : FieldType.Text);\n }\n } else {\n this.processKvp(cipher, field.label, field.value,\n field.sensitive === 1 ? FieldType.Hidden : FieldType.Text);\n }\n });\n }\n\n private processNote(cipher: CipherView, fields: any[]) {\n fields.forEach((field: any) => {\n if (this.isNullOrWhitespace(field.value) || field.type === 'section') {\n return;\n }\n this.processKvp(cipher, field.label, field.value,\n field.sensitive === 1 ? FieldType.Hidden : FieldType.Text);\n });\n }\n\n private buildFolderTree(folders: any[]): any[] {\n if (folders == null) {\n return [];\n }\n const folderTree: any[] = [];\n const map = new Map([]);\n folders.forEach((obj: any) => {\n map.set(obj.uuid, obj);\n obj.children = [];\n });\n folders.forEach((obj: any) => {\n if (obj.parent_uuid != null && obj.parent_uuid !== '' && map.has(obj.parent_uuid)) {\n map.get(obj.parent_uuid).children.push(obj);\n } else {\n folderTree.push(obj);\n }\n });\n return folderTree;\n }\n\n private flattenFolderTree(titlePrefix: string, tree: any[], map: Map) {\n if (tree == null) {\n return;\n }\n tree.forEach((f: any) => {\n if (f.title != null && f.title.trim() !== '') {\n let title = f.title.trim();\n if (titlePrefix != null && titlePrefix.trim() !== '') {\n title = titlePrefix + '/' + title;\n }\n map.set(f.uuid, title);\n if (f.children != null && f.children.length !== 0) {\n this.flattenFolderTree(title, f.children, map);\n }\n }\n });\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class FirefoxCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.filter(value => {\n return value.url !== 'chrome://FirefoxAccounts';\n }).forEach(value => {\n const cipher = this.initLoginCipher();\n const url = this.getValueOrDefault(value.url, this.getValueOrDefault(value.hostname));\n cipher.name = this.getValueOrDefault(this.nameFromUrl(url), '--');\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(url);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\n\nimport { CipherType } from '../enums/cipherType';\n\nexport class FSecureFskImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.data == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n for (const key in results.data) {\n if (!results.data.hasOwnProperty(key)) {\n continue;\n }\n\n const value = results.data[key];\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.service);\n cipher.notes = this.getValueOrDefault(value.notes);\n\n if (value.style === 'website') {\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.url);\n } else if (value.style === 'creditcard') {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n cipher.card.cardholderName = this.getValueOrDefault(value.username);\n cipher.card.number = this.getValueOrDefault(value.creditNumber);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.code = this.getValueOrDefault(value.creditCvv);\n if (!this.isNullOrWhitespace(value.creditExpiry)) {\n if (!this.setCardExpiration(cipher, value.creditExpiry)) {\n this.processKvp(cipher, 'Expiration', value.creditExpiry);\n }\n }\n if (!this.isNullOrWhitespace(value.password)) {\n this.processKvp(cipher, 'PIN', value.password);\n }\n } else {\n continue;\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class GnomeJsonImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || Object.keys(results).length === 0) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n for (const keyRing in results) {\n if (!results.hasOwnProperty(keyRing) || this.isNullOrWhitespace(keyRing) ||\n results[keyRing].length === 0) {\n continue;\n }\n\n results[keyRing].forEach((value: any) => {\n if (this.isNullOrWhitespace(value.display_name) || value.display_name.indexOf('http') !== 0) {\n return;\n }\n\n this.processFolder(result, keyRing);\n const cipher = this.initLoginCipher();\n cipher.name = value.display_name.replace('http://', '').replace('https://', '');\n if (cipher.name.length > 30) {\n cipher.name = cipher.name.substring(0, 30);\n }\n cipher.login.password = this.getValueOrDefault(value.secret);\n cipher.login.uris = this.makeUriArray(value.display_name);\n\n if (value.attributes != null) {\n cipher.login.username = value.attributes != null ?\n this.getValueOrDefault(value.attributes.username_value) : null;\n for (const attr in value.attributes) {\n if (!value.attributes.hasOwnProperty(attr) || attr === 'username_value' ||\n attr === 'xdg:schema') {\n continue;\n }\n this.processKvp(cipher, attr, value.attributes[attr]);\n }\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n }\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nconst NotesHeader = 'Notes\\n\\n';\nconst ApplicationsHeader = 'Applications\\n\\n';\nconst WebsitesHeader = 'Websites\\n\\n';\nconst Delimiter = '\\n---\\n';\n\nexport class KasperskyTxtImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n\n let notesData: string;\n let applicationsData: string;\n let websitesData: string;\n let workingData = this.splitNewLine(data).join('\\n');\n\n if (workingData.indexOf(NotesHeader) !== -1) {\n const parts = workingData.split(NotesHeader);\n if (parts.length > 1) {\n workingData = parts[0];\n notesData = parts[1];\n }\n }\n if (workingData.indexOf(ApplicationsHeader) !== -1) {\n const parts = workingData.split(ApplicationsHeader);\n if (parts.length > 1) {\n workingData = parts[0];\n applicationsData = parts[1];\n }\n }\n if (workingData.indexOf(WebsitesHeader) === 0) {\n const parts = workingData.split(WebsitesHeader);\n if (parts.length > 1) {\n workingData = parts[0];\n websitesData = parts[1];\n }\n }\n\n const notes = this.parseDataCategory(notesData);\n const applications = this.parseDataCategory(applicationsData);\n const websites = this.parseDataCategory(websitesData);\n\n notes.forEach(n => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(n.get('Name'));\n cipher.notes = this.getValueOrDefault(n.get('Text'));\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n websites.concat(applications).forEach(w => {\n const cipher = this.initLoginCipher();\n const nameKey = w.has('Website name') ? 'Website name' : 'Application';\n cipher.name = this.getValueOrDefault(w.get(nameKey), '');\n if (!this.isNullOrWhitespace(w.get('Login name'))) {\n if (!this.isNullOrWhitespace(cipher.name)) {\n cipher.name += ': ';\n }\n cipher.name += w.get('Login name');\n }\n cipher.notes = this.getValueOrDefault(w.get('Comment'));\n if (w.has('Website URL')) {\n cipher.login.uris = this.makeUriArray(w.get('Website URL'));\n }\n cipher.login.username = this.getValueOrDefault(w.get('Login'));\n cipher.login.password = this.getValueOrDefault(w.get('Password'));\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private parseDataCategory(data: string): Map[] {\n if (this.isNullOrWhitespace(data) || data.indexOf(Delimiter) === -1) {\n return [];\n }\n const items: Map[] = [];\n data.split(Delimiter).forEach(p => {\n if (p.indexOf('\\n') === -1) {\n return;\n }\n const item = new Map();\n let itemComment: string;\n let itemCommentKey: string;\n p.split('\\n').forEach(l => {\n if (itemComment != null) {\n itemComment += ('\\n' + l);\n return;\n }\n const colonIndex = l.indexOf(':');\n let key: string;\n let val: string;\n if (colonIndex === -1) {\n return;\n } else {\n key = l.substring(0, colonIndex);\n if (l.length > colonIndex + 1) {\n val = l.substring(colonIndex + 2);\n }\n }\n if (key != null) {\n item.set(key, val);\n }\n if (key === 'Comment' || key === 'Text') {\n itemComment = val;\n itemCommentKey = key;\n }\n });\n if (itemComment != null && itemCommentKey != null) {\n item.set(itemCommentKey, itemComment);\n }\n if (item.size === 0) {\n return;\n }\n items.push(item);\n });\n return items;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { FieldType } from '../enums/fieldType';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { FolderView } from '../models/view/folderView';\n\nexport class KeePass2XmlImporter extends BaseImporter implements Importer {\n result = new ImportResult();\n\n parse(data: string): Promise {\n const doc = this.parseXml(data);\n if (doc == null) {\n this.result.success = false;\n return Promise.resolve(this.result);\n }\n\n const rootGroup = doc.querySelector('KeePassFile > Root > Group');\n if (rootGroup == null) {\n this.result.errorMessage = 'Missing `KeePassFile > Root > Group` node.';\n this.result.success = false;\n return Promise.resolve(this.result);\n }\n\n this.traverse(rootGroup, true, '');\n\n if (this.organization) {\n this.moveFoldersToCollections(this.result);\n }\n\n this.result.success = true;\n return Promise.resolve(this.result);\n }\n\n traverse(node: Element, isRootNode: boolean, groupPrefixName: string) {\n const folderIndex = this.result.folders.length;\n let groupName = groupPrefixName;\n\n if (!isRootNode) {\n if (groupName !== '') {\n groupName += '/';\n }\n const nameEl = this.querySelectorDirectChild(node, 'Name');\n groupName += nameEl == null ? '-' : nameEl.textContent;\n const folder = new FolderView();\n folder.name = groupName;\n this.result.folders.push(folder);\n }\n\n this.querySelectorAllDirectChild(node, 'Entry').forEach(entry => {\n const cipherIndex = this.result.ciphers.length;\n\n const cipher = this.initLoginCipher();\n this.querySelectorAllDirectChild(entry, 'String').forEach(entryString => {\n const valueEl = this.querySelectorDirectChild(entryString, 'Value');\n const value = valueEl != null ? valueEl.textContent : null;\n if (this.isNullOrWhitespace(value)) {\n return;\n }\n const keyEl = this.querySelectorDirectChild(entryString, 'Key');\n const key = keyEl != null ? keyEl.textContent : null;\n\n if (key === 'URL') {\n cipher.login.uris = this.makeUriArray(value);\n } else if (key === 'UserName') {\n cipher.login.username = value;\n } else if (key === 'Password') {\n cipher.login.password = value;\n } else if (key === 'otp') {\n cipher.login.totp = value.replace('key=', '');\n } else if (key === 'Title') {\n cipher.name = value;\n } else if (key === 'Notes') {\n cipher.notes += (value + '\\n');\n } else {\n let type = FieldType.Text;\n const attrs = (valueEl.attributes as any);\n if (attrs.length > 0 && attrs.ProtectInMemory != null &&\n attrs.ProtectInMemory.value === 'True') {\n type = FieldType.Hidden;\n }\n this.processKvp(cipher, key, value, type);\n }\n });\n\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n\n if (!isRootNode) {\n this.result.folderRelationships.push([cipherIndex, folderIndex]);\n }\n });\n\n this.querySelectorAllDirectChild(node, 'Group').forEach(group => {\n this.traverse(group, false, groupName);\n });\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class KeePassXCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (this.isNullOrWhitespace(value.Title)) {\n return;\n }\n\n value.Group = !this.isNullOrWhitespace(value.Group) && value.Group.startsWith('Root/') ?\n value.Group.replace('Root/', '') : value.Group;\n const groupName = !this.isNullOrWhitespace(value.Group) ? value.Group : null;\n this.processFolder(result, groupName);\n\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value.Notes);\n cipher.name = this.getValueOrDefault(value.Title, '--');\n cipher.login.username = this.getValueOrDefault(value.Username);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value.URL);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { FolderView } from '../models/view/folderView';\n\nexport class KeeperCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (value.length < 6) {\n return;\n }\n\n this.processFolder(result, value[0]);\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value[5]) + '\\n';\n cipher.name = this.getValueOrDefault(value[1], '--');\n cipher.login.username = this.getValueOrDefault(value[2]);\n cipher.login.password = this.getValueOrDefault(value[3]);\n cipher.login.uris = this.makeUriArray(value[4]);\n\n if (value.length > 7) {\n // we have some custom fields.\n for (let i = 7; i < value.length; i = i + 2) {\n this.processKvp(cipher, value[i], value[i + 1]);\n }\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\nimport { CipherView } from '../models/view/cipherView';\nimport { FolderView } from '../models/view/folderView';\nimport { IdentityView } from '../models/view/identityView';\nimport { LoginView } from '../models/view/loginView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nexport class LastPassCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value, index) => {\n const cipherIndex = result.ciphers.length;\n let folderIndex = result.folders.length;\n let grouping = value.grouping;\n if (grouping != null) {\n grouping = grouping.replace(/\\\\/g, '/').replace(/[\\x00-\\x1F\\x7F-\\x9F]/g, '');\n }\n const hasFolder = this.getValueOrDefault(grouping, '(none)') !== '(none)';\n let addFolder = hasFolder;\n\n if (hasFolder) {\n for (let i = 0; i < result.folders.length; i++) {\n if (result.folders[i].name === grouping) {\n addFolder = false;\n folderIndex = i;\n break;\n }\n }\n }\n\n const cipher = this.buildBaseCipher(value);\n if (cipher.type === CipherType.Login) {\n cipher.notes = this.getValueOrDefault(value.extra);\n cipher.login = new LoginView();\n cipher.login.uris = this.makeUriArray(value.url);\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.totp = this.getValueOrDefault(value.totp);\n } else if (cipher.type === CipherType.SecureNote) {\n this.parseSecureNote(value, cipher);\n } else if (cipher.type === CipherType.Card) {\n cipher.card = this.parseCard(value);\n cipher.notes = this.getValueOrDefault(value.notes);\n } else if (cipher.type === CipherType.Identity) {\n cipher.identity = this.parseIdentity(value);\n cipher.notes = this.getValueOrDefault(value.notes);\n if (!this.isNullOrWhitespace(value.ccnum)) {\n // there is a card on this identity too\n const cardCipher = this.buildBaseCipher(value);\n cardCipher.identity = null;\n cardCipher.type = CipherType.Card;\n cardCipher.card = this.parseCard(value);\n result.ciphers.push(cardCipher);\n }\n }\n\n result.ciphers.push(cipher);\n\n if (addFolder) {\n const f = new FolderView();\n f.name = grouping;\n result.folders.push(f);\n }\n if (hasFolder) {\n result.folderRelationships.push([cipherIndex, folderIndex]);\n }\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private buildBaseCipher(value: any) {\n const cipher = new CipherView();\n if (value.hasOwnProperty('profilename') && value.hasOwnProperty('profilelanguage')) {\n // form fill\n cipher.favorite = false;\n cipher.name = this.getValueOrDefault(value.profilename, '--');\n cipher.type = CipherType.Card;\n\n if (!this.isNullOrWhitespace(value.title) || !this.isNullOrWhitespace(value.firstname) ||\n !this.isNullOrWhitespace(value.lastname) || !this.isNullOrWhitespace(value.address1) ||\n !this.isNullOrWhitespace(value.phone) || !this.isNullOrWhitespace(value.username) ||\n !this.isNullOrWhitespace(value.email)) {\n cipher.type = CipherType.Identity;\n }\n } else {\n // site or secure note\n cipher.favorite = !this.organization && this.getValueOrDefault(value.fav, '0') === '1';\n cipher.name = this.getValueOrDefault(value.name, '--');\n cipher.type = value.url === 'http://sn' ? CipherType.SecureNote : CipherType.Login;\n }\n return cipher;\n }\n\n private parseCard(value: any): CardView {\n const card = new CardView();\n card.cardholderName = this.getValueOrDefault(value.ccname);\n card.number = this.getValueOrDefault(value.ccnum);\n card.code = this.getValueOrDefault(value.cccsc);\n card.brand = this.getCardBrand(value.ccnum);\n\n if (!this.isNullOrWhitespace(value.ccexp) && value.ccexp.indexOf('-') > -1) {\n const ccexpParts = (value.ccexp as string).split('-');\n if (ccexpParts.length > 1) {\n card.expYear = ccexpParts[0];\n card.expMonth = ccexpParts[1];\n if (card.expMonth.length === 2 && card.expMonth[0] === '0') {\n card.expMonth = card.expMonth[1];\n }\n }\n }\n\n return card;\n }\n\n private parseIdentity(value: any): IdentityView {\n const identity = new IdentityView();\n identity.title = this.getValueOrDefault(value.title);\n identity.firstName = this.getValueOrDefault(value.firstname);\n identity.middleName = this.getValueOrDefault(value.middlename);\n identity.lastName = this.getValueOrDefault(value.lastname);\n identity.username = this.getValueOrDefault(value.username);\n identity.company = this.getValueOrDefault(value.company);\n identity.ssn = this.getValueOrDefault(value.ssn);\n identity.address1 = this.getValueOrDefault(value.address1);\n identity.address2 = this.getValueOrDefault(value.address2);\n identity.address3 = this.getValueOrDefault(value.address3);\n identity.city = this.getValueOrDefault(value.city);\n identity.state = this.getValueOrDefault(value.state);\n identity.postalCode = this.getValueOrDefault(value.zip);\n identity.country = this.getValueOrDefault(value.country);\n identity.email = this.getValueOrDefault(value.email);\n identity.phone = this.getValueOrDefault(value.phone);\n\n if (!this.isNullOrWhitespace(identity.title)) {\n identity.title = identity.title.charAt(0).toUpperCase() + identity.title.slice(1);\n }\n\n return identity;\n }\n\n private parseSecureNote(value: any, cipher: CipherView) {\n const extraParts = this.splitNewLine(value.extra);\n let processedNote = false;\n\n if (extraParts.length) {\n const typeParts = extraParts[0].split(':');\n if (typeParts.length > 1 && typeParts[0] === 'NoteType' &&\n (typeParts[1] === 'Credit Card' || typeParts[1] === 'Address')) {\n if (typeParts[1] === 'Credit Card') {\n const mappedData = this.parseSecureNoteMapping(cipher, extraParts, {\n 'Number': 'number',\n 'Name on Card': 'cardholderName',\n 'Security Code': 'code',\n // LP provides date in a format like 'June,2020'\n // Store in expMonth, then parse and modify\n 'Expiration Date': 'expMonth',\n });\n\n if (this.isNullOrWhitespace(mappedData.expMonth) || mappedData.expMonth === ',') {\n // No expiration data\n mappedData.expMonth = undefined;\n } else {\n const [monthString, year] = mappedData.expMonth.split(',');\n // Parse month name into number\n if (!this.isNullOrWhitespace(monthString)) {\n const month = new Date(Date.parse(monthString.trim() + ' 1, 2012')).getMonth() + 1;\n if (isNaN(month)) {\n mappedData.expMonth = undefined;\n } else {\n mappedData.expMonth = month.toString();\n }\n } else {\n mappedData.expMonth = undefined;\n }\n if (!this.isNullOrWhitespace(year)) {\n mappedData.expYear = year;\n }\n }\n\n cipher.type = CipherType.Card;\n cipher.card = mappedData;\n } else if (typeParts[1] === 'Address') {\n const mappedData = this.parseSecureNoteMapping(cipher, extraParts, {\n 'Title': 'title',\n 'First Name': 'firstName',\n 'Last Name': 'lastName',\n 'Middle Name': 'middleName',\n 'Company': 'company',\n 'Address 1': 'address1',\n 'Address 2': 'address2',\n 'Address 3': 'address3',\n 'City / Town': 'city',\n 'State': 'state',\n 'Zip / Postal Code': 'postalCode',\n 'Country': 'country',\n 'Email Address': 'email',\n 'Username': 'username',\n });\n cipher.type = CipherType.Identity;\n cipher.identity = mappedData;\n }\n processedNote = true;\n }\n }\n\n if (!processedNote) {\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n cipher.notes = this.getValueOrDefault(value.extra);\n }\n }\n\n private parseSecureNoteMapping(cipher: CipherView, extraParts: string[], map: any): T {\n const dataObj: any = {};\n\n let processingNotes = false;\n extraParts.forEach(extraPart => {\n let key: string = null;\n let val: string = null;\n if (!processingNotes) {\n if (this.isNullOrWhitespace(extraPart)) {\n return;\n }\n const colonIndex = extraPart.indexOf(':');\n if (colonIndex === -1) {\n key = extraPart;\n } else {\n key = extraPart.substring(0, colonIndex);\n if (extraPart.length > colonIndex) {\n val = extraPart.substring(colonIndex + 1);\n }\n }\n if (this.isNullOrWhitespace(key) || this.isNullOrWhitespace(val) || key === 'NoteType') {\n return;\n }\n }\n\n if (processingNotes) {\n cipher.notes += ('\\n' + extraPart);\n } else if (key === 'Notes') {\n if (!this.isNullOrWhitespace(cipher.notes)) {\n cipher.notes += ('\\n' + val);\n } else {\n cipher.notes = val;\n }\n processingNotes = true;\n } else if (map.hasOwnProperty(key)) {\n dataObj[map[key]] = val;\n } else {\n this.processKvp(cipher, key, val);\n }\n });\n\n return dataObj;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class LogMeOnceCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (value.length < 4) {\n return;\n }\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[0], '--');\n cipher.login.username = this.getValueOrDefault(value[2]);\n cipher.login.password = this.getValueOrDefault(value[3]);\n cipher.login.uris = this.makeUriArray(value[1]);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class MeldiumCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.DisplayName, '--');\n cipher.notes = this.getValueOrDefault(value.Notes);\n cipher.login.username = this.getValueOrDefault(value.UserName);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value.Url);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nexport class MSecureCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (value.length < 3) {\n return;\n }\n\n const folderName = this.getValueOrDefault(value[0], 'Unassigned') !== 'Unassigned' ? value[0] : null;\n this.processFolder(result, folderName);\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[2], '--');\n\n if (value[1] === 'Web Logins' || value[1] === 'Login') {\n cipher.login.uris = this.makeUriArray(value[4]);\n cipher.login.username = this.getValueOrDefault(value[5]);\n cipher.login.password = this.getValueOrDefault(value[6]);\n cipher.notes = !this.isNullOrWhitespace(value[3]) ? value[3].split('\\\\n').join('\\n') : null;\n } else if (value.length > 3) {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n for (let i = 3; i < value.length; i++) {\n if (!this.isNullOrWhitespace(value[i])) {\n cipher.notes += (value[i] + '\\n');\n }\n }\n }\n\n if (!this.isNullOrWhitespace(value[1]) && cipher.type !== CipherType.Login) {\n cipher.name = value[1] + ': ' + cipher.name;\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nimport { CardView } from '../models/view/cardView';\nimport { IdentityView } from '../models/view/identityView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class MykiCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.nickname, '--');\n cipher.notes = this.getValueOrDefault(value.additionalInfo);\n\n if (value.url !== undefined) {\n // Accounts\n cipher.login.uris = this.makeUriArray(value.url);\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.totp = this.getValueOrDefault(value.twoFactAuthToken);\n } else if (value.cardNumber !== undefined) {\n // Cards\n cipher.card = new CardView();\n cipher.type = CipherType.Card;\n cipher.card.cardholderName = this.getValueOrDefault(value.cardName);\n cipher.card.number = this.getValueOrDefault(value.cardNumber);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.expMonth = this.getValueOrDefault(value.exp_month);\n cipher.card.expYear = this.getValueOrDefault(value.exp_year);\n cipher.card.code = this.getValueOrDefault(value.cvv);\n } else if (value.firstName !== undefined) {\n // Identities\n cipher.identity = new IdentityView();\n cipher.type = CipherType.Identity;\n cipher.identity.title = this.getValueOrDefault(value.title);\n cipher.identity.firstName = this.getValueOrDefault(value.firstName);\n cipher.identity.middleName = this.getValueOrDefault(value.middleName);\n cipher.identity.lastName = this.getValueOrDefault(value.lastName);\n cipher.identity.phone = this.getValueOrDefault(value.number);\n cipher.identity.email = this.getValueOrDefault(value.email);\n cipher.identity.address1 = this.getValueOrDefault(value.firstAddressLine);\n cipher.identity.address2 = this.getValueOrDefault(value.secondAddressLine);\n cipher.identity.city = this.getValueOrDefault(value.city);\n cipher.identity.country = this.getValueOrDefault(value.country);\n cipher.identity.postalCode = this.getValueOrDefault(value.zipCode);\n } else if (value.content !== undefined) {\n // Notes\n cipher.secureNote = new SecureNoteView();\n cipher.type = CipherType.SecureNote;\n cipher.secureNote.type = SecureNoteType.Generic;\n cipher.name = this.getValueOrDefault(value.title, '--');\n cipher.notes = this.getValueOrDefault(value.content);\n } else {\n return;\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherView } from '../models/view/cipherView';\nimport { LoginView } from '../models/view/loginView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\ntype nodePassCsvParsed = {\n name: string;\n url: string;\n username: string;\n password: string;\n note: string;\n cardholdername: string;\n cardnumber: string;\n cvc: string;\n expirydate: string;\n zipcode: string;\n folder: string;\n full_name: string;\n phone_number: string;\n email: string;\n address1: string;\n address2: string;\n city: string;\n country: string;\n state: string;\n};\n\nexport class NordPassCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results: nodePassCsvParsed[] = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(record => {\n\n const recordType = this.evaluateType(record);\n if (recordType === undefined) {\n return;\n }\n\n if (!this.organization) {\n this.processFolder(result, record.folder);\n }\n\n const cipher = new CipherView();\n cipher.name = this.getValueOrDefault(record.name, '--');\n cipher.notes = this.getValueOrDefault(record.note);\n\n switch (recordType) {\n case CipherType.Login:\n cipher.type = CipherType.Login;\n cipher.login = new LoginView();\n cipher.login.username = this.getValueOrDefault(record.username);\n cipher.login.password = this.getValueOrDefault(record.password);\n cipher.login.uris = this.makeUriArray(record.url);\n break;\n case CipherType.Card:\n cipher.type = CipherType.Card;\n cipher.card.cardholderName = this.getValueOrDefault(record.cardholdername);\n cipher.card.number = this.getValueOrDefault(record.cardnumber);\n cipher.card.code = this.getValueOrDefault(record.cvc);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n this.setCardExpiration(cipher, record.expirydate);\n break;\n\n case CipherType.Identity:\n cipher.type = CipherType.Identity;\n\n this.processName(cipher, this.getValueOrDefault(record.full_name));\n cipher.identity.address1 = this.getValueOrDefault(record.address1);\n cipher.identity.address2 = this.getValueOrDefault(record.address2);\n cipher.identity.city = this.getValueOrDefault(record.city);\n cipher.identity.state = this.getValueOrDefault(record.state);\n cipher.identity.postalCode = this.getValueOrDefault(record.zipcode);\n cipher.identity.country = this.getValueOrDefault(record.country);\n if (cipher.identity.country != null) {\n cipher.identity.country = cipher.identity.country.toUpperCase();\n }\n cipher.identity.email = this.getValueOrDefault(record.email);\n cipher.identity.phone = this.getValueOrDefault(record.phone_number);\n break;\n case CipherType.SecureNote:\n cipher.type = CipherType.SecureNote;\n cipher.secureNote.type = SecureNoteType.Generic;\n break;\n default:\n break;\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private evaluateType(record: nodePassCsvParsed): CipherType {\n\n if (!this.isNullOrWhitespace(record.username)) {\n return CipherType.Login;\n }\n\n if (!this.isNullOrWhitespace(record.cardnumber)) {\n return CipherType.Card;\n }\n\n if (!this.isNullOrWhitespace(record.full_name)) {\n return CipherType.Identity;\n }\n\n if (!this.isNullOrWhitespace(record.note)) {\n return CipherType.SecureNote;\n }\n\n return undefined;\n }\n\n private processName(cipher: CipherView, fullName: string) {\n\n if (this.isNullOrWhitespace(fullName)) {\n return;\n }\n\n const nameParts = fullName.split(' ');\n if (nameParts.length > 0) {\n cipher.identity.firstName = this.getValueOrDefault(nameParts[0]);\n }\n if (nameParts.length === 2) {\n cipher.identity.lastName = this.getValueOrDefault(nameParts[1]);\n } else if (nameParts.length >= 3) {\n cipher.identity.middleName = this.getValueOrDefault(nameParts[1]);\n cipher.identity.lastName = nameParts.slice(2, nameParts.length).join(' ');\n }\n }\n}\n","import { BaseImporter } from '../baseImporter';\nimport { Importer } from '../importer';\n\nimport { ImportResult } from '../../models/domain/importResult';\n\nimport { CardView } from '../../models/view/cardView';\nimport { CipherView } from '../../models/view/cipherView';\nimport { IdentityView } from '../../models/view/identityView';\nimport { PasswordHistoryView } from '../../models/view/passwordHistoryView';\nimport { SecureNoteView } from '../../models/view/secureNoteView';\n\nimport { CipherType } from '../../enums/cipherType';\nimport { FieldType } from '../../enums/fieldType';\nimport { SecureNoteType } from '../../enums/secureNoteType';\n\nexport class OnePassword1PifImporter extends BaseImporter implements Importer {\n result = new ImportResult();\n\n parse(data: string): Promise {\n data.split(this.newLineRegex).forEach(line => {\n if (this.isNullOrWhitespace(line) || line[0] !== '{') {\n return;\n }\n const item = JSON.parse(line);\n if (item.trashed === true) {\n return;\n }\n const cipher = this.initLoginCipher();\n\n if (this.isNullOrWhitespace(item.hmac)) {\n this.processStandardItem(item, cipher);\n } else {\n this.processWinOpVaultItem(item, cipher);\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n\n this.result.success = true;\n return Promise.resolve(this.result);\n }\n\n private processWinOpVaultItem(item: any, cipher: CipherView) {\n if (item.overview != null) {\n cipher.name = this.getValueOrDefault(item.overview.title);\n if (item.overview.URLs != null) {\n const urls: string[] = [];\n item.overview.URLs.forEach((url: any) => {\n if (!this.isNullOrWhitespace(url.u)) {\n urls.push(url.u);\n }\n });\n cipher.login.uris = this.makeUriArray(urls);\n }\n }\n\n if (item.details != null) {\n if (item.details.passwordHistory != null) {\n this.parsePasswordHistory(item.details.passwordHistory, cipher);\n }\n if (!this.isNullOrWhitespace(item.details.ccnum) || !this.isNullOrWhitespace(item.details.cvv)) {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n } else if (!this.isNullOrWhitespace(item.details.firstname) ||\n !this.isNullOrWhitespace(item.details.address1)) {\n cipher.type = CipherType.Identity;\n cipher.identity = new IdentityView();\n }\n if (cipher.type === CipherType.Login && !this.isNullOrWhitespace(item.details.password)) {\n cipher.login.password = item.details.password;\n }\n if (!this.isNullOrWhitespace(item.details.notesPlain)) {\n cipher.notes = item.details.notesPlain.split(this.newLineRegex).join('\\n') + '\\n';\n }\n if (item.details.fields != null) {\n this.parseFields(item.details.fields, cipher, 'designation', 'value', 'name');\n }\n if (item.details.sections != null) {\n item.details.sections.forEach((section: any) => {\n if (section.fields != null) {\n this.parseFields(section.fields, cipher, 'n', 'v', 't');\n }\n });\n }\n }\n }\n\n private processStandardItem(item: any, cipher: CipherView) {\n cipher.favorite = item.openContents && item.openContents.faveIndex ? true : false;\n cipher.name = this.getValueOrDefault(item.title);\n\n if (item.typeName === 'securenotes.SecureNote') {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n } else if (item.typeName === 'wallet.financial.CreditCard') {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n } else if (item.typeName === 'identities.Identity') {\n cipher.type = CipherType.Identity;\n cipher.identity = new IdentityView();\n } else {\n cipher.login.uris = this.makeUriArray(item.location);\n }\n\n if (item.secureContents != null) {\n if (item.secureContents.passwordHistory != null) {\n this.parsePasswordHistory(item.secureContents.passwordHistory, cipher);\n }\n if (!this.isNullOrWhitespace(item.secureContents.notesPlain)) {\n cipher.notes = item.secureContents.notesPlain.split(this.newLineRegex).join('\\n') + '\\n';\n }\n if (cipher.type === CipherType.Login) {\n if (!this.isNullOrWhitespace(item.secureContents.password)) {\n cipher.login.password = item.secureContents.password;\n }\n if (item.secureContents.URLs != null) {\n const urls: string[] = [];\n item.secureContents.URLs.forEach((u: any) => {\n if (!this.isNullOrWhitespace(u.url)) {\n urls.push(u.url);\n }\n });\n if (urls.length > 0) {\n cipher.login.uris = this.makeUriArray(urls);\n }\n }\n }\n if (item.secureContents.fields != null) {\n this.parseFields(item.secureContents.fields, cipher, 'designation', 'value', 'name');\n }\n if (item.secureContents.sections != null) {\n item.secureContents.sections.forEach((section: any) => {\n if (section.fields != null) {\n this.parseFields(section.fields, cipher, 'n', 'v', 't');\n }\n });\n }\n }\n }\n\n private parsePasswordHistory(items: any[], cipher: CipherView) {\n const maxSize = items.length > 5 ? 5 : items.length;\n cipher.passwordHistory = items\n .filter((h: any) => !this.isNullOrWhitespace(h.value) && h.time != null)\n .sort((a, b) => b.time - a.time)\n .slice(0, maxSize)\n .map((h: any) => {\n const ph = new PasswordHistoryView();\n ph.password = h.value;\n ph.lastUsedDate = new Date(('' + h.time).length >= 13 ? h.time : h.time * 1000);\n return ph;\n });\n }\n\n private parseFields(fields: any[], cipher: CipherView, designationKey: string, valueKey: string, nameKey: string) {\n fields.forEach((field: any) => {\n if (field[valueKey] == null || field[valueKey].toString().trim() === '') {\n return;\n }\n\n const fieldValue = field[valueKey].toString();\n const fieldDesignation = field[designationKey] != null ? field[designationKey].toString() : null;\n\n if (cipher.type === CipherType.Login) {\n if (this.isNullOrWhitespace(cipher.login.username) && fieldDesignation === 'username') {\n cipher.login.username = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(cipher.login.password) && fieldDesignation === 'password') {\n cipher.login.password = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(cipher.login.totp) && fieldDesignation != null &&\n fieldDesignation.startsWith('TOTP_')) {\n cipher.login.totp = fieldValue;\n return;\n }\n } else if (cipher.type === CipherType.Card) {\n if (this.isNullOrWhitespace(cipher.card.number) && fieldDesignation === 'ccnum') {\n cipher.card.number = fieldValue;\n cipher.card.brand = this.getCardBrand(fieldValue);\n return;\n } else if (this.isNullOrWhitespace(cipher.card.code) && fieldDesignation === 'cvv') {\n cipher.card.code = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(cipher.card.cardholderName) && fieldDesignation === 'cardholder') {\n cipher.card.cardholderName = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(cipher.card.expiration) && fieldDesignation === 'expiry' &&\n fieldValue.length === 6) {\n cipher.card.expMonth = (fieldValue as string).substr(4, 2);\n if (cipher.card.expMonth[0] === '0') {\n cipher.card.expMonth = cipher.card.expMonth.substr(1, 1);\n }\n cipher.card.expYear = (fieldValue as string).substr(0, 4);\n return;\n } else if (fieldDesignation === 'type') {\n // Skip since brand was determined from number above\n return;\n }\n } else if (cipher.type === CipherType.Identity) {\n const identity = cipher.identity;\n if (this.isNullOrWhitespace(identity.firstName) && fieldDesignation === 'firstname') {\n identity.firstName = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.lastName) && fieldDesignation === 'lastname') {\n identity.lastName = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.middleName) && fieldDesignation === 'initial') {\n identity.middleName = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.phone) && fieldDesignation === 'defphone') {\n identity.phone = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.company) && fieldDesignation === 'company') {\n identity.company = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.email) && fieldDesignation === 'email') {\n identity.email = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.username) && fieldDesignation === 'username') {\n identity.username = fieldValue;\n return;\n } else if (fieldDesignation === 'address') {\n // fieldValue is an object casted into a string, so access the plain value instead\n const { street, city, country, zip } = field[valueKey];\n identity.address1 = this.getValueOrDefault(street);\n identity.city = this.getValueOrDefault(city);\n if (!this.isNullOrWhitespace(country)) {\n identity.country = country.toUpperCase();\n }\n identity.postalCode = this.getValueOrDefault(zip);\n return;\n }\n }\n\n const fieldName = this.isNullOrWhitespace(field[nameKey]) ? 'no_name' : field[nameKey];\n if (fieldName === 'password' && cipher.passwordHistory != null &&\n cipher.passwordHistory.some(h => h.password === fieldValue)) {\n return;\n }\n\n const fieldType = field.k === 'concealed' ? FieldType.Hidden : FieldType.Text;\n this.processKvp(cipher, fieldName, fieldValue, fieldType);\n });\n }\n}\n","import { Importer } from '../importer';\nimport { IgnoredProperties, OnePasswordCsvImporter } from './onepasswordCsvImporter';\n\nimport { CipherType } from '../../enums/cipherType';\nimport { CardView, CipherView, IdentityView } from '../../models/view';\n\nexport class OnePasswordMacCsvImporter extends OnePasswordCsvImporter implements Importer {\n setCipherType(value: any, cipher: CipherView) {\n const onePassType = this.getValueOrDefault(this.getProp(value, 'type'), 'Login');\n switch (onePassType) {\n case 'Credit Card':\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n IgnoredProperties.push('type');\n break;\n case 'Identity':\n cipher.type = CipherType.Identity;\n cipher.identity = new IdentityView();\n IgnoredProperties.push('type');\n break;\n case 'Login':\n case 'Secure Note':\n IgnoredProperties.push('type');\n default:\n break;\n }\n }\n}\n","import { CipherView } from '../../models/view';\n\nexport class CipherImportContext {\n lowerProperty: string;\n constructor(public importRecord: any, public property: string, public cipher: CipherView) {\n this.lowerProperty = property.toLowerCase();\n }\n}\n","export class View {\n}\n","import { Importer } from '../importer';\nimport { CipherImportContext } from './cipherImportContext';\nimport { OnePasswordCsvImporter } from './onepasswordCsvImporter';\n\nimport { CipherType } from '../../enums/cipherType';\nimport { CardView, CipherView, IdentityView, LoginView } from '../../models/view';\n\nexport class OnePasswordWinCsvImporter extends OnePasswordCsvImporter implements Importer {\n constructor() {\n super();\n this.identityPropertyParsers.push(this.setIdentityAddress);\n }\n\n setCipherType(value: any, cipher: CipherView) {\n cipher.type = CipherType.Login;\n cipher.login = new LoginView();\n\n if (!this.isNullOrWhitespace(this.getPropByRegexp(value, /\\d+: number/i)) &&\n !this.isNullOrWhitespace(this.getPropByRegexp(value, /\\d+: expiry date/i))) {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n }\n\n if (!this.isNullOrWhitespace(this.getPropByRegexp(value, /name \\d+: first name/i)) ||\n !this.isNullOrWhitespace(this.getPropByRegexp(value, /name \\d+: initial/i)) ||\n !this.isNullOrWhitespace(this.getPropByRegexp(value, /name \\d+: last name/i)) ||\n !this.isNullOrWhitespace(this.getPropByRegexp(value, /internet \\d+: email/i))) {\n cipher.type = CipherType.Identity;\n cipher.identity = new IdentityView();\n }\n }\n\n setIdentityAddress(context: CipherImportContext) {\n if (context.lowerProperty.match(/address \\d+: address/i)) {\n this.processKvp(context.cipher, 'address', context.importRecord[context.property]);\n return true;\n }\n return false;\n }\n\n setCreditCardExpiry(context: CipherImportContext) {\n if (this.isNullOrWhitespace(context.cipher.card.expiration) && context.lowerProperty.includes('expiry date')) {\n const expSplit = (context.importRecord[context.property] as string).split('/');\n context.cipher.card.expMonth = expSplit[0];\n if (context.cipher.card.expMonth[0] === '0' && context.cipher.card.expMonth.length === 2) {\n context.cipher.card.expMonth = context.cipher.card.expMonth.substr(1, 1);\n }\n context.cipher.card.expYear = expSplit[2].length > 4 ? expSplit[2].substr(0, 4) : expSplit[2];\n return true;\n }\n return false;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CollectionView } from '../models/view/collectionView';\nimport { FolderView } from '../models/view/folderView';\n\nexport class PadlockCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n let headers: string[] = null;\n results.forEach(value => {\n if (headers == null) {\n headers = value.map((v: string) => v);\n return;\n }\n\n if (value.length < 2 || value.length !== headers.length) {\n return;\n }\n\n if (!this.isNullOrWhitespace(value[1])) {\n if (this.organization) {\n const tags = (value[1] as string).split(',');\n tags.forEach(tag => {\n tag = tag.trim();\n let addCollection = true;\n let collectionIndex = result.collections.length;\n\n for (let i = 0; i < result.collections.length; i++) {\n if (result.collections[i].name === tag) {\n addCollection = false;\n collectionIndex = i;\n break;\n }\n }\n\n if (addCollection) {\n const collection = new CollectionView();\n collection.name = tag;\n result.collections.push(collection);\n }\n\n result.collectionRelationships.push([result.ciphers.length, collectionIndex]);\n });\n } else {\n const tags = (value[1] as string).split(',');\n const tag = tags.length > 0 ? tags[0].trim() : null;\n this.processFolder(result, tag);\n }\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[0], '--');\n\n for (let i = 2; i < value.length; i++) {\n const header = headers[i].trim().toLowerCase();\n if (this.isNullOrWhitespace(value[i]) || this.isNullOrWhitespace(header)) {\n continue;\n }\n\n if (this.usernameFieldNames.indexOf(header) > -1) {\n cipher.login.username = value[i];\n } else if (this.passwordFieldNames.indexOf(header) > -1) {\n cipher.login.password = value[i];\n } else if (this.uriFieldNames.indexOf(header) > -1) {\n cipher.login.uris = this.makeUriArray(value[i]);\n } else {\n this.processKvp(cipher, headers[i], value[i]);\n }\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class PassKeepCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n this.processFolder(result, this.getValue('category', value));\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValue('description', value);\n cipher.name = this.getValueOrDefault(this.getValue('title', value), '--');\n cipher.login.username = this.getValue('username', value);\n cipher.login.password = this.getValue('password', value);\n cipher.login.uris = this.makeUriArray(this.getValue('site', value));\n this.processKvp(cipher, 'Password 2', this.getValue('password2', value));\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private getValue(key: string, value: any) {\n return this.getValueOrDefault(value[key], this.getValueOrDefault(value[(' ' + key)]));\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class PassmanJsonImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.length === 0) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((credential: any) => {\n if (credential.tags != null && credential.tags.length > 0) {\n const folderName = credential.tags[0].text;\n this.processFolder(result, folderName);\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = credential.label;\n\n cipher.login.username = this.getValueOrDefault(credential.username);\n if (this.isNullOrWhitespace(cipher.login.username)) {\n cipher.login.username = this.getValueOrDefault(credential.email);\n } else if (!this.isNullOrWhitespace(credential.email)) {\n cipher.notes = ('Email: ' + credential.email + '\\n');\n }\n\n cipher.login.password = this.getValueOrDefault(credential.password);\n cipher.login.uris = this.makeUriArray(credential.url);\n cipher.notes += this.getValueOrDefault(credential.description, '');\n if (credential.otp != null) {\n cipher.login.totp = this.getValueOrDefault(credential.otp.secret);\n }\n\n if (credential.custom_fields != null) {\n credential.custom_fields.forEach((customField: any) => {\n switch (customField.field_type) {\n case 'text':\n case 'password':\n this.processKvp(cipher, customField.label, customField.value);\n break;\n }\n });\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CollectionView } from '../models/view/collectionView';\n\nexport class PasspackCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n const tagsJson = !this.isNullOrWhitespace(value.Tags) ? JSON.parse(value.Tags) : null;\n const tags: string[] = tagsJson != null && tagsJson.tags != null && tagsJson.tags.length > 0 ?\n tagsJson.tags.map((tagJson: string) => {\n try {\n const t = JSON.parse(tagJson);\n return this.getValueOrDefault(t.tag);\n } catch { }\n return null;\n }).filter((t: string) => !this.isNullOrWhitespace(t)) : null;\n\n if (this.organization && tags != null && tags.length > 0) {\n tags.forEach(tag => {\n let addCollection = true;\n let collectionIndex = result.collections.length;\n\n for (let i = 0; i < result.collections.length; i++) {\n if (result.collections[i].name === tag) {\n addCollection = false;\n collectionIndex = i;\n break;\n }\n }\n\n if (addCollection) {\n const collection = new CollectionView();\n collection.name = tag;\n result.collections.push(collection);\n }\n\n result.collectionRelationships.push([result.ciphers.length, collectionIndex]);\n });\n } else if (!this.organization && tags != null && tags.length > 0) {\n this.processFolder(result, tags[0]);\n }\n\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value.Notes, '');\n cipher.notes += ('\\n\\n' + this.getValueOrDefault(value['Shared Notes'], '') + '\\n');\n cipher.name = this.getValueOrDefault(value['Entry Name'], '--');\n cipher.login.username = this.getValueOrDefault(value['User ID']);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value.URL);\n\n if (value.__parsed_extra != null && value.__parsed_extra.length > 0) {\n value.__parsed_extra.forEach((extra: string) => {\n if (!this.isNullOrWhitespace(extra)) {\n cipher.notes += ('\\n' + extra);\n }\n });\n }\n\n const fieldsJson = !this.isNullOrWhitespace(value['Extra Fields']) ?\n JSON.parse(value['Extra Fields']) : null;\n const fields = fieldsJson != null && fieldsJson.extraFields != null &&\n fieldsJson.extraFields.length > 0 ? fieldsJson.extraFields.map((fieldJson: string) => {\n try {\n return JSON.parse(fieldJson);\n } catch { }\n return null;\n }) : null;\n if (fields != null) {\n fields.forEach((f: any) => {\n if (f != null) {\n this.processKvp(cipher, f.name, f.data);\n }\n });\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class PasswordAgentCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n let newVersion = true;\n results.forEach(value => {\n if (value.length !== 5 && value.length < 9) {\n return;\n }\n const altFormat = value.length === 10 && value[0] === '0';\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[altFormat ? 1 : 0], '--');\n cipher.login.username = this.getValueOrDefault(value[altFormat ? 2 : 1]);\n cipher.login.password = this.getValueOrDefault(value[altFormat ? 3 : 2]);\n if (value.length === 5) {\n newVersion = false;\n cipher.notes = this.getValueOrDefault(value[4]);\n cipher.login.uris = this.makeUriArray(value[3]);\n } else {\n const folder = this.getValueOrDefault(value[altFormat ? 9 : 8], '(None)');\n let folderName = folder !== '(None)' ? folder.split('\\\\').join('/') : null;\n if (folderName != null) {\n folderName = folder.split(' > ').join('/');\n folderName = folder.split('>').join('/');\n }\n this.processFolder(result, folderName);\n cipher.notes = this.getValueOrDefault(value[altFormat ? 5 : 3]);\n cipher.login.uris = this.makeUriArray(value[4]);\n }\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (newVersion && this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\nimport { FolderView } from '../models/view/folderView';\n\nimport { CipherType } from '../enums/cipherType';\n\nexport class PasswordBossJsonImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.items == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const foldersMap = new Map();\n results.folders.forEach((value: any) => {\n foldersMap.set(value.id, value.name);\n });\n const foldersIndexMap = new Map();\n foldersMap.forEach((val, key) => {\n foldersIndexMap.set(key, result.folders.length);\n const f = new FolderView();\n f.name = val;\n result.folders.push(f);\n });\n\n results.items.forEach((value: any) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.name, '--');\n cipher.login.uris = this.makeUriArray(value.login_url);\n\n if (value.folder != null && foldersIndexMap.has(value.folder)) {\n result.folderRelationships.push([result.ciphers.length, foldersIndexMap.get(value.folder)]);\n }\n\n if (value.identifiers == null) {\n return;\n }\n\n if (!this.isNullOrWhitespace(value.identifiers.notes)) {\n cipher.notes = value.identifiers.notes.split('\\\\r\\\\n').join('\\n').split('\\\\n').join('\\n');\n }\n\n if (value.type === 'CreditCard') {\n cipher.card = new CardView();\n cipher.type = CipherType.Card;\n }\n\n for (const property in value.identifiers) {\n if (!value.identifiers.hasOwnProperty(property)) {\n continue;\n }\n const valObj = value.identifiers[property];\n const val = valObj != null ? valObj.toString() : null;\n if (this.isNullOrWhitespace(val) || property === 'notes' || property === 'ignoreItemInSecurityScore') {\n continue;\n }\n\n if (property === 'custom_fields') {\n valObj.forEach((cf: any) => {\n this.processKvp(cipher, cf.name, cf.value);\n });\n continue;\n }\n\n if (cipher.type === CipherType.Card) {\n if (property === 'cardNumber') {\n cipher.card.number = val;\n cipher.card.brand = this.getCardBrand(val);\n continue;\n } else if (property === 'nameOnCard') {\n cipher.card.cardholderName = val;\n continue;\n } else if (property === 'security_code') {\n cipher.card.code = val;\n continue;\n } else if (property === 'expires') {\n try {\n const expDate = new Date(val);\n cipher.card.expYear = expDate.getFullYear().toString();\n cipher.card.expMonth = (expDate.getMonth() + 1).toString();\n } catch { }\n continue;\n } else if (property === 'cardType') {\n continue;\n }\n } else {\n if ((property === 'username' || property === 'email') &&\n this.isNullOrWhitespace(cipher.login.username)) {\n cipher.login.username = val;\n continue;\n } else if (property === 'password') {\n cipher.login.password = val;\n continue;\n } else if (property === 'totp') {\n cipher.login.totp = val;\n continue;\n } else if ((cipher.login.uris == null || cipher.login.uris.length === 0) &&\n this.uriFieldNames.indexOf(property) > -1) {\n cipher.login.uris = this.makeUriArray(val);\n continue;\n }\n }\n\n this.processKvp(cipher, property, val);\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class PasswordDragonXmlImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const doc = this.parseXml(data);\n if (doc == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const records = doc.querySelectorAll('PasswordManager > record');\n Array.from(records).forEach(record => {\n const category = this.querySelectorDirectChild(record, 'Category');\n const categoryText = category != null && !this.isNullOrWhitespace(category.textContent) &&\n category.textContent !== 'Unfiled' ? category.textContent : null;\n this.processFolder(result, categoryText);\n\n const accountName = this.querySelectorDirectChild(record, 'Account-Name');\n const userId = this.querySelectorDirectChild(record, 'User-Id');\n const password = this.querySelectorDirectChild(record, 'Password');\n const url = this.querySelectorDirectChild(record, 'URL');\n const notes = this.querySelectorDirectChild(record, 'Notes');\n const cipher = this.initLoginCipher();\n cipher.name = accountName != null ? this.getValueOrDefault(accountName.textContent, '--') : '--';\n cipher.notes = notes != null ? this.getValueOrDefault(notes.textContent) : '';\n cipher.login.username = userId != null ? this.getValueOrDefault(userId.textContent) : null;\n cipher.login.password = password != null ? this.getValueOrDefault(password.textContent) : null;\n cipher.login.uris = url != null ? this.makeUriArray(url.textContent) : null;\n\n const attributes: string[] = [];\n for (let i = 1; i <= 10; i++) {\n attributes.push('Attribute-' + i);\n }\n\n this.querySelectorAllDirectChild(record, attributes.join(',')).forEach(attr => {\n if (this.isNullOrWhitespace(attr.textContent) || attr.textContent === 'null') {\n return;\n }\n this.processKvp(cipher, attr.tagName, attr.textContent);\n });\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class PasswordSafeXmlImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const doc = this.parseXml(data);\n if (doc == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const passwordSafe = doc.querySelector('passwordsafe');\n if (passwordSafe == null) {\n result.errorMessage = 'Missing `passwordsafe` node.';\n result.success = false;\n return Promise.resolve(result);\n }\n\n const notesDelimiter = passwordSafe.getAttribute('delimiter');\n const entries = doc.querySelectorAll('passwordsafe > entry');\n Array.from(entries).forEach(entry => {\n const group = this.querySelectorDirectChild(entry, 'group');\n const groupText = group != null && !this.isNullOrWhitespace(group.textContent) ?\n group.textContent.split('.').join('/') : null;\n this.processFolder(result, groupText);\n\n const title = this.querySelectorDirectChild(entry, 'title');\n const username = this.querySelectorDirectChild(entry, 'username');\n const email = this.querySelectorDirectChild(entry, 'email');\n const password = this.querySelectorDirectChild(entry, 'password');\n const url = this.querySelectorDirectChild(entry, 'url');\n const notes = this.querySelectorDirectChild(entry, 'notes');\n const cipher = this.initLoginCipher();\n cipher.name = title != null ? this.getValueOrDefault(title.textContent, '--') : '--';\n cipher.notes = notes != null ?\n this.getValueOrDefault(notes.textContent, '').split(notesDelimiter).join('\\n') : null;\n cipher.login.username = username != null ? this.getValueOrDefault(username.textContent) : null;\n cipher.login.password = password != null ? this.getValueOrDefault(password.textContent) : null;\n cipher.login.uris = url != null ? this.makeUriArray(url.textContent) : null;\n\n if (this.isNullOrWhitespace(cipher.login.username) && email != null) {\n cipher.login.username = this.getValueOrDefault(email.textContent);\n } else if (email != null && !this.isNullOrWhitespace(email.textContent)) {\n cipher.notes = this.isNullOrWhitespace(cipher.notes) ? 'Email: ' + email.textContent\n : (cipher.notes + '\\n' + 'Email: ' + email.textContent);\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class PasswordWalletTxtImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (value.length < 1) {\n return;\n }\n if (value.length > 5) {\n this.processFolder(result, value[5]);\n }\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[0], '--');\n if (value.length > 4) {\n cipher.notes = this.getValueOrDefault(value[4], '').split('¬').join('\\n');\n }\n if (value.length > 2) {\n cipher.login.username = this.getValueOrDefault(value[2]);\n }\n if (value.length > 3) {\n cipher.login.password = this.getValueOrDefault(value[3]);\n }\n if (value.length > 1) {\n cipher.login.uris = this.makeUriArray(value[1]);\n }\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { CipherType } from '../enums/cipherType';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\n\nexport class RememBearCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (value.trash === 'true') {\n return;\n }\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.name);\n cipher.notes = this.getValueOrDefault(value.notes);\n if (value.type === 'LoginItem') {\n cipher.login.uris = this.makeUriArray(value.website);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.username = this.getValueOrDefault(value.username);\n } else if (value.type === 'CreditCardItem') {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n cipher.card.cardholderName = this.getValueOrDefault(value.cardholder);\n cipher.card.number = this.getValueOrDefault(value.number);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.code = this.getValueOrDefault(value.verification);\n\n try {\n const expMonth = this.getValueOrDefault(value.expiryMonth);\n if (expMonth != null) {\n const expMonthNumber = parseInt(expMonth, null);\n if (expMonthNumber != null && expMonthNumber >= 1 && expMonthNumber <= 12) {\n cipher.card.expMonth = expMonthNumber.toString();\n }\n }\n } catch { }\n try {\n const expYear = this.getValueOrDefault(value.expiryYear);\n if (expYear != null) {\n const expYearNumber = parseInt(expYear, null);\n if (expYearNumber != null) {\n cipher.card.expYear = expYearNumber.toString();\n }\n }\n } catch { }\n\n const pin = this.getValueOrDefault(value.pin);\n if (pin != null) {\n this.processKvp(cipher, 'PIN', pin);\n }\n const zip = this.getValueOrDefault(value.zipCode);\n if (zip != null) {\n this.processKvp(cipher, 'Zip Code', zip);\n }\n }\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class RoboFormCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n let i = 1;\n results.forEach(value => {\n const folder = !this.isNullOrWhitespace(value.Folder) && value.Folder.startsWith('/') ?\n value.Folder.replace('/', '') : value.Folder;\n const folderName = !this.isNullOrWhitespace(folder) ? folder : null;\n this.processFolder(result, folderName);\n\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value.Note);\n cipher.name = this.getValueOrDefault(value.Name, '--');\n cipher.login.username = this.getValueOrDefault(value.Login);\n cipher.login.password = this.getValueOrDefault(value.Pwd);\n cipher.login.uris = this.makeUriArray(value.Url);\n\n if (!this.isNullOrWhitespace(value.Rf_fields)) {\n let fields: string[] = [value.Rf_fields];\n if (value.__parsed_extra != null && value.__parsed_extra.length > 0) {\n fields = fields.concat(value.__parsed_extra);\n }\n fields.forEach((field: string) => {\n const parts = field.split(':');\n if (parts.length < 3) {\n return;\n }\n const key = parts[0] === '-no-name-' ? null : parts[0];\n const val = parts.length === 4 && parts[2] === 'rck' ? parts[1] : parts[2];\n this.processKvp(cipher, key, val);\n });\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n\n if (i === results.length && cipher.name === '--' && this.isNullOrWhitespace(cipher.login.password)) {\n return;\n }\n\n result.ciphers.push(cipher);\n i++;\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { FolderView } from '../models/view/folderView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nimport { FieldType } from '../enums';\nimport { CipherView, FieldView } from '../models/view';\n\nexport class SafeInCloudXmlImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const doc = this.parseXml(data);\n if (doc == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const db = doc.querySelector('database');\n if (db == null) {\n result.errorMessage = 'Missing `database` node.';\n result.success = false;\n return Promise.resolve(result);\n }\n\n const foldersMap = new Map();\n\n Array.from(doc.querySelectorAll('database > label')).forEach(labelEl => {\n const name = labelEl.getAttribute('name');\n const id = labelEl.getAttribute('id');\n if (!this.isNullOrWhitespace(name) && !this.isNullOrWhitespace(id)) {\n foldersMap.set(id, result.folders.length);\n const folder = new FolderView();\n folder.name = name;\n result.folders.push(folder);\n }\n });\n\n Array.from(doc.querySelectorAll('database > card')).forEach(cardEl => {\n if (cardEl.getAttribute('template') === 'true' || cardEl.getAttribute('deleted') === 'true') {\n return;\n }\n\n const labelIdEl = this.querySelectorDirectChild(cardEl, 'label_id');\n if (labelIdEl != null) {\n const labelId = labelIdEl.textContent;\n if (!this.isNullOrWhitespace(labelId) && foldersMap.has(labelId)) {\n result.folderRelationships.push([result.ciphers.length, foldersMap.get(labelId)]);\n }\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(cardEl.getAttribute('title'), '--');\n\n if (cardEl.getAttribute('star') === 'true') {\n cipher.favorite = true;\n }\n\n const cardType = cardEl.getAttribute('type');\n if (cardType === 'note') {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n } else {\n Array.from(this.querySelectorAllDirectChild(cardEl, 'field')).forEach(fieldEl => {\n const text = fieldEl.textContent;\n if (this.isNullOrWhitespace(text)) {\n return;\n }\n const name = fieldEl.getAttribute('name');\n const fieldType = this.getValueOrDefault(fieldEl.getAttribute('type'), '').toLowerCase();\n if (fieldType === 'login') {\n cipher.login.username = text;\n } else if (fieldType === 'password' || fieldType === 'secret') {\n // safeInCloud allows for more than one password. we just insert them here and find the one used as password later\n this.processKvp(cipher, name, text, FieldType.Hidden);\n } else if (fieldType === 'one_time_password') {\n cipher.login.totp = text;\n } else if (fieldType === 'notes') {\n cipher.notes += (text + '\\n');\n } else if (fieldType === 'weblogin' || fieldType === 'website') {\n cipher.login.uris = this.makeUriArray(text);\n }\n else {\n this.processKvp(cipher, name, text);\n }\n });\n }\n\n Array.from(this.querySelectorAllDirectChild(cardEl, 'notes')).forEach(notesEl => {\n cipher.notes += (notesEl.textContent + '\\n');\n });\n\n this.setPassword(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n // Choose a password from all passwords. Take one that has password in its name, or the first one if there is no such entry\n // if its name is password, we can safely remove it form the fields. otherwise, it would maybe be best to keep it as a hidden field\n setPassword(cipher: CipherView) {\n const candidates = cipher.fields.filter(field => field.type === FieldType.Hidden);\n if (!candidates.length) {\n return;\n }\n\n let choice: FieldView;\n for (const field of candidates) {\n if (this.passwordFieldNames.includes(field.name.toLowerCase())) {\n choice = field;\n cipher.fields = cipher.fields.filter(f => f !== choice);\n break;\n }\n }\n\n if (!choice) {\n choice = candidates[0];\n }\n\n cipher.login.password = choice.value;\n }\n}\n","export { CipherType } from './cipherType';\nexport { DeviceType } from './deviceType';\nexport { EncryptionType } from './encryptionType';\nexport { FieldType } from './fieldType';\nexport { LogLevelType } from './logLevelType';\nexport { SecureNoteType } from './secureNoteType';\nexport { TwoFactorProviderType } from './twoFactorProviderType';\nexport { UriMatchType } from './uriMatchType';\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class SaferPassCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(this.nameFromUrl(value.url), '--');\n cipher.notes = this.getValueOrDefault(value.notes);\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.url);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class SecureSafeCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.Title);\n cipher.notes = this.getValueOrDefault(value.Comment);\n cipher.login.uris = this.makeUriArray(value.Url);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.username = this.getValueOrDefault(value.Username);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\nimport { CipherView } from '../models/view/cipherView';\n\nexport class SplashIdCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (value.length < 3) {\n return;\n }\n\n this.processFolder(result, this.getValueOrDefault(value[value.length - 1]));\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value[value.length - 2], '');\n cipher.name = this.getValueOrDefault(value[1], '--');\n\n if (value[0] === 'Web Logins' || value[0] === 'Servers' || value[0] === 'Email Accounts') {\n cipher.login.username = this.getValueOrDefault(value[2]);\n cipher.login.password = this.getValueOrDefault(value[3]);\n cipher.login.uris = this.makeUriArray(value[4]);\n this.parseFieldsToNotes(cipher, 5, value);\n } else {\n this.parseFieldsToNotes(cipher, 2, value);\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private parseFieldsToNotes(cipher: CipherView, startIndex: number, value: any) {\n // last 3 rows do not get parsed\n for (let i = startIndex; i < value.length - 3; i++) {\n if (this.isNullOrWhitespace(value[i])) {\n continue;\n }\n cipher.notes += (value[i] + '\\n');\n }\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class StickyPasswordXmlImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const doc = this.parseXml(data);\n if (doc == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const loginNodes = doc.querySelectorAll('root > Database > Logins > Login');\n Array.from(loginNodes).forEach(loginNode => {\n const accountId = loginNode.getAttribute('ID');\n if (this.isNullOrWhitespace(accountId)) {\n return;\n }\n\n const usernameText = loginNode.getAttribute('Name');\n const passwordText = loginNode.getAttribute('Password');\n let titleText: string = null;\n let linkText: string = null;\n let notesText: string = null;\n let groupId: string = null;\n let groupText: string = null;\n\n const accountLogin = doc.querySelector('root > Database > Accounts > Account > ' +\n 'LoginLinks > Login[SourceLoginID=\"' + accountId + '\"]');\n if (accountLogin != null) {\n const account = accountLogin.parentElement.parentElement;\n if (account != null) {\n titleText = account.getAttribute('Name');\n linkText = account.getAttribute('Link');\n groupId = account.getAttribute('ParentID');\n notesText = account.getAttribute('Comments');\n if (!this.isNullOrWhitespace(notesText)) {\n notesText = notesText.split('/n').join('\\n');\n }\n }\n }\n\n if (!this.isNullOrWhitespace(groupId)) {\n groupText = this.buildGroupText(doc, groupId, '');\n this.processFolder(result, groupText);\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(titleText, '--');\n cipher.notes = this.getValueOrDefault(notesText);\n cipher.login.username = this.getValueOrDefault(usernameText);\n cipher.login.password = this.getValueOrDefault(passwordText);\n cipher.login.uris = this.makeUriArray(linkText);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n buildGroupText(doc: Document, groupId: string, groupText: string): string {\n const group = doc.querySelector('root > Database > Groups > Group[ID=\"' + groupId + '\"]');\n if (group == null) {\n return groupText;\n }\n if (!this.isNullOrWhitespace(groupText)) {\n groupText = '/' + groupText;\n }\n groupText = group.getAttribute('Name') + groupText;\n return this.buildGroupText(doc, group.getAttribute('ParentID'), groupText);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nconst PropertiesToIgnore = ['kind', 'autologin', 'favorite', 'hexcolor', 'protectedwithpassword', 'subdomainonly',\n 'type', 'tk_export_version', 'note', 'title', 'document_content',\n];\n\nexport class TrueKeyCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n const cipher = this.initLoginCipher();\n cipher.favorite = this.getValueOrDefault(value.favorite, '').toLowerCase() === 'true';\n cipher.name = this.getValueOrDefault(value.name, '--');\n cipher.notes = this.getValueOrDefault(value.memo, '');\n cipher.login.username = this.getValueOrDefault(value.login);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.url);\n\n if (value.kind !== 'login') {\n cipher.name = this.getValueOrDefault(value.title, '--');\n cipher.notes = this.getValueOrDefault(value.note, '');\n }\n\n if (value.kind === 'cc') {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n cipher.card.cardholderName = this.getValueOrDefault(value.cardholder);\n cipher.card.number = this.getValueOrDefault(value.number);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n if (!this.isNullOrWhitespace(value.expiryDate)) {\n try {\n const expDate = new Date(value.expiryDate);\n cipher.card.expYear = expDate.getFullYear().toString();\n cipher.card.expMonth = (expDate.getMonth() + 1).toString();\n } catch { }\n }\n } else if (value.kind !== 'login') {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n if (!this.isNullOrWhitespace(cipher.notes)) {\n cipher.notes = this.getValueOrDefault(value.document_content, '');\n }\n for (const property in value) {\n if (value.hasOwnProperty(property) && PropertiesToIgnore.indexOf(property.toLowerCase()) < 0 &&\n !this.isNullOrWhitespace(value[property])) {\n this.processKvp(cipher, property, value[property]);\n }\n }\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class UpmCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (value.length !== 5) {\n return;\n }\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[0], '--');\n cipher.notes = this.getValueOrDefault(value[4]);\n cipher.login.username = this.getValueOrDefault(value[1]);\n cipher.login.password = this.getValueOrDefault(value[2]);\n cipher.login.uris = this.makeUriArray(value[3]);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class YotiCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.Name, '--');\n cipher.login.username = this.getValueOrDefault(value['User name']);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value.URL);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\nimport { CipherView } from '../models/view';\n\nexport class ZohoVaultCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach(value => {\n if (this.isNullOrWhitespace(value['Password Name']) && this.isNullOrWhitespace(value['Secret Name'])) {\n return;\n }\n this.processFolder(result, this.getValueOrDefault(value.ChamberName));\n const cipher = this.initLoginCipher();\n cipher.favorite = this.getValueOrDefault(value.Favorite, '0') === '1';\n cipher.notes = this.getValueOrDefault(value.Notes);\n cipher.name = this.getValueOrDefault(\n value['Password Name'], this.getValueOrDefault(value['Secret Name'], '--'));\n cipher.login.uris = this.makeUriArray(\n this.getValueOrDefault(value['Password URL'], this.getValueOrDefault(value['Secret URL'])));\n this.parseData(cipher, value.SecretData);\n this.parseData(cipher, value.CustomData);\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private parseData(cipher: CipherView, data: string) {\n if (this.isNullOrWhitespace(data)) {\n return;\n }\n const dataLines = this.splitNewLine(data);\n dataLines.forEach(line => {\n const delimPosition = line.indexOf(':');\n if (delimPosition < 0) {\n return;\n }\n const field = line.substring(0, delimPosition);\n const value = line.length > delimPosition ? line.substring(delimPosition + 1) : null;\n if (this.isNullOrWhitespace(field) || this.isNullOrWhitespace(value) || field === 'SecretType') {\n return;\n }\n const fieldLower = field.toLowerCase();\n if (cipher.login.username == null && this.usernameFieldNames.indexOf(fieldLower) > -1) {\n cipher.login.username = value;\n } else if (cipher.login.password == null && this.passwordFieldNames.indexOf(fieldLower) > -1) {\n cipher.login.password = value;\n } else {\n this.processKvp(cipher, field, value);\n }\n });\n }\n}\n","import * as signalR from '@microsoft/signalr';\nimport * as signalRMsgPack from '@microsoft/signalr-protocol-msgpack';\n\nimport { NotificationType } from '../enums/notificationType';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { AppIdService } from '../abstractions/appId.service';\nimport { EnvironmentService } from '../abstractions/environment.service';\nimport { LogService } from '../abstractions/log.service';\nimport { NotificationsService as NotificationsServiceAbstraction } from '../abstractions/notifications.service';\nimport { SyncService } from '../abstractions/sync.service';\nimport { UserService } from '../abstractions/user.service';\nimport { VaultTimeoutService } from '../abstractions/vaultTimeout.service';\n\nimport {\n NotificationResponse,\n SyncCipherNotification,\n SyncFolderNotification,\n SyncSendNotification,\n} from '../models/response/notificationResponse';\n\nexport class NotificationsService implements NotificationsServiceAbstraction {\n private signalrConnection: signalR.HubConnection;\n private url: string;\n private connected = false;\n private inited = false;\n private inactive = false;\n private reconnectTimer: any = null;\n\n constructor(private userService: UserService, private syncService: SyncService,\n private appIdService: AppIdService, private apiService: ApiService,\n private vaultTimeoutService: VaultTimeoutService,\n private logoutCallback: () => Promise, private logService: LogService) {\n }\n\n async init(environmentService: EnvironmentService): Promise {\n this.inited = false;\n this.url = 'https://notifications.bitwarden.com';\n if (environmentService.notificationsUrl != null) {\n this.url = environmentService.notificationsUrl;\n } else if (environmentService.baseUrl != null) {\n this.url = environmentService.baseUrl + '/notifications';\n }\n\n // Set notifications server URL to `https://-` to effectively disable communication\n // with the notifications server from the client app\n if (this.url === 'https://-') {\n return;\n }\n\n if (this.signalrConnection != null) {\n this.signalrConnection.off('ReceiveMessage');\n this.signalrConnection.off('Heartbeat');\n await this.signalrConnection.stop();\n this.connected = false;\n this.signalrConnection = null;\n }\n\n this.signalrConnection = new signalR.HubConnectionBuilder()\n .withUrl(this.url + '/hub', {\n accessTokenFactory: () => this.apiService.getActiveBearerToken(),\n skipNegotiation: true,\n transport: signalR.HttpTransportType.WebSockets,\n })\n .withHubProtocol(new signalRMsgPack.MessagePackHubProtocol() as signalR.IHubProtocol)\n // .configureLogging(signalR.LogLevel.Trace)\n .build();\n\n this.signalrConnection.on('ReceiveMessage',\n (data: any) => this.processNotification(new NotificationResponse(data)));\n this.signalrConnection.on('Heartbeat',\n (data: any) => { /*console.log('Heartbeat!');*/ });\n this.signalrConnection.onclose(() => {\n this.connected = false;\n this.reconnect(true);\n });\n this.inited = true;\n if (await this.isAuthedAndUnlocked()) {\n await this.reconnect(false);\n }\n }\n\n async updateConnection(sync = false): Promise {\n if (!this.inited) {\n return;\n }\n try {\n if (await this.isAuthedAndUnlocked()) {\n await this.reconnect(sync);\n } else {\n await this.signalrConnection.stop();\n }\n } catch (e) {\n this.logService.error(e.toString());\n }\n }\n\n async reconnectFromActivity(): Promise {\n this.inactive = false;\n if (this.inited && !this.connected) {\n await this.reconnect(true);\n }\n }\n\n async disconnectFromInactivity(): Promise {\n this.inactive = true;\n if (this.inited && this.connected) {\n await this.signalrConnection.stop();\n }\n }\n\n private async processNotification(notification: NotificationResponse) {\n const appId = await this.appIdService.getAppId();\n if (notification == null || notification.contextId === appId) {\n return;\n }\n\n const isAuthenticated = await this.userService.isAuthenticated();\n const payloadUserId = notification.payload.userId || notification.payload.UserId;\n const myUserId = await this.userService.getUserId();\n if (isAuthenticated && payloadUserId != null && payloadUserId !== myUserId) {\n return;\n }\n\n switch (notification.type) {\n case NotificationType.SyncCipherCreate:\n case NotificationType.SyncCipherUpdate:\n await this.syncService.syncUpsertCipher(notification.payload as SyncCipherNotification,\n notification.type === NotificationType.SyncCipherUpdate);\n break;\n case NotificationType.SyncCipherDelete:\n case NotificationType.SyncLoginDelete:\n await this.syncService.syncDeleteCipher(notification.payload as SyncCipherNotification);\n break;\n case NotificationType.SyncFolderCreate:\n case NotificationType.SyncFolderUpdate:\n await this.syncService.syncUpsertFolder(notification.payload as SyncFolderNotification,\n notification.type === NotificationType.SyncFolderUpdate);\n break;\n case NotificationType.SyncFolderDelete:\n await this.syncService.syncDeleteFolder(notification.payload as SyncFolderNotification);\n break;\n case NotificationType.SyncVault:\n case NotificationType.SyncCiphers:\n case NotificationType.SyncSettings:\n if (isAuthenticated) {\n await this.syncService.fullSync(false);\n }\n break;\n case NotificationType.SyncOrgKeys:\n if (isAuthenticated) {\n await this.apiService.refreshIdentityToken();\n await this.syncService.fullSync(true);\n // Stop so a reconnect can be made\n await this.signalrConnection.stop();\n }\n break;\n case NotificationType.LogOut:\n if (isAuthenticated) {\n this.logoutCallback();\n }\n break;\n case NotificationType.SyncSendCreate:\n case NotificationType.SyncSendUpdate:\n await this.syncService.syncUpsertSend(notification.payload as SyncSendNotification,\n notification.type === NotificationType.SyncSendUpdate);\n break;\n case NotificationType.SyncSendDelete:\n await this.syncService.syncDeleteSend(notification.payload as SyncSendNotification);\n default:\n break;\n }\n }\n\n private async reconnect(sync: boolean) {\n if (this.reconnectTimer != null) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n if (this.connected || !this.inited || this.inactive) {\n return;\n }\n const authedAndUnlocked = await this.isAuthedAndUnlocked();\n if (!authedAndUnlocked) {\n return;\n }\n\n try {\n await this.signalrConnection.start();\n this.connected = true;\n if (sync) {\n await this.syncService.fullSync(false);\n }\n } catch { }\n\n if (!this.connected) {\n this.reconnectTimer = setTimeout(() => this.reconnect(sync), this.random(120000, 300000));\n }\n }\n\n private async isAuthedAndUnlocked() {\n if (await this.userService.isAuthenticated()) {\n const locked = await this.vaultTimeoutService.isLocked();\n return !locked;\n }\n return false;\n }\n\n private random(min: number, max: number) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { NotificationType } from '../../enums/notificationType';\n\nexport class NotificationResponse extends BaseResponse {\n contextId: string;\n type: NotificationType;\n payload: any;\n\n constructor(response: any) {\n super(response);\n this.contextId = this.getResponseProperty('ContextId');\n this.type = this.getResponseProperty('Type');\n\n const payload = this.getResponseProperty('Payload');\n switch (this.type) {\n case NotificationType.SyncCipherCreate:\n case NotificationType.SyncCipherDelete:\n case NotificationType.SyncCipherUpdate:\n case NotificationType.SyncLoginDelete:\n this.payload = new SyncCipherNotification(payload);\n break;\n case NotificationType.SyncFolderCreate:\n case NotificationType.SyncFolderDelete:\n case NotificationType.SyncFolderUpdate:\n this.payload = new SyncFolderNotification(payload);\n break;\n case NotificationType.SyncVault:\n case NotificationType.SyncCiphers:\n case NotificationType.SyncOrgKeys:\n case NotificationType.SyncSettings:\n case NotificationType.LogOut:\n this.payload = new UserNotification(payload);\n break;\n case NotificationType.SyncSendCreate:\n case NotificationType.SyncSendUpdate:\n case NotificationType.SyncSendDelete:\n this.payload = new SyncSendNotification(payload);\n default:\n break;\n }\n }\n}\n\nexport class SyncCipherNotification extends BaseResponse {\n id: string;\n userId: string;\n organizationId: string;\n collectionIds: string[];\n revisionDate: Date;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.userId = this.getResponseProperty('UserId');\n this.organizationId = this.getResponseProperty('OrganizationId');\n this.collectionIds = this.getResponseProperty('CollectionIds');\n this.revisionDate = new Date(this.getResponseProperty('RevisionDate'));\n }\n}\n\nexport class SyncFolderNotification extends BaseResponse {\n id: string;\n userId: string;\n revisionDate: Date;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.userId = this.getResponseProperty('UserId');\n this.revisionDate = new Date(this.getResponseProperty('RevisionDate'));\n }\n}\n\nexport class UserNotification extends BaseResponse {\n userId: string;\n date: Date;\n\n constructor(response: any) {\n super(response);\n this.userId = this.getResponseProperty('UserId');\n this.date = new Date(this.getResponseProperty('Date'));\n }\n}\n\nexport class SyncSendNotification extends BaseResponse {\n id: string;\n userId: string;\n revisionDate: Date;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.userId = this.getResponseProperty('UserId');\n this.revisionDate = new Date(this.getResponseProperty('RevisionDate'));\n }\n}\n","import { PlatformUtilsService } from '../abstractions';\n\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport { PasswordRepromptService as PasswordRepromptServiceAbstraction } from '../abstractions/passwordReprompt.service';\n\nimport { HashPurpose } from '../enums/hashPurpose';\n\nexport class PasswordRepromptService implements PasswordRepromptServiceAbstraction {\n constructor(private i18nService: I18nService, private cryptoService: CryptoService,\n private platformUtilService: PlatformUtilsService) { }\n\n protectedFields() {\n return ['TOTP', 'Password', 'H_Field', 'Card Number', 'Security Code'];\n }\n\n async showPasswordPrompt() {\n const passwordValidator = (value: string) => {\n return this.cryptoService.compareAndUpdateKeyHash(value, null);\n };\n\n return this.platformUtilService.showPasswordDialog(this.i18nService.t('passwordConfirmation'), this.i18nService.t('passwordConfirmationDesc'), passwordValidator);\n }\n}\n","import { PolicyService as PolicyServiceAbstraction } from '../abstractions/policy.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\n\nimport { PolicyData } from '../models/data/policyData';\n\nimport { MasterPasswordPolicyOptions } from '../models/domain/masterPasswordPolicyOptions';\nimport { Policy } from '../models/domain/policy';\nimport { ResetPasswordPolicyOptions } from '../models/domain/resetPasswordPolicyOptions';\n\nimport { PolicyType } from '../enums/policyType';\n\nimport { ListResponse } from '../models/response/listResponse';\nimport { PolicyResponse } from '../models/response/policyResponse';\n\nconst Keys = {\n policiesPrefix: 'policies_',\n};\n\nexport class PolicyService implements PolicyServiceAbstraction {\n policyCache: Policy[];\n\n constructor(private userService: UserService, private storageService: StorageService) {\n }\n\n clearCache(): void {\n this.policyCache = null;\n }\n\n async getAll(type?: PolicyType): Promise {\n if (this.policyCache == null) {\n const userId = await this.userService.getUserId();\n const policies = await this.storageService.get<{ [id: string]: PolicyData; }>(\n Keys.policiesPrefix + userId);\n const response: Policy[] = [];\n for (const id in policies) {\n if (policies.hasOwnProperty(id)) {\n response.push(new Policy(policies[id]));\n }\n }\n this.policyCache = response;\n }\n if (type != null) {\n return this.policyCache.filter(p => p.type === type);\n } else {\n return this.policyCache;\n }\n }\n\n async replace(policies: { [id: string]: PolicyData; }): Promise {\n const userId = await this.userService.getUserId();\n await this.storageService.save(Keys.policiesPrefix + userId, policies);\n this.policyCache = null;\n }\n\n async clear(userId: string): Promise {\n await this.storageService.remove(Keys.policiesPrefix + userId);\n this.policyCache = null;\n }\n\n async getMasterPasswordPolicyOptions(policies?: Policy[]): Promise {\n let enforcedOptions: MasterPasswordPolicyOptions = null;\n\n if (policies == null) {\n policies = await this.getAll(PolicyType.MasterPassword);\n } else {\n policies = policies.filter(p => p.type === PolicyType.MasterPassword);\n }\n\n if (policies == null || policies.length === 0) {\n return enforcedOptions;\n }\n\n policies.forEach(currentPolicy => {\n if (!currentPolicy.enabled || currentPolicy.data == null) {\n return;\n }\n\n if (enforcedOptions == null) {\n enforcedOptions = new MasterPasswordPolicyOptions();\n }\n\n if (currentPolicy.data.minComplexity != null\n && currentPolicy.data.minComplexity > enforcedOptions.minComplexity) {\n enforcedOptions.minComplexity = currentPolicy.data.minComplexity;\n }\n\n if (currentPolicy.data.minLength != null\n && currentPolicy.data.minLength > enforcedOptions.minLength) {\n enforcedOptions.minLength = currentPolicy.data.minLength;\n }\n\n if (currentPolicy.data.requireUpper) {\n enforcedOptions.requireUpper = true;\n }\n\n if (currentPolicy.data.requireLower) {\n enforcedOptions.requireLower = true;\n }\n\n if (currentPolicy.data.requireNumbers) {\n enforcedOptions.requireNumbers = true;\n }\n\n if (currentPolicy.data.requireSpecial) {\n enforcedOptions.requireSpecial = true;\n }\n });\n\n return enforcedOptions;\n }\n\n evaluateMasterPassword(passwordStrength: number, newPassword: string,\n enforcedPolicyOptions: MasterPasswordPolicyOptions): boolean {\n if (enforcedPolicyOptions == null) {\n return true;\n }\n\n if (enforcedPolicyOptions.minComplexity > 0 && enforcedPolicyOptions.minComplexity > passwordStrength) {\n return false;\n }\n\n if (enforcedPolicyOptions.minLength > 0 && enforcedPolicyOptions.minLength > newPassword.length) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireUpper && newPassword.toLocaleLowerCase() === newPassword) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireLower && newPassword.toLocaleUpperCase() === newPassword) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireNumbers && !(/[0-9]/.test(newPassword))) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireSpecial && !(/[!@#$%\\^&*]/g.test(newPassword))) {\n return false;\n }\n\n return true;\n }\n\n getResetPasswordPolicyOptions(policies: Policy[], orgId: string): [ResetPasswordPolicyOptions, boolean] {\n const resetPasswordPolicyOptions = new ResetPasswordPolicyOptions();\n\n if (policies == null || orgId == null) {\n return [resetPasswordPolicyOptions, false];\n }\n\n const policy = policies.find(p => p.organizationId === orgId && p.type === PolicyType.ResetPassword && p.enabled);\n resetPasswordPolicyOptions.autoEnrollEnabled = policy?.data?.autoEnrollEnabled ?? false;\n\n return [resetPasswordPolicyOptions, policy?.enabled ?? false];\n }\n\n mapPoliciesFromToken(policiesResponse: ListResponse): Policy[] {\n if (policiesResponse == null || policiesResponse.data == null) {\n return null;\n }\n\n const policiesData = policiesResponse.data.map(p => new PolicyData(p));\n return policiesData.map(p => new Policy(p));\n }\n}\n","import Domain from './domainBase';\n\nexport class MasterPasswordPolicyOptions extends Domain {\n minComplexity: number = 0;\n minLength: number = 0;\n requireUpper: boolean = false;\n requireLower: boolean = false;\n requireNumbers: boolean = false;\n requireSpecial: boolean = false;\n}\n","import Domain from './domainBase';\n\nexport class ResetPasswordPolicyOptions extends Domain {\n autoEnrollEnabled: boolean = false;\n}\n","import * as lunr from 'lunr';\n\nimport { CipherView } from '../models/view/cipherView';\n\nimport { CipherService } from '../abstractions/cipher.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport { LogService } from '../abstractions/log.service';\nimport { SearchService as SearchServiceAbstraction } from '../abstractions/search.service';\n\nimport { CipherType } from '../enums/cipherType';\nimport { FieldType } from '../enums/fieldType';\nimport { UriMatchType } from '../enums/uriMatchType';\nimport { SendView } from '../models/view/sendView';\n\nexport class SearchService implements SearchServiceAbstraction {\n indexedEntityId?: string = null;\n private indexing = false;\n private index: lunr.Index = null;\n private searchableMinLength = 2;\n\n constructor(private cipherService: CipherService, private logService: LogService,\n private i18nService: I18nService) {\n if (['zh-CN', 'zh-TW'].indexOf(i18nService.locale) !== -1) {\n this.searchableMinLength = 1;\n }\n }\n\n clearIndex(): void {\n this.indexedEntityId = null;\n this.index = null;\n }\n\n isSearchable(query: string): boolean {\n const notSearchable = query == null || (this.index == null && query.length < this.searchableMinLength) ||\n (this.index != null && query.length < this.searchableMinLength && query.indexOf('>') !== 0);\n return !notSearchable;\n }\n\n async indexCiphers(indexedEntityId?: string, ciphers?: CipherView[]): Promise {\n if (this.indexing) {\n return;\n }\n\n this.logService.time('search indexing');\n this.indexing = true;\n this.indexedEntityId = indexedEntityId;\n this.index = null;\n const builder = new lunr.Builder();\n builder.ref('id');\n builder.field('shortid', { boost: 100, extractor: (c: CipherView) => c.id.substr(0, 8) });\n builder.field('name', { boost: 10 });\n builder.field('subtitle', {\n boost: 5,\n extractor: (c: CipherView) => {\n if (c.subTitle != null && c.type === CipherType.Card) {\n return c.subTitle.replace(/\\*/g, '');\n }\n return c.subTitle;\n },\n });\n builder.field('notes');\n builder.field('login.username', {\n extractor: (c: CipherView) => c.type === CipherType.Login && c.login != null ? c.login.username : null,\n });\n builder.field('login.uris', { boost: 2, extractor: (c: CipherView) => this.uriExtractor(c) });\n builder.field('fields', { extractor: (c: CipherView) => this.fieldExtractor(c, false) });\n builder.field('fields_joined', { extractor: (c: CipherView) => this.fieldExtractor(c, true) });\n builder.field('attachments', { extractor: (c: CipherView) => this.attachmentExtractor(c, false) });\n builder.field('attachments_joined',\n { extractor: (c: CipherView) => this.attachmentExtractor(c, true) });\n builder.field('organizationid', { extractor: (c: CipherView) => c.organizationId });\n ciphers = ciphers || await this.cipherService.getAllDecrypted();\n ciphers.forEach(c => builder.add(c));\n this.index = builder.build();\n\n this.indexing = false;\n\n this.logService.timeEnd('search indexing');\n }\n\n async searchCiphers(query: string,\n filter: (((cipher: CipherView) => boolean) | (((cipher: CipherView) => boolean)[])) = null,\n ciphers: CipherView[] = null):\n Promise {\n const results: CipherView[] = [];\n if (query != null) {\n query = query.trim().toLowerCase();\n }\n if (query === '') {\n query = null;\n }\n\n if (ciphers == null) {\n ciphers = await this.cipherService.getAllDecrypted();\n }\n\n if (filter != null && Array.isArray(filter) && filter.length > 0) {\n ciphers = ciphers.filter(c => filter.every(f => f == null || f(c)));\n } else if (filter != null) {\n ciphers = ciphers.filter(filter as (cipher: CipherView) => boolean);\n }\n\n if (!this.isSearchable(query)) {\n return ciphers;\n }\n\n if (this.indexing) {\n await new Promise(r => setTimeout(r, 250));\n if (this.indexing) {\n await new Promise(r => setTimeout(r, 500));\n }\n }\n\n const index = this.getIndexForSearch();\n if (index == null) {\n // Fall back to basic search if index is not available\n return this.searchCiphersBasic(ciphers, query);\n }\n\n const ciphersMap = new Map();\n ciphers.forEach(c => ciphersMap.set(c.id, c));\n\n let searchResults: lunr.Index.Result[] = null;\n const isQueryString = query != null && query.length > 1 && query.indexOf('>') === 0;\n if (isQueryString) {\n try {\n searchResults = index.search(query.substr(1).trim());\n } catch { }\n } else {\n // tslint:disable-next-line\n const soWild = lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING;\n searchResults = index.query(q => {\n lunr.tokenizer(query).forEach(token => {\n const t = token.toString();\n q.term(t, { fields: ['name'], wildcard: soWild });\n q.term(t, { fields: ['subtitle'], wildcard: soWild });\n q.term(t, { fields: ['login.uris'], wildcard: soWild });\n q.term(t, {});\n });\n });\n }\n\n if (searchResults != null) {\n searchResults.forEach(r => {\n if (ciphersMap.has(r.ref)) {\n results.push(ciphersMap.get(r.ref));\n }\n });\n }\n return results;\n }\n\n searchCiphersBasic(ciphers: CipherView[], query: string, deleted: boolean = false) {\n query = query.trim().toLowerCase();\n return ciphers.filter(c => {\n if (deleted !== c.isDeleted) {\n return false;\n }\n if (c.name != null && c.name.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n if (query.length >= 8 && c.id.startsWith(query)) {\n return true;\n }\n if (c.subTitle != null && c.subTitle.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n if (c.login && c.login.uri != null && c.login.uri.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n return false;\n });\n }\n\n searchSends(sends: SendView[], query: string) {\n query = query.trim().toLocaleLowerCase();\n\n return sends.filter(s => {\n if (s.name != null && s.name.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n if (query.length >= 8 && (s.id.startsWith(query) || s.accessId.toLocaleLowerCase().startsWith(query) || (s.file?.id != null && s.file.id.startsWith(query)))) {\n return true;\n }\n if (s.notes != null && s.notes.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n if (s.text?.text != null && s.text.text.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n if (s.file?.fileName != null && s.file.fileName.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n });\n }\n\n getIndexForSearch(): lunr.Index {\n return this.index;\n }\n\n private fieldExtractor(c: CipherView, joined: boolean) {\n if (!c.hasFields) {\n return null;\n }\n let fields: string[] = [];\n c.fields.forEach(f => {\n if (f.name != null) {\n fields.push(f.name);\n }\n if (f.type === FieldType.Text && f.value != null) {\n fields.push(f.value);\n }\n });\n fields = fields.filter(f => f.trim() !== '');\n if (fields.length === 0) {\n return null;\n }\n return joined ? fields.join(' ') : fields;\n }\n\n private attachmentExtractor(c: CipherView, joined: boolean) {\n if (!c.hasAttachments) {\n return null;\n }\n let attachments: string[] = [];\n c.attachments.forEach(a => {\n if (a != null && a.fileName != null) {\n if (joined && a.fileName.indexOf('.') > -1) {\n attachments.push(a.fileName.substr(0, a.fileName.lastIndexOf('.')));\n } else {\n attachments.push(a.fileName);\n }\n }\n });\n attachments = attachments.filter(f => f.trim() !== '');\n if (attachments.length === 0) {\n return null;\n }\n return joined ? attachments.join(' ') : attachments;\n }\n\n private uriExtractor(c: CipherView) {\n if (c.type !== CipherType.Login || c.login == null || !c.login.hasUris) {\n return null;\n }\n const uris: string[] = [];\n c.login.uris.forEach(u => {\n if (u.uri == null || u.uri === '') {\n return;\n }\n if (u.hostname != null) {\n uris.push(u.hostname);\n return;\n }\n let uri = u.uri;\n if (u.match !== UriMatchType.RegularExpression) {\n const protocolIndex = uri.indexOf('://');\n if (protocolIndex > -1) {\n uri = uri.substr(protocolIndex + 3);\n }\n const queryIndex = uri.search(/\\?|&|#/);\n if (queryIndex > -1) {\n uri = uri.substring(0, queryIndex);\n }\n }\n uris.push(uri);\n });\n return uris.length > 0 ? uris : null;\n }\n}\n","import { SendData } from '../models/data/sendData';\n\nimport { SendRequest } from '../models/request/sendRequest';\n\nimport { ErrorResponse } from '../models/response/errorResponse';\nimport { SendResponse } from '../models/response/sendResponse';\n\nimport { EncArrayBuffer } from '../models/domain/encArrayBuffer';\nimport { EncString } from '../models/domain/encString';\nimport { Send } from '../models/domain/send';\nimport { SendFile } from '../models/domain/sendFile';\nimport { SendText } from '../models/domain/sendText';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nimport { FileUploadType } from '../enums/fileUploadType';\nimport { SendType } from '../enums/sendType';\n\nimport { SendView } from '../models/view/sendView';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { CryptoFunctionService } from '../abstractions/cryptoFunction.service';\nimport { FileUploadService } from '../abstractions/fileUpload.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport { SendService as SendServiceAbstraction } from '../abstractions/send.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\n\nimport { Utils } from '../misc/utils';\n\nconst Keys = {\n sendsPrefix: 'sends_',\n};\n\nexport class SendService implements SendServiceAbstraction {\n decryptedSendCache: SendView[];\n\n constructor(private cryptoService: CryptoService, private userService: UserService,\n private apiService: ApiService, private fileUploadService: FileUploadService,\n private storageService: StorageService, private i18nService: I18nService,\n private cryptoFunctionService: CryptoFunctionService) { }\n\n clearCache(): void {\n this.decryptedSendCache = null;\n }\n\n async encrypt(model: SendView, file: File | ArrayBuffer, password: string,\n key?: SymmetricCryptoKey): Promise<[Send, EncArrayBuffer]> {\n let fileData: EncArrayBuffer = null;\n const send = new Send();\n send.id = model.id;\n send.type = model.type;\n send.disabled = model.disabled;\n send.hideEmail = model.hideEmail;\n send.maxAccessCount = model.maxAccessCount;\n if (model.key == null) {\n model.key = await this.cryptoFunctionService.randomBytes(16);\n model.cryptoKey = await this.cryptoService.makeSendKey(model.key);\n }\n if (password != null) {\n const passwordHash = await this.cryptoFunctionService.pbkdf2(password, model.key, 'sha256', 100000);\n send.password = Utils.fromBufferToB64(passwordHash);\n }\n send.key = await this.cryptoService.encrypt(model.key, key);\n send.name = await this.cryptoService.encrypt(model.name, model.cryptoKey);\n send.notes = await this.cryptoService.encrypt(model.notes, model.cryptoKey);\n if (send.type === SendType.Text) {\n send.text = new SendText();\n send.text.text = await this.cryptoService.encrypt(model.text.text, model.cryptoKey);\n send.text.hidden = model.text.hidden;\n } else if (send.type === SendType.File) {\n send.file = new SendFile();\n if (file != null) {\n if (file instanceof ArrayBuffer) {\n const [name, data] = await this.encryptFileData(model.file.fileName, file, model.cryptoKey);\n send.file.fileName = name;\n fileData = data;\n } else {\n fileData = await this.parseFile(send, file, model.cryptoKey);\n }\n }\n }\n\n return [send, fileData];\n }\n\n async get(id: string): Promise {\n const userId = await this.userService.getUserId();\n const sends = await this.storageService.get<{ [id: string]: SendData; }>(\n Keys.sendsPrefix + userId);\n if (sends == null || !sends.hasOwnProperty(id)) {\n return null;\n }\n\n return new Send(sends[id]);\n }\n\n async getAll(): Promise {\n const userId = await this.userService.getUserId();\n const sends = await this.storageService.get<{ [id: string]: SendData; }>(\n Keys.sendsPrefix + userId);\n const response: Send[] = [];\n for (const id in sends) {\n if (sends.hasOwnProperty(id)) {\n response.push(new Send(sends[id]));\n }\n }\n return response;\n }\n\n async getAllDecrypted(): Promise {\n if (this.decryptedSendCache != null) {\n return this.decryptedSendCache;\n }\n\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error('No key.');\n }\n\n const decSends: SendView[] = [];\n const promises: Promise[] = [];\n const sends = await this.getAll();\n sends.forEach(send => {\n promises.push(send.decrypt().then(f => decSends.push(f)));\n });\n\n await Promise.all(promises);\n decSends.sort(Utils.getSortFunction(this.i18nService, 'name'));\n\n this.decryptedSendCache = decSends;\n return this.decryptedSendCache;\n }\n\n async saveWithServer(sendData: [Send, EncArrayBuffer]): Promise {\n const request = new SendRequest(sendData[0], sendData[1]?.buffer.byteLength);\n let response: SendResponse;\n if (sendData[0].id == null) {\n if (sendData[0].type === SendType.Text) {\n response = await this.apiService.postSend(request);\n } else {\n try {\n const uploadDataResponse = await this.apiService.postFileTypeSend(request);\n response = uploadDataResponse.sendResponse;\n\n await this.fileUploadService.uploadSendFile(uploadDataResponse, sendData[0].file.fileName, sendData[1]);\n } catch (e) {\n if (e instanceof ErrorResponse && (e as ErrorResponse).statusCode === 404) {\n response = await this.legacyServerSendFileUpload(sendData, request);\n } else if (e instanceof ErrorResponse) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n } else {\n throw e;\n }\n }\n }\n sendData[0].id = response.id;\n sendData[0].accessId = response.accessId;\n } else {\n response = await this.apiService.putSend(sendData[0].id, request);\n }\n\n const userId = await this.userService.getUserId();\n const data = new SendData(response, userId);\n await this.upsert(data);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async legacyServerSendFileUpload(sendData: [Send, EncArrayBuffer], request: SendRequest): Promise\n {\n const fd = new FormData();\n try {\n const blob = new Blob([sendData[1].buffer], { type: 'application/octet-stream' });\n fd.append('model', JSON.stringify(request));\n fd.append('data', blob, sendData[0].file.fileName.encryptedString);\n } catch (e) {\n if (Utils.isNode && !Utils.isBrowser) {\n fd.append('model', JSON.stringify(request));\n fd.append('data', Buffer.from(sendData[1].buffer) as any, {\n filepath: sendData[0].file.fileName.encryptedString,\n contentType: 'application/octet-stream',\n } as any);\n } else {\n throw e;\n }\n }\n return await this.apiService.postSendFileLegacy(fd);\n }\n\n async upsert(send: SendData | SendData[]): Promise {\n const userId = await this.userService.getUserId();\n let sends = await this.storageService.get<{ [id: string]: SendData; }>(\n Keys.sendsPrefix + userId);\n if (sends == null) {\n sends = {};\n }\n\n if (send instanceof SendData) {\n const s = send as SendData;\n sends[s.id] = s;\n } else {\n (send as SendData[]).forEach(s => {\n sends[s.id] = s;\n });\n }\n\n await this.storageService.save(Keys.sendsPrefix + userId, sends);\n this.decryptedSendCache = null;\n }\n\n async replace(sends: { [id: string]: SendData; }): Promise {\n const userId = await this.userService.getUserId();\n await this.storageService.save(Keys.sendsPrefix + userId, sends);\n this.decryptedSendCache = null;\n }\n\n async clear(userId: string): Promise {\n await this.storageService.remove(Keys.sendsPrefix + userId);\n this.decryptedSendCache = null;\n }\n\n async delete(id: string | string[]): Promise {\n const userId = await this.userService.getUserId();\n const sends = await this.storageService.get<{ [id: string]: SendData; }>(\n Keys.sendsPrefix + userId);\n if (sends == null) {\n return;\n }\n\n if (typeof id === 'string') {\n if (sends[id] == null) {\n return;\n }\n delete sends[id];\n } else {\n (id as string[]).forEach(i => {\n delete sends[i];\n });\n }\n\n await this.storageService.save(Keys.sendsPrefix + userId, sends);\n this.decryptedSendCache = null;\n }\n\n async deleteWithServer(id: string): Promise {\n await this.apiService.deleteSend(id);\n await this.delete(id);\n }\n\n async removePasswordWithServer(id: string): Promise {\n const response = await this.apiService.putSendRemovePassword(id);\n const userId = await this.userService.getUserId();\n const data = new SendData(response, userId);\n await this.upsert(data);\n }\n\n private parseFile(send: Send, file: File, key: SymmetricCryptoKey): Promise {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsArrayBuffer(file);\n reader.onload = async evt => {\n try {\n const [name, data] = await this.encryptFileData(file.name, evt.target.result as ArrayBuffer, key);\n send.file.fileName = name;\n resolve(data);\n } catch (e) {\n reject(e);\n }\n };\n reader.onerror = evt => {\n reject('Error reading file.');\n };\n });\n }\n\n private async encryptFileData(fileName: string, data: ArrayBuffer,\n key: SymmetricCryptoKey): Promise<[EncString, EncArrayBuffer]> {\n const encFileName = await this.cryptoService.encrypt(fileName, key);\n const encFileData = await this.cryptoService.encryptToBytes(data, key);\n return [encFileName, encFileData];\n }\n}\n","import { SendType } from '../../enums/sendType';\n\nimport { SendFileApi } from '../api/sendFileApi';\nimport { SendTextApi } from '../api/sendTextApi';\n\nimport { Send } from '../domain/send';\n\nexport class SendRequest {\n type: SendType;\n fileLength?: number;\n name: string;\n notes: string;\n key: string;\n maxAccessCount?: number;\n expirationDate: string;\n deletionDate: string;\n text: SendTextApi;\n file: SendFileApi;\n password: string;\n disabled: boolean;\n hideEmail: boolean;\n\n constructor(send: Send, fileLength?: number) {\n this.type = send.type;\n this.fileLength = fileLength;\n this.name = send.name ? send.name.encryptedString : null;\n this.notes = send.notes ? send.notes.encryptedString : null;\n this.maxAccessCount = send.maxAccessCount;\n this.expirationDate = send.expirationDate != null ? send.expirationDate.toISOString() : null;\n this.deletionDate = send.deletionDate != null ? send.deletionDate.toISOString() : null;\n this.key = send.key != null ? send.key.encryptedString : null;\n this.password = send.password;\n this.disabled = send.disabled;\n this.hideEmail = send.hideEmail;\n\n switch (this.type) {\n case SendType.Text:\n this.text = new SendTextApi();\n this.text.text = send.text.text != null ? send.text.text.encryptedString : null;\n this.text.hidden = send.text.hidden;\n break;\n case SendType.File:\n this.file = new SendFileApi();\n this.file.fileName = send.file.fileName != null ? send.file.fileName.encryptedString : null;\n break;\n default:\n break;\n }\n }\n}\n","import { CryptoService } from '../../abstractions/crypto.service';\n\nimport { SendType } from '../../enums/sendType';\n\nimport { Utils } from '../../misc/utils';\n\nimport { SendData } from '../data/sendData';\n\nimport { SendView } from '../view/sendView';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\nimport { SendFile } from './sendFile';\nimport { SendText } from './sendText';\n\nexport class Send extends Domain {\n id: string;\n accessId: string;\n userId: string;\n type: SendType;\n name: EncString;\n notes: EncString;\n file: SendFile;\n text: SendText;\n key: EncString;\n maxAccessCount?: number;\n accessCount: number;\n revisionDate: Date;\n expirationDate: Date;\n deletionDate: Date;\n password: string;\n disabled: boolean;\n hideEmail: boolean;\n\n constructor(obj?: SendData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(this, obj, {\n id: null,\n accessId: null,\n userId: null,\n name: null,\n notes: null,\n key: null,\n }, alreadyEncrypted, ['id', 'accessId', 'userId']);\n\n this.type = obj.type;\n this.maxAccessCount = obj.maxAccessCount;\n this.accessCount = obj.accessCount;\n this.password = obj.password;\n this.disabled = obj.disabled;\n this.revisionDate = obj.revisionDate != null ? new Date(obj.revisionDate) : null;\n this.deletionDate = obj.deletionDate != null ? new Date(obj.deletionDate) : null;\n this.expirationDate = obj.expirationDate != null ? new Date(obj.expirationDate) : null;\n this.hideEmail = obj.hideEmail;\n\n switch (this.type) {\n case SendType.Text:\n this.text = new SendText(obj.text, alreadyEncrypted);\n break;\n case SendType.File:\n this.file = new SendFile(obj.file, alreadyEncrypted);\n break;\n default:\n break;\n }\n }\n\n async decrypt(): Promise {\n const model = new SendView(this);\n\n let cryptoService: CryptoService;\n const containerService = (Utils.global as any).bitwardenContainerService;\n if (containerService) {\n cryptoService = containerService.getCryptoService();\n } else {\n throw new Error('global bitwardenContainerService not initialized.');\n }\n\n try {\n model.key = await cryptoService.decryptToBytes(this.key, null);\n model.cryptoKey = await cryptoService.makeSendKey(model.key);\n } catch (e) {\n // TODO: error?\n }\n\n await this.decryptObj(model, {\n name: null,\n notes: null,\n }, null, model.cryptoKey);\n\n switch (this.type) {\n case SendType.File:\n model.file = await this.file.decrypt(model.cryptoKey);\n break;\n case SendType.Text:\n model.text = await this.text.decrypt(model.cryptoKey);\n break;\n default:\n break;\n }\n\n return model;\n }\n}\n","import * as forge from 'node-forge';\n\nimport { CryptoFunctionService } from '../abstractions/cryptoFunction.service';\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\n\nimport { Utils } from '../misc/utils';\n\nimport { DecryptParameters } from '../models/domain/decryptParameters';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nexport class WebCryptoFunctionService implements CryptoFunctionService {\n private crypto: Crypto;\n private subtle: SubtleCrypto;\n private isIE: boolean;\n private isOldSafari: boolean;\n\n constructor(private win: Window, private platformUtilsService: PlatformUtilsService) {\n this.crypto = typeof win.crypto !== 'undefined' ? win.crypto : null;\n this.subtle = (!!this.crypto && typeof win.crypto.subtle !== 'undefined') ? win.crypto.subtle : null;\n this.isIE = platformUtilsService.isIE();\n const ua = win.navigator.userAgent;\n this.isOldSafari = platformUtilsService.isSafari() &&\n (ua.indexOf(' Version/10.') > -1 || ua.indexOf(' Version/9.') > -1);\n }\n\n async pbkdf2(password: string | ArrayBuffer, salt: string | ArrayBuffer, algorithm: 'sha256' | 'sha512',\n iterations: number): Promise {\n if (this.isIE || this.isOldSafari) {\n const forgeLen = algorithm === 'sha256' ? 32 : 64;\n const passwordBytes = this.toByteString(password);\n const saltBytes = this.toByteString(salt);\n const derivedKeyBytes = (forge as any).pbkdf2(passwordBytes, saltBytes, iterations, forgeLen, algorithm);\n return Utils.fromByteStringToArray(derivedKeyBytes).buffer;\n }\n\n const wcLen = algorithm === 'sha256' ? 256 : 512;\n const passwordBuf = this.toBuf(password);\n const saltBuf = this.toBuf(salt);\n\n const pbkdf2Params: Pbkdf2Params = {\n name: 'PBKDF2',\n salt: saltBuf,\n iterations: iterations,\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n\n const impKey = await this.subtle.importKey('raw', passwordBuf, { name: 'PBKDF2' } as any,\n false, ['deriveBits']);\n return await this.subtle.deriveBits(pbkdf2Params, impKey, wcLen);\n }\n\n async hkdf(ikm: ArrayBuffer, salt: string | ArrayBuffer, info: string | ArrayBuffer,\n outputByteSize: number, algorithm: 'sha256' | 'sha512'): Promise {\n const saltBuf = this.toBuf(salt);\n const infoBuf = this.toBuf(info);\n\n const hkdfParams: HkdfParams = {\n name: 'HKDF',\n salt: saltBuf,\n info: infoBuf,\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n\n const impKey = await this.subtle.importKey('raw', ikm, { name: 'HKDF' } as any,\n false, ['deriveBits']);\n return await this.subtle.deriveBits(hkdfParams as any, impKey, outputByteSize * 8);\n }\n\n // ref: https://tools.ietf.org/html/rfc5869\n async hkdfExpand(prk: ArrayBuffer, info: string | ArrayBuffer, outputByteSize: number,\n algorithm: 'sha256' | 'sha512'): Promise {\n const hashLen = algorithm === 'sha256' ? 32 : 64;\n if (outputByteSize > 255 * hashLen) {\n throw new Error('outputByteSize is too large.');\n }\n const prkArr = new Uint8Array(prk);\n if (prkArr.length < hashLen) {\n throw new Error('prk is too small.');\n }\n const infoBuf = this.toBuf(info);\n const infoArr = new Uint8Array(infoBuf);\n let runningOkmLength = 0;\n let previousT = new Uint8Array(0);\n const n = Math.ceil(outputByteSize / hashLen);\n const okm = new Uint8Array(n * hashLen);\n for (let i = 0; i < n; i++) {\n const t = new Uint8Array(previousT.length + infoArr.length + 1);\n t.set(previousT);\n t.set(infoArr, previousT.length);\n t.set([i + 1], t.length - 1);\n previousT = new Uint8Array(await this.hmac(t.buffer, prk, algorithm));\n okm.set(previousT, runningOkmLength);\n runningOkmLength += previousT.length;\n if (runningOkmLength >= outputByteSize) {\n break;\n }\n }\n return okm.slice(0, outputByteSize).buffer;\n }\n\n async hash(value: string | ArrayBuffer, algorithm: 'sha1' | 'sha256' | 'sha512' | 'md5'): Promise {\n if ((this.isIE && algorithm === 'sha1') || algorithm === 'md5') {\n const md = algorithm === 'md5' ? forge.md.md5.create() : forge.md.sha1.create();\n const valueBytes = this.toByteString(value);\n md.update(valueBytes, 'raw');\n return Utils.fromByteStringToArray(md.digest().data).buffer;\n }\n\n const valueBuf = this.toBuf(value);\n return await this.subtle.digest({ name: this.toWebCryptoAlgorithm(algorithm) }, valueBuf);\n }\n\n async hmac(value: ArrayBuffer, key: ArrayBuffer, algorithm: 'sha1' | 'sha256' | 'sha512'): Promise {\n if (this.isIE && algorithm === 'sha512') {\n const hmac = (forge as any).hmac.create();\n const keyBytes = this.toByteString(key);\n const valueBytes = this.toByteString(value);\n hmac.start(algorithm, keyBytes);\n hmac.update(valueBytes, 'raw');\n return Utils.fromByteStringToArray(hmac.digest().data).buffer;\n }\n\n const signingAlgorithm = {\n name: 'HMAC',\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n\n const impKey = await this.subtle.importKey('raw', key, signingAlgorithm, false, ['sign']);\n return await this.subtle.sign(signingAlgorithm, impKey, value);\n }\n\n // Safely compare two values in a way that protects against timing attacks (Double HMAC Verification).\n // ref: https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2011/february/double-hmac-verification/\n // ref: https://paragonie.com/blog/2015/11/preventing-timing-attacks-on-string-comparison-with-double-hmac-strategy\n async compare(a: ArrayBuffer, b: ArrayBuffer): Promise {\n const macKey = await this.randomBytes(32);\n const signingAlgorithm = {\n name: 'HMAC',\n hash: { name: 'SHA-256' },\n };\n const impKey = await this.subtle.importKey('raw', macKey, signingAlgorithm, false, ['sign']);\n const mac1 = await this.subtle.sign(signingAlgorithm, impKey, a);\n const mac2 = await this.subtle.sign(signingAlgorithm, impKey, b);\n\n if (mac1.byteLength !== mac2.byteLength) {\n return false;\n }\n\n const arr1 = new Uint8Array(mac1);\n const arr2 = new Uint8Array(mac2);\n for (let i = 0; i < arr2.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n hmacFast(value: string, key: string, algorithm: 'sha1' | 'sha256' | 'sha512'): Promise {\n const hmac = (forge as any).hmac.create();\n hmac.start(algorithm, key);\n hmac.update(value);\n const bytes = hmac.digest().getBytes();\n return Promise.resolve(bytes);\n }\n\n async compareFast(a: string, b: string): Promise {\n const rand = await this.randomBytes(32);\n const bytes = new Uint32Array(rand);\n const buffer = forge.util.createBuffer();\n for (let i = 0; i < bytes.length; i++) {\n buffer.putInt32(bytes[i]);\n }\n const macKey = buffer.getBytes();\n\n const hmac = (forge as any).hmac.create();\n hmac.start('sha256', macKey);\n hmac.update(a);\n const mac1 = hmac.digest().getBytes();\n\n hmac.start(null, null);\n hmac.update(b);\n const mac2 = hmac.digest().getBytes();\n\n const equals = mac1 === mac2;\n return equals;\n }\n\n async aesEncrypt(data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer): Promise {\n const impKey = await this.subtle.importKey('raw', key, { name: 'AES-CBC' } as any, false, ['encrypt']);\n return await this.subtle.encrypt({ name: 'AES-CBC', iv: iv }, impKey, data);\n }\n\n aesDecryptFastParameters(data: string, iv: string, mac: string, key: SymmetricCryptoKey):\n DecryptParameters {\n const p = new DecryptParameters();\n if (key.meta != null) {\n p.encKey = key.meta.encKeyByteString;\n p.macKey = key.meta.macKeyByteString;\n }\n\n if (p.encKey == null) {\n p.encKey = forge.util.decode64(key.encKeyB64);\n }\n p.data = forge.util.decode64(data);\n p.iv = forge.util.decode64(iv);\n p.macData = p.iv + p.data;\n if (p.macKey == null && key.macKeyB64 != null) {\n p.macKey = forge.util.decode64(key.macKeyB64);\n }\n if (mac != null) {\n p.mac = forge.util.decode64(mac);\n }\n\n // cache byte string keys for later\n if (key.meta == null) {\n key.meta = {};\n }\n if (key.meta.encKeyByteString == null) {\n key.meta.encKeyByteString = p.encKey;\n }\n if (p.macKey != null && key.meta.macKeyByteString == null) {\n key.meta.macKeyByteString = p.macKey;\n }\n\n return p;\n }\n\n aesDecryptFast(parameters: DecryptParameters): Promise {\n const dataBuffer = (forge as any).util.createBuffer(parameters.data);\n const decipher = (forge as any).cipher.createDecipher('AES-CBC', parameters.encKey);\n decipher.start({ iv: parameters.iv });\n decipher.update(dataBuffer);\n decipher.finish();\n const val = decipher.output.toString('utf8');\n return Promise.resolve(val);\n }\n\n async aesDecrypt(data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer): Promise {\n const impKey = await this.subtle.importKey('raw', key, { name: 'AES-CBC' } as any, false, ['decrypt']);\n return await this.subtle.decrypt({ name: 'AES-CBC', iv: iv }, impKey, data);\n }\n\n async rsaEncrypt(data: ArrayBuffer, publicKey: ArrayBuffer, algorithm: 'sha1' | 'sha256'): Promise {\n // Note: Edge browser requires that we specify name and hash for both key import and decrypt.\n // We cannot use the proper types here.\n const rsaParams = {\n name: 'RSA-OAEP',\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n const impKey = await this.subtle.importKey('spki', publicKey, rsaParams, false, ['encrypt']);\n return await this.subtle.encrypt(rsaParams, impKey, data);\n }\n\n async rsaDecrypt(data: ArrayBuffer, privateKey: ArrayBuffer, algorithm: 'sha1' | 'sha256'): Promise {\n // Note: Edge browser requires that we specify name and hash for both key import and decrypt.\n // We cannot use the proper types here.\n const rsaParams = {\n name: 'RSA-OAEP',\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n const impKey = await this.subtle.importKey('pkcs8', privateKey, rsaParams, false, ['decrypt']);\n return await this.subtle.decrypt(rsaParams, impKey, data);\n }\n\n async rsaExtractPublicKey(privateKey: ArrayBuffer): Promise {\n const rsaParams = {\n name: 'RSA-OAEP',\n // Have to specify some algorithm\n hash: { name: this.toWebCryptoAlgorithm('sha1') },\n };\n const impPrivateKey = await this.subtle.importKey('pkcs8', privateKey, rsaParams, true, ['decrypt']);\n const jwkPrivateKey = await this.subtle.exportKey('jwk', impPrivateKey);\n const jwkPublicKeyParams = {\n kty: 'RSA',\n e: jwkPrivateKey.e,\n n: jwkPrivateKey.n,\n alg: 'RSA-OAEP',\n ext: true,\n };\n const impPublicKey = await this.subtle.importKey('jwk', jwkPublicKeyParams, rsaParams, true, ['encrypt']);\n return await this.subtle.exportKey('spki', impPublicKey);\n }\n\n async rsaGenerateKeyPair(length: 1024 | 2048 | 4096): Promise<[ArrayBuffer, ArrayBuffer]> {\n const rsaParams = {\n name: 'RSA-OAEP',\n modulusLength: length,\n publicExponent: new Uint8Array([0x01, 0x00, 0x01]), // 65537\n // Have to specify some algorithm\n hash: { name: this.toWebCryptoAlgorithm('sha1') },\n };\n const keyPair = (await this.subtle.generateKey(rsaParams, true, ['encrypt', 'decrypt'])) as CryptoKeyPair;\n const publicKey = await this.subtle.exportKey('spki', keyPair.publicKey);\n const privateKey = await this.subtle.exportKey('pkcs8', keyPair.privateKey);\n return [publicKey, privateKey];\n }\n\n randomBytes(length: number): Promise {\n const arr = new Uint8Array(length);\n this.crypto.getRandomValues(arr);\n return Promise.resolve(arr.buffer);\n }\n\n private toBuf(value: string | ArrayBuffer): ArrayBuffer {\n let buf: ArrayBuffer;\n if (typeof (value) === 'string') {\n buf = Utils.fromUtf8ToArray(value).buffer;\n } else {\n buf = value;\n }\n return buf;\n }\n\n private toByteString(value: string | ArrayBuffer): string {\n let bytes: string;\n if (typeof (value) === 'string') {\n bytes = forge.util.encodeUtf8(value);\n } else {\n bytes = Utils.fromBufferToByteString(value);\n }\n return bytes;\n }\n\n private toWebCryptoAlgorithm(algorithm: 'sha1' | 'sha256' | 'sha512' | 'md5'): string {\n if (algorithm === 'md5') {\n throw new Error('MD5 is not supported in WebCrypto.');\n }\n return algorithm === 'sha1' ? 'SHA-1' : algorithm === 'sha256' ? 'SHA-256' : 'SHA-512';\n }\n}\n","export class DecryptParameters {\n encKey: T;\n data: T;\n iv: T;\n macKey: T;\n mac: T;\n macData: T;\n}\n","import { EncArrayBuffer } from '../models/domain/encArrayBuffer';\nimport { EncString } from '../models/domain/encString';\nimport { AttachmentUploadDataResponse } from '../models/response/attachmentUploadDataResponse';\nimport { SendFileUploadDataResponse } from '../models/response/sendFileUploadDataResponse';\n\nexport abstract class FileUploadService {\n uploadSendFile: (uploadData: SendFileUploadDataResponse, fileName: EncString,\n encryptedFileData: EncArrayBuffer) => Promise;\n uploadCipherAttachment: (admin: boolean, uploadData: AttachmentUploadDataResponse, fileName: EncString,\n encryptedFileData: EncArrayBuffer) => Promise;\n}\n","import * as jq from 'jquery';\nimport Swal from 'sweetalert2';\n\nimport {\n BodyOutputType,\n Toast,\n ToasterConfig,\n ToasterService,\n} from 'angular2-toaster';\n\nimport {\n Component,\n NgZone,\n OnDestroy,\n OnInit,\n SecurityContext,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport {\n NavigationEnd,\n Router,\n} from '@angular/router';\n\nimport { BroadcasterService } from 'jslib-angular/services/broadcaster.service';\n\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\n\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { EventService } from 'jslib-common/abstractions/event.service';\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { NotificationsService } from 'jslib-common/abstractions/notifications.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { SearchService } from 'jslib-common/abstractions/search.service';\nimport { SettingsService } from 'jslib-common/abstractions/settings.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\nimport { TokenService } from 'jslib-common/abstractions/token.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\nimport { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service';\n\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\nimport { RouterService } from './services/router.service';\n\nconst BroadcasterSubscriptionId = 'AppComponent';\nconst IdleTimeout = 60000 * 10; // 10 minutes\n\n@Component({\n selector: 'app-root',\n templateUrl: 'app.component.html',\n})\nexport class AppComponent implements OnDestroy, OnInit {\n toasterConfig: ToasterConfig = new ToasterConfig({\n showCloseButton: true,\n mouseoverTimerStop: true,\n animation: 'flyRight',\n limit: 5,\n });\n\n private lastActivity: number = null;\n private idleTimer: number = null;\n private isIdle = false;\n\n constructor(\n private broadcasterService: BroadcasterService, private userService: UserService,\n private tokenService: TokenService, private folderService: FolderService,\n private settingsService: SettingsService, private syncService: SyncService,\n private passwordGenerationService: PasswordGenerationService, private cipherService: CipherService,\n private authService: AuthService, private router: Router,\n private toasterService: ToasterService, private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService, private ngZone: NgZone,\n private vaultTimeoutService: VaultTimeoutService, private storageService: StorageService,\n private cryptoService: CryptoService, private collectionService: CollectionService,\n private sanitizer: DomSanitizer, private searchService: SearchService,\n private notificationsService: NotificationsService, private routerService: RouterService,\n private stateService: StateService, private eventService: EventService,\n private policyService: PolicyService) { }\n\n ngOnInit() {\n this.ngZone.runOutsideAngular(() => {\n window.onmousemove = () => this.recordActivity();\n window.onmousedown = () => this.recordActivity();\n window.ontouchstart = () => this.recordActivity();\n window.onclick = () => this.recordActivity();\n window.onscroll = () => this.recordActivity();\n window.onkeypress = () => this.recordActivity();\n });\n\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, async (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case 'loggedIn':\n case 'loggedOut':\n case 'unlocked':\n this.notificationsService.updateConnection(false);\n break;\n case 'authBlocked':\n this.router.navigate(['/']);\n break;\n case 'logout':\n this.logOut(!!message.expired);\n break;\n case 'lockVault':\n await this.vaultTimeoutService.lock();\n break;\n case 'locked':\n this.notificationsService.updateConnection(false);\n this.router.navigate(['lock']);\n break;\n case 'lockedUrl':\n window.setTimeout(() => this.routerService.setPreviousUrl(message.url), 500);\n break;\n case 'syncStarted':\n break;\n case 'syncCompleted':\n break;\n case 'upgradeOrganization':\n const upgradeConfirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('upgradeOrganizationDesc'), this.i18nService.t('upgradeOrganization'),\n this.i18nService.t('upgradeOrganization'), this.i18nService.t('cancel'));\n if (upgradeConfirmed) {\n this.router.navigate(['organizations', message.organizationId, 'settings', 'billing']);\n }\n break;\n case 'premiumRequired':\n const premiumConfirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('premiumRequiredDesc'), this.i18nService.t('premiumRequired'),\n this.i18nService.t('learnMore'), this.i18nService.t('cancel'));\n if (premiumConfirmed) {\n this.router.navigate(['settings/premium']);\n }\n break;\n case 'emailVerificationRequired':\n const emailVerificationConfirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t('emailVerificationRequiredDesc'),\n this.i18nService.t('emailVerificationRequired'),\n this.i18nService.t('learnMore'), this.i18nService.t('cancel'));\n if (emailVerificationConfirmed) {\n this.platformUtilsService.launchUri('https://bitwarden.com/help/article/create-bitwarden-account/');\n }\n break;\n case 'showToast':\n this.showToast(message);\n break;\n case 'setFullWidth':\n this.setFullWidth();\n break;\n default:\n break;\n }\n });\n });\n\n this.router.events.subscribe(event => {\n if (event instanceof NavigationEnd) {\n const modals = Array.from(document.querySelectorAll('.modal'));\n for (const modal of modals) {\n (jq(modal) as any).modal('hide');\n }\n\n if (document.querySelector('.swal-modal') != null) {\n Swal.close(undefined);\n }\n }\n });\n\n this.setFullWidth();\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n private async logOut(expired: boolean) {\n await this.eventService.uploadEvents();\n const userId = await this.userService.getUserId();\n\n await Promise.all([\n this.eventService.clearEvents(),\n this.syncService.setLastSync(new Date(0)),\n this.tokenService.clearToken(),\n this.cryptoService.clearKeys(),\n this.userService.clear(),\n this.settingsService.clear(userId),\n this.cipherService.clear(userId),\n this.folderService.clear(userId),\n this.collectionService.clear(userId),\n this.policyService.clear(userId),\n this.passwordGenerationService.clear(),\n this.stateService.purge(),\n ]);\n\n this.searchService.clearIndex();\n this.authService.logOut(async () => {\n if (expired) {\n this.toasterService.popAsync('warning', this.i18nService.t('loggedOut'),\n this.i18nService.t('loginExpired'));\n }\n\n Swal.close();\n this.router.navigate(['/']);\n });\n }\n\n private async recordActivity() {\n const now = (new Date()).getTime();\n if (this.lastActivity != null && now - this.lastActivity < 250) {\n return;\n }\n\n this.lastActivity = now;\n this.storageService.save(ConstantsService.lastActiveKey, now);\n\n // Idle states\n if (this.isIdle) {\n this.isIdle = false;\n this.idleStateChanged();\n }\n if (this.idleTimer != null) {\n window.clearTimeout(this.idleTimer);\n this.idleTimer = null;\n }\n this.idleTimer = window.setTimeout(() => {\n if (!this.isIdle) {\n this.isIdle = true;\n this.idleStateChanged();\n }\n }, IdleTimeout);\n }\n\n private showToast(msg: any) {\n const toast: Toast = {\n type: msg.type,\n title: msg.title,\n };\n if (typeof (msg.text) === 'string') {\n toast.body = msg.text;\n } else if (msg.text.length === 1) {\n toast.body = msg.text[0];\n } else {\n let message = '';\n msg.text.forEach((t: string) =>\n message += ('

' + this.sanitizer.sanitize(SecurityContext.HTML, t) + '

'));\n toast.body = message;\n toast.bodyOutputType = BodyOutputType.TrustedHtml;\n }\n if (msg.options != null) {\n if (msg.options.trustedHtml === true) {\n toast.bodyOutputType = BodyOutputType.TrustedHtml;\n }\n if (msg.options.timeout != null && msg.options.timeout > 0) {\n toast.timeout = msg.options.timeout;\n }\n }\n this.toasterService.popAsync(toast);\n }\n\n private idleStateChanged() {\n if (this.isIdle) {\n this.notificationsService.disconnectFromInactivity();\n } else {\n this.notificationsService.reconnectFromActivity();\n }\n }\n\n private async setFullWidth() {\n const enableFullWidth = await this.storageService.get('enableFullWidth');\n if (enableFullWidth) {\n document.body.classList.add('full-width');\n } else {\n document.body.classList.remove('full-width');\n }\n }\n}\n"," ","import {\n Directive,\n ElementRef,\n HostListener,\n} from '@angular/core';\n\n@Directive({\n selector: '[appBlurClick]',\n})\nexport class BlurClickDirective {\n constructor(private el: ElementRef) {\n }\n\n @HostListener('click') onClick() {\n this.el.nativeElement.blur();\n }\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n OnInit,\n} from '@angular/core';\n\n@Directive({\n selector: '[appBoxRow]',\n})\nexport class BoxRowDirective implements OnInit {\n el: HTMLElement = null;\n formEls: Element[];\n\n constructor(private elRef: ElementRef) {\n this.el = elRef.nativeElement;\n }\n\n ngOnInit(): void {\n this.formEls = Array.from(this.el.querySelectorAll('input:not([type=\"hidden\"]), select, textarea'));\n this.formEls.forEach(formEl => {\n formEl.addEventListener('focus', (event: Event) => {\n this.el.classList.add('active');\n }, false);\n\n formEl.addEventListener('blur', (event: Event) => {\n this.el.classList.remove('active');\n }, false);\n });\n }\n\n @HostListener('click', ['$event']) onClick(event: Event) {\n const target = event.target as HTMLElement;\n if (target !== this.el && !target.classList.contains('progress') &&\n !target.classList.contains('progress-bar')) {\n return;\n }\n\n if (this.formEls.length > 0) {\n const formEl = (this.formEls[0] as HTMLElement);\n if (formEl.tagName.toLowerCase() === 'input') {\n const inputEl = (formEl as HTMLInputElement);\n if (inputEl.type != null && inputEl.type.toLowerCase() === 'checkbox') {\n inputEl.click();\n return;\n }\n }\n formEl.focus();\n }\n }\n}\n","import {\n Pipe,\n PipeTransform,\n} from '@angular/core';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\n@Pipe({\n name: 'searchCiphers',\n})\nexport class SearchCiphersPipe implements PipeTransform {\n transform(ciphers: CipherView[], searchText: string, deleted: boolean = false): CipherView[] {\n if (ciphers == null || ciphers.length === 0) {\n return [];\n }\n\n if (searchText == null || searchText.length < 2) {\n return ciphers.filter(c => {\n return deleted !== c.isDeleted;\n });\n }\n\n searchText = searchText.trim().toLowerCase();\n return ciphers.filter(c => {\n if (deleted !== c.isDeleted) {\n return false;\n }\n if (c.name != null && c.name.toLowerCase().indexOf(searchText) > -1) {\n return true;\n }\n if (searchText.length >= 8 && c.id.startsWith(searchText)) {\n return true;\n }\n if (c.subTitle != null && c.subTitle.toLowerCase().indexOf(searchText) > -1) {\n return true;\n }\n if (c.login && c.login.uri != null && c.login.uri.toLowerCase().indexOf(searchText) > -1) {\n return true;\n }\n\n return false;\n });\n }\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/app/polyfills.6edbb1cdf4d2e063961a.js b/app/polyfills.6edbb1cdf4d2e063961a.js deleted file mode 100644 index 75a0ea58..00000000 --- a/app/polyfills.6edbb1cdf4d2e063961a.js +++ /dev/null @@ -1,139 +0,0 @@ -!function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=746)}([,,function(t,e,n){var r=n(20),o=n(55),i=n(56),a=n(51),u=n(62),c=function(t,e,n){var s,f,l,p,h=t&c.F,d=t&c.G,v=t&c.S,y=t&c.P,g=t&c.B,m=d?r:v?r[e]||(r[e]={}):(r[e]||{}).prototype,b=d?o:o[e]||(o[e]={}),_=b.prototype||(b.prototype={});for(s in d&&(n=e),n)l=((f=!h&&m&&void 0!==m[s])?m:n)[s],p=g&&f?u(l,r):y&&"function"==typeof l?u(Function.call,l):l,m&&a(m,s,l,t&c.U),b[s]!=l&&i(b,s,p),y&&_[s]!=l&&(_[s]=l)};r.core=o,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,t.exports=c},,,,,,,,,,,,,function(t,e,n){var r=n(22);t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},,,,,function(t,e){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(t,e){t.exports=function(t){try{return!!t()}catch(e){return!0}}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},,,,,function(t,e,n){var r=n(131)("wks"),o=n(89),i=n(20).Symbol,a="function"==typeof i;(t.exports=function(t){return r[t]||(r[t]=a&&i[t]||(a?i:o)("Symbol."+t))}).store=r},,,,function(t,e,n){var r=n(63),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},,function(t,e,n){var r=n(15),o=n(220),i=n(75),a=Object.defineProperty;e.f=n(35)?Object.defineProperty:function(t,e,n){if(r(t),e=i(e,!0),r(n),o)try{return a(t,e,n)}catch(u){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},,function(t,e,n){t.exports=!n(21)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},,,,,,,function(t,e,n){var r=n(76);t.exports=function(t){return Object(r(t))}},,,,,function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},,function(t,e,n){var r=n(2),o=n(21),i=n(76),a=/"/g,u=function(t,e,n,r){var o=String(i(t)),u="<"+e;return""!==n&&(u+=" "+n+'="'+String(r).replace(a,""")+'"'),u+">"+o+""};t.exports=function(t,e){var n={};n[t]=e(u),r(r.P+r.F*o((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3})),"String",n)}},function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e,n){var r=n(20),o=n(56),i=n(50),a=n(89)("src"),u=Function.toString,c=(""+u).split("toString");n(55).inspectSource=function(t){return u.call(t)},(t.exports=function(t,e,n,u){var s="function"==typeof n;s&&(i(n,"name")||o(n,"name",e)),t[e]!==n&&(s&&(i(n,a)||o(n,a,t[e]?""+t[e]:c.join(String(e)))),t===r?t[e]=n:u?t[e]?t[e]=n:o(t,e,n):(delete t[e],o(t,e,n)))})(Function.prototype,"toString",(function(){return"function"==typeof this&&this[a]||u.call(this)}))},function(t,e,n){var r=n(115),o=n(76);t.exports=function(t){return r(o(t))}},,,function(t,e){var n=t.exports={version:"2.6.2"};"number"==typeof __e&&(__e=n)},function(t,e,n){var r=n(33),o=n(85);t.exports=n(35)?function(t,e,n){return r.f(t,e,o(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var r=n(50),o=n(42),i=n(172)("IE_PROTO"),a=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=o(t),r(t,i)?t[i]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?a:null}},,function(t,e,n){var r=n(123),o=n(85),i=n(52),a=n(75),u=n(50),c=n(220),s=Object.getOwnPropertyDescriptor;e.f=n(35)?s:function(t,e){if(t=i(t),e=a(e,!0),c)try{return s(t,e)}catch(n){}if(u(t,e))return o(!r.f.call(t,e),t[e])}},function(t,e,n){"use strict";var r=n(21);t.exports=function(t,e){return!!t&&r((function(){e?t.call(null,(function(){}),1):t.call(null)}))}},,function(t,e,n){var r=n(47);t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}}},function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},,,,function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,e,n){var r=n(2),o=n(55),i=n(21);t.exports=function(t,e){var n=(o.Object||{})[t]||Object[t],a={};a[t]=e(n),r(r.S+r.F*i((function(){n(1)})),"Object",a)}},function(t,e,n){var r=n(62),o=n(115),i=n(42),a=n(31),u=n(234);t.exports=function(t,e){var n=1==t,c=2==t,s=3==t,f=4==t,l=6==t,p=5==t||l,h=e||u;return function(e,u,d){for(var v,y,g=i(e),m=o(g),b=r(u,d,3),_=a(m.length),w=0,S=n?h(e,_):c?h(e,0):void 0;_>w;w++)if((p||w in m)&&(y=b(v=m[w],w,g),t))if(n)S[w]=y;else if(y)switch(t){case 3:return!0;case 5:return v;case 6:return w;case 2:S.push(v)}else if(f)return!1;return l?-1:s||f?f:S}}},,,,,,function(t,e,n){var r=n(22);t.exports=function(t,e){if(!r(t))return t;var n,o;if(e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;if("function"==typeof(n=t.valueOf)&&!r(o=n.call(t)))return o;if(!e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},function(t,e){t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,n){"use strict";if(n(35)){var r=n(86),o=n(20),i=n(21),a=n(2),u=n(138),c=n(187),s=n(62),f=n(99),l=n(85),p=n(56),h=n(101),d=n(63),v=n(31),y=n(245),g=n(91),m=n(75),b=n(50),_=n(96),w=n(22),S=n(42),k=n(183),E=n(83),x=n(57),T=n(92).f,O=n(133),A=n(89),M=n(27),P=n(69),j=n(150),D=n(125),C=n(204),F=n(110),I=n(134),R=n(98),N=n(184),L=n(236),Z=n(33),U=n(59),z=Z.f,B=U.f,H=o.RangeError,W=o.TypeError,K=o.Uint8Array,G=Array.prototype,J=c.ArrayBuffer,V=c.DataView,q=P(0),Y=P(2),X=P(3),$=P(4),Q=P(5),tt=P(6),et=j(!0),nt=j(!1),rt=C.values,ot=C.keys,it=C.entries,at=G.lastIndexOf,ut=G.reduce,ct=G.reduceRight,st=G.join,ft=G.sort,lt=G.slice,pt=G.toString,ht=G.toLocaleString,dt=M("iterator"),vt=M("toStringTag"),yt=A("typed_constructor"),gt=A("def_constructor"),mt=u.CONSTR,bt=u.TYPED,_t=u.VIEW,wt=P(1,(function(t,e){return Tt(D(t,t[gt]),e)})),St=i((function(){return 1===new K(new Uint16Array([1]).buffer)[0]})),kt=!!K&&!!K.prototype.set&&i((function(){new K(1).set({})})),Et=function(t,e){var n=d(t);if(n<0||n%e)throw H("Wrong offset!");return n},xt=function(t){if(w(t)&&bt in t)return t;throw W(t+" is not a typed array!")},Tt=function(t,e){if(!w(t)||!(yt in t))throw W("It is not a typed array constructor!");return new t(e)},Ot=function(t,e){return At(D(t,t[gt]),e)},At=function(t,e){for(var n=0,r=e.length,o=Tt(t,r);r>n;)o[n]=e[n++];return o},Mt=function(t,e,n){z(t,e,{get:function(){return this._d[n]}})},Pt=function(t){var e,n,r,o,i,a,u=S(t),c=arguments.length,f=c>1?arguments[1]:void 0,l=void 0!==f,p=O(u);if(null!=p&&!k(p)){for(a=p.call(u),r=[],e=0;!(i=a.next()).done;e++)r.push(i.value);u=r}for(l&&c>2&&(f=s(f,arguments[2],2)),e=0,n=v(u.length),o=Tt(this,n);n>e;e++)o[e]=l?f(u[e],e):u[e];return o},jt=function(){for(var t=0,e=arguments.length,n=Tt(this,e);e>t;)n[t]=arguments[t++];return n},Dt=!!K&&i((function(){ht.call(new K(1))})),Ct=function(){return ht.apply(Dt?lt.call(xt(this)):xt(this),arguments)},Ft={copyWithin:function(t,e){return L.call(xt(this),t,e,arguments.length>2?arguments[2]:void 0)},every:function(t){return $(xt(this),t,arguments.length>1?arguments[1]:void 0)},fill:function(t){return N.apply(xt(this),arguments)},filter:function(t){return Ot(this,Y(xt(this),t,arguments.length>1?arguments[1]:void 0))},find:function(t){return Q(xt(this),t,arguments.length>1?arguments[1]:void 0)},findIndex:function(t){return tt(xt(this),t,arguments.length>1?arguments[1]:void 0)},forEach:function(t){q(xt(this),t,arguments.length>1?arguments[1]:void 0)},indexOf:function(t){return nt(xt(this),t,arguments.length>1?arguments[1]:void 0)},includes:function(t){return et(xt(this),t,arguments.length>1?arguments[1]:void 0)},join:function(t){return st.apply(xt(this),arguments)},lastIndexOf:function(t){return at.apply(xt(this),arguments)},map:function(t){return wt(xt(this),t,arguments.length>1?arguments[1]:void 0)},reduce:function(t){return ut.apply(xt(this),arguments)},reduceRight:function(t){return ct.apply(xt(this),arguments)},reverse:function(){for(var t,e=xt(this).length,n=Math.floor(e/2),r=0;r1?arguments[1]:void 0)},sort:function(t){return ft.call(xt(this),t)},subarray:function(t,e){var n=xt(this),r=n.length,o=g(t,r);return new(D(n,n[gt]))(n.buffer,n.byteOffset+o*n.BYTES_PER_ELEMENT,v((void 0===e?r:g(e,r))-o))}},It=function(t,e){return Ot(this,lt.call(xt(this),t,e))},Rt=function(t){xt(this);var e=Et(arguments[1],1),n=this.length,r=S(t),o=v(r.length),i=0;if(o+e>n)throw H("Wrong length!");for(;i255?255:255&r),o.v[h](n*e+o.o,r,St)}(this,n,t)},enumerable:!0})};b?(d=n((function(t,n,r,o){f(t,d,s,"_d");var i,a,u,c,l=0,h=0;if(w(n)){if(!(n instanceof J||"ArrayBuffer"==(c=_(n))||"SharedArrayBuffer"==c))return bt in n?At(d,n):Pt.call(d,n);i=n,h=Et(r,e);var g=n.byteLength;if(void 0===o){if(g%e)throw H("Wrong length!");if((a=g-h)<0)throw H("Wrong length!")}else if((a=v(o)*e)+h>g)throw H("Wrong length!");u=a/e}else u=y(n),i=new J(a=u*e);for(p(t,"_d",{b:i,o:h,l:a,e:u,v:new V(i)});ldocument.F=Object<\/script>"),t.close(),c=t.F;r--;)delete c.prototype[i[r]];return c()};t.exports=Object.create||function(t,e){var n;return null!==t?(u.prototype=r(t),n=new u,u.prototype=null,n[a]=t):n=c(),void 0===e?n:o(n,e)}},,function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e){t.exports=!1},,,function(t,e){var n=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++n+r).toString(36))}},function(t,e,n){var r=n(223),o=n(173);t.exports=Object.keys||function(t){return r(t,o)}},function(t,e,n){var r=n(63),o=Math.max,i=Math.min;t.exports=function(t,e){return(t=r(t))<0?o(t+e,0):i(t,e)}},function(t,e,n){var r=n(223),o=n(173).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return r(t,o)}},,,,function(t,e,n){var r=n(67),o=n(27)("toStringTag"),i="Arguments"==r(function(){return arguments}());t.exports=function(t){var e,n,a;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(n){}}(e=Object(t),o))?n:i?r(e):"Object"==(a=r(e))&&"function"==typeof e.callee?"Arguments":a}},function(t,e,n){var r=n(27)("unscopables"),o=Array.prototype;null==o[r]&&n(56)(o,r,{}),t.exports=function(t){o[r][t]=!0}},function(t,e,n){"use strict";var r=n(20),o=n(33),i=n(35),a=n(27)("species");t.exports=function(t){var e=r[t];i&&e&&!e[a]&&o.f(e,a,{configurable:!0,get:function(){return this}})}},function(t,e){t.exports=function(t,e,n,r){if(!(t instanceof e)||void 0!==r&&r in t)throw TypeError(n+": incorrect invocation!");return t}},function(t,e,n){var r=n(62),o=n(233),i=n(183),a=n(15),u=n(31),c=n(133),s={},f={};(e=t.exports=function(t,e,n,l,p){var h,d,v,y,g=p?function(){return t}:c(t),m=r(n,l,e?2:1),b=0;if("function"!=typeof g)throw TypeError(t+" is not iterable!");if(i(g)){for(h=u(t.length);h>b;b++)if((y=e?m(a(d=t[b])[0],d[1]):m(t[b]))===s||y===f)return y}else for(v=g.call(t);!(d=v.next()).done;)if((y=o(v,m,d.value,e))===s||y===f)return y}).BREAK=s,e.RETURN=f},function(t,e,n){var r=n(51);t.exports=function(t,e,n){for(var o in e)r(t,o,e[o],n);return t}},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(r){"object"==typeof window&&(n=window)}t.exports=n},,,,,,,function(t,e,n){var r=n(33).f,o=n(50),i=n(27)("toStringTag");t.exports=function(t,e,n){t&&!o(t=n?t:t.prototype,i)&&r(t,i,{configurable:!0,value:e})}},function(t,e){t.exports={}},function(t,e,n){var r=n(22);t.exports=function(t,e){if(!r(t)||t._t!==e)throw TypeError("Incompatible receiver, "+e+" required!");return t}},,,,function(t,e,n){var r=n(67);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},function(t,e,n){var r=n(2),o=n(76),i=n(21),a=n(176),u="["+a+"]",c=RegExp("^"+u+u+"*"),s=RegExp(u+u+"*$"),f=function(t,e,n){var o={},u=i((function(){return!!a[t]()||"​…"!="​…"[t]()})),c=o[t]=u?e(l):a[t];n&&(o[n]=c),r(r.P+r.F*u,"String",o)},l=f.trim=function(t,e){return t=String(o(t)),1&e&&(t=t.replace(c,"")),2&e&&(t=t.replace(s,"")),t};t.exports=f},,,,,,,function(t,e){e.f={}.propertyIsEnumerable},function(t,e,n){"use strict";var r=n(15);t.exports=function(){var t=r(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},function(t,e,n){var r=n(15),o=n(47),i=n(27)("species");t.exports=function(t,e){var n,a=r(t).constructor;return void 0===a||null==(n=r(a)[i])?e:o(n)}},,,,,,function(t,e,n){var r=n(55),o=n(20),i=o["__core-js_shared__"]||(o["__core-js_shared__"]={});(t.exports=function(t,e){return i[t]||(i[t]=void 0!==e?e:{})})("versions",[]).push({version:r.version,mode:n(86)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,n){var r=n(96),o=n(27)("iterator"),i=n(110);t.exports=n(55).getIteratorMethod=function(t){if(null!=t)return t[o]||t["@@iterator"]||i[r(t)]}},function(t,e,n){var r=n(27)("iterator"),o=!1;try{var i=[7][r]();i.return=function(){o=!0},Array.from(i,(function(){throw 2}))}catch(a){}t.exports=function(t,e){if(!e&&!o)return!1;var n=!1;try{var i=[7],u=i[r]();u.next=function(){return{done:n=!0}},i[r]=function(){return u},t(i)}catch(a){}return n}},function(t,e,n){"use strict";var r=n(96),o=RegExp.prototype.exec;t.exports=function(t,e){var n=t.exec;if("function"==typeof n){var i=n.call(t,e);if("object"!=typeof i)throw new TypeError("RegExp exec method returned something other than an Object or null");return i}if("RegExp"!==r(t))throw new TypeError("RegExp#exec called on incompatible receiver");return o.call(t,e)}},function(t,e,n){"use strict";n(237);var r=n(51),o=n(56),i=n(21),a=n(76),u=n(27),c=n(185),s=u("species"),f=!i((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$")})),l=function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var n="ab".split(t);return 2===n.length&&"a"===n[0]&&"b"===n[1]}();t.exports=function(t,e,n){var p=u(t),h=!i((function(){var e={};return e[p]=function(){return 7},7!=""[t](e)})),d=h?!i((function(){var e=!1,n=/a/;return n.exec=function(){return e=!0,null},"split"===t&&(n.constructor={},n.constructor[s]=function(){return n}),n[p](""),!e})):void 0;if(!h||!d||"replace"===t&&!f||"split"===t&&!l){var v=/./[p],y=n(a,p,""[t],(function(t,e,n,r,o){return e.exec===c?h&&!o?{done:!0,value:v.call(e,n,r)}:{done:!0,value:t.call(n,e,r)}:{done:!1}})),g=y[0],m=y[1];r(String.prototype,t,g),o(RegExp.prototype,p,2==e?function(t,e){return m.call(t,this,e)}:function(t){return m.call(t,this)})}}},function(t,e,n){"use strict";var r=n(20),o=n(2),i=n(51),a=n(101),u=n(82),c=n(100),s=n(99),f=n(22),l=n(21),p=n(134),h=n(109),d=n(177);t.exports=function(t,e,n,v,y,g){var m=r[t],b=m,_=y?"set":"add",w=b&&b.prototype,S={},k=function(t){var e=w[t];i(w,t,"delete"==t||"has"==t?function(t){return!(g&&!f(t))&&e.call(this,0===t?0:t)}:"get"==t?function(t){return g&&!f(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,n){return e.call(this,0===t?0:t,n),this})};if("function"==typeof b&&(g||w.forEach&&!l((function(){(new b).entries().next()})))){var E=new b,x=E[_](g?{}:-0,1)!=E,T=l((function(){E.has(1)})),O=p((function(t){new b(t)})),A=!g&&l((function(){for(var t=new b,e=5;e--;)t[_](e,e);return!t.has(-0)}));O||((b=e((function(e,n){s(e,b,t);var r=d(new m,e,b);return null!=n&&c(n,y,r[_],r),r}))).prototype=w,w.constructor=b),(T||A)&&(k("delete"),k("has"),y&&k("get")),(A||x)&&k(_),g&&w.clear&&delete w.clear}else b=v.getConstructor(e,t,y,_),a(b.prototype,n),u.NEED=!0;return h(b,t),S[t]=b,o(o.G+o.W+o.F*(b!=m),S),g||v.setStrong(b,t,y),b}},function(t,e,n){for(var r,o=n(20),i=n(56),a=n(89),u=a("typed_array"),c=a("view"),s=!(!o.ArrayBuffer||!o.DataView),f=s,l=0,p="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");l<9;)(r=o[p[l++]])?(i(r.prototype,u,!0),i(r.prototype,c,!0)):f=!1;t.exports={ABV:s,CONSTR:f,TYPED:u,VIEW:c}},,,,,,,,,,,,function(t,e,n){var r=n(52),o=n(31),i=n(91);t.exports=function(t){return function(e,n,a){var u,c=r(e),s=o(c.length),f=i(a,s);if(t&&n!=n){for(;s>f;)if((u=c[f++])!=u)return!0}else for(;s>f;f++)if((t||f in c)&&c[f]===n)return t||f||0;return!t&&-1}}},function(t,e,n){var r=n(67);t.exports=Array.isArray||function(t){return"Array"==r(t)}},function(t,e,n){var r=n(63),o=n(76);t.exports=function(t){return function(e,n){var i,a,u=String(o(e)),c=r(n),s=u.length;return c<0||c>=s?t?"":void 0:(i=u.charCodeAt(c))<55296||i>56319||c+1===s||(a=u.charCodeAt(c+1))<56320||a>57343?t?u.charAt(c):i:t?u.slice(c,c+2):a-56320+(i-55296<<10)+65536}}},function(t,e,n){"use strict";var r=n(86),o=n(2),i=n(51),a=n(56),u=n(110),c=n(180),s=n(109),f=n(57),l=n(27)("iterator"),p=!([].keys&&"next"in[].keys()),h=function(){return this};t.exports=function(t,e,n,d,v,y,g){c(n,e,d);var m,b,_,w=function(t){if(!p&&t in x)return x[t];switch(t){case"keys":case"values":return function(){return new n(this,t)}}return function(){return new n(this,t)}},S=e+" Iterator",k="values"==v,E=!1,x=t.prototype,T=x[l]||x["@@iterator"]||v&&x[v],O=T||w(v),A=v?k?w("entries"):O:void 0,M="Array"==e&&x.entries||T;if(M&&(_=f(M.call(new t)))!==Object.prototype&&_.next&&(s(_,S,!0),r||"function"==typeof _[l]||a(_,l,h)),k&&T&&"values"!==T.name&&(E=!0,O=function(){return T.call(this)}),r&&!g||!p&&!E&&x[l]||a(x,l,O),u[e]=O,u[S]=h,v)if(m={values:k?O:w("values"),keys:y?O:w("keys"),entries:A},g)for(b in m)b in x||i(x,b,m[b]);else o(o.P+o.F*(p||E),e,m);return m}},function(t,e,n){var r=n(22),o=n(67),i=n(27)("match");t.exports=function(t){var e;return r(t)&&(void 0!==(e=t[i])?!!e:"RegExp"==o(t))}},,,,,,,,,,,,,,,,,function(t,e,n){var r=n(22),o=n(20).document,i=r(o)&&r(o.createElement);t.exports=function(t){return i?o.createElement(t):{}}},function(t,e,n){var r=n(131)("keys"),o=n(89);t.exports=function(t){return r[t]||(r[t]=o(t))}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,n){var r=n(20).document;t.exports=r&&r.documentElement},function(t,e,n){var r=n(22),o=n(15),i=function(t,e){if(o(t),!r(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,r){try{(r=n(62)(Function.call,n(59).f(Object.prototype,"__proto__").set,2))(t,[]),e=!(t instanceof Array)}catch(o){e=!0}return function(t,n){return i(t,n),e?t.__proto__=n:r(t,n),t}}({},!1):void 0),check:i}},function(t,e){t.exports="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff"},function(t,e,n){var r=n(22),o=n(175).set;t.exports=function(t,e,n){var i,a=e.constructor;return a!==n&&"function"==typeof a&&(i=a.prototype)!==n.prototype&&r(i)&&o&&o(t,i),t}},function(t,e){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},function(t,e){var n=Math.expm1;t.exports=!n||n(10)>22025.465794806718||n(10)<22025.465794806718||-2e-17!=n(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:Math.exp(t)-1}:n},function(t,e,n){"use strict";var r=n(83),o=n(85),i=n(109),a={};n(56)(a,n(27)("iterator"),(function(){return this})),t.exports=function(t,e,n){t.prototype=r(a,{next:o(1,n)}),i(t,e+" Iterator")}},function(t,e,n){var r=n(154),o=n(76);t.exports=function(t,e,n){if(r(e))throw TypeError("String#"+n+" doesn't accept regex!");return String(o(t))}},function(t,e,n){var r=n(27)("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[r]=!1,!"/./"[t](e)}catch(o){}}return!0}},function(t,e,n){var r=n(110),o=n(27)("iterator"),i=Array.prototype;t.exports=function(t){return void 0!==t&&(r.Array===t||i[o]===t)}},function(t,e,n){"use strict";var r=n(42),o=n(91),i=n(31);t.exports=function(t){for(var e=r(this),n=i(e.length),a=arguments.length,u=o(a>1?arguments[1]:void 0,n),c=a>2?arguments[2]:void 0,s=void 0===c?n:o(c,n);s>u;)e[u++]=t;return e}},function(t,e,n){"use strict";var r,o,i=n(124),a=RegExp.prototype.exec,u=String.prototype.replace,c=a,s=(r=/a/,o=/b*/g,a.call(r,"a"),a.call(o,"a"),0!==r.lastIndex||0!==o.lastIndex),f=void 0!==/()??/.exec("")[1];(s||f)&&(c=function(t){var e,n,r,o,c=this;return f&&(n=new RegExp("^"+c.source+"$(?!\\s)",i.call(c))),s&&(e=c.lastIndex),r=a.call(c,t),s&&r&&(c.lastIndex=c.global?r.index+r[0].length:e),f&&r&&r.length>1&&u.call(r[0],n,(function(){for(o=1;o>1,f=23===e?x(2,-24)-x(2,-77):0,l=0,p=t<0||0===t&&1/t<0?1:0;for((t=E(t))!=t||t===S?(o=t!=t?1:0,r=c):(r=T(O(t)/A),t*(i=x(2,-r))<1&&(r--,i*=2),(t+=r+s>=1?f/i:f*x(2,1-s))*i>=2&&(r++,i/=2),r+s>=c?(o=0,r=c):r+s>=1?(o=(t*i-1)*x(2,e),r+=s):(o=t*x(2,s-1)*x(2,e),r=0));e>=8;a[l++]=255&o,o/=256,e-=8);for(r=r<0;a[l++]=255&r,r/=256,u-=8);return a[--l]|=128*p,a}function C(t,e,n){var r,o=8*n-e-1,i=(1<>1,u=o-7,c=n-1,s=t[c--],f=127&s;for(s>>=7;u>0;f=256*f+t[c],c--,u-=8);for(r=f&(1<<-u)-1,f>>=-u,u+=e;u>0;r=256*r+t[c],c--,u-=8);if(0===f)f=1-a;else{if(f===i)return r?NaN:s?-S:S;r+=x(2,e),f-=a}return(s?-1:1)*r*x(2,f-e)}function F(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]}function I(t){return[255&t]}function R(t){return[255&t,t>>8&255]}function N(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]}function L(t){return D(t,52,8)}function Z(t){return D(t,23,4)}function U(t,e,n){v(t.prototype,e,{get:function(){return this[n]}})}function z(t,e,n,r){var o=h(+n);if(o+e>t[P])throw w("Wrong index!");var i=t[M]._b,a=o+t[j],u=i.slice(a,a+e);return r?u:u.reverse()}function B(t,e,n,r,o,i){var a=h(+n);if(a+e>t[P])throw w("Wrong index!");for(var u=t[M]._b,c=a+t[j],s=r(+o),f=0;fG;)(H=K[G++])in m||u(m,H,k[H]);i||(W.constructor=m)}var J=new b(new m(2)),V=b.prototype.setInt8;J.setInt8(0,2147483648),J.setInt8(1,2147483649),!J.getInt8(0)&&J.getInt8(1)||c(b.prototype,{setInt8:function(t,e){V.call(this,t,e<<24>>24)},setUint8:function(t,e){V.call(this,t,e<<24>>24)}},!0)}else m=function(t){f(this,m,"ArrayBuffer");var e=h(t);this._b=y.call(new Array(e),0),this[P]=e},b=function(t,e,n){f(this,b,"DataView"),f(t,m,"DataView");var r=t[P],o=l(e);if(o<0||o>r)throw w("Wrong offset!");if(o+(n=void 0===n?r-o:p(n))>r)throw w("Wrong length!");this[M]=t,this[j]=o,this[P]=n},o&&(U(m,"byteLength","_l"),U(b,"buffer","_b"),U(b,"byteLength","_l"),U(b,"byteOffset","_o")),c(b.prototype,{getInt8:function(t){return z(this,1,t)[0]<<24>>24},getUint8:function(t){return z(this,1,t)[0]},getInt16:function(t){var e=z(this,2,t,arguments[1]);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=z(this,2,t,arguments[1]);return e[1]<<8|e[0]},getInt32:function(t){return F(z(this,4,t,arguments[1]))},getUint32:function(t){return F(z(this,4,t,arguments[1]))>>>0},getFloat32:function(t){return C(z(this,4,t,arguments[1]),23,4)},getFloat64:function(t){return C(z(this,8,t,arguments[1]),52,8)},setInt8:function(t,e){B(this,1,t,I,e)},setUint8:function(t,e){B(this,1,t,I,e)},setInt16:function(t,e){B(this,2,t,R,e,arguments[2])},setUint16:function(t,e){B(this,2,t,R,e,arguments[2])},setInt32:function(t,e){B(this,4,t,N,e,arguments[2])},setUint32:function(t,e){B(this,4,t,N,e,arguments[2])},setFloat32:function(t,e){B(this,4,t,Z,e,arguments[2])},setFloat64:function(t,e){B(this,8,t,L,e,arguments[2])}});g(m,"ArrayBuffer"),g(b,"DataView"),u(b.prototype,a.VIEW,!0),e.ArrayBuffer=m,e.DataView=b},,,,,,,,,,,,,function(t,e,n){"use strict";var r=n(90),o=n(132),i=n(123),a=n(42),u=n(115),c=Object.assign;t.exports=!c||n(21)((function(){var t={},e={},n=Symbol(),r="abcdefghijklmnopqrst";return t[n]=7,r.split("").forEach((function(t){e[t]=t})),7!=c({},t)[n]||Object.keys(c({},e)).join("")!=r}))?function(t,e){for(var n=a(t),c=arguments.length,s=1,f=o.f,l=i.f;c>s;)for(var p,h=u(arguments[s++]),d=f?r(h).concat(f(h)):r(h),v=d.length,y=0;v>y;)l.call(h,p=d[y++])&&(n[p]=h[p]);return n}:c},function(t,e){t.exports=function(t,e,n){var r=void 0===n;switch(e.length){case 0:return r?t():t.call(n);case 1:return r?t(e[0]):t.call(n,e[0]);case 2:return r?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return r?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return r?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},function(t,e,n){"use strict";var r=n(63),o=n(76);t.exports=function(t){var e=String(o(this)),n="",i=r(t);if(i<0||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(e+=e))1&i&&(n+=e);return n}},function(t,e,n){"use strict";var r=n(33),o=n(85);t.exports=function(t,e,n){e in t?r.f(t,e,o(0,n)):t[e]=n}},function(t,e,n){"use strict";var r=n(97),o=n(205),i=n(110),a=n(52);t.exports=n(153)(Array,"Array",(function(t,e){this._t=a(t),this._i=0,this._k=e}),(function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,o(1)):o(0,"keys"==e?n:"values"==e?t[n]:[n,t[n]])}),"values"),i.Arguments=i.Array,r("keys"),r("values"),r("entries")},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e,n){var r,o,i,a=n(62),u=n(201),c=n(174),s=n(171),f=n(20),l=f.process,p=f.setImmediate,h=f.clearImmediate,d=f.MessageChannel,v=f.Dispatch,y=0,g={},m=function(){var t=+this;if(g.hasOwnProperty(t)){var e=g[t];delete g[t],e()}},b=function(t){m.call(t.data)};p&&h||(p=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return g[++y]=function(){u("function"==typeof t?t:Function(t),e)},r(y),y},h=function(t){delete g[t]},"process"==n(67)(l)?r=function(t){l.nextTick(a(m,t,1))}:v&&v.now?r=function(t){v.now(a(m,t,1))}:d?(i=(o=new d).port2,o.port1.onmessage=b,r=a(i.postMessage,i,1)):f.addEventListener&&"function"==typeof postMessage&&!f.importScripts?(r=function(t){f.postMessage(t+"","*")},f.addEventListener("message",b,!1)):r="onreadystatechange"in s("script")?function(t){c.appendChild(s("script")).onreadystatechange=function(){c.removeChild(this),m.call(t)}}:function(t){setTimeout(a(m,t,1),0)}),t.exports={set:p,clear:h}},function(t,e,n){"use strict";var r=n(47);function o(t){var e,n;this.promise=new t((function(t,r){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=r})),this.resolve=r(e),this.reject=r(n)}t.exports.f=function(t){return new o(t)}},function(t,e,n){var r=n(20).navigator;t.exports=r&&r.userAgent||""},,,,,,,,,,,,function(t,e,n){t.exports=!n(35)&&!n(21)((function(){return 7!=Object.defineProperty(n(171)("div"),"a",{get:function(){return 7}}).a}))},function(t,e,n){e.f=n(27)},function(t,e,n){var r=n(20),o=n(55),i=n(86),a=n(221),u=n(33).f;t.exports=function(t){var e=o.Symbol||(o.Symbol=i?{}:r.Symbol||{});"_"==t.charAt(0)||t in e||u(e,t,{value:a.f(t)})}},function(t,e,n){var r=n(50),o=n(52),i=n(150)(!1),a=n(172)("IE_PROTO");t.exports=function(t,e){var n,u=o(t),c=0,s=[];for(n in u)n!=a&&r(u,n)&&s.push(n);for(;e.length>c;)r(u,n=e[c++])&&(~i(s,n)||s.push(n));return s}},function(t,e,n){var r=n(33),o=n(15),i=n(90);t.exports=n(35)?Object.defineProperties:function(t,e){o(t);for(var n,a=i(e),u=a.length,c=0;u>c;)r.f(t,n=a[c++],e[n]);return t}},function(t,e,n){var r=n(52),o=n(92).f,i={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return a&&"[object Window]"==i.call(t)?function(t){try{return o(t)}catch(e){return a.slice()}}(t):o(r(t))}},function(t,e){t.exports=Object.is||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}},function(t,e,n){"use strict";var r=n(47),o=n(22),i=n(201),a=[].slice,u={},c=function(t,e,n){if(!(e in u)){for(var r=[],o=0;o>>0||(a.test(n)?16:10))}:r},function(t,e,n){var r=n(20).parseFloat,o=n(116).trim;t.exports=1/r(n(176)+"-0")!=-1/0?function(t){var e=o(String(t),3),n=r(e);return 0===n&&"-"==e.charAt(0)?-0:n}:r},function(t,e,n){var r=n(67);t.exports=function(t,e){if("number"!=typeof t&&"Number"!=r(t))throw TypeError(e);return+t}},function(t,e,n){var r=n(22),o=Math.floor;t.exports=function(t){return!r(t)&&isFinite(t)&&o(t)===t}},function(t,e){t.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:Math.log(1+t)}},function(t,e,n){var r=n(15);t.exports=function(t,e,n,o){try{return o?e(r(n)[0],n[1]):e(n)}catch(a){var i=t.return;throw void 0!==i&&r(i.call(t)),a}}},function(t,e,n){var r=n(402);t.exports=function(t,e){return new(r(t))(e)}},function(t,e,n){var r=n(47),o=n(42),i=n(115),a=n(31);t.exports=function(t,e,n,u,c){r(e);var s=o(t),f=i(s),l=a(s.length),p=c?l-1:0,h=c?-1:1;if(n<2)for(;;){if(p in f){u=f[p],p+=h;break}if(p+=h,c?p<0:l<=p)throw TypeError("Reduce of empty array with no initial value")}for(;c?p>=0:l>p;p+=h)p in f&&(u=e(u,f[p],p,s));return u}},function(t,e,n){"use strict";var r=n(42),o=n(91),i=n(31);t.exports=[].copyWithin||function(t,e){var n=r(this),a=i(n.length),u=o(t,a),c=o(e,a),s=arguments.length>2?arguments[2]:void 0,f=Math.min((void 0===s?a:o(s,a))-c,a-u),l=1;for(c0;)c in n?n[u]=n[c]:delete n[u],u+=l,c+=l;return n}},function(t,e,n){"use strict";var r=n(185);n(2)({target:"RegExp",proto:!0,forced:r!==/./.exec},{exec:r})},function(t,e,n){n(35)&&"g"!=/./g.flags&&n(33).f(RegExp.prototype,"flags",{configurable:!0,get:n(124)})},function(t,e,n){var r=n(20),o=n(206).set,i=r.MutationObserver||r.WebKitMutationObserver,a=r.process,u=r.Promise,c="process"==n(67)(a);t.exports=function(){var t,e,n,s=function(){var r,o;for(c&&(r=a.domain)&&r.exit();t;){o=t.fn,t=t.next;try{o()}catch(i){throw t?n():e=void 0,i}}e=void 0,r&&r.enter()};if(c)n=function(){a.nextTick(s)};else if(!i||r.navigator&&r.navigator.standalone)if(u&&u.resolve){var f=u.resolve(void 0);n=function(){f.then(s)}}else n=function(){o.call(r,s)};else{var l=!0,p=document.createTextNode("");new i(s).observe(p,{characterData:!0}),n=function(){p.data=l=!l}}return function(r){var o={fn:r,next:void 0};e&&(e.next=o),t||(t=o,n()),e=o}}},function(t,e,n){"use strict";var r=n(241),o=n(111);t.exports=n(137)("Map",(function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}}),{get:function(t){var e=r.getEntry(o(this,"Map"),t);return e&&e.v},set:function(t,e){return r.def(o(this,"Map"),0===t?0:t,e)}},r,!0)},function(t,e,n){"use strict";var r=n(33).f,o=n(83),i=n(101),a=n(62),u=n(99),c=n(100),s=n(153),f=n(205),l=n(98),p=n(35),h=n(82).fastKey,d=n(111),v=p?"_s":"size",y=function(t,e){var n,r=h(e);if("F"!==r)return t._i[r];for(n=t._f;n;n=n.n)if(n.k==e)return n};t.exports={getConstructor:function(t,e,n,s){var f=t((function(t,r){u(t,f,e,"_i"),t._t=e,t._i=o(null),t._f=void 0,t._l=void 0,t[v]=0,null!=r&&c(r,n,t[s],t)}));return i(f.prototype,{clear:function(){for(var t=d(this,e),n=t._i,r=t._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete n[r.i];t._f=t._l=void 0,t[v]=0},delete:function(t){var n=d(this,e),r=y(n,t);if(r){var o=r.n,i=r.p;delete n._i[r.i],r.r=!0,i&&(i.n=o),o&&(o.p=i),n._f==r&&(n._f=o),n._l==r&&(n._l=i),n[v]--}return!!r},forEach:function(t){d(this,e);for(var n,r=a(t,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(r(n.v,n.k,this);n&&n.r;)n=n.p},has:function(t){return!!y(d(this,e),t)}}),p&&r(f.prototype,"size",{get:function(){return d(this,e)[v]}}),f},def:function(t,e,n){var r,o,i=y(t,e);return i?i.v=n:(t._l=i={i:o=h(e,!0),k:e,v:n,p:r=t._l,n:void 0,r:!1},t._f||(t._f=i),r&&(r.n=i),t[v]++,"F"!==o&&(t._i[o]=i)),t},getEntry:y,setStrong:function(t,e,n){s(t,e,(function(t,n){this._t=d(t,e),this._k=n,this._l=void 0}),(function(){for(var t=this._k,e=this._l;e&&e.r;)e=e.p;return this._t&&(this._l=e=e?e.n:this._t._f)?f(0,"keys"==t?e.k:"values"==t?e.v:[e.k,e.v]):(this._t=void 0,f(1))}),n?"entries":"values",!n,!0),l(e)}}},function(t,e,n){"use strict";var r=n(241),o=n(111);t.exports=n(137)("Set",(function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}}),{add:function(t){return r.def(o(this,"Set"),t=0===t?0:t,t)}},r)},function(t,e,n){"use strict";var r,o=n(69)(0),i=n(51),a=n(82),u=n(200),c=n(244),s=n(22),f=n(21),l=n(111),p=a.getWeak,h=Object.isExtensible,d=c.ufstore,v={},y=function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},g={get:function(t){if(s(t)){var e=p(t);return!0===e?d(l(this,"WeakMap")).get(t):e?e[this._i]:void 0}},set:function(t,e){return c.def(l(this,"WeakMap"),t,e)}},m=t.exports=n(137)("WeakMap",y,g,c,!0,!0);f((function(){return 7!=(new m).set((Object.freeze||Object)(v),7).get(v)}))&&(u((r=c.getConstructor(y,"WeakMap")).prototype,g),a.NEED=!0,o(["delete","has","get","set"],(function(t){var e=m.prototype,n=e[t];i(e,t,(function(e,o){if(s(e)&&!h(e)){this._f||(this._f=new r);var i=this._f[t](e,o);return"set"==t?this:i}return n.call(this,e,o)}))})))},function(t,e,n){"use strict";var r=n(101),o=n(82).getWeak,i=n(15),a=n(22),u=n(99),c=n(100),s=n(69),f=n(50),l=n(111),p=s(5),h=s(6),d=0,v=function(t){return t._l||(t._l=new y)},y=function(){this.a=[]},g=function(t,e){return p(t.a,(function(t){return t[0]===e}))};y.prototype={get:function(t){var e=g(this,t);if(e)return e[1]},has:function(t){return!!g(this,t)},set:function(t,e){var n=g(this,t);n?n[1]=e:this.a.push([t,e])},delete:function(t){var e=h(this.a,(function(e){return e[0]===t}));return~e&&this.a.splice(e,1),!!~e}},t.exports={getConstructor:function(t,e,n,i){var s=t((function(t,r){u(t,s,e,"_i"),t._t=e,t._i=d++,t._l=void 0,null!=r&&c(r,n,t[i],t)}));return r(s.prototype,{delete:function(t){if(!a(t))return!1;var n=o(t);return!0===n?v(l(this,e)).delete(t):n&&f(n,this._i)&&delete n[this._i]},has:function(t){if(!a(t))return!1;var n=o(t);return!0===n?v(l(this,e)).has(t):n&&f(n,this._i)}}),s},def:function(t,e,n){var r=o(i(e),!0);return!0===r?v(t).set(e,n):r[t._i]=n,t},ufstore:v}},function(t,e,n){var r=n(63),o=n(31);t.exports=function(t){if(void 0===t)return 0;var e=r(t),n=o(e);if(e!==n)throw RangeError("Wrong length!");return n}},function(t,e,n){var r=n(92),o=n(132),i=n(15),a=n(20).Reflect;t.exports=a&&a.ownKeys||function(t){var e=r.f(i(t)),n=o.f;return n?e.concat(n(t)):e}},,,,,,,,,,,,,,,,,,,,,,,function(t,e,n){var r=n(178),o=Math.pow,i=o(2,-52),a=o(2,-23),u=o(2,127)*(2-a),c=o(2,-126);t.exports=Math.fround||function(t){var e,n,o=Math.abs(t),s=r(t);return ou||n!=n?s*(1/0):s*n}},function(t,e){t.exports=function(t){try{return{e:!1,v:t()}}catch(e){return{e:!0,v:e}}}},function(t,e,n){var r=n(15),o=n(22),i=n(207);t.exports=function(t,e){if(r(t),o(e)&&e.constructor===t)return e;var n=i.f(t);return(0,n.resolve)(e),n.promise}},function(t,e,n){var r=n(100);t.exports=function(t,e){var n=[];return r(t,!1,n.push,n,e),n}},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(t,e,n){"use strict";var r=n(20),o=n(50),i=n(35),a=n(2),u=n(51),c=n(82).KEY,s=n(21),f=n(131),l=n(109),p=n(89),h=n(27),d=n(221),v=n(222),y=n(314),g=n(151),m=n(15),b=n(22),_=n(52),w=n(75),S=n(85),k=n(83),E=n(225),x=n(59),T=n(33),O=n(90),A=x.f,M=T.f,P=E.f,j=r.Symbol,D=r.JSON,C=D&&D.stringify,F=h("_hidden"),I=h("toPrimitive"),R={}.propertyIsEnumerable,N=f("symbol-registry"),L=f("symbols"),Z=f("op-symbols"),U=Object.prototype,z="function"==typeof j,B=r.QObject,H=!B||!B.prototype||!B.prototype.findChild,W=i&&s((function(){return 7!=k(M({},"a",{get:function(){return M(this,"a",{value:7}).a}})).a}))?function(t,e,n){var r=A(U,e);r&&delete U[e],M(t,e,n),r&&t!==U&&M(U,e,r)}:M,K=function(t){var e=L[t]=k(j.prototype);return e._k=t,e},G=z&&"symbol"==typeof j.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof j},J=function(t,e,n){return t===U&&J(Z,e,n),m(t),e=w(e,!0),m(n),o(L,e)?(n.enumerable?(o(t,F)&&t[F][e]&&(t[F][e]=!1),n=k(n,{enumerable:S(0,!1)})):(o(t,F)||M(t,F,S(1,{})),t[F][e]=!0),W(t,e,n)):M(t,e,n)},V=function(t,e){m(t);for(var n,r=y(e=_(e)),o=0,i=r.length;i>o;)J(t,n=r[o++],e[n]);return t},q=function(t){var e=R.call(this,t=w(t,!0));return!(this===U&&o(L,t)&&!o(Z,t))&&(!(e||!o(this,t)||!o(L,t)||o(this,F)&&this[F][t])||e)},Y=function(t,e){if(t=_(t),e=w(e,!0),t!==U||!o(L,e)||o(Z,e)){var n=A(t,e);return!n||!o(L,e)||o(t,F)&&t[F][e]||(n.enumerable=!0),n}},X=function(t){for(var e,n=P(_(t)),r=[],i=0;n.length>i;)o(L,e=n[i++])||e==F||e==c||r.push(e);return r},$=function(t){for(var e,n=t===U,r=P(n?Z:_(t)),i=[],a=0;r.length>a;)!o(L,e=r[a++])||n&&!o(U,e)||i.push(L[e]);return i};z||(u((j=function(){if(this instanceof j)throw TypeError("Symbol is not a constructor!");var t=p(arguments.length>0?arguments[0]:void 0),e=function(n){this===U&&e.call(Z,n),o(this,F)&&o(this[F],t)&&(this[F][t]=!1),W(this,t,S(1,n))};return i&&H&&W(U,t,{configurable:!0,set:e}),K(t)}).prototype,"toString",(function(){return this._k})),x.f=Y,T.f=J,n(92).f=E.f=X,n(123).f=q,n(132).f=$,i&&!n(86)&&u(U,"propertyIsEnumerable",q,!0),d.f=function(t){return K(h(t))}),a(a.G+a.W+a.F*!z,{Symbol:j});for(var Q="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),tt=0;Q.length>tt;)h(Q[tt++]);for(var et=O(h.store),nt=0;et.length>nt;)v(et[nt++]);a(a.S+a.F*!z,"Symbol",{for:function(t){return o(N,t+="")?N[t]:N[t]=j(t)},keyFor:function(t){if(!G(t))throw TypeError(t+" is not a symbol!");for(var e in N)if(N[e]===t)return e},useSetter:function(){H=!0},useSimple:function(){H=!1}}),a(a.S+a.F*!z,"Object",{create:function(t,e){return void 0===e?k(t):V(k(t),e)},defineProperty:J,defineProperties:V,getOwnPropertyDescriptor:Y,getOwnPropertyNames:X,getOwnPropertySymbols:$}),D&&a(a.S+a.F*(!z||s((function(){var t=j();return"[null]"!=C([t])||"{}"!=C({a:t})||"{}"!=C(Object(t))}))),"JSON",{stringify:function(t){for(var e,n,r=[t],o=1;arguments.length>o;)r.push(arguments[o++]);if(n=e=r[1],(b(e)||void 0!==t)&&!G(t))return g(e)||(e=function(t,e){if("function"==typeof n&&(e=n.call(this,t,e)),!G(e))return e}),r[1]=e,C.apply(D,r)}}),j.prototype[I]||n(56)(j.prototype,I,j.prototype.valueOf),l(j,"Symbol"),l(Math,"Math",!0),l(r.JSON,"JSON",!0)},function(t,e,n){var r=n(90),o=n(132),i=n(123);t.exports=function(t){var e=r(t),n=o.f;if(n)for(var a,u=n(t),c=i.f,s=0;u.length>s;)c.call(t,a=u[s++])&&e.push(a);return e}},function(t,e,n){var r=n(2);r(r.S,"Object",{create:n(83)})},function(t,e,n){var r=n(2);r(r.S+r.F*!n(35),"Object",{defineProperty:n(33).f})},function(t,e,n){var r=n(2);r(r.S+r.F*!n(35),"Object",{defineProperties:n(224)})},function(t,e,n){var r=n(52),o=n(59).f;n(68)("getOwnPropertyDescriptor",(function(){return function(t,e){return o(r(t),e)}}))},function(t,e,n){var r=n(42),o=n(57);n(68)("getPrototypeOf",(function(){return function(t){return o(r(t))}}))},function(t,e,n){var r=n(42),o=n(90);n(68)("keys",(function(){return function(t){return o(r(t))}}))},function(t,e,n){n(68)("getOwnPropertyNames",(function(){return n(225).f}))},function(t,e,n){var r=n(22),o=n(82).onFreeze;n(68)("freeze",(function(t){return function(e){return t&&r(e)?t(o(e)):e}}))},function(t,e,n){var r=n(22),o=n(82).onFreeze;n(68)("seal",(function(t){return function(e){return t&&r(e)?t(o(e)):e}}))},function(t,e,n){var r=n(22),o=n(82).onFreeze;n(68)("preventExtensions",(function(t){return function(e){return t&&r(e)?t(o(e)):e}}))},function(t,e,n){var r=n(22);n(68)("isFrozen",(function(t){return function(e){return!r(e)||!!t&&t(e)}}))},function(t,e,n){var r=n(22);n(68)("isSealed",(function(t){return function(e){return!r(e)||!!t&&t(e)}}))},function(t,e,n){var r=n(22);n(68)("isExtensible",(function(t){return function(e){return!!r(e)&&(!t||t(e))}}))},function(t,e,n){var r=n(2);r(r.S+r.F,"Object",{assign:n(200)})},function(t,e,n){var r=n(2);r(r.S,"Object",{is:n(226)})},function(t,e,n){var r=n(2);r(r.S,"Object",{setPrototypeOf:n(175).set})},function(t,e,n){"use strict";var r=n(96),o={};o[n(27)("toStringTag")]="z",o+""!="[object z]"&&n(51)(Object.prototype,"toString",(function(){return"[object "+r(this)+"]"}),!0)},function(t,e,n){var r=n(2);r(r.P,"Function",{bind:n(227)})},function(t,e,n){var r=n(33).f,o=Function.prototype,i=/^\s*function ([^ (]*)/;"name"in o||n(35)&&r(o,"name",{configurable:!0,get:function(){try{return(""+this).match(i)[1]}catch(t){return""}}})},function(t,e,n){"use strict";var r=n(22),o=n(57),i=n(27)("hasInstance"),a=Function.prototype;i in a||n(33).f(a,i,{value:function(t){if("function"!=typeof this||!r(t))return!1;if(!r(this.prototype))return t instanceof this;for(;t=o(t);)if(this.prototype===t)return!0;return!1}})},function(t,e,n){var r=n(2),o=n(228);r(r.G+r.F*(parseInt!=o),{parseInt:o})},function(t,e,n){var r=n(2),o=n(229);r(r.G+r.F*(parseFloat!=o),{parseFloat:o})},function(t,e,n){"use strict";var r=n(20),o=n(50),i=n(67),a=n(177),u=n(75),c=n(21),s=n(92).f,f=n(59).f,l=n(33).f,p=n(116).trim,h=r.Number,d=h,v=h.prototype,y="Number"==i(n(83)(v)),g="trim"in String.prototype,m=function(t){var e=u(t,!1);if("string"==typeof e&&e.length>2){var n,r,o,i=(e=g?e.trim():p(e,3)).charCodeAt(0);if(43===i||45===i){if(88===(n=e.charCodeAt(2))||120===n)return NaN}else if(48===i){switch(e.charCodeAt(1)){case 66:case 98:r=2,o=49;break;case 79:case 111:r=8,o=55;break;default:return+e}for(var a,c=e.slice(2),s=0,f=c.length;so)return NaN;return parseInt(c,r)}}return+e};if(!h(" 0o1")||!h("0b1")||h("+0x1")){h=function(t){var e=arguments.length<1?0:t,n=this;return n instanceof h&&(y?c((function(){v.valueOf.call(n)})):"Number"!=i(n))?a(new d(m(e)),n,h):m(e)};for(var b,_=n(35)?s(d):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),w=0;_.length>w;w++)o(d,b=_[w])&&!o(h,b)&&l(h,b,f(d,b));h.prototype=v,v.constructor=h,n(51)(r,"Number",h)}},function(t,e,n){"use strict";var r=n(2),o=n(63),i=n(230),a=n(202),u=1..toFixed,c=Math.floor,s=[0,0,0,0,0,0],f="Number.toFixed: incorrect invocation!",l=function(t,e){for(var n=-1,r=e;++n<6;)r+=t*s[n],s[n]=r%1e7,r=c(r/1e7)},p=function(t){for(var e=6,n=0;--e>=0;)n+=s[e],s[e]=c(n/t),n=n%t*1e7},h=function(){for(var t=6,e="";--t>=0;)if(""!==e||0===t||0!==s[t]){var n=String(s[t]);e=""===e?n:e+a.call("0",7-n.length)+n}return e},d=function(t,e,n){return 0===e?n:e%2==1?d(t,e-1,n*t):d(t*t,e/2,n)};r(r.P+r.F*(!!u&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!n(21)((function(){u.call({})}))),"Number",{toFixed:function(t){var e,n,r,u,c=i(this,f),s=o(t),v="",y="0";if(s<0||s>20)throw RangeError(f);if(c!=c)return"NaN";if(c<=-1e21||c>=1e21)return String(c);if(c<0&&(v="-",c=-c),c>1e-21)if(n=(e=function(t){for(var e=0,n=t;n>=4096;)e+=12,n/=4096;for(;n>=2;)e+=1,n/=2;return e}(c*d(2,69,1))-69)<0?c*d(2,-e,1):c/d(2,e,1),n*=4503599627370496,(e=52-e)>0){for(l(0,n),r=s;r>=7;)l(1e7,0),r-=7;for(l(d(10,r,1),0),r=e-1;r>=23;)p(1<<23),r-=23;p(1<0?v+((u=y.length)<=s?"0."+a.call("0",s-u)+y:y.slice(0,u-s)+"."+y.slice(u-s)):v+y}})},function(t,e,n){"use strict";var r=n(2),o=n(21),i=n(230),a=1..toPrecision;r(r.P+r.F*(o((function(){return"1"!==a.call(1,void 0)}))||!o((function(){a.call({})}))),"Number",{toPrecision:function(t){var e=i(this,"Number#toPrecision: incorrect invocation!");return void 0===t?a.call(e):a.call(e,t)}})},function(t,e,n){var r=n(2);r(r.S,"Number",{EPSILON:Math.pow(2,-52)})},function(t,e,n){var r=n(2),o=n(20).isFinite;r(r.S,"Number",{isFinite:function(t){return"number"==typeof t&&o(t)}})},function(t,e,n){var r=n(2);r(r.S,"Number",{isInteger:n(231)})},function(t,e,n){var r=n(2);r(r.S,"Number",{isNaN:function(t){return t!=t}})},function(t,e,n){var r=n(2),o=n(231),i=Math.abs;r(r.S,"Number",{isSafeInteger:function(t){return o(t)&&i(t)<=9007199254740991}})},function(t,e,n){var r=n(2);r(r.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},function(t,e,n){var r=n(2);r(r.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},function(t,e,n){var r=n(2),o=n(229);r(r.S+r.F*(Number.parseFloat!=o),"Number",{parseFloat:o})},function(t,e,n){var r=n(2),o=n(228);r(r.S+r.F*(Number.parseInt!=o),"Number",{parseInt:o})},function(t,e,n){var r=n(2),o=n(232),i=Math.sqrt,a=Math.acosh;r(r.S+r.F*!(a&&710==Math.floor(a(Number.MAX_VALUE))&&a(1/0)==1/0),"Math",{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:o(t-1+i(t-1)*i(t+1))}})},function(t,e,n){var r=n(2),o=Math.asinh;r(r.S+r.F*!(o&&1/o(0)>0),"Math",{asinh:function t(e){return isFinite(e=+e)&&0!=e?e<0?-t(-e):Math.log(e+Math.sqrt(e*e+1)):e}})},function(t,e,n){var r=n(2),o=Math.atanh;r(r.S+r.F*!(o&&1/o(-0)<0),"Math",{atanh:function(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}})},function(t,e,n){var r=n(2),o=n(178);r(r.S,"Math",{cbrt:function(t){return o(t=+t)*Math.pow(Math.abs(t),1/3)}})},function(t,e,n){var r=n(2);r(r.S,"Math",{clz32:function(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},function(t,e,n){var r=n(2),o=Math.exp;r(r.S,"Math",{cosh:function(t){return(o(t=+t)+o(-t))/2}})},function(t,e,n){var r=n(2),o=n(179);r(r.S+r.F*(o!=Math.expm1),"Math",{expm1:o})},function(t,e,n){var r=n(2);r(r.S,"Math",{fround:n(269)})},function(t,e,n){var r=n(2),o=Math.abs;r(r.S,"Math",{hypot:function(t,e){for(var n,r,i=0,a=0,u=arguments.length,c=0;a0?(r=n/c)*r:n;return c===1/0?1/0:c*Math.sqrt(i)}})},function(t,e,n){var r=n(2),o=Math.imul;r(r.S+r.F*n(21)((function(){return-5!=o(4294967295,5)||2!=o.length})),"Math",{imul:function(t,e){var n=+t,r=+e,o=65535&n,i=65535&r;return 0|o*i+((65535&n>>>16)*i+o*(65535&r>>>16)<<16>>>0)}})},function(t,e,n){var r=n(2);r(r.S,"Math",{log10:function(t){return Math.log(t)*Math.LOG10E}})},function(t,e,n){var r=n(2);r(r.S,"Math",{log1p:n(232)})},function(t,e,n){var r=n(2);r(r.S,"Math",{log2:function(t){return Math.log(t)/Math.LN2}})},function(t,e,n){var r=n(2);r(r.S,"Math",{sign:n(178)})},function(t,e,n){var r=n(2),o=n(179),i=Math.exp;r(r.S+r.F*n(21)((function(){return-2e-17!=!Math.sinh(-2e-17)})),"Math",{sinh:function(t){return Math.abs(t=+t)<1?(o(t)-o(-t))/2:(i(t-1)-i(-t-1))*(Math.E/2)}})},function(t,e,n){var r=n(2),o=n(179),i=Math.exp;r(r.S,"Math",{tanh:function(t){var e=o(t=+t),n=o(-t);return e==1/0?1:n==1/0?-1:(e-n)/(i(t)+i(-t))}})},function(t,e,n){var r=n(2);r(r.S,"Math",{trunc:function(t){return(t>0?Math.floor:Math.ceil)(t)}})},function(t,e,n){var r=n(2),o=n(91),i=String.fromCharCode,a=String.fromCodePoint;r(r.S+r.F*(!!a&&1!=a.length),"String",{fromCodePoint:function(t){for(var e,n=[],r=arguments.length,a=0;r>a;){if(e=+arguments[a++],o(e,1114111)!==e)throw RangeError(e+" is not a valid code point");n.push(e<65536?i(e):i(55296+((e-=65536)>>10),e%1024+56320))}return n.join("")}})},function(t,e,n){var r=n(2),o=n(52),i=n(31);r(r.S,"String",{raw:function(t){for(var e=o(t.raw),n=i(e.length),r=arguments.length,a=[],u=0;n>u;)a.push(String(e[u++])),u=e.length?{value:void 0,done:!0}:(t=r(e,n),this._i+=t.length,{value:t,done:!1})}))},function(t,e,n){"use strict";var r=n(2),o=n(152)(!1);r(r.P,"String",{codePointAt:function(t){return o(this,t)}})},function(t,e,n){"use strict";var r=n(2),o=n(31),i=n(181),a="".endsWith;r(r.P+r.F*n(182)("endsWith"),"String",{endsWith:function(t){var e=i(this,t,"endsWith"),n=arguments.length>1?arguments[1]:void 0,r=o(e.length),u=void 0===n?r:Math.min(o(n),r),c=String(t);return a?a.call(e,c,u):e.slice(u-c.length,u)===c}})},function(t,e,n){"use strict";var r=n(2),o=n(181);r(r.P+r.F*n(182)("includes"),"String",{includes:function(t){return!!~o(this,t,"includes").indexOf(t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){var r=n(2);r(r.P,"String",{repeat:n(202)})},function(t,e,n){"use strict";var r=n(2),o=n(31),i=n(181),a="".startsWith;r(r.P+r.F*n(182)("startsWith"),"String",{startsWith:function(t){var e=i(this,t,"startsWith"),n=o(Math.min(arguments.length>1?arguments[1]:void 0,e.length)),r=String(t);return a?a.call(e,r,n):e.slice(n,n+r.length)===r}})},function(t,e,n){"use strict";n(49)("anchor",(function(t){return function(e){return t(this,"a","name",e)}}))},function(t,e,n){"use strict";n(49)("big",(function(t){return function(){return t(this,"big","","")}}))},function(t,e,n){"use strict";n(49)("blink",(function(t){return function(){return t(this,"blink","","")}}))},function(t,e,n){"use strict";n(49)("bold",(function(t){return function(){return t(this,"b","","")}}))},function(t,e,n){"use strict";n(49)("fixed",(function(t){return function(){return t(this,"tt","","")}}))},function(t,e,n){"use strict";n(49)("fontcolor",(function(t){return function(e){return t(this,"font","color",e)}}))},function(t,e,n){"use strict";n(49)("fontsize",(function(t){return function(e){return t(this,"font","size",e)}}))},function(t,e,n){"use strict";n(49)("italics",(function(t){return function(){return t(this,"i","","")}}))},function(t,e,n){"use strict";n(49)("link",(function(t){return function(e){return t(this,"a","href",e)}}))},function(t,e,n){"use strict";n(49)("small",(function(t){return function(){return t(this,"small","","")}}))},function(t,e,n){"use strict";n(49)("strike",(function(t){return function(){return t(this,"strike","","")}}))},function(t,e,n){"use strict";n(49)("sub",(function(t){return function(){return t(this,"sub","","")}}))},function(t,e,n){"use strict";n(49)("sup",(function(t){return function(){return t(this,"sup","","")}}))},function(t,e,n){var r=n(2);r(r.S,"Date",{now:function(){return(new Date).getTime()}})},function(t,e,n){"use strict";var r=n(2),o=n(42),i=n(75);r(r.P+r.F*n(21)((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})})),"Date",{toJSON:function(t){var e=o(this),n=i(e);return"number"!=typeof n||isFinite(n)?e.toISOString():null}})},function(t,e,n){var r=n(2),o=n(391);r(r.P+r.F*(Date.prototype.toISOString!==o),"Date",{toISOString:o})},function(t,e,n){"use strict";var r=n(21),o=Date.prototype.getTime,i=Date.prototype.toISOString,a=function(t){return t>9?t:"0"+t};t.exports=r((function(){return"0385-07-25T07:06:39.999Z"!=i.call(new Date(-50000000000001))}))||!r((function(){i.call(new Date(NaN))}))?function(){if(!isFinite(o.call(this)))throw RangeError("Invalid time value");var t=this,e=t.getUTCFullYear(),n=t.getUTCMilliseconds(),r=e<0?"-":e>9999?"+":"";return r+("00000"+Math.abs(e)).slice(r?-6:-4)+"-"+a(t.getUTCMonth()+1)+"-"+a(t.getUTCDate())+"T"+a(t.getUTCHours())+":"+a(t.getUTCMinutes())+":"+a(t.getUTCSeconds())+"."+(n>99?n:"0"+a(n))+"Z"}:i},function(t,e,n){var r=Date.prototype,o=r.toString,i=r.getTime;new Date(NaN)+""!="Invalid Date"&&n(51)(r,"toString",(function(){var t=i.call(this);return t==t?o.call(this):"Invalid Date"}))},function(t,e,n){var r=n(27)("toPrimitive"),o=Date.prototype;r in o||n(56)(o,r,n(394))},function(t,e,n){"use strict";var r=n(15),o=n(75);t.exports=function(t){if("string"!==t&&"number"!==t&&"default"!==t)throw TypeError("Incorrect hint");return o(r(this),"number"!=t)}},function(t,e,n){var r=n(2);r(r.S,"Array",{isArray:n(151)})},function(t,e,n){"use strict";var r=n(62),o=n(2),i=n(42),a=n(233),u=n(183),c=n(31),s=n(203),f=n(133);o(o.S+o.F*!n(134)((function(t){Array.from(t)})),"Array",{from:function(t){var e,n,o,l,p=i(t),h="function"==typeof this?this:Array,d=arguments.length,v=d>1?arguments[1]:void 0,y=void 0!==v,g=0,m=f(p);if(y&&(v=r(v,d>2?arguments[2]:void 0,2)),null==m||h==Array&&u(m))for(n=new h(e=c(p.length));e>g;g++)s(n,g,y?v(p[g],g):p[g]);else for(l=m.call(p),n=new h;!(o=l.next()).done;g++)s(n,g,y?a(l,v,[o.value,g],!0):o.value);return n.length=g,n}})},function(t,e,n){"use strict";var r=n(2),o=n(203);r(r.S+r.F*n(21)((function(){function t(){}return!(Array.of.call(t)instanceof t)})),"Array",{of:function(){for(var t=0,e=arguments.length,n=new("function"==typeof this?this:Array)(e);e>t;)o(n,t,arguments[t++]);return n.length=e,n}})},function(t,e,n){"use strict";var r=n(2),o=n(52),i=[].join;r(r.P+r.F*(n(115)!=Object||!n(60)(i)),"Array",{join:function(t){return i.call(o(this),void 0===t?",":t)}})},function(t,e,n){"use strict";var r=n(2),o=n(174),i=n(67),a=n(91),u=n(31),c=[].slice;r(r.P+r.F*n(21)((function(){o&&c.call(o)})),"Array",{slice:function(t,e){var n=u(this.length),r=i(this);if(e=void 0===e?n:e,"Array"==r)return c.call(this,t,e);for(var o=a(t,n),s=a(e,n),f=u(s-o),l=new Array(f),p=0;p1&&(r=Math.min(r,i(arguments[1]))),r<0&&(r=n+r);r>=0;r--)if(r in e&&e[r]===t)return r||0;return-1}})},function(t,e,n){var r=n(2);r(r.P,"Array",{copyWithin:n(236)}),n(97)("copyWithin")},function(t,e,n){var r=n(2);r(r.P,"Array",{fill:n(184)}),n(97)("fill")},function(t,e,n){"use strict";var r=n(2),o=n(69)(5),i=!0;"find"in[]&&Array(1).find((function(){i=!1})),r(r.P+r.F*i,"Array",{find:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}}),n(97)("find")},function(t,e,n){"use strict";var r=n(2),o=n(69)(6),i="findIndex",a=!0;i in[]&&Array(1)[i]((function(){a=!1})),r(r.P+r.F*a,"Array",{findIndex:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}}),n(97)(i)},function(t,e,n){n(98)("Array")},function(t,e,n){var r=n(20),o=n(177),i=n(33).f,a=n(92).f,u=n(154),c=n(124),s=r.RegExp,f=s,l=s.prototype,p=/a/g,h=/a/g,d=new s(p)!==p;if(n(35)&&(!d||n(21)((function(){return h[n(27)("match")]=!1,s(p)!=p||s(h)==h||"/a/i"!=s(p,"i")})))){s=function(t,e){var n=this instanceof s,r=u(t),i=void 0===e;return!n&&r&&t.constructor===s&&i?t:o(d?new f(r&&!i?t.source:t,e):f((r=t instanceof s)?t.source:t,r&&i?c.call(t):e),n?this:l,s)};for(var v=function(t){t in s||i(s,t,{configurable:!0,get:function(){return f[t]},set:function(e){f[t]=e}})},y=a(f),g=0;y.length>g;)v(y[g++]);l.constructor=s,s.prototype=l,n(51)(r,"RegExp",s)}n(98)("RegExp")},function(t,e,n){"use strict";n(238);var r=n(15),o=n(124),i=n(35),a=/./.toString,u=function(t){n(51)(RegExp.prototype,"toString",t,!0)};n(21)((function(){return"/a/b"!=a.call({source:"a",flags:"b"})}))?u((function(){var t=r(this);return"/".concat(t.source,"/","flags"in t?t.flags:!i&&t instanceof RegExp?o.call(t):void 0)})):"toString"!=a.name&&u((function(){return a.call(this)}))},function(t,e,n){"use strict";var r=n(15),o=n(31),i=n(186),a=n(135);n(136)("match",1,(function(t,e,n,u){return[function(n){var r=t(this),o=null==n?void 0:n[e];return void 0!==o?o.call(n,r):new RegExp(n)[e](String(r))},function(t){var e=u(n,t,this);if(e.done)return e.value;var c=r(t),s=String(this);if(!c.global)return a(c,s);var f=c.unicode;c.lastIndex=0;for(var l,p=[],h=0;null!==(l=a(c,s));){var d=String(l[0]);p[h]=d,""===d&&(c.lastIndex=i(s,o(c.lastIndex),f)),h++}return 0===h?null:p}]}))},function(t,e,n){"use strict";var r=n(15),o=n(42),i=n(31),a=n(63),u=n(186),c=n(135),s=Math.max,f=Math.min,l=Math.floor,p=/\$([$&`']|\d\d?|<[^>]*>)/g,h=/\$([$&`']|\d\d?)/g;n(136)("replace",2,(function(t,e,n,d){return[function(r,o){var i=t(this),a=null==r?void 0:r[e];return void 0!==a?a.call(r,i,o):n.call(String(i),r,o)},function(t,e){var o=d(n,t,this,e);if(o.done)return o.value;var l=r(t),p=String(this),h="function"==typeof e;h||(e=String(e));var y=l.global;if(y){var g=l.unicode;l.lastIndex=0}for(var m=[];;){var b=c(l,p);if(null===b)break;if(m.push(b),!y)break;""===String(b[0])&&(l.lastIndex=u(p,i(l.lastIndex),g))}for(var _,w="",S=0,k=0;k=S&&(w+=p.slice(S,x)+P,S=x+E.length)}return w+p.slice(S)}];function v(t,e,r,i,a,u){var c=r+t.length,s=i.length,f=h;return void 0!==a&&(a=o(a),f=p),n.call(u,f,(function(n,o){var u;switch(o.charAt(0)){case"$":return"$";case"&":return t;case"`":return e.slice(0,r);case"'":return e.slice(c);case"<":u=a[o.slice(1,-1)];break;default:var f=+o;if(0===f)return n;if(f>s){var p=l(f/10);return 0===p?n:p<=s?void 0===i[p-1]?o.charAt(1):i[p-1]+o.charAt(1):n}u=i[f-1]}return void 0===u?"":u}))}}))},function(t,e,n){"use strict";var r=n(15),o=n(226),i=n(135);n(136)("search",1,(function(t,e,n,a){return[function(n){var r=t(this),o=null==n?void 0:n[e];return void 0!==o?o.call(n,r):new RegExp(n)[e](String(r))},function(t){var e=a(n,t,this);if(e.done)return e.value;var u=r(t),c=String(this),s=u.lastIndex;o(s,0)||(u.lastIndex=0);var f=i(u,c);return o(u.lastIndex,s)||(u.lastIndex=s),null===f?-1:f.index}]}))},function(t,e,n){"use strict";var r=n(154),o=n(15),i=n(125),a=n(186),u=n(31),c=n(135),s=n(185),f=Math.min,l=[].push,p="length",h=!!function(){try{return new RegExp("x","y")}catch(t){}}();n(136)("split",2,(function(t,e,n,d){var v;return v="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1)[p]||2!="ab".split(/(?:ab)*/)[p]||4!=".".split(/(.?)(.?)/)[p]||".".split(/()()/)[p]>1||"".split(/.?/)[p]?function(t,e){var o=String(this);if(void 0===t&&0===e)return[];if(!r(t))return n.call(o,t,e);for(var i,a,u,c=[],f=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),h=0,d=void 0===e?4294967295:e>>>0,v=new RegExp(t.source,f+"g");(i=s.call(v,o))&&!((a=v.lastIndex)>h&&(c.push(o.slice(h,i.index)),i[p]>1&&i.index=d));)v.lastIndex===i.index&&v.lastIndex++;return h===o[p]?!u&&v.test("")||c.push(""):c.push(o.slice(h)),c[p]>d?c.slice(0,d):c}:"0".split(void 0,0)[p]?function(t,e){return void 0===t&&0===e?[]:n.call(this,t,e)}:n,[function(n,r){var o=t(this),i=null==n?void 0:n[e];return void 0!==i?i.call(n,o,r):v.call(String(o),n,r)},function(t,e){var r=d(v,t,this,e,v!==n);if(r.done)return r.value;var s=o(t),l=String(this),p=i(s,RegExp),y=s.unicode,g=(s.ignoreCase?"i":"")+(s.multiline?"m":"")+(s.unicode?"u":"")+(h?"y":"g"),m=new p(h?s:"^(?:"+s.source+")",g),b=void 0===e?4294967295:e>>>0;if(0===b)return[];if(0===l.length)return null===c(m,l)?[l]:[];for(var _=0,w=0,S=[];wi;)a(n[i++]);t._c=[],t._n=!1,e&&!t._h&&F(t)}))}},F=function(t){g.call(c,(function(){var e,n,r,o=t._v,i=I(t);if(i&&(e=_((function(){A?E.emit("unhandledRejection",o,t):(n=c.onunhandledrejection)?n({promise:t,reason:o}):(r=c.console)&&r.error&&r.error("Unhandled promise rejection",o)})),t._h=A||I(t)?2:1),t._a=void 0,i&&e.e)throw e.v}))},I=function(t){return 1!==t._h&&0===(t._a||t._c).length},R=function(t){g.call(c,(function(){var e;A?E.emit("rejectionHandled",t):(e=c.onrejectionhandled)&&e({promise:t,reason:t._v})}))},N=function(t){var e=this;e._d||(e._d=!0,(e=e._w||e)._v=t,e._s=2,e._a||(e._a=e._c.slice()),C(e,!0))},L=function(t){var e,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===t)throw k("Promise can't be resolved itself");(e=D(t))?m((function(){var r={_w:n,_d:!1};try{e.call(t,s(L,r,1),s(N,r,1))}catch(o){N.call(r,o)}})):(n._v=t,n._s=1,C(n,!1))}catch(r){N.call({_w:n,_d:!1},r)}}};j||(O=function(t){d(this,O,"Promise","_h"),h(t),r.call(this);try{t(s(L,this,1),s(N,this,1))}catch(e){N.call(this,e)}},(r=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=n(101)(O.prototype,{then:function(t,e){var n=P(y(this,O));return n.ok="function"!=typeof t||t,n.fail="function"==typeof e&&e,n.domain=A?E.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&C(this,!1),n.promise},catch:function(t){return this.then(void 0,t)}}),i=function(){var t=new r;this.promise=t,this.resolve=s(L,t,1),this.reject=s(N,t,1)},b.f=P=function(t){return t===O||t===a?new i(t):o(t)}),l(l.G+l.W+l.F*!j,{Promise:O}),n(109)(O,"Promise"),n(98)("Promise"),a=n(55).Promise,l(l.S+l.F*!j,"Promise",{reject:function(t){var e=P(this);return(0,e.reject)(t),e.promise}}),l(l.S+l.F*(u||!j),"Promise",{resolve:function(t){return S(u&&this===a?O:this,t)}}),l(l.S+l.F*!(j&&n(134)((function(t){O.all(t).catch(M)}))),"Promise",{all:function(t){var e=this,n=P(e),r=n.resolve,o=n.reject,i=_((function(){var n=[],i=0,a=1;v(t,!1,(function(t){var u=i++,c=!1;n.push(void 0),a++,e.resolve(t).then((function(t){c||(c=!0,n[u]=t,--a||r(n))}),o)})),--a||r(n)}));return i.e&&o(i.v),n.promise},race:function(t){var e=this,n=P(e),r=n.reject,o=_((function(){v(t,!1,(function(t){e.resolve(t).then(n.resolve,r)}))}));return o.e&&r(o.v),n.promise}})},function(t,e,n){"use strict";var r=n(244),o=n(111);n(137)("WeakSet",(function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}}),{add:function(t){return r.def(o(this,"WeakSet"),t,!0)}},r,!1,!0)},function(t,e,n){"use strict";var r=n(2),o=n(138),i=n(187),a=n(15),u=n(91),c=n(31),s=n(22),f=n(20).ArrayBuffer,l=n(125),p=i.ArrayBuffer,h=i.DataView,d=o.ABV&&f.isView,v=p.prototype.slice,y=o.VIEW;r(r.G+r.W+r.F*(f!==p),{ArrayBuffer:p}),r(r.S+r.F*!o.CONSTR,"ArrayBuffer",{isView:function(t){return d&&d(t)||s(t)&&y in t}}),r(r.P+r.U+r.F*n(21)((function(){return!new p(2).slice(1,void 0).byteLength})),"ArrayBuffer",{slice:function(t,e){if(void 0!==v&&void 0===e)return v.call(a(this),t);for(var n=a(this).byteLength,r=u(t,n),o=u(void 0===e?n:e,n),i=new(l(this,p))(c(o-r)),s=new h(this),f=new h(i),d=0;r=e.length)return{value:void 0,done:!0}}while(!((t=e[this._i++])in this._t));return{value:t,done:!1}})),r(r.S,"Reflect",{enumerate:function(t){return new i(t)}})},function(t,e,n){var r=n(59),o=n(57),i=n(50),a=n(2),u=n(22),c=n(15);a(a.S,"Reflect",{get:function t(e,n){var a,s,f=arguments.length<3?e:arguments[2];return c(e)===f?e[n]:(a=r.f(e,n))?i(a,"value")?a.value:void 0!==a.get?a.get.call(f):void 0:u(s=o(e))?t(s,n,f):void 0}})},function(t,e,n){var r=n(59),o=n(2),i=n(15);o(o.S,"Reflect",{getOwnPropertyDescriptor:function(t,e){return r.f(i(t),e)}})},function(t,e,n){var r=n(2),o=n(57),i=n(15);r(r.S,"Reflect",{getPrototypeOf:function(t){return o(i(t))}})},function(t,e,n){var r=n(2);r(r.S,"Reflect",{has:function(t,e){return e in t}})},function(t,e,n){var r=n(2),o=n(15),i=Object.isExtensible;r(r.S,"Reflect",{isExtensible:function(t){return o(t),!i||i(t)}})},function(t,e,n){var r=n(2);r(r.S,"Reflect",{ownKeys:n(246)})},function(t,e,n){var r=n(2),o=n(15),i=Object.preventExtensions;r(r.S,"Reflect",{preventExtensions:function(t){o(t);try{return i&&i(t),!0}catch(e){return!1}}})},function(t,e,n){var r=n(33),o=n(59),i=n(57),a=n(50),u=n(2),c=n(85),s=n(15),f=n(22);u(u.S,"Reflect",{set:function t(e,n,u){var l,p,h=arguments.length<4?e:arguments[3],d=o.f(s(e),n);if(!d){if(f(p=i(e)))return t(p,n,u,h);d=c(0)}if(a(d,"value")){if(!1===d.writable||!f(h))return!1;if(l=o.f(h,n)){if(l.get||l.set||!1===l.writable)return!1;l.value=u,r.f(h,n,l)}else r.f(h,n,c(0,u));return!0}return void 0!==d.set&&(d.set.call(h,u),!0)}})},function(t,e,n){var r=n(2),o=n(175);o&&r(r.S,"Reflect",{setPrototypeOf:function(t,e){o.check(t,e);try{return o.set(t,e),!0}catch(n){return!1}}})},function(t,e,n){var r=n(78),o=n(15),i=r.key,a=r.set;r.exp({defineMetadata:function(t,e,n,r){a(t,e,o(n),i(r))}})},function(t,e,n){var r=n(78),o=n(15),i=r.key,a=r.map,u=r.store;r.exp({deleteMetadata:function(t,e){var n=arguments.length<3?void 0:i(arguments[2]),r=a(o(e),n,!1);if(void 0===r||!r.delete(t))return!1;if(r.size)return!0;var c=u.get(e);return c.delete(n),!!c.size||u.delete(e)}})},function(t,e,n){var r=n(78),o=n(15),i=n(57),a=r.has,u=r.get,c=r.key,s=function(t,e,n){if(a(t,e,n))return u(t,e,n);var r=i(e);return null!==r?s(t,r,n):void 0};r.exp({getMetadata:function(t,e){return s(t,o(e),arguments.length<3?void 0:c(arguments[2]))}})},function(t,e,n){var r=n(242),o=n(272),i=n(78),a=n(15),u=n(57),c=i.keys,s=i.key,f=function(t,e){var n=c(t,e),i=u(t);if(null===i)return n;var a=f(i,e);return a.length?n.length?o(new r(n.concat(a))):a:n};i.exp({getMetadataKeys:function(t){return f(a(t),arguments.length<2?void 0:s(arguments[1]))}})},function(t,e,n){var r=n(78),o=n(15),i=r.get,a=r.key;r.exp({getOwnMetadata:function(t,e){return i(t,o(e),arguments.length<3?void 0:a(arguments[2]))}})},function(t,e,n){var r=n(78),o=n(15),i=r.keys,a=r.key;r.exp({getOwnMetadataKeys:function(t){return i(o(t),arguments.length<2?void 0:a(arguments[1]))}})},function(t,e,n){var r=n(78),o=n(15),i=n(57),a=r.has,u=r.key,c=function(t,e,n){if(a(t,e,n))return!0;var r=i(e);return null!==r&&c(t,r,n)};r.exp({hasMetadata:function(t,e){return c(t,o(e),arguments.length<3?void 0:u(arguments[2]))}})},function(t,e,n){var r=n(78),o=n(15),i=r.has,a=r.key;r.exp({hasOwnMetadata:function(t,e){return i(t,o(e),arguments.length<3?void 0:a(arguments[2]))}})},function(t,e,n){var r=n(78),o=n(15),i=n(47),a=r.key,u=r.set;r.exp({metadata:function(t,e){return function(n,r){u(t,e,(void 0!==r?o:i)(n),a(r))}}})},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),n(747),n(748),n(749),!Element.prototype.matches&&Element.prototype.msMatchesSelector&&(Element.prototype.matches=Element.prototype.msMatchesSelector),n(750),n(751),n(752)},function(t,e,n){n(313),n(315),n(316),n(317),n(318),n(319),n(320),n(321),n(322),n(323),n(324),n(325),n(326),n(327),n(328),n(329),n(330),n(331),n(332),n(333),n(334),n(335),n(336),n(337),n(338),n(339),n(340),n(341),n(342),n(343),n(344),n(345),n(346),n(347),n(348),n(349),n(350),n(351),n(352),n(353),n(354),n(355),n(356),n(357),n(358),n(359),n(360),n(361),n(362),n(363),n(364),n(365),n(366),n(367),n(368),n(369),n(370),n(371),n(372),n(373),n(374),n(375),n(376),n(377),n(378),n(379),n(380),n(381),n(382),n(383),n(384),n(385),n(386),n(387),n(388),n(389),n(390),n(392),n(393),n(395),n(396),n(397),n(398),n(399),n(400),n(401),n(403),n(404),n(405),n(406),n(407),n(408),n(409),n(410),n(411),n(412),n(413),n(414),n(415),n(204),n(416),n(237),n(417),n(238),n(418),n(419),n(420),n(421),n(422),n(240),n(242),n(243),n(423),n(424),n(425),n(426),n(427),n(428),n(429),n(430),n(431),n(432),n(433),n(434),n(435),n(436),n(437),n(438),n(439),n(440),n(441),n(442),n(443),n(444),n(445),n(446),n(447),n(448),t.exports=n(55)},function(t,e,n){n(449),n(450),n(451),n(452),n(453),n(454),n(455),n(456),n(457),t.exports=n(55).Reflect},function(t,e,n){(function(r){var o,i; -/** -* @license Angular v9.1.0-next.4+61.sha-e552591.with-local-changes -* (c) 2010-2020 Google LLC. https://angular.io/ -* License: MIT -*/void 0===(i="function"==typeof(o=function(){"use strict"; -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */!function(t){var e=t.performance;function n(t){e&&e.mark&&e.mark(t)}function r(t,n){e&&e.measure&&e.measure(t,n)}n("Zone");var o=t.__Zone_symbol_prefix||"__zone_symbol__";function i(t){return o+t}var a=!0===t[i("forceDuplicateZoneCheck")];if(t.Zone){if(a||"function"!=typeof t.Zone.__symbol__)throw new Error("Zone already loaded.");return t.Zone}var u=function(){function e(t,e){this._parent=t,this._name=e?e.name||"unnamed":"",this._properties=e&&e.properties||{},this._zoneDelegate=new f(this,this._parent&&this._parent._zoneDelegate,e)}return e.assertZonePatched=function(){if(t.Promise!==M.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")},Object.defineProperty(e,"root",{get:function(){for(var t=e.current;t.parent;)t=t.parent;return t},enumerable:!0,configurable:!0}),Object.defineProperty(e,"current",{get:function(){return j.zone},enumerable:!0,configurable:!0}),Object.defineProperty(e,"currentTask",{get:function(){return D},enumerable:!0,configurable:!0}),e.__load_patch=function(o,i){if(M.hasOwnProperty(o)){if(a)throw Error("Already loaded patch: "+o)}else if(!t["__Zone_disable_"+o]){var u="Zone:"+o;n(u),M[o]=i(t,e,P),r(u,u)}},Object.defineProperty(e.prototype,"parent",{get:function(){return this._parent},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"name",{get:function(){return this._name},enumerable:!0,configurable:!0}),e.prototype.get=function(t){var e=this.getZoneWith(t);if(e)return e._properties[t]},e.prototype.getZoneWith=function(t){for(var e=this;e;){if(e._properties.hasOwnProperty(t))return e;e=e._parent}return null},e.prototype.fork=function(t){if(!t)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,t)},e.prototype.wrap=function(t,e){if("function"!=typeof t)throw new Error("Expecting function got: "+t);var n=this._zoneDelegate.intercept(this,t,e),r=this;return function(){return r.runGuarded(n,this,arguments,e)}},e.prototype.run=function(t,e,n,r){j={parent:j,zone:this};try{return this._zoneDelegate.invoke(this,t,e,n,r)}finally{j=j.parent}},e.prototype.runGuarded=function(t,e,n,r){void 0===e&&(e=null),j={parent:j,zone:this};try{try{return this._zoneDelegate.invoke(this,t,e,n,r)}catch(o){if(this._zoneDelegate.handleError(this,o))throw o}}finally{j=j.parent}},e.prototype.runTask=function(t,e,n){if(t.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(t.zone||b).name+"; Execution: "+this.name+")");if(t.state!==_||t.type!==A&&t.type!==O){var r=t.state!=k;r&&t._transitionTo(k,S),t.runCount++;var o=D;D=t,j={parent:j,zone:this};try{t.type==O&&t.data&&!t.data.isPeriodic&&(t.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,t,e,n)}catch(i){if(this._zoneDelegate.handleError(this,i))throw i}}finally{t.state!==_&&t.state!==x&&(t.type==A||t.data&&t.data.isPeriodic?r&&t._transitionTo(S,k):(t.runCount=0,this._updateTaskCount(t,-1),r&&t._transitionTo(_,k,_))),j=j.parent,D=o}}},e.prototype.scheduleTask=function(t){if(t.zone&&t.zone!==this)for(var e=this;e;){if(e===t.zone)throw Error("can not reschedule task to "+this.name+" which is descendants of the original zone "+t.zone.name);e=e.parent}t._transitionTo(w,_);var n=[];t._zoneDelegates=n,t._zone=this;try{t=this._zoneDelegate.scheduleTask(this,t)}catch(r){throw t._transitionTo(x,w,_),this._zoneDelegate.handleError(this,r),r}return t._zoneDelegates===n&&this._updateTaskCount(t,1),t.state==w&&t._transitionTo(S,w),t},e.prototype.scheduleMicroTask=function(t,e,n,r){return this.scheduleTask(new l(T,t,e,n,r,void 0))},e.prototype.scheduleMacroTask=function(t,e,n,r,o){return this.scheduleTask(new l(O,t,e,n,r,o))},e.prototype.scheduleEventTask=function(t,e,n,r,o){return this.scheduleTask(new l(A,t,e,n,r,o))},e.prototype.cancelTask=function(t){if(t.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(t.zone||b).name+"; Execution: "+this.name+")");t._transitionTo(E,S,k);try{this._zoneDelegate.cancelTask(this,t)}catch(e){throw t._transitionTo(x,E),this._zoneDelegate.handleError(this,e),e}return this._updateTaskCount(t,-1),t._transitionTo(_,E),t.runCount=0,t},e.prototype._updateTaskCount=function(t,e){var n=t._zoneDelegates;-1==e&&(t._zoneDelegates=null);for(var r=0;r0,macroTask:n.macroTask>0,eventTask:n.eventTask>0,change:t};this.hasTask(this.zone,i)}},t}(),l=function(){function e(n,r,o,i,a,u){if(this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state="notScheduled",this.type=n,this.source=r,this.data=i,this.scheduleFn=a,this.cancelFn=u,!o)throw new Error("callback is not defined");this.callback=o;var c=this;n===A&&i&&i.useG?this.invoke=e.invokeTask:this.invoke=function(){return e.invokeTask.call(t,c,this,arguments)}}return e.invokeTask=function(t,e,n){t||(t=this),C++;try{return t.runCount++,t.zone.runTask(t,e,n)}finally{1==C&&m(),C--}},Object.defineProperty(e.prototype,"zone",{get:function(){return this._zone},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"state",{get:function(){return this._state},enumerable:!0,configurable:!0}),e.prototype.cancelScheduleRequest=function(){this._transitionTo(_,w)},e.prototype._transitionTo=function(t,e,n){if(this._state!==e&&this._state!==n)throw new Error(this.type+" '"+this.source+"': can not transition to '"+t+"', expecting state '"+e+"'"+(n?" or '"+n+"'":"")+", was '"+this._state+"'.");this._state=t,t==_&&(this._zoneDelegates=null)},e.prototype.toString=function(){return this.data&&void 0!==this.data.handleId?this.data.handleId.toString():Object.prototype.toString.call(this)},e.prototype.toJSON=function(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,runCount:this.runCount}},e}(),p=i("setTimeout"),h=i("Promise"),d=i("then"),v=[],y=!1;function g(e){if(0===C&&0===v.length)if(c||t[h]&&(c=t[h].resolve(0)),c){var n=c[d];n||(n=c.then),n.call(c,m)}else t[p](m,0);e&&v.push(e)}function m(){if(!y){for(y=!0;v.length;){var t=v;v=[];for(var e=0;e=0;n--)"function"==typeof t[n]&&(t[n]=s(t[n],e+"_"+n));return t}function g(t){return!t||!1!==t.writable&&!("function"==typeof t.get&&void 0===t.set)}var m="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,b=!("nw"in d)&&void 0!==d.process&&"[object process]"==={}.toString.call(d.process),_=!b&&!m&&!(!p||!h.HTMLElement),w=void 0!==d.process&&"[object process]"==={}.toString.call(d.process)&&!m&&!(!p||!h.HTMLElement),S={},k=function(t){if(t=t||d.event){var e=S[t.type];e||(e=S[t.type]=l("ON_PROPERTY"+t.type));var n,r=this||t.target||d,o=r[e];if(_&&r===h&&"error"===t.type){var i=t;!0===(n=o&&o.call(this,i.message,i.filename,i.lineno,i.colno,i.error))&&t.preventDefault()}else null==(n=o&&o.apply(this,arguments))||n||t.preventDefault();return n}};function E(n,r,o){var i=t(n,r);if(!i&&o&&t(o,r)&&(i={enumerable:!0,configurable:!0}),i&&i.configurable){var a=l("on"+r+"patched");if(!n.hasOwnProperty(a)||!n[a]){delete i.writable,delete i.value;var u=i.get,c=i.set,s=r.substr(2),f=S[s];f||(f=S[s]=l("ON_PROPERTY"+s)),i.set=function(t){var e=this;e||n!==d||(e=d),e&&(e[f]&&e.removeEventListener(s,k),c&&c.apply(e,v),"function"==typeof t?(e[f]=t,e.addEventListener(s,k,!1)):e[f]=null)},i.get=function(){var t=this;if(t||n!==d||(t=d),!t)return null;var e=t[f];if(e)return e;if(u){var o=u&&u.call(this);if(o)return i.set.call(this,o),"function"==typeof t.removeAttribute&&t.removeAttribute(r),o}return null},e(n,r,i),n[a]=!0}}}function x(t,e,n){if(e)for(var r=0;r=0&&"function"==typeof r[i.cbIdx]?f(i.name,r[i.cbIdx],i,o):t.apply(e,r)}}))}function P(t,e){t[l("OriginalDelegate")]=e}var j=!1,D=!1;function C(){try{var t=h.navigator.userAgent;if(-1!==t.indexOf("MSIE ")||-1!==t.indexOf("Trident/"))return!0}catch(e){}return!1}function F(){if(j)return D;j=!0;try{var t=h.navigator.userAgent;-1===t.indexOf("MSIE ")&&-1===t.indexOf("Trident/")&&-1===t.indexOf("Edge/")||(D=!0)}catch(e){}return D} -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */Zone.__load_patch("toString",(function(t){var e=Function.prototype.toString,n=l("OriginalDelegate"),r=l("Promise"),o=l("Error"),i=function(){if("function"==typeof this){var i=this[n];if(i)return"function"==typeof i?e.call(i):Object.prototype.toString.call(i);if(this===Promise){var a=t[r];if(a)return e.call(a)}if(this===Error){var u=t[o];if(u)return e.call(u)}}return e.call(this)};i[n]=e,Function.prototype.toString=i;var a=Object.prototype.toString;Object.prototype.toString=function(){return this instanceof Promise?"[object Promise]":a.call(this)}})); -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var I=!1;if("undefined"!=typeof window)try{var R=Object.defineProperty({},"passive",{get:function(){I=!0}});window.addEventListener("test",R,R),window.removeEventListener("test",R,R)}catch(wt){I=!1}var N={useG:!0},L={},Z={},U=new RegExp("^"+c+"(\\w+)(true|false)$"),z=l("propagationStopped");function B(t,e){var n=(e?e(t):t)+"false",r=(e?e(t):t)+"true",o=c+n,i=c+r;L[t]={},L[t].false=o,L[t].true=i}function H(t,e,r){var o=r&&r.add||"addEventListener",i=r&&r.rm||"removeEventListener",a=r&&r.listeners||"eventListeners",u=r&&r.rmAll||"removeAllListeners",s=l(o),f="."+o+":",p=function(t,e,n){if(!t.isRemoved){var r=t.callback;"object"==typeof r&&r.handleEvent&&(t.callback=function(t){return r.handleEvent(t)},t.originalDelegate=r),t.invoke(t,e,[n]);var o=t.options;if(o&&"object"==typeof o&&o.once){var a=t.originalDelegate?t.originalDelegate:t.callback;e[i].call(e,n.type,a,o)}}},h=function(e){if(e=e||t.event){var n=this||e.target||t,r=n[L[e.type].false];if(r)if(1===r.length)p(r[0],n,e);else for(var o=r.slice(),i=0;i1?new i(e,n):new i(e),s=t.ObjectGetOwnPropertyDescriptor(c,"onmessage");return s&&!1===s.configurable?(a=t.ObjectCreate(c),u=c,[r,o,"send","close"].forEach((function(e){a[e]=function(){var n=t.ArraySlice.call(arguments);if(e===r||e===o){var i=n.length>0?n[0]:void 0;if(i){var u=Zone.__symbol__("ON_PROPERTY"+i);c[u]=a[u]}}return c[e].apply(c,n)}}))):a=c,t.patchOnProperties(a,["close","error","message","open"],u),a};var a=e.WebSocket;for(var u in i)a[u]=i[u]}(t,e),Zone[t.symbol("patchEvents")]=!0}}Zone.__load_patch("util",(function(n,r,a){a.patchOnProperties=x,a.patchMethod=A,a.bindArguments=y,a.patchMacroTask=M;var u=r.__symbol__("BLACK_LISTED_EVENTS"),f=r.__symbol__("UNPATCHED_EVENTS");n[f]&&(n[u]=n[f]),n[u]&&(r[u]=r[f]=n[u]),a.patchEventPrototype=K,a.patchEventTarget=H,a.isIEOrEdge=F,a.ObjectDefineProperty=e,a.ObjectGetOwnPropertyDescriptor=t,a.ObjectCreate=o,a.ArraySlice=i,a.patchClass=O,a.wrapWithCurrentZone=s,a.filterProperties=ct,a.attachOriginToPatched=P,a._redefineProperty=Object.defineProperty,a.patchCallbacks=G,a.getGlobalObjects=function(){return{globalSources:Z,zoneSymbolEventNames:L,eventNames:ut,isBrowser:_,isMix:w,isNode:b,TRUE_STR:"true",FALSE_STR:"false",ZONE_SYMBOL_PREFIX:c,ADD_EVENT_LISTENER_STR:"addEventListener",REMOVE_EVENT_LISTENER_STR:"removeEventListener"}}})), -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -function(t){var e,n=t.__Zone_symbol_prefix||"__zone_symbol__";t[(e="legacyPatch",n+e)]=function(){var e=t.Zone;e.__load_patch("defineProperty",(function(t,e,n){n._redefineProperty=pt,lt()})),e.__load_patch("registerElement",(function(t,e,n){!function(t,e){var n=e.getGlobalObjects(),r=n.isBrowser,o=n.isMix;(r||o)&&"registerElement"in t.document&&e.patchCallbacks(e,document,"Document","registerElement",["createdCallback","attachedCallback","detachedCallback","attributeChangedCallback"])}(t,n)})),e.__load_patch("EventTargetLegacy",(function(t,e,n){yt(t,n),gt(n,t)}))}}("undefined"!=typeof window?window:void 0!==r?r:"undefined"!=typeof self?self:{}); -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var mt=l("zoneTask");function bt(t,e,n,r){var o=null,i=null;n+=r;var a={};function u(e){var n=e.data;return n.args[0]=function(){try{e.invoke.apply(this,arguments)}finally{e.data&&e.data.isPeriodic||("number"==typeof n.handleId?delete a[n.handleId]:n.handleId&&(n.handleId[mt]=null))}},n.handleId=o.apply(t,n.args),e}function c(t){return i(t.data.handleId)}o=A(t,e+=r,(function(n){return function(o,i){if("function"==typeof i[0]){var s={isPeriodic:"Interval"===r,delay:"Timeout"===r||"Interval"===r?i[1]||0:void 0,args:i},l=f(e,i[0],s,u,c);if(!l)return l;var p=l.data.handleId;return"number"==typeof p?a[p]=l:p&&(p[mt]=l),p&&p.ref&&p.unref&&"function"==typeof p.ref&&"function"==typeof p.unref&&(l.ref=p.ref.bind(p),l.unref=p.unref.bind(p)),"number"==typeof p||p?p:l}return n.apply(t,i)}})),i=A(t,n,(function(e){return function(n,r){var o,i=r[0];"number"==typeof i?o=a[i]:(o=i&&i[mt])||(o=i),o&&"string"==typeof o.type?"notScheduled"!==o.state&&(o.cancelFn&&o.data.isPeriodic||0===o.runCount)&&("number"==typeof i?delete a[i]:i&&(i[mt]=null),o.zone.cancelTask(o)):e.apply(t,r)}}))} -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -function _t(t,e){if(!Zone[e.symbol("patchEventTarget")]){for(var n=e.getGlobalObjects(),r=n.eventNames,o=n.zoneSymbolEventNames,i=n.TRUE_STR,a=n.FALSE_STR,u=n.ZONE_SYMBOL_PREFIX,c=0;c0){var o=t.invoke;t.invoke=function(){for(var n=c[e.__symbol__("loadfalse")],i=0;i-1};function f(t){if("string"!=typeof t&&(t=String(t)),/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(t))throw new TypeError("Invalid character in header field name");return t.toLowerCase()}function l(t){return"string"!=typeof t&&(t=String(t)),t}function p(t){var e={next:function(){var e=t.shift();return{done:void 0===e,value:e}}};return o&&(e[Symbol.iterator]=function(){return e}),e}function h(t){this.map={},t instanceof h?t.forEach((function(t,e){this.append(e,t)}),this):Array.isArray(t)?t.forEach((function(t){this.append(t[0],t[1])}),this):t&&Object.getOwnPropertyNames(t).forEach((function(e){this.append(e,t[e])}),this)}function d(t){if(t.bodyUsed)return Promise.reject(new TypeError("Already read"));t.bodyUsed=!0}function v(t){return new Promise((function(e,n){t.onload=function(){e(t.result)},t.onerror=function(){n(t.error)}}))}function y(t){var e=new FileReader,n=v(e);return e.readAsArrayBuffer(t),n}function g(t){if(t.slice)return t.slice(0);var e=new Uint8Array(t.byteLength);return e.set(new Uint8Array(t)),e.buffer}function m(){return this.bodyUsed=!1,this._initBody=function(t){var e;this._bodyInit=t,t?"string"==typeof t?this._bodyText=t:i&&Blob.prototype.isPrototypeOf(t)?this._bodyBlob=t:a&&FormData.prototype.isPrototypeOf(t)?this._bodyFormData=t:r&&URLSearchParams.prototype.isPrototypeOf(t)?this._bodyText=t.toString():u&&i&&((e=t)&&DataView.prototype.isPrototypeOf(e))?(this._bodyArrayBuffer=g(t.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):u&&(ArrayBuffer.prototype.isPrototypeOf(t)||s(t))?this._bodyArrayBuffer=g(t):this._bodyText=t=Object.prototype.toString.call(t):this._bodyText="",this.headers.get("content-type")||("string"==typeof t?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):r&&URLSearchParams.prototype.isPrototypeOf(t)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},i&&(this.blob=function(){var t=d(this);if(t)return t;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?d(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(y)}),this.text=function(){var t,e,n,r=d(this);if(r)return r;if(this._bodyBlob)return t=this._bodyBlob,e=new FileReader,n=v(e),e.readAsText(t),n;if(this._bodyArrayBuffer)return Promise.resolve(function(t){for(var e=new Uint8Array(t),n=new Array(e.length),r=0;r-1?r:n),this.mode=e.mode||this.mode||null,this.signal=e.signal||this.signal,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&o)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(o)}function w(t){var e=new FormData;return t.trim().split("&").forEach((function(t){if(t){var n=t.split("="),r=n.shift().replace(/\+/g," "),o=n.join("=").replace(/\+/g," ");e.append(decodeURIComponent(r),decodeURIComponent(o))}})),e}function S(t,e){e||(e={}),this.type="default",this.status=void 0===e.status?200:e.status,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in e?e.statusText:"OK",this.headers=new h(e.headers),this.url=e.url||"",this._initBody(t)}_.prototype.clone=function(){return new _(this,{body:this._bodyInit})},m.call(_.prototype),m.call(S.prototype),S.prototype.clone=function(){return new S(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new h(this.headers),url:this.url})},S.error=function(){var t=new S(null,{status:0,statusText:""});return t.type="error",t};var k=[301,302,303,307,308];S.redirect=function(t,e){if(-1===k.indexOf(e))throw new RangeError("Invalid status code");return new S(null,{status:e,headers:{location:t}})};var E=self.DOMException;try{new E}catch(T){(E=function(t,e){this.message=t,this.name=e;var n=Error(t);this.stack=n.stack}).prototype=Object.create(Error.prototype),E.prototype.constructor=E}function x(t,e){return new Promise((function(n,r){var o=new _(t,e);if(o.signal&&o.signal.aborted)return r(new E("Aborted","AbortError"));var a=new XMLHttpRequest;function u(){a.abort()}a.onload=function(){var t,e,r={status:a.status,statusText:a.statusText,headers:(t=a.getAllResponseHeaders()||"",e=new h,t.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/).forEach((function(t){var n=t.split(":"),r=n.shift().trim();if(r){var o=n.join(":").trim();e.append(r,o)}})),e)};r.url="responseURL"in a?a.responseURL:r.headers.get("X-Request-URL");var o="response"in a?a.response:a.responseText;n(new S(o,r))},a.onerror=function(){r(new TypeError("Network request failed"))},a.ontimeout=function(){r(new TypeError("Network request failed"))},a.onabort=function(){r(new E("Aborted","AbortError"))},a.open(o.method,o.url,!0),"include"===o.credentials?a.withCredentials=!0:"omit"===o.credentials&&(a.withCredentials=!1),"responseType"in a&&i&&(a.responseType="blob"),o.headers.forEach((function(t,e){a.setRequestHeader(e,t)})),o.signal&&(o.signal.addEventListener("abort",u),a.onreadystatechange=function(){4===a.readyState&&o.signal.removeEventListener("abort",u)}),a.send(void 0===o._bodyInit?null:o._bodyInit)}))}x.polyfill=!0,self.fetch||(self.fetch=x,self.Headers=h,self.Request=_,self.Response=S)},function(t,e,n){var r,o; -/** - * @file Web Cryptography API shim - * @author Artem S Vybornov - * @license MIT - */o="undefined"!=typeof self?self:this,void 0===(r=function(){return function(t){"use strict";if("function"!=typeof Promise)throw"Promise support required";var e=t.crypto||t.msCrypto;if(e){var n=e.subtle||e.webkitSubtle;if(n){var r=t.Crypto||e.constructor||Object,o=t.SubtleCrypto||n.constructor||Object,i=(t.CryptoKey||t.Key,t.navigator.userAgent.indexOf("Edge/")>-1),a=!!t.msCrypto&&!i,u=!e.subtle&&!!e.webkitSubtle;if(a||u){var c={KoZIhvcNAQEB:"1.2.840.113549.1.1.1"},s={"1.2.840.113549.1.1.1":"KoZIhvcNAQEB"};if(["generateKey","importKey","unwrapKey"].forEach((function(t){var r=n[t];n[t]=function(o,i,c){var s,f,l,d,_=[].slice.call(arguments);switch(t){case"generateKey":s=v(o),f=i,l=c;break;case"importKey":s=v(c),f=_[3],l=_[4],"jwk"===o&&((i=g(i)).alg||(i.alg=y(s)),i.key_ops||(i.key_ops="oct"!==i.kty?"d"in i?l.filter(x):l.filter(E):l.slice()),_[1]=m(i));break;case"unwrapKey":s=_[4],f=_[5],l=_[6],_[2]=c._key}if("generateKey"===t&&"HMAC"===s.name&&s.hash)return s.length=s.length||{"SHA-1":512,"SHA-256":512,"SHA-384":1024,"SHA-512":1024}[s.hash.name],n.importKey("raw",e.getRandomValues(new Uint8Array(s.length+7>>3)),s,f,l);if(u&&"generateKey"===t&&"RSASSA-PKCS1-v1_5"===s.name&&(!s.modulusLength||s.modulusLength>=2048))return(o=v(o)).name="RSAES-PKCS1-v1_5",delete o.hash,n.generateKey(o,!0,["encrypt","decrypt"]).then((function(t){return Promise.all([n.exportKey("jwk",t.publicKey),n.exportKey("jwk",t.privateKey)])})).then((function(t){return t[0].alg=t[1].alg=y(s),t[0].key_ops=l.filter(E),t[1].key_ops=l.filter(x),Promise.all([n.importKey("jwk",t[0],s,!0,t[0].key_ops),n.importKey("jwk",t[1],s,f,t[1].key_ops)])})).then((function(t){return{publicKey:t[0],privateKey:t[1]}}));if((u||a&&"SHA-1"===(s.hash||{}).name)&&"importKey"===t&&"jwk"===o&&"HMAC"===s.name&&"oct"===i.kty)return n.importKey("raw",h(p(i.k)),c,_[3],_[4]);if(u&&"importKey"===t&&("spki"===o||"pkcs8"===o))return n.importKey("jwk",b(i),c,_[3],_[4]);if(a&&"unwrapKey"===t)return n.decrypt(_[3],c,i).then((function(t){return n.importKey(o,t,_[4],_[5],_[6])}));try{d=r.apply(n,_)}catch(w){return Promise.reject(w)}return a&&(d=new Promise((function(t,e){d.onabort=d.onerror=function(t){e(t)},d.oncomplete=function(e){t(e.target.result)}}))),d=d.then((function(t){return"HMAC"===s.name&&(s.length||(s.length=8*t.algorithm.length)),0==s.name.search("RSA")&&(s.modulusLength||(s.modulusLength=(t.publicKey||t).algorithm.modulusLength),s.publicExponent||(s.publicExponent=(t.publicKey||t).algorithm.publicExponent)),t=t.publicKey&&t.privateKey?{publicKey:new k(t.publicKey,s,f,l.filter(E)),privateKey:new k(t.privateKey,s,f,l.filter(x))}:new k(t,s,f,l)}))}})),["exportKey","wrapKey"].forEach((function(t){var e=n[t];n[t]=function(r,o,i){var c,s=[].slice.call(arguments);switch(t){case"exportKey":s[1]=o._key;break;case"wrapKey":s[1]=o._key,s[2]=i._key}if((u||a&&"SHA-1"===(o.algorithm.hash||{}).name)&&"exportKey"===t&&"jwk"===r&&"HMAC"===o.algorithm.name&&(s[0]="raw"),!u||"exportKey"!==t||"spki"!==r&&"pkcs8"!==r||(s[0]="jwk"),a&&"wrapKey"===t)return n.exportKey(r,o).then((function(t){return"jwk"===r&&(t=h(unescape(encodeURIComponent(JSON.stringify(g(t)))))),n.encrypt(s[3],i,t)}));try{c=e.apply(n,s)}catch(f){return Promise.reject(f)}return a&&(c=new Promise((function(t,e){c.onabort=c.onerror=function(t){e(t)},c.oncomplete=function(e){t(e.target.result)}}))),"exportKey"===t&&"jwk"===r&&(c=c.then((function(t){return(u||a&&"SHA-1"===(o.algorithm.hash||{}).name)&&"HMAC"===o.algorithm.name?{kty:"oct",alg:y(o.algorithm),key_ops:o.usages.slice(),ext:!0,k:l(d(t))}:((t=g(t)).alg||(t.alg=y(o.algorithm)),t.key_ops||(t.key_ops="public"===o.type?o.usages.filter(E):"private"===o.type?o.usages.filter(x):o.usages.slice()),t)}))),!u||"exportKey"!==t||"spki"!==r&&"pkcs8"!==r||(c=c.then((function(t){return t=_(g(t))}))),c}})),["encrypt","decrypt","sign","verify"].forEach((function(t){var e=n[t];n[t]=function(r,o,i,u){if(a&&(!i.byteLength||u&&!u.byteLength))throw new Error("Empy input is not allowed");var c,s=[].slice.call(arguments),f=v(r);if(a&&"decrypt"===t&&"AES-GCM"===f.name){var l=r.tagLength>>3;s[2]=(i.buffer||i).slice(0,i.byteLength-l),r.tag=(i.buffer||i).slice(i.byteLength-l)}s[1]=o._key;try{c=e.apply(n,s)}catch(p){return Promise.reject(p)}return a&&(c=new Promise((function(e,n){c.onabort=c.onerror=function(t){n(t)},c.oncomplete=function(n){if(n=n.target.result,"encrypt"===t&&n instanceof AesGcmEncryptResult){var r=n.ciphertext,o=n.tag;(n=new Uint8Array(r.byteLength+o.byteLength)).set(new Uint8Array(r),0),n.set(new Uint8Array(o),r.byteLength),n=n.buffer}e(n)}}))),c}})),a){var f=n.digest;n.digest=function(t,e){if(!e.byteLength)throw new Error("Empy input is not allowed");var r;try{r=f.call(n,t,e)}catch(o){return Promise.reject(o)}return r=new Promise((function(t,e){r.onabort=r.onerror=function(t){e(t)},r.oncomplete=function(e){t(e.target.result)}}))},t.crypto=Object.create(e,{getRandomValues:{value:function(t){return e.getRandomValues(t)}},subtle:{value:n}}),t.CryptoKey=k}u&&(e.subtle=n,t.Crypto=r,t.SubtleCrypto=o,t.CryptoKey=k)}}}function l(t){return btoa(t).replace(/\=+$/,"").replace(/\+/g,"-").replace(/\//g,"_")}function p(t){return t=(t+="===").slice(0,-t.length%4),atob(t.replace(/-/g,"+").replace(/_/g,"/"))}function h(t){for(var e=new Uint8Array(t.length),n=0;n2&&(n=!0,e.shift());var r={ext:!0};switch(e[0][0]){case"1.2.840.113549.1.1.1":var o=["n","e","d","p","q","dp","dq","qi"],i=w(e[1]);n&&i.shift();for(var a=0;a2&&(r=!0,i.unshift(new Uint8Array([0]))),n[0][0]="1.2.840.113549.1.1.1",e=i;break;default:throw new TypeError("Unsupported key type")}return n.push(new Uint8Array(S(e)).buffer),r?n.unshift(new Uint8Array([0])):n[1]={tag:3,value:n[1]},new Uint8Array(S(n)).buffer}function w(t,e){if(t instanceof ArrayBuffer&&(t=new Uint8Array(t)),e||(e={pos:0,end:t.length}),e.end-e.pos<2||e.end>t.length)throw new RangeError("Malformed DER");var n,r=t[e.pos++],o=t[e.pos++];if(o>=128){if(o&=127,e.end-e.pos=128){var u=r;for(r=4,e.splice(o,0,u>>24&255,u>>16&255,u>>8&255,255&u);r>1&&!(u>>24);)u<<=8,r--;r<4&&e.splice(o,4-r),r|=128}return e.splice(o-2,2,n,r),e}function k(t,e,n,r){Object.defineProperties(this,{_key:{value:t},type:{value:t.type,enumerable:!0},extractable:{value:void 0===n?t.extractable:n,enumerable:!0},algorithm:{value:void 0===e?t.algorithm:e,enumerable:!0},usages:{value:void 0===r?t.usages:r,enumerable:!0}})}function E(t){return"verify"===t||"encrypt"===t||"wrapKey"===t}function x(t){return"sign"===t||"decrypt"===t||"unwrapKey"===t}}(o)}.apply(e,[]))||(t.exports=r)},function(t,e,n){t.exports=function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){"use strict";n(84);var r=function(t){return t&&t.__esModule?t:{default:t}}(n(41)),o=function(){r.default.addPickerToOtherInputs(),r.default.supportsDateInput()||r.default.addPickerToDateInputs()};o(),document.addEventListener("DOMContentLoaded",(function(){o()})),document.querySelector("body").addEventListener("mousedown",(function(){o()}))},function(t,e,n){t.exports=!n(11)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},function(t,e){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e,n){var r=n(9),o=n(32),i=n(25),a=Object.defineProperty;e.f=n(1)?Object.defineProperty:function(t,e,n){if(r(t),e=i(e,!0),r(n),o)try{return a(t,e,n)}catch(u){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){var r=n(59),o=n(16);t.exports=function(t){return r(o(t))}},function(t,e,n){var r=n(4),o=n(14);t.exports=n(1)?function(t,e,n){return r.f(t,e,o(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var r=n(23)("wks"),o=n(15),i=n(2).Symbol,a="function"==typeof i;(t.exports=function(t){return r[t]||(r[t]=a&&i[t]||(a?i:o)("Symbol."+t))}).store=r},function(t,e){var n=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=n)},function(t,e,n){var r=n(12);t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},function(t,e,n){var r=n(2),o=n(8),i=n(56),a=n(6),u="prototype",c=function(t,e,n){var s,f,l,p=t&c.F,h=t&c.G,d=t&c.S,v=t&c.P,y=t&c.B,g=t&c.W,m=h?o:o[e]||(o[e]={}),b=m[u],_=h?r:d?r[e]:(r[e]||{})[u];for(s in h&&(n=e),n)(f=!p&&_&&void 0!==_[s])&&s in m||(l=f?_[s]:n[s],m[s]=h&&"function"!=typeof _[s]?n[s]:y&&f?i(l,r):g&&_[s]==l?function(t){var e=function(e,n,r){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,n)}return new t(e,n,r)}return t.apply(this,arguments)};return e[u]=t[u],e}(l):v&&"function"==typeof l?i(Function.call,l):l,v&&((m.virtual||(m.virtual={}))[s]=l,t&c.R&&b&&!b[s]&&a(b,s,l)))};c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,t.exports=c},function(t,e){t.exports=function(t){try{return!!t()}catch(e){return!0}}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,n){var r=n(38),o=n(17);t.exports=Object.keys||function(t){return r(t,o)}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e){var n=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++n+r).toString(36))}},function(t,e){t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e){t.exports={}},function(t,e){t.exports=!0},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,n){var r=n(4).f,o=n(3),i=n(7)("toStringTag");t.exports=function(t,e,n){t&&!o(t=n?t:t.prototype,i)&&r(t,i,{configurable:!0,value:e})}},function(t,e,n){var r=n(23)("keys"),o=n(15);t.exports=function(t){return r[t]||(r[t]=o(t))}},function(t,e,n){var r=n(2),o="__core-js_shared__",i=r[o]||(r[o]={});t.exports=function(t){return i[t]||(i[t]={})}},function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},function(t,e,n){var r=n(12);t.exports=function(t,e){if(!r(t))return t;var n,o;if(e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;if("function"==typeof(n=t.valueOf)&&!r(o=n.call(t)))return o;if(!e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},function(t,e,n){var r=n(2),o=n(8),i=n(19),a=n(27),u=n(4).f;t.exports=function(t){var e=o.Symbol||(o.Symbol=i?{}:r.Symbol||{});"_"==t.charAt(0)||t in e||u(e,t,{value:a.f(t)})}},function(t,e,n){e.f=n(7)},function(t,e){"use strict";e.__esModule=!0,e.default=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}},function(t,e,n){"use strict";e.__esModule=!0;var r=function(t){return t&&t.__esModule?t:{default:t}}(n(45));e.default=function(){function t(t,e){for(var n=0;ndocument.F=Object<\/script>"),t.close(),s=t.F;r--;)delete s[c][i[r]];return s()};t.exports=Object.create||function(t,e){var n;return null!==t?(u[c]=r(t),n=new u,u[c]=null,n[a]=t):n=s(),void 0===e?n:o(n,e)}},function(t,e,n){var r=n(4),o=n(9),i=n(13);t.exports=n(1)?Object.defineProperties:function(t,e){o(t);for(var n,a=i(e),u=a.length,c=0;u>c;)r.f(t,n=a[c++],e[n]);return t}},function(t,e,n){var r=n(38),o=n(17).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return r(t,o)}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,n){var r=n(3),o=n(5),i=n(55)(!1),a=n(22)("IE_PROTO");t.exports=function(t,e){var n,u=o(t),c=0,s=[];for(n in u)n!=a&&r(u,n)&&s.push(n);for(;e.length>c;)r(u,n=e[c++])&&(~i(s,n)||s.push(n));return s}},function(t,e,n){t.exports=n(6)},function(t,e,n){"use strict";function r(t,e){for(t=String(t),e=e||2;t.length0?"-":"+")+r(100*Math.floor(Math.abs(S)/60)+Math.abs(S)%60,4),S:["th","st","nd","rd"][d%10>3?0:(d%100-d%10!=10)*d%10],W:k,N:E};return s.replace(t,(function(t){return t in x?x[t]:t.slice(1,t.length-1)}))}}();c.masks={default:"ddd mmm dd yyyy HH:MM:ss",shortDate:"m/d/yy",mediumDate:"mmm d, yyyy",longDate:"mmmm d, yyyy",fullDate:"dddd, mmmm d, yyyy",shortTime:"h:MM TT",mediumTime:"h:MM:ss TT",longTime:"h:MM:ss TT Z",isoDate:"yyyy-mm-dd",isoTime:"HH:MM:ss",isoDateTime:"yyyy-mm-dd'T'HH:MM:sso",isoUtcDateTime:"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'",expiresHeaderFormat:"ddd, dd mmm yyyy HH:MM:ss Z"},c.i18n={dayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","January","February","March","April","May","June","July","August","September","October","November","December"]},e.default=c},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var o=r(n(44)),i=r(n(28)),a=r(n(29)),u=r(n(43)),c=r(n(42)),s=r(n(40)),f=function(){function t(e){var n=this;(0,i.default)(this,t),this.element=e,this.element.setAttribute("data-has-picker",""),this.locale=this.element.getAttribute("lang")||document.body.getAttribute("lang")||"en",this.format=this.element.getAttribute("date-format")||document.body.getAttribute("date-format")||this.element.getAttribute("data-date-format")||document.body.getAttribute("data-date-format")||"yyyy-mm-dd",this.localeText=this.getLocaleText(),(0,o.default)(this.element,{valueAsDate:{get:function(){if(!n.element.value)return null;var t=n.format||"yyyy-mm-dd",e=n.element.value.match(/(\d+)/g),r=0,o={};return t.replace(/(yyyy|dd|mm)/g,(function(t){o[t]=r++})),new Date(e[o.yyyy],e[o.mm]-1,e[o.dd])},set:function(t){n.element.value=(0,s.default)(t,n.format)}},valueAsNumber:{get:function(){return n.element.value?n.element.valueAsDate.valueOf():NaN},set:function(t){n.element.valueAsDate=new Date(t)}}});var r=function(t){var e=n.element;e.locale=n.localeText,u.default.attachTo(e)};this.element.addEventListener("focus",r),this.element.addEventListener("mouseup",r),this.element.addEventListener("keydown",(function(t){var e=new Date;switch(t.keyCode){case 9:case 27:u.default.hide();break;case 38:n.element.valueAsDate&&(e.setDate(n.element.valueAsDate.getDate()+1),n.element.valueAsDate=e,u.default.pingInput());break;case 40:n.element.valueAsDate&&(e.setDate(n.element.valueAsDate.getDate()-1),n.element.valueAsDate=e,u.default.pingInput())}u.default.sync()})),this.element.addEventListener("keyup",(function(t){u.default.sync()}))}return(0,a.default)(t,[{key:"getLocaleText",value:function(){var t=this.locale.toLowerCase();for(var e in c.default){var n=e.split("_");if(n.map((function(t){return t.toLowerCase()})),~n.indexOf(t)||~n.indexOf(t.substr(0,2)))return c.default[e]}}}],[{key:"supportsDateInput",value:function(){var t=document.createElement("input");t.setAttribute("type","date");var e="not-a-date";return t.setAttribute("value",e),!(t.value===e)}},{key:"addPickerToDateInputs",value:function(){var e=document.querySelectorAll('input[type="date"]:not([data-has-picker])'),n=e.length;if(!n)return!1;for(var r=0;r"],n=0,r=this.locale.days.length;n'+this.locale.days[n]+"");this.daysHead.innerHTML=e.join(""),t.createRangeSelect(this.month,0,11,this.locale.months)}},{key:"refreshDaysMatrix",value:function(){this.refreshLocale();for(var e=this.date.getFullYear(),n=this.date.getMonth(),r=new Date(e,n,1).getDay(),o=new Date(this.date.getFullYear(),n+1,0).getDate(),i=t.absoluteDate(this.input.valueAsDate)||!1,a=i&&e===i.getFullYear()&&n===i.getMonth(),u=[],c=0;c":"")+"\n \n "),c+1<=r)u.push("");else{var s=c+1-r,f=a&&i.getDate()===s;u.push("\n "+s+"\n ")}this.days.innerHTML=u.join("")}},{key:"pingInput",value:function(){var t=void 0,e=void 0;try{t=new Event("input"),e=new Event("change")}catch(n){(t=document.createEvent("KeyboardEvent")).initEvent("input",!0,!1),(e=document.createEvent("KeyboardEvent")).initEvent("change",!0,!1)}this.input.dispatchEvent(t),this.input.dispatchEvent(e)}}],[{key:"createRangeSelect",value:function(t,e,n,r){t.innerHTML="";for(var o=e;o<=n;++o){var i=document.createElement("option");t.appendChild(i);var a=r?r[o-e]:o;i.text=a,i.value=o}return t}},{key:"absoluteDate",value:function(t){return t&&new Date(t.getTime()+60*t.getTimezoneOffset()*1e3)}}]),t}();window.thePicker=new a,e.default=window.thePicker},function(t,e,n){t.exports={default:n(49),__esModule:!0}},function(t,e,n){t.exports={default:n(50),__esModule:!0}},function(t,e,n){t.exports={default:n(51),__esModule:!0}},function(t,e,n){t.exports={default:n(52),__esModule:!0}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var o=r(n(47)),i=r(n(46)),a="function"==typeof i.default&&"symbol"==typeof o.default?function(t){return typeof t}:function(t){return t&&"function"==typeof i.default&&t.constructor===i.default?"symbol":typeof t};e.default="function"==typeof i.default&&"symbol"===a(o.default)?function(t){return void 0===t?"undefined":a(t)}:function(t){return t&&"function"==typeof i.default&&t.constructor===i.default?"symbol":void 0===t?"undefined":a(t)}},function(t,e,n){n(73);var r=n(8).Object;t.exports=function(t,e){return r.defineProperties(t,e)}},function(t,e,n){n(74);var r=n(8).Object;t.exports=function(t,e,n){return r.defineProperty(t,e,n)}},function(t,e,n){n(77),n(75),n(78),n(79),t.exports=n(8).Symbol},function(t,e,n){n(76),n(80),t.exports=n(27).f("iterator")},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e){t.exports=function(){}},function(t,e,n){var r=n(5),o=n(70),i=n(69);t.exports=function(t){return function(e,n,a){var u,c=r(e),s=o(c.length),f=i(a,s);if(t&&n!=n){for(;s>f;)if((u=c[f++])!=u)return!0}else for(;s>f;f++)if((t||f in c)&&c[f]===n)return t||f||0;return!t&&-1}}},function(t,e,n){var r=n(53);t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}}},function(t,e,n){var r=n(13),o=n(37),i=n(20);t.exports=function(t){var e=r(t),n=o.f;if(n)for(var a,u=n(t),c=i.f,s=0;u.length>s;)c.call(t,a=u[s++])&&e.push(a);return e}},function(t,e,n){t.exports=n(2).document&&document.documentElement},function(t,e,n){var r=n(30);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},function(t,e,n){var r=n(30);t.exports=Array.isArray||function(t){return"Array"==r(t)}},function(t,e,n){"use strict";var r=n(34),o=n(14),i=n(21),a={};n(6)(a,n(7)("iterator"),(function(){return this})),t.exports=function(t,e,n){t.prototype=r(a,{next:o(1,n)}),i(t,e+" Iterator")}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e,n){var r=n(13),o=n(5);t.exports=function(t,e){for(var n,i=o(t),a=r(i),u=a.length,c=0;u>c;)if(i[n=a[c++]]===e)return n}},function(t,e,n){var r=n(15)("meta"),o=n(12),i=n(3),a=n(4).f,u=0,c=Object.isExtensible||function(){return!0},s=!n(11)((function(){return c(Object.preventExtensions({}))})),f=function(t){a(t,r,{value:{i:"O"+ ++u,w:{}}})},l=t.exports={KEY:r,NEED:!1,fastKey:function(t,e){if(!o(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!i(t,r)){if(!c(t))return"F";if(!e)return"E";f(t)}return t[r].i},getWeak:function(t,e){if(!i(t,r)){if(!c(t))return!0;if(!e)return!1;f(t)}return t[r].w},onFreeze:function(t){return s&&l.NEED&&c(t)&&!i(t,r)&&f(t),t}}},function(t,e,n){var r=n(20),o=n(14),i=n(5),a=n(25),u=n(3),c=n(32),s=Object.getOwnPropertyDescriptor;e.f=n(1)?s:function(t,e){if(t=i(t),e=a(e,!0),c)try{return s(t,e)}catch(n){}if(u(t,e))return o(!r.f.call(t,e),t[e])}},function(t,e,n){var r=n(5),o=n(36).f,i={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return a&&"[object Window]"==i.call(t)?function(t){try{return o(t)}catch(e){return a.slice()}}(t):o(r(t))}},function(t,e,n){var r=n(3),o=n(71),i=n(22)("IE_PROTO"),a=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=o(t),r(t,i)?t[i]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?a:null}},function(t,e,n){var r=n(24),o=n(16);t.exports=function(t){return function(e,n){var i,a,u=String(o(e)),c=r(n),s=u.length;return c<0||c>=s?t?"":void 0:(i=u.charCodeAt(c))<55296||i>56319||c+1===s||(a=u.charCodeAt(c+1))<56320||a>57343?t?u.charAt(c):i:t?u.slice(c,c+2):a-56320+(i-55296<<10)+65536}}},function(t,e,n){var r=n(24),o=Math.max,i=Math.min;t.exports=function(t,e){return(t=r(t))<0?o(t+e,0):i(t,e)}},function(t,e,n){var r=n(24),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},function(t,e,n){var r=n(16);t.exports=function(t){return Object(r(t))}},function(t,e,n){"use strict";var r=n(54),o=n(62),i=n(18),a=n(5);t.exports=n(33)(Array,"Array",(function(t,e){this._t=a(t),this._i=0,this._k=e}),(function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,o(1)):o(0,"keys"==e?n:"values"==e?t[n]:[n,t[n]])}),"values"),i.Arguments=i.Array,r("keys"),r("values"),r("entries")},function(t,e,n){var r=n(10);r(r.S+r.F*!n(1),"Object",{defineProperties:n(35)})},function(t,e,n){var r=n(10);r(r.S+r.F*!n(1),"Object",{defineProperty:n(4).f})},function(t,e){},function(t,e,n){"use strict";var r=n(68)(!0);n(33)(String,"String",(function(t){this._t=String(t),this._i=0}),(function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=r(e,n),this._i+=t.length,{value:t,done:!1})}))},function(t,e,n){"use strict";var r=n(2),o=n(3),i=n(1),a=n(10),u=n(39),c=n(64).KEY,s=n(11),f=n(23),l=n(21),p=n(15),h=n(7),d=n(27),v=n(26),y=n(63),g=n(57),m=n(60),b=n(9),_=n(5),w=n(25),S=n(14),k=n(34),E=n(66),x=n(65),T=n(4),O=n(13),A=x.f,M=T.f,P=E.f,j=r.Symbol,D=r.JSON,C=D&&D.stringify,F="prototype",I=h("_hidden"),R=h("toPrimitive"),N={}.propertyIsEnumerable,L=f("symbol-registry"),Z=f("symbols"),U=f("op-symbols"),z=Object[F],B="function"==typeof j,H=r.QObject,W=!H||!H[F]||!H[F].findChild,K=i&&s((function(){return 7!=k(M({},"a",{get:function(){return M(this,"a",{value:7}).a}})).a}))?function(t,e,n){var r=A(z,e);r&&delete z[e],M(t,e,n),r&&t!==z&&M(z,e,r)}:M,G=function(t){var e=Z[t]=k(j[F]);return e._k=t,e},J=B&&"symbol"==typeof j.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof j},V=function(t,e,n){return t===z&&V(U,e,n),b(t),e=w(e,!0),b(n),o(Z,e)?(n.enumerable?(o(t,I)&&t[I][e]&&(t[I][e]=!1),n=k(n,{enumerable:S(0,!1)})):(o(t,I)||M(t,I,S(1,{})),t[I][e]=!0),K(t,e,n)):M(t,e,n)},q=function(t,e){b(t);for(var n,r=g(e=_(e)),o=0,i=r.length;i>o;)V(t,n=r[o++],e[n]);return t},Y=function(t){var e=N.call(this,t=w(t,!0));return!(this===z&&o(Z,t)&&!o(U,t))&&(!(e||!o(this,t)||!o(Z,t)||o(this,I)&&this[I][t])||e)},X=function(t,e){if(t=_(t),e=w(e,!0),t!==z||!o(Z,e)||o(U,e)){var n=A(t,e);return!n||!o(Z,e)||o(t,I)&&t[I][e]||(n.enumerable=!0),n}},$=function(t){for(var e,n=P(_(t)),r=[],i=0;n.length>i;)o(Z,e=n[i++])||e==I||e==c||r.push(e);return r},Q=function(t){for(var e,n=t===z,r=P(n?U:_(t)),i=[],a=0;r.length>a;)!o(Z,e=r[a++])||n&&!o(z,e)||i.push(Z[e]);return i};B||(u((j=function(){if(this instanceof j)throw TypeError("Symbol is not a constructor!");var t=p(arguments.length>0?arguments[0]:void 0),e=function(n){this===z&&e.call(U,n),o(this,I)&&o(this[I],t)&&(this[I][t]=!1),K(this,t,S(1,n))};return i&&W&&K(z,t,{configurable:!0,set:e}),G(t)})[F],"toString",(function(){return this._k})),x.f=X,T.f=V,n(36).f=E.f=$,n(20).f=Y,n(37).f=Q,i&&!n(19)&&u(z,"propertyIsEnumerable",Y,!0),d.f=function(t){return G(h(t))}),a(a.G+a.W+a.F*!B,{Symbol:j});for(var tt="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),et=0;tt.length>et;)h(tt[et++]);for(tt=O(h.store),et=0;tt.length>et;)v(tt[et++]);a(a.S+a.F*!B,"Symbol",{for:function(t){return o(L,t+="")?L[t]:L[t]=j(t)},keyFor:function(t){if(J(t))return y(L,t);throw TypeError(t+" is not a symbol!")},useSetter:function(){W=!0},useSimple:function(){W=!1}}),a(a.S+a.F*!B,"Object",{create:function(t,e){return void 0===e?k(t):q(k(t),e)},defineProperty:V,defineProperties:q,getOwnPropertyDescriptor:X,getOwnPropertyNames:$,getOwnPropertySymbols:Q}),D&&a(a.S+a.F*(!B||s((function(){var t=j();return"[null]"!=C([t])||"{}"!=C({a:t})||"{}"!=C(Object(t))}))),"JSON",{stringify:function(t){if(void 0!==t&&!J(t)){for(var e,n,r=[t],o=1;arguments.length>o;)r.push(arguments[o++]);return"function"==typeof(e=r[1])&&(n=e),!n&&m(e)||(e=function(t,e){if(n&&(e=n.call(this,t,e)),!J(e))return e}),r[1]=e,C.apply(D,r)}}}),j[F][R]||n(6)(j[F],R,j[F].valueOf),l(j,"Symbol"),l(Math,"Math",!0),l(r.JSON,"JSON",!0)},function(t,e,n){n(26)("asyncIterator")},function(t,e,n){n(26)("observable")},function(t,e,n){n(72);for(var r=n(2),o=n(6),i=n(18),a=n(7)("toStringTag"),u=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],c=0;c<5;c++){var s=u[c],f=r[s],l=f&&f.prototype;l&&!l[a]&&o(l,a,s),i[s]=i.Array}},function(t,e,n){(t.exports=n(82)()).push([t.id,"date-input-polyfill{background:#fff;color:#000;text-shadow:none;border:0;padding:0;height:auto;width:auto;line-height:normal;font-family:sans-serif;font-size:14px;position:absolute!important;text-align:center;box-shadow:0 3px 10px 1px rgba(0,0,0,.22);cursor:default;z-index:1;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;overflow:hidden;display:block}date-input-polyfill[data-open=false]{visibility:hidden;z-index:-100!important;top:0}date-input-polyfill[data-open=true]{visibility:visible}date-input-polyfill select,date-input-polyfill table,date-input-polyfill td,date-input-polyfill th{background:#fff;color:#000;text-shadow:none;border:0;padding:0;height:auto;width:auto;line-height:normal;font-family:sans-serif;font-size:14px;box-shadow:none;font-family:Lato,Helvetica,Arial,sans-serif}date-input-polyfill button,date-input-polyfill select{border:0;border-radius:0;border-bottom:1px solid #dadfe1;height:24px;vertical-align:top;-webkit-appearance:none;-moz-appearance:none}date-input-polyfill .monthSelect-wrapper{width:55%;display:inline-block}date-input-polyfill .yearSelect-wrapper{width:25%;display:inline-block}date-input-polyfill select{width:100%}date-input-polyfill select:first-of-type{border-right:1px solid #dadfe1;border-radius:5px 0 0 0;-moz-border-radius:5px 0 0 0;-webkit-border-radius:5px 0 0 0}date-input-polyfill button{width:20%;background:#dadfe1;border-radius:0 5px 0 0;-moz-border-radius:0 5px 0 0;-webkit-border-radius:0 5px 0 0}date-input-polyfill button:hover{background:#eee}date-input-polyfill table{border-collapse:separate!important;border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0 0 5px 5px;overflow:hidden;max-width:280px;width:280px}date-input-polyfill td,date-input-polyfill th{width:32px;padding:4px;text-align:center;box-sizing:content-box}date-input-polyfill td[data-day]{cursor:pointer}date-input-polyfill td[data-day]:hover{background:#dadfe1}date-input-polyfill [data-selected]{font-weight:700;background:#d8eaf6}",""])},function(t,e){t.exports=function(){var t=[];return t.toString=function(){for(var t=[],e=0;e=0&&b.splice(e,1)}function u(t){var e=document.createElement("style");return e.type="text/css",i(t,e),e}function c(t){var e=document.createElement("link");return e.rel="stylesheet",i(t,e),e}function s(t,e){var n,r,o;if(e.singleton){var i=m++;n=g||(g=u(e)),r=f.bind(null,n,i,!1),o=f.bind(null,n,i,!0)}else t.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=c(e),r=p.bind(null,n),o=function(){a(n),n.href&&URL.revokeObjectURL(n.href)}):(n=u(e),r=l.bind(null,n),o=function(){a(n)});return r(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap)return;r(t=e)}else o()}}function f(t,e,n,r){var o=n?"":r.css;if(t.styleSheet)t.styleSheet.cssText=_(e,o);else{var i=document.createTextNode(o),a=t.childNodes;a[e]&&t.removeChild(a[e]),a.length?t.insertBefore(i,a[e]):t.appendChild(i)}}function l(t,e){var n=e.css,r=e.media;if(r&&t.setAttribute("media",r),t.styleSheet)t.styleSheet.cssText=n;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(n))}}function p(t,e){var n=e.css,r=e.sourceMap;r&&(n+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(r))))+" */");var o=new Blob([n],{type:"text/css"}),i=t.href;t.href=URL.createObjectURL(o),i&&URL.revokeObjectURL(i)}var h={},d=function(t){var e;return function(){return void 0===e&&(e=t.apply(this,arguments)),e}},v=d((function(){return/msie [6-9]\b/.test(window.navigator.userAgent.toLowerCase())})),y=d((function(){return document.head||document.getElementsByTagName("head")[0]})),g=null,m=0,b=[];t.exports=function(t,e){void 0===(e=e||{}).singleton&&(e.singleton=v()),void 0===e.insertAt&&(e.insertAt="bottom");var n=o(t);return r(n,e),function(t){for(var i=[],a=0;a 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","var $export = require('./_export');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var core = module.exports = { version: '2.6.2' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nvar fails = require('./_fails');\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","var Map = require('./es6.map');\nvar $export = require('./_export');\nvar shared = require('./_shared')('metadata');\nvar store = shared.store || (shared.store = new (require('./es6.weak-map'))());\n\nvar getOrCreateMetadataMap = function (target, targetKey, create) {\n var targetMetadata = store.get(target);\n if (!targetMetadata) {\n if (!create) return undefined;\n store.set(target, targetMetadata = new Map());\n }\n var keyMetadata = targetMetadata.get(targetKey);\n if (!keyMetadata) {\n if (!create) return undefined;\n targetMetadata.set(targetKey, keyMetadata = new Map());\n } return keyMetadata;\n};\nvar ordinaryHasOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\nvar ordinaryGetOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\nvar ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {\n getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\nvar ordinaryOwnMetadataKeys = function (target, targetKey) {\n var metadataMap = getOrCreateMetadataMap(target, targetKey, false);\n var keys = [];\n if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); });\n return keys;\n};\nvar toMetaKey = function (it) {\n return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\nvar exp = function (O) {\n $export($export.S, 'Reflect', O);\n};\n\nmodule.exports = {\n store: store,\n map: getOrCreateMetadataMap,\n has: ordinaryHasOwnMetadata,\n get: ordinaryGetOwnMetadata,\n set: ordinaryDefineOwnMetadata,\n keys: ordinaryOwnMetadataKeys,\n key: toMetaKey,\n exp: exp\n};\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","module.exports = false;\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","module.exports = {};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","exports.f = {}.propertyIsEnumerable;\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","exports.f = Object.getOwnPropertySymbols;\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","var $parseFloat = require('./_global').parseFloat;\nvar $trim = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","var cof = require('./_cof');\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","var aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar toLength = require('./_to-length');\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","var forOf = require('./_for-of');\n\nmodule.exports = function (iter, ITERATOR) {\n var result = [];\n forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","var $export = require('./_export');\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') });\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof');\nvar test = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n require('./_redefine')(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n","// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = require('./_export');\n\n$export($export.P, 'Function', { bind: require('./_bind') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","'use strict';\nvar isObject = require('./_is-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar HAS_INSTANCE = require('./_wks')('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) require('./_object-dp').f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n","'use strict';\nvar $export = require('./_export');\nvar toInteger = require('./_to-integer');\nvar aNumberValue = require('./_a-number-value');\nvar repeat = require('./_string-repeat');\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !require('./_fails')(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $fails = require('./_fails');\nvar aNumberValue = require('./_a-number-value');\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n","'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n","'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n","'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n","'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n","'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n","'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n","'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n","'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n","'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n","'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n","// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = require('./_export');\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n","// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = require('./_export');\nvar toISOString = require('./_date-to-iso-string');\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n","'use strict';\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = require('./_fails');\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n","var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n require('./_redefine')(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n","var TO_PRIMITIVE = require('./_wks')('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));\n","'use strict';\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","'use strict';\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar html = require('./_html');\nvar cof = require('./_cof');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * require('./_fails')(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar fails = require('./_fails');\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !require('./_strict-method')($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $forEach = require('./_array-methods')(0);\nvar STRICT = require('./_strict-method')([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","'use strict';\nvar $export = require('./_export');\nvar $map = require('./_array-methods')(1);\n\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $some = require('./_array-methods')(3);\n\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $every = require('./_array-methods')(4);\n\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $indexOf = require('./_array-includes')(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","require('./_set-species')('Array');\n","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n re2[require('./_wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n","'use strict';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar sameValue = require('./_same-value');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","'use strict';\n\nvar isRegExp = require('./_is-regexp');\nvar anObject = require('./_an-object');\nvar speciesConstructor = require('./_species-constructor');\nvar advanceStringIndex = require('./_advance-string-index');\nvar toLength = require('./_to-length');\nvar callRegExpExec = require('./_regexp-exec-abstract');\nvar regexpExec = require('./_regexp-exec');\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\n\n// eslint-disable-next-line no-empty\nvar SUPPORTS_Y = !!(function () { try { return new RegExp('x', 'y'); } catch (e) {} })();\n\n// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? 0xffffffff : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n DataView: require('./_typed-buffer').DataView\n});\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar toMetaKey = metadata.key;\nvar ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) {\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar toMetaKey = metadata.key;\nvar getOrCreateMetadataMap = metadata.map;\nvar store = metadata.store;\n\nmetadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) {\n var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]);\n var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false;\n if (metadataMap.size) return true;\n var targetMetadata = store.get(target);\n targetMetadata['delete'](targetKey);\n return !!targetMetadata.size || store['delete'](target);\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nvar ordinaryGetMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var Set = require('./es6.set');\nvar from = require('./_array-from-iterable');\nvar metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nvar ordinaryMetadataKeys = function (O, P) {\n var oKeys = ordinaryOwnMetadataKeys(O, P);\n var parent = getPrototypeOf(O);\n if (parent === null) return oKeys;\n var pKeys = ordinaryMetadataKeys(parent, P);\n return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) {\n return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) {\n return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nvar ordinaryHasMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return true;\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var $metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar toMetaKey = $metadata.key;\nvar ordinaryDefineOwnMetadata = $metadata.set;\n\n$metadata.exp({ metadata: function metadata(metadataKey, metadataValue) {\n return function decorator(target, targetKey) {\n ordinaryDefineOwnMetadata(\n metadataKey, metadataValue,\n (targetKey !== undefined ? anObject : aFunction)(target),\n toMetaKey(targetKey)\n );\n };\n} });\n","/* tslint:disable */\nimport 'core-js/es6';\nimport 'core-js/es7/reflect';\nrequire('zone.js/dist/zone');\n\n// IE11 fix, ref: https://github.com/angular/angular/issues/24769\nif (!Element.prototype.matches && (Element.prototype as any).msMatchesSelector) {\n Element.prototype.matches = (Element.prototype as any).msMatchesSelector;\n}\n\nif (process.env.ENV === 'production') {\n // Production\n} else {\n // Development and test\n Error['stackTraceLimit'] = Infinity;\n require('zone.js/dist/long-stack-trace-zone');\n}\n\n// Other polyfills\nrequire('whatwg-fetch');\nrequire('webcrypto-shim');\nrequire('date-input-polyfill');\n/* tslint:enable */\n","require('../modules/es6.symbol');\nrequire('../modules/es6.object.create');\nrequire('../modules/es6.object.define-property');\nrequire('../modules/es6.object.define-properties');\nrequire('../modules/es6.object.get-own-property-descriptor');\nrequire('../modules/es6.object.get-prototype-of');\nrequire('../modules/es6.object.keys');\nrequire('../modules/es6.object.get-own-property-names');\nrequire('../modules/es6.object.freeze');\nrequire('../modules/es6.object.seal');\nrequire('../modules/es6.object.prevent-extensions');\nrequire('../modules/es6.object.is-frozen');\nrequire('../modules/es6.object.is-sealed');\nrequire('../modules/es6.object.is-extensible');\nrequire('../modules/es6.object.assign');\nrequire('../modules/es6.object.is');\nrequire('../modules/es6.object.set-prototype-of');\nrequire('../modules/es6.object.to-string');\nrequire('../modules/es6.function.bind');\nrequire('../modules/es6.function.name');\nrequire('../modules/es6.function.has-instance');\nrequire('../modules/es6.parse-int');\nrequire('../modules/es6.parse-float');\nrequire('../modules/es6.number.constructor');\nrequire('../modules/es6.number.to-fixed');\nrequire('../modules/es6.number.to-precision');\nrequire('../modules/es6.number.epsilon');\nrequire('../modules/es6.number.is-finite');\nrequire('../modules/es6.number.is-integer');\nrequire('../modules/es6.number.is-nan');\nrequire('../modules/es6.number.is-safe-integer');\nrequire('../modules/es6.number.max-safe-integer');\nrequire('../modules/es6.number.min-safe-integer');\nrequire('../modules/es6.number.parse-float');\nrequire('../modules/es6.number.parse-int');\nrequire('../modules/es6.math.acosh');\nrequire('../modules/es6.math.asinh');\nrequire('../modules/es6.math.atanh');\nrequire('../modules/es6.math.cbrt');\nrequire('../modules/es6.math.clz32');\nrequire('../modules/es6.math.cosh');\nrequire('../modules/es6.math.expm1');\nrequire('../modules/es6.math.fround');\nrequire('../modules/es6.math.hypot');\nrequire('../modules/es6.math.imul');\nrequire('../modules/es6.math.log10');\nrequire('../modules/es6.math.log1p');\nrequire('../modules/es6.math.log2');\nrequire('../modules/es6.math.sign');\nrequire('../modules/es6.math.sinh');\nrequire('../modules/es6.math.tanh');\nrequire('../modules/es6.math.trunc');\nrequire('../modules/es6.string.from-code-point');\nrequire('../modules/es6.string.raw');\nrequire('../modules/es6.string.trim');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/es6.string.code-point-at');\nrequire('../modules/es6.string.ends-with');\nrequire('../modules/es6.string.includes');\nrequire('../modules/es6.string.repeat');\nrequire('../modules/es6.string.starts-with');\nrequire('../modules/es6.string.anchor');\nrequire('../modules/es6.string.big');\nrequire('../modules/es6.string.blink');\nrequire('../modules/es6.string.bold');\nrequire('../modules/es6.string.fixed');\nrequire('../modules/es6.string.fontcolor');\nrequire('../modules/es6.string.fontsize');\nrequire('../modules/es6.string.italics');\nrequire('../modules/es6.string.link');\nrequire('../modules/es6.string.small');\nrequire('../modules/es6.string.strike');\nrequire('../modules/es6.string.sub');\nrequire('../modules/es6.string.sup');\nrequire('../modules/es6.date.now');\nrequire('../modules/es6.date.to-json');\nrequire('../modules/es6.date.to-iso-string');\nrequire('../modules/es6.date.to-string');\nrequire('../modules/es6.date.to-primitive');\nrequire('../modules/es6.array.is-array');\nrequire('../modules/es6.array.from');\nrequire('../modules/es6.array.of');\nrequire('../modules/es6.array.join');\nrequire('../modules/es6.array.slice');\nrequire('../modules/es6.array.sort');\nrequire('../modules/es6.array.for-each');\nrequire('../modules/es6.array.map');\nrequire('../modules/es6.array.filter');\nrequire('../modules/es6.array.some');\nrequire('../modules/es6.array.every');\nrequire('../modules/es6.array.reduce');\nrequire('../modules/es6.array.reduce-right');\nrequire('../modules/es6.array.index-of');\nrequire('../modules/es6.array.last-index-of');\nrequire('../modules/es6.array.copy-within');\nrequire('../modules/es6.array.fill');\nrequire('../modules/es6.array.find');\nrequire('../modules/es6.array.find-index');\nrequire('../modules/es6.array.species');\nrequire('../modules/es6.array.iterator');\nrequire('../modules/es6.regexp.constructor');\nrequire('../modules/es6.regexp.exec');\nrequire('../modules/es6.regexp.to-string');\nrequire('../modules/es6.regexp.flags');\nrequire('../modules/es6.regexp.match');\nrequire('../modules/es6.regexp.replace');\nrequire('../modules/es6.regexp.search');\nrequire('../modules/es6.regexp.split');\nrequire('../modules/es6.promise');\nrequire('../modules/es6.map');\nrequire('../modules/es6.set');\nrequire('../modules/es6.weak-map');\nrequire('../modules/es6.weak-set');\nrequire('../modules/es6.typed.array-buffer');\nrequire('../modules/es6.typed.data-view');\nrequire('../modules/es6.typed.int8-array');\nrequire('../modules/es6.typed.uint8-array');\nrequire('../modules/es6.typed.uint8-clamped-array');\nrequire('../modules/es6.typed.int16-array');\nrequire('../modules/es6.typed.uint16-array');\nrequire('../modules/es6.typed.int32-array');\nrequire('../modules/es6.typed.uint32-array');\nrequire('../modules/es6.typed.float32-array');\nrequire('../modules/es6.typed.float64-array');\nrequire('../modules/es6.reflect.apply');\nrequire('../modules/es6.reflect.construct');\nrequire('../modules/es6.reflect.define-property');\nrequire('../modules/es6.reflect.delete-property');\nrequire('../modules/es6.reflect.enumerate');\nrequire('../modules/es6.reflect.get');\nrequire('../modules/es6.reflect.get-own-property-descriptor');\nrequire('../modules/es6.reflect.get-prototype-of');\nrequire('../modules/es6.reflect.has');\nrequire('../modules/es6.reflect.is-extensible');\nrequire('../modules/es6.reflect.own-keys');\nrequire('../modules/es6.reflect.prevent-extensions');\nrequire('../modules/es6.reflect.set');\nrequire('../modules/es6.reflect.set-prototype-of');\nmodule.exports = require('../modules/_core');\n","require('../modules/es7.reflect.define-metadata');\nrequire('../modules/es7.reflect.delete-metadata');\nrequire('../modules/es7.reflect.get-metadata');\nrequire('../modules/es7.reflect.get-metadata-keys');\nrequire('../modules/es7.reflect.get-own-metadata');\nrequire('../modules/es7.reflect.get-own-metadata-keys');\nrequire('../modules/es7.reflect.has-metadata');\nrequire('../modules/es7.reflect.has-own-metadata');\nrequire('../modules/es7.reflect.metadata');\nmodule.exports = require('../modules/_core').Reflect;\n","/**\n* @license Angular v9.1.0-next.4+61.sha-e552591.with-local-changes\n* (c) 2010-2020 Google LLC. https://angular.io/\n* License: MIT\n*/\n(function (factory) {\n typeof define === 'function' && define.amd ? define(factory) :\n factory();\n}((function () {\n 'use strict';\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var Zone$1 = (function (global) {\n var performance = global['performance'];\n function mark(name) { performance && performance['mark'] && performance['mark'](name); }\n function performanceMeasure(name, label) {\n performance && performance['measure'] && performance['measure'](name, label);\n }\n mark('Zone');\n // Initialize before it's accessed below.\n // __Zone_symbol_prefix global can be used to override the default zone\n // symbol prefix with a custom one if needed.\n var symbolPrefix = global['__Zone_symbol_prefix'] || '__zone_symbol__';\n function __symbol__(name) { return symbolPrefix + name; }\n var checkDuplicate = global[__symbol__('forceDuplicateZoneCheck')] === true;\n if (global['Zone']) {\n // if global['Zone'] already exists (maybe zone.js was already loaded or\n // some other lib also registered a global object named Zone), we may need\n // to throw an error, but sometimes user may not want this error.\n // For example,\n // we have two web pages, page1 includes zone.js, page2 doesn't.\n // and the 1st time user load page1 and page2, everything work fine,\n // but when user load page2 again, error occurs because global['Zone'] already exists.\n // so we add a flag to let user choose whether to throw this error or not.\n // By default, if existing Zone is from zone.js, we will not throw the error.\n if (checkDuplicate || typeof global['Zone'].__symbol__ !== 'function') {\n throw new Error('Zone already loaded.');\n }\n else {\n return global['Zone'];\n }\n }\n var Zone = /** @class */ (function () {\n function Zone(parent, zoneSpec) {\n this._parent = parent;\n this._name = zoneSpec ? zoneSpec.name || 'unnamed' : '';\n this._properties = zoneSpec && zoneSpec.properties || {};\n this._zoneDelegate =\n new ZoneDelegate(this, this._parent && this._parent._zoneDelegate, zoneSpec);\n }\n Zone.assertZonePatched = function () {\n if (global['Promise'] !== patches['ZoneAwarePromise']) {\n throw new Error('Zone.js has detected that ZoneAwarePromise `(window|global).Promise` ' +\n 'has been overwritten.\\n' +\n 'Most likely cause is that a Promise polyfill has been loaded ' +\n 'after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. ' +\n 'If you must load one, do so before loading zone.js.)');\n }\n };\n Object.defineProperty(Zone, \"root\", {\n get: function () {\n var zone = Zone.current;\n while (zone.parent) {\n zone = zone.parent;\n }\n return zone;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Zone, \"current\", {\n get: function () { return _currentZoneFrame.zone; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Zone, \"currentTask\", {\n get: function () { return _currentTask; },\n enumerable: true,\n configurable: true\n });\n // tslint:disable-next-line:require-internal-with-underscore\n Zone.__load_patch = function (name, fn) {\n if (patches.hasOwnProperty(name)) {\n if (checkDuplicate) {\n throw Error('Already loaded patch: ' + name);\n }\n }\n else if (!global['__Zone_disable_' + name]) {\n var perfName = 'Zone:' + name;\n mark(perfName);\n patches[name] = fn(global, Zone, _api);\n performanceMeasure(perfName, perfName);\n }\n };\n Object.defineProperty(Zone.prototype, \"parent\", {\n get: function () { return this._parent; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Zone.prototype, \"name\", {\n get: function () { return this._name; },\n enumerable: true,\n configurable: true\n });\n Zone.prototype.get = function (key) {\n var zone = this.getZoneWith(key);\n if (zone)\n return zone._properties[key];\n };\n Zone.prototype.getZoneWith = function (key) {\n var current = this;\n while (current) {\n if (current._properties.hasOwnProperty(key)) {\n return current;\n }\n current = current._parent;\n }\n return null;\n };\n Zone.prototype.fork = function (zoneSpec) {\n if (!zoneSpec)\n throw new Error('ZoneSpec required!');\n return this._zoneDelegate.fork(this, zoneSpec);\n };\n Zone.prototype.wrap = function (callback, source) {\n if (typeof callback !== 'function') {\n throw new Error('Expecting function got: ' + callback);\n }\n var _callback = this._zoneDelegate.intercept(this, callback, source);\n var zone = this;\n return function () {\n return zone.runGuarded(_callback, this, arguments, source);\n };\n };\n Zone.prototype.run = function (callback, applyThis, applyArgs, source) {\n _currentZoneFrame = { parent: _currentZoneFrame, zone: this };\n try {\n return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source);\n }\n finally {\n _currentZoneFrame = _currentZoneFrame.parent;\n }\n };\n Zone.prototype.runGuarded = function (callback, applyThis, applyArgs, source) {\n if (applyThis === void 0) { applyThis = null; }\n _currentZoneFrame = { parent: _currentZoneFrame, zone: this };\n try {\n try {\n return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source);\n }\n catch (error) {\n if (this._zoneDelegate.handleError(this, error)) {\n throw error;\n }\n }\n }\n finally {\n _currentZoneFrame = _currentZoneFrame.parent;\n }\n };\n Zone.prototype.runTask = function (task, applyThis, applyArgs) {\n if (task.zone != this) {\n throw new Error('A task can only be run in the zone of creation! (Creation: ' +\n (task.zone || NO_ZONE).name + '; Execution: ' + this.name + ')');\n }\n // https://github.com/angular/zone.js/issues/778, sometimes eventTask\n // will run in notScheduled(canceled) state, we should not try to\n // run such kind of task but just return\n if (task.state === notScheduled && (task.type === eventTask || task.type === macroTask)) {\n return;\n }\n var reEntryGuard = task.state != running;\n reEntryGuard && task._transitionTo(running, scheduled);\n task.runCount++;\n var previousTask = _currentTask;\n _currentTask = task;\n _currentZoneFrame = { parent: _currentZoneFrame, zone: this };\n try {\n if (task.type == macroTask && task.data && !task.data.isPeriodic) {\n task.cancelFn = undefined;\n }\n try {\n return this._zoneDelegate.invokeTask(this, task, applyThis, applyArgs);\n }\n catch (error) {\n if (this._zoneDelegate.handleError(this, error)) {\n throw error;\n }\n }\n }\n finally {\n // if the task's state is notScheduled or unknown, then it has already been cancelled\n // we should not reset the state to scheduled\n if (task.state !== notScheduled && task.state !== unknown) {\n if (task.type == eventTask || (task.data && task.data.isPeriodic)) {\n reEntryGuard && task._transitionTo(scheduled, running);\n }\n else {\n task.runCount = 0;\n this._updateTaskCount(task, -1);\n reEntryGuard &&\n task._transitionTo(notScheduled, running, notScheduled);\n }\n }\n _currentZoneFrame = _currentZoneFrame.parent;\n _currentTask = previousTask;\n }\n };\n Zone.prototype.scheduleTask = function (task) {\n if (task.zone && task.zone !== this) {\n // check if the task was rescheduled, the newZone\n // should not be the children of the original zone\n var newZone = this;\n while (newZone) {\n if (newZone === task.zone) {\n throw Error(\"can not reschedule task to \" + this.name + \" which is descendants of the original zone \" + task.zone.name);\n }\n newZone = newZone.parent;\n }\n }\n task._transitionTo(scheduling, notScheduled);\n var zoneDelegates = [];\n task._zoneDelegates = zoneDelegates;\n task._zone = this;\n try {\n task = this._zoneDelegate.scheduleTask(this, task);\n }\n catch (err) {\n // should set task's state to unknown when scheduleTask throw error\n // because the err may from reschedule, so the fromState maybe notScheduled\n task._transitionTo(unknown, scheduling, notScheduled);\n // TODO: @JiaLiPassion, should we check the result from handleError?\n this._zoneDelegate.handleError(this, err);\n throw err;\n }\n if (task._zoneDelegates === zoneDelegates) {\n // we have to check because internally the delegate can reschedule the task.\n this._updateTaskCount(task, 1);\n }\n if (task.state == scheduling) {\n task._transitionTo(scheduled, scheduling);\n }\n return task;\n };\n Zone.prototype.scheduleMicroTask = function (source, callback, data, customSchedule) {\n return this.scheduleTask(new ZoneTask(microTask, source, callback, data, customSchedule, undefined));\n };\n Zone.prototype.scheduleMacroTask = function (source, callback, data, customSchedule, customCancel) {\n return this.scheduleTask(new ZoneTask(macroTask, source, callback, data, customSchedule, customCancel));\n };\n Zone.prototype.scheduleEventTask = function (source, callback, data, customSchedule, customCancel) {\n return this.scheduleTask(new ZoneTask(eventTask, source, callback, data, customSchedule, customCancel));\n };\n Zone.prototype.cancelTask = function (task) {\n if (task.zone != this)\n throw new Error('A task can only be cancelled in the zone of creation! (Creation: ' +\n (task.zone || NO_ZONE).name + '; Execution: ' + this.name + ')');\n task._transitionTo(canceling, scheduled, running);\n try {\n this._zoneDelegate.cancelTask(this, task);\n }\n catch (err) {\n // if error occurs when cancelTask, transit the state to unknown\n task._transitionTo(unknown, canceling);\n this._zoneDelegate.handleError(this, err);\n throw err;\n }\n this._updateTaskCount(task, -1);\n task._transitionTo(notScheduled, canceling);\n task.runCount = 0;\n return task;\n };\n Zone.prototype._updateTaskCount = function (task, count) {\n var zoneDelegates = task._zoneDelegates;\n if (count == -1) {\n task._zoneDelegates = null;\n }\n for (var i = 0; i < zoneDelegates.length; i++) {\n zoneDelegates[i]._updateTaskCount(task.type, count);\n }\n };\n return Zone;\n }());\n // tslint:disable-next-line:require-internal-with-underscore\n Zone.__symbol__ = __symbol__;\n var DELEGATE_ZS = {\n name: '',\n onHasTask: function (delegate, _, target, hasTaskState) { return delegate.hasTask(target, hasTaskState); },\n onScheduleTask: function (delegate, _, target, task) { return delegate.scheduleTask(target, task); },\n onInvokeTask: function (delegate, _, target, task, applyThis, applyArgs) { return delegate.invokeTask(target, task, applyThis, applyArgs); },\n onCancelTask: function (delegate, _, target, task) { return delegate.cancelTask(target, task); }\n };\n var ZoneDelegate = /** @class */ (function () {\n function ZoneDelegate(zone, parentDelegate, zoneSpec) {\n this._taskCounts = { 'microTask': 0, 'macroTask': 0, 'eventTask': 0 };\n this.zone = zone;\n this._parentDelegate = parentDelegate;\n this._forkZS =\n zoneSpec && (zoneSpec && zoneSpec.onFork ? zoneSpec : parentDelegate._forkZS);\n this._forkDlgt = zoneSpec && (zoneSpec.onFork ? parentDelegate : parentDelegate._forkDlgt);\n this._forkCurrZone =\n zoneSpec && (zoneSpec.onFork ? this.zone : parentDelegate._forkCurrZone);\n this._interceptZS =\n zoneSpec && (zoneSpec.onIntercept ? zoneSpec : parentDelegate._interceptZS);\n this._interceptDlgt =\n zoneSpec && (zoneSpec.onIntercept ? parentDelegate : parentDelegate._interceptDlgt);\n this._interceptCurrZone =\n zoneSpec && (zoneSpec.onIntercept ? this.zone : parentDelegate._interceptCurrZone);\n this._invokeZS = zoneSpec && (zoneSpec.onInvoke ? zoneSpec : parentDelegate._invokeZS);\n this._invokeDlgt =\n zoneSpec && (zoneSpec.onInvoke ? parentDelegate : parentDelegate._invokeDlgt);\n this._invokeCurrZone =\n zoneSpec && (zoneSpec.onInvoke ? this.zone : parentDelegate._invokeCurrZone);\n this._handleErrorZS =\n zoneSpec && (zoneSpec.onHandleError ? zoneSpec : parentDelegate._handleErrorZS);\n this._handleErrorDlgt = zoneSpec &&\n (zoneSpec.onHandleError ? parentDelegate : parentDelegate._handleErrorDlgt);\n this._handleErrorCurrZone =\n zoneSpec && (zoneSpec.onHandleError ? this.zone : parentDelegate._handleErrorCurrZone);\n this._scheduleTaskZS =\n zoneSpec && (zoneSpec.onScheduleTask ? zoneSpec : parentDelegate._scheduleTaskZS);\n this._scheduleTaskDlgt = zoneSpec &&\n (zoneSpec.onScheduleTask ? parentDelegate : parentDelegate._scheduleTaskDlgt);\n this._scheduleTaskCurrZone = zoneSpec &&\n (zoneSpec.onScheduleTask ? this.zone : parentDelegate._scheduleTaskCurrZone);\n this._invokeTaskZS =\n zoneSpec && (zoneSpec.onInvokeTask ? zoneSpec : parentDelegate._invokeTaskZS);\n this._invokeTaskDlgt =\n zoneSpec && (zoneSpec.onInvokeTask ? parentDelegate : parentDelegate._invokeTaskDlgt);\n this._invokeTaskCurrZone =\n zoneSpec && (zoneSpec.onInvokeTask ? this.zone : parentDelegate._invokeTaskCurrZone);\n this._cancelTaskZS =\n zoneSpec && (zoneSpec.onCancelTask ? zoneSpec : parentDelegate._cancelTaskZS);\n this._cancelTaskDlgt =\n zoneSpec && (zoneSpec.onCancelTask ? parentDelegate : parentDelegate._cancelTaskDlgt);\n this._cancelTaskCurrZone =\n zoneSpec && (zoneSpec.onCancelTask ? this.zone : parentDelegate._cancelTaskCurrZone);\n this._hasTaskZS = null;\n this._hasTaskDlgt = null;\n this._hasTaskDlgtOwner = null;\n this._hasTaskCurrZone = null;\n var zoneSpecHasTask = zoneSpec && zoneSpec.onHasTask;\n var parentHasTask = parentDelegate && parentDelegate._hasTaskZS;\n if (zoneSpecHasTask || parentHasTask) {\n // If we need to report hasTask, than this ZS needs to do ref counting on tasks. In such\n // a case all task related interceptors must go through this ZD. We can't short circuit it.\n this._hasTaskZS = zoneSpecHasTask ? zoneSpec : DELEGATE_ZS;\n this._hasTaskDlgt = parentDelegate;\n this._hasTaskDlgtOwner = this;\n this._hasTaskCurrZone = zone;\n if (!zoneSpec.onScheduleTask) {\n this._scheduleTaskZS = DELEGATE_ZS;\n this._scheduleTaskDlgt = parentDelegate;\n this._scheduleTaskCurrZone = this.zone;\n }\n if (!zoneSpec.onInvokeTask) {\n this._invokeTaskZS = DELEGATE_ZS;\n this._invokeTaskDlgt = parentDelegate;\n this._invokeTaskCurrZone = this.zone;\n }\n if (!zoneSpec.onCancelTask) {\n this._cancelTaskZS = DELEGATE_ZS;\n this._cancelTaskDlgt = parentDelegate;\n this._cancelTaskCurrZone = this.zone;\n }\n }\n }\n ZoneDelegate.prototype.fork = function (targetZone, zoneSpec) {\n return this._forkZS ?\n this._forkZS.onFork(this._forkDlgt, this.zone, targetZone, zoneSpec) :\n new Zone(targetZone, zoneSpec);\n };\n ZoneDelegate.prototype.intercept = function (targetZone, callback, source) {\n return this._interceptZS ?\n this._interceptZS.onIntercept(this._interceptDlgt, this._interceptCurrZone, targetZone, callback, source) :\n callback;\n };\n ZoneDelegate.prototype.invoke = function (targetZone, callback, applyThis, applyArgs, source) {\n return this._invokeZS ?\n this._invokeZS.onInvoke(this._invokeDlgt, this._invokeCurrZone, targetZone, callback, applyThis, applyArgs, source) :\n callback.apply(applyThis, applyArgs);\n };\n ZoneDelegate.prototype.handleError = function (targetZone, error) {\n return this._handleErrorZS ?\n this._handleErrorZS.onHandleError(this._handleErrorDlgt, this._handleErrorCurrZone, targetZone, error) :\n true;\n };\n ZoneDelegate.prototype.scheduleTask = function (targetZone, task) {\n var returnTask = task;\n if (this._scheduleTaskZS) {\n if (this._hasTaskZS) {\n returnTask._zoneDelegates.push(this._hasTaskDlgtOwner);\n }\n // clang-format off\n returnTask = this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt, this._scheduleTaskCurrZone, targetZone, task);\n // clang-format on\n if (!returnTask)\n returnTask = task;\n }\n else {\n if (task.scheduleFn) {\n task.scheduleFn(task);\n }\n else if (task.type == microTask) {\n scheduleMicroTask(task);\n }\n else {\n throw new Error('Task is missing scheduleFn.');\n }\n }\n return returnTask;\n };\n ZoneDelegate.prototype.invokeTask = function (targetZone, task, applyThis, applyArgs) {\n return this._invokeTaskZS ?\n this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt, this._invokeTaskCurrZone, targetZone, task, applyThis, applyArgs) :\n task.callback.apply(applyThis, applyArgs);\n };\n ZoneDelegate.prototype.cancelTask = function (targetZone, task) {\n var value;\n if (this._cancelTaskZS) {\n value = this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt, this._cancelTaskCurrZone, targetZone, task);\n }\n else {\n if (!task.cancelFn) {\n throw Error('Task is not cancelable');\n }\n value = task.cancelFn(task);\n }\n return value;\n };\n ZoneDelegate.prototype.hasTask = function (targetZone, isEmpty) {\n // hasTask should not throw error so other ZoneDelegate\n // can still trigger hasTask callback\n try {\n this._hasTaskZS &&\n this._hasTaskZS.onHasTask(this._hasTaskDlgt, this._hasTaskCurrZone, targetZone, isEmpty);\n }\n catch (err) {\n this.handleError(targetZone, err);\n }\n };\n // tslint:disable-next-line:require-internal-with-underscore\n ZoneDelegate.prototype._updateTaskCount = function (type, count) {\n var counts = this._taskCounts;\n var prev = counts[type];\n var next = counts[type] = prev + count;\n if (next < 0) {\n throw new Error('More tasks executed then were scheduled.');\n }\n if (prev == 0 || next == 0) {\n var isEmpty = {\n microTask: counts['microTask'] > 0,\n macroTask: counts['macroTask'] > 0,\n eventTask: counts['eventTask'] > 0,\n change: type\n };\n this.hasTask(this.zone, isEmpty);\n }\n };\n return ZoneDelegate;\n }());\n var ZoneTask = /** @class */ (function () {\n function ZoneTask(type, source, callback, options, scheduleFn, cancelFn) {\n // tslint:disable-next-line:require-internal-with-underscore\n this._zone = null;\n this.runCount = 0;\n // tslint:disable-next-line:require-internal-with-underscore\n this._zoneDelegates = null;\n // tslint:disable-next-line:require-internal-with-underscore\n this._state = 'notScheduled';\n this.type = type;\n this.source = source;\n this.data = options;\n this.scheduleFn = scheduleFn;\n this.cancelFn = cancelFn;\n if (!callback) {\n throw new Error('callback is not defined');\n }\n this.callback = callback;\n var self = this;\n // TODO: @JiaLiPassion options should have interface\n if (type === eventTask && options && options.useG) {\n this.invoke = ZoneTask.invokeTask;\n }\n else {\n this.invoke = function () {\n return ZoneTask.invokeTask.call(global, self, this, arguments);\n };\n }\n }\n ZoneTask.invokeTask = function (task, target, args) {\n if (!task) {\n task = this;\n }\n _numberOfNestedTaskFrames++;\n try {\n task.runCount++;\n return task.zone.runTask(task, target, args);\n }\n finally {\n if (_numberOfNestedTaskFrames == 1) {\n drainMicroTaskQueue();\n }\n _numberOfNestedTaskFrames--;\n }\n };\n Object.defineProperty(ZoneTask.prototype, \"zone\", {\n get: function () { return this._zone; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ZoneTask.prototype, \"state\", {\n get: function () { return this._state; },\n enumerable: true,\n configurable: true\n });\n ZoneTask.prototype.cancelScheduleRequest = function () { this._transitionTo(notScheduled, scheduling); };\n // tslint:disable-next-line:require-internal-with-underscore\n ZoneTask.prototype._transitionTo = function (toState, fromState1, fromState2) {\n if (this._state === fromState1 || this._state === fromState2) {\n this._state = toState;\n if (toState == notScheduled) {\n this._zoneDelegates = null;\n }\n }\n else {\n throw new Error(this.type + \" '\" + this.source + \"': can not transition to '\" + toState + \"', expecting state '\" + fromState1 + \"'\" + (fromState2 ? ' or \\'' + fromState2 + '\\'' : '') + \", was '\" + this._state + \"'.\");\n }\n };\n ZoneTask.prototype.toString = function () {\n if (this.data && typeof this.data.handleId !== 'undefined') {\n return this.data.handleId.toString();\n }\n else {\n return Object.prototype.toString.call(this);\n }\n };\n // add toJSON method to prevent cyclic error when\n // call JSON.stringify(zoneTask)\n ZoneTask.prototype.toJSON = function () {\n return {\n type: this.type,\n state: this.state,\n source: this.source,\n zone: this.zone.name,\n runCount: this.runCount\n };\n };\n return ZoneTask;\n }());\n //////////////////////////////////////////////////////\n //////////////////////////////////////////////////////\n /// MICROTASK QUEUE\n //////////////////////////////////////////////////////\n //////////////////////////////////////////////////////\n var symbolSetTimeout = __symbol__('setTimeout');\n var symbolPromise = __symbol__('Promise');\n var symbolThen = __symbol__('then');\n var _microTaskQueue = [];\n var _isDrainingMicrotaskQueue = false;\n var nativeMicroTaskQueuePromise;\n function scheduleMicroTask(task) {\n // if we are not running in any task, and there has not been anything scheduled\n // we must bootstrap the initial task creation by manually scheduling the drain\n if (_numberOfNestedTaskFrames === 0 && _microTaskQueue.length === 0) {\n // We are not running in Task, so we need to kickstart the microtask queue.\n if (!nativeMicroTaskQueuePromise) {\n if (global[symbolPromise]) {\n nativeMicroTaskQueuePromise = global[symbolPromise].resolve(0);\n }\n }\n if (nativeMicroTaskQueuePromise) {\n var nativeThen = nativeMicroTaskQueuePromise[symbolThen];\n if (!nativeThen) {\n // native Promise is not patchable, we need to use `then` directly\n // issue 1078\n nativeThen = nativeMicroTaskQueuePromise['then'];\n }\n nativeThen.call(nativeMicroTaskQueuePromise, drainMicroTaskQueue);\n }\n else {\n global[symbolSetTimeout](drainMicroTaskQueue, 0);\n }\n }\n task && _microTaskQueue.push(task);\n }\n function drainMicroTaskQueue() {\n if (!_isDrainingMicrotaskQueue) {\n _isDrainingMicrotaskQueue = true;\n while (_microTaskQueue.length) {\n var queue = _microTaskQueue;\n _microTaskQueue = [];\n for (var i = 0; i < queue.length; i++) {\n var task = queue[i];\n try {\n task.zone.runTask(task, null, null);\n }\n catch (error) {\n _api.onUnhandledError(error);\n }\n }\n }\n _api.microtaskDrainDone();\n _isDrainingMicrotaskQueue = false;\n }\n }\n //////////////////////////////////////////////////////\n //////////////////////////////////////////////////////\n /// BOOTSTRAP\n //////////////////////////////////////////////////////\n //////////////////////////////////////////////////////\n var NO_ZONE = { name: 'NO ZONE' };\n var notScheduled = 'notScheduled', scheduling = 'scheduling', scheduled = 'scheduled', running = 'running', canceling = 'canceling', unknown = 'unknown';\n var microTask = 'microTask', macroTask = 'macroTask', eventTask = 'eventTask';\n var patches = {};\n var _api = {\n symbol: __symbol__,\n currentZoneFrame: function () { return _currentZoneFrame; },\n onUnhandledError: noop,\n microtaskDrainDone: noop,\n scheduleMicroTask: scheduleMicroTask,\n showUncaughtError: function () { return !Zone[__symbol__('ignoreConsoleErrorUncaughtError')]; },\n patchEventTarget: function () { return []; },\n patchOnProperties: noop,\n patchMethod: function () { return noop; },\n bindArguments: function () { return []; },\n patchThen: function () { return noop; },\n patchMacroTask: function () { return noop; },\n setNativePromise: function (NativePromise) {\n // sometimes NativePromise.resolve static function\n // is not ready yet, (such as core-js/es6.promise)\n // so we need to check here.\n if (NativePromise && typeof NativePromise.resolve === 'function') {\n nativeMicroTaskQueuePromise = NativePromise.resolve(0);\n }\n },\n patchEventPrototype: function () { return noop; },\n isIEOrEdge: function () { return false; },\n getGlobalObjects: function () { return undefined; },\n ObjectDefineProperty: function () { return noop; },\n ObjectGetOwnPropertyDescriptor: function () { return undefined; },\n ObjectCreate: function () { return undefined; },\n ArraySlice: function () { return []; },\n patchClass: function () { return noop; },\n wrapWithCurrentZone: function () { return noop; },\n filterProperties: function () { return []; },\n attachOriginToPatched: function () { return noop; },\n _redefineProperty: function () { return noop; },\n patchCallbacks: function () { return noop; }\n };\n var _currentZoneFrame = { parent: null, zone: new Zone(null, null) };\n var _currentTask = null;\n var _numberOfNestedTaskFrames = 0;\n function noop() { }\n performanceMeasure('Zone', 'Zone');\n return global['Zone'] = Zone;\n })(typeof window !== 'undefined' && window || typeof self !== 'undefined' && self || global);\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n Zone.__load_patch('ZoneAwarePromise', function (global, Zone, api) {\n var ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n var ObjectDefineProperty = Object.defineProperty;\n function readableObjectToString(obj) {\n if (obj && obj.toString === Object.prototype.toString) {\n var className = obj.constructor && obj.constructor.name;\n return (className ? className : '') + ': ' + JSON.stringify(obj);\n }\n return obj ? obj.toString() : Object.prototype.toString.call(obj);\n }\n var __symbol__ = api.symbol;\n var _uncaughtPromiseErrors = [];\n var isDisableWrappingUncaughtPromiseRejection = global[__symbol__('DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION')] === true;\n var symbolPromise = __symbol__('Promise');\n var symbolThen = __symbol__('then');\n var creationTrace = '__creationTrace__';\n api.onUnhandledError = function (e) {\n if (api.showUncaughtError()) {\n var rejection = e && e.rejection;\n if (rejection) {\n console.error('Unhandled Promise rejection:', rejection instanceof Error ? rejection.message : rejection, '; Zone:', e.zone.name, '; Task:', e.task && e.task.source, '; Value:', rejection, rejection instanceof Error ? rejection.stack : undefined);\n }\n else {\n console.error(e);\n }\n }\n };\n api.microtaskDrainDone = function () {\n var _loop_1 = function () {\n var uncaughtPromiseError = _uncaughtPromiseErrors.shift();\n try {\n uncaughtPromiseError.zone.runGuarded(function () { throw uncaughtPromiseError; });\n }\n catch (error) {\n handleUnhandledRejection(error);\n }\n };\n while (_uncaughtPromiseErrors.length) {\n _loop_1();\n }\n };\n var UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL = __symbol__('unhandledPromiseRejectionHandler');\n function handleUnhandledRejection(e) {\n api.onUnhandledError(e);\n try {\n var handler = Zone[UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL];\n if (typeof handler === 'function') {\n handler.call(this, e);\n }\n }\n catch (err) {\n }\n }\n function isThenable(value) { return value && value.then; }\n function forwardResolution(value) { return value; }\n function forwardRejection(rejection) { return ZoneAwarePromise.reject(rejection); }\n var symbolState = __symbol__('state');\n var symbolValue = __symbol__('value');\n var symbolFinally = __symbol__('finally');\n var symbolParentPromiseValue = __symbol__('parentPromiseValue');\n var symbolParentPromiseState = __symbol__('parentPromiseState');\n var source = 'Promise.then';\n var UNRESOLVED = null;\n var RESOLVED = true;\n var REJECTED = false;\n var REJECTED_NO_CATCH = 0;\n function makeResolver(promise, state) {\n return function (v) {\n try {\n resolvePromise(promise, state, v);\n }\n catch (err) {\n resolvePromise(promise, false, err);\n }\n // Do not return value or you will break the Promise spec.\n };\n }\n var once = function () {\n var wasCalled = false;\n return function wrapper(wrappedFunction) {\n return function () {\n if (wasCalled) {\n return;\n }\n wasCalled = true;\n wrappedFunction.apply(null, arguments);\n };\n };\n };\n var TYPE_ERROR = 'Promise resolved with itself';\n var CURRENT_TASK_TRACE_SYMBOL = __symbol__('currentTaskTrace');\n // Promise Resolution\n function resolvePromise(promise, state, value) {\n var onceWrapper = once();\n if (promise === value) {\n throw new TypeError(TYPE_ERROR);\n }\n if (promise[symbolState] === UNRESOLVED) {\n // should only get value.then once based on promise spec.\n var then = null;\n try {\n if (typeof value === 'object' || typeof value === 'function') {\n then = value && value.then;\n }\n }\n catch (err) {\n onceWrapper(function () { resolvePromise(promise, false, err); })();\n return promise;\n }\n // if (value instanceof ZoneAwarePromise) {\n if (state !== REJECTED && value instanceof ZoneAwarePromise &&\n value.hasOwnProperty(symbolState) && value.hasOwnProperty(symbolValue) &&\n value[symbolState] !== UNRESOLVED) {\n clearRejectedNoCatch(value);\n resolvePromise(promise, value[symbolState], value[symbolValue]);\n }\n else if (state !== REJECTED && typeof then === 'function') {\n try {\n then.call(value, onceWrapper(makeResolver(promise, state)), onceWrapper(makeResolver(promise, false)));\n }\n catch (err) {\n onceWrapper(function () { resolvePromise(promise, false, err); })();\n }\n }\n else {\n promise[symbolState] = state;\n var queue = promise[symbolValue];\n promise[symbolValue] = value;\n if (promise[symbolFinally] === symbolFinally) {\n // the promise is generated by Promise.prototype.finally\n if (state === RESOLVED) {\n // the state is resolved, should ignore the value\n // and use parent promise value\n promise[symbolState] = promise[symbolParentPromiseState];\n promise[symbolValue] = promise[symbolParentPromiseValue];\n }\n }\n // record task information in value when error occurs, so we can\n // do some additional work such as render longStackTrace\n if (state === REJECTED && value instanceof Error) {\n // check if longStackTraceZone is here\n var trace = Zone.currentTask && Zone.currentTask.data &&\n Zone.currentTask.data[creationTrace];\n if (trace) {\n // only keep the long stack trace into error when in longStackTraceZone\n ObjectDefineProperty(value, CURRENT_TASK_TRACE_SYMBOL, { configurable: true, enumerable: false, writable: true, value: trace });\n }\n }\n for (var i = 0; i < queue.length;) {\n scheduleResolveOrReject(promise, queue[i++], queue[i++], queue[i++], queue[i++]);\n }\n if (queue.length == 0 && state == REJECTED) {\n promise[symbolState] = REJECTED_NO_CATCH;\n var uncaughtPromiseError = value;\n if (!isDisableWrappingUncaughtPromiseRejection) {\n // If disable wrapping uncaught promise reject\n // and the rejected value is an Error object,\n // use the value instead of wrapping it.\n try {\n // Here we throws a new Error to print more readable error log\n // and if the value is not an error, zone.js builds an `Error`\n // Object here to attach the stack information.\n throw new Error('Uncaught (in promise): ' + readableObjectToString(value) +\n (value && value.stack ? '\\n' + value.stack : ''));\n }\n catch (err) {\n uncaughtPromiseError = err;\n }\n }\n uncaughtPromiseError.rejection = value;\n uncaughtPromiseError.promise = promise;\n uncaughtPromiseError.zone = Zone.current;\n uncaughtPromiseError.task = Zone.currentTask;\n _uncaughtPromiseErrors.push(uncaughtPromiseError);\n api.scheduleMicroTask(); // to make sure that it is running\n }\n }\n }\n // Resolving an already resolved promise is a noop.\n return promise;\n }\n var REJECTION_HANDLED_HANDLER = __symbol__('rejectionHandledHandler');\n function clearRejectedNoCatch(promise) {\n if (promise[symbolState] === REJECTED_NO_CATCH) {\n // if the promise is rejected no catch status\n // and queue.length > 0, means there is a error handler\n // here to handle the rejected promise, we should trigger\n // windows.rejectionhandled eventHandler or nodejs rejectionHandled\n // eventHandler\n try {\n var handler = Zone[REJECTION_HANDLED_HANDLER];\n if (handler && typeof handler === 'function') {\n handler.call(this, { rejection: promise[symbolValue], promise: promise });\n }\n }\n catch (err) {\n }\n promise[symbolState] = REJECTED;\n for (var i = 0; i < _uncaughtPromiseErrors.length; i++) {\n if (promise === _uncaughtPromiseErrors[i].promise) {\n _uncaughtPromiseErrors.splice(i, 1);\n }\n }\n }\n }\n function scheduleResolveOrReject(promise, zone, chainPromise, onFulfilled, onRejected) {\n clearRejectedNoCatch(promise);\n var promiseState = promise[symbolState];\n var delegate = promiseState ?\n (typeof onFulfilled === 'function') ? onFulfilled : forwardResolution :\n (typeof onRejected === 'function') ? onRejected : forwardRejection;\n zone.scheduleMicroTask(source, function () {\n try {\n var parentPromiseValue = promise[symbolValue];\n var isFinallyPromise = !!chainPromise && symbolFinally === chainPromise[symbolFinally];\n if (isFinallyPromise) {\n // if the promise is generated from finally call, keep parent promise's state and value\n chainPromise[symbolParentPromiseValue] = parentPromiseValue;\n chainPromise[symbolParentPromiseState] = promiseState;\n }\n // should not pass value to finally callback\n var value = zone.run(delegate, undefined, isFinallyPromise && delegate !== forwardRejection && delegate !== forwardResolution ?\n [] :\n [parentPromiseValue]);\n resolvePromise(chainPromise, true, value);\n }\n catch (error) {\n // if error occurs, should always return this error\n resolvePromise(chainPromise, false, error);\n }\n }, chainPromise);\n }\n var ZONE_AWARE_PROMISE_TO_STRING = 'function ZoneAwarePromise() { [native code] }';\n var noop = function () { };\n var ZoneAwarePromise = /** @class */ (function () {\n function ZoneAwarePromise(executor) {\n var promise = this;\n if (!(promise instanceof ZoneAwarePromise)) {\n throw new Error('Must be an instanceof Promise.');\n }\n promise[symbolState] = UNRESOLVED;\n promise[symbolValue] = []; // queue;\n try {\n executor && executor(makeResolver(promise, RESOLVED), makeResolver(promise, REJECTED));\n }\n catch (error) {\n resolvePromise(promise, false, error);\n }\n }\n ZoneAwarePromise.toString = function () { return ZONE_AWARE_PROMISE_TO_STRING; };\n ZoneAwarePromise.resolve = function (value) {\n return resolvePromise(new this(null), RESOLVED, value);\n };\n ZoneAwarePromise.reject = function (error) {\n return resolvePromise(new this(null), REJECTED, error);\n };\n ZoneAwarePromise.race = function (values) {\n var resolve;\n var reject;\n var promise = new this(function (res, rej) {\n resolve = res;\n reject = rej;\n });\n function onResolve(value) { resolve(value); }\n function onReject(error) { reject(error); }\n for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {\n var value = values_1[_i];\n if (!isThenable(value)) {\n value = this.resolve(value);\n }\n value.then(onResolve, onReject);\n }\n return promise;\n };\n ZoneAwarePromise.all = function (values) { return ZoneAwarePromise.allWithCallback(values); };\n ZoneAwarePromise.allSettled = function (values) {\n var P = this && this.prototype instanceof ZoneAwarePromise ? this : ZoneAwarePromise;\n return P.allWithCallback(values, {\n thenCallback: function (value) { return ({ status: 'fulfilled', value: value }); },\n errorCallback: function (err) { return ({ status: 'rejected', reason: err }); }\n });\n };\n ZoneAwarePromise.allWithCallback = function (values, callback) {\n var resolve;\n var reject;\n var promise = new this(function (res, rej) {\n resolve = res;\n reject = rej;\n });\n // Start at 2 to prevent prematurely resolving if .then is called immediately.\n var unresolvedCount = 2;\n var valueIndex = 0;\n var resolvedValues = [];\n var _loop_2 = function (value) {\n if (!isThenable(value)) {\n value = this_1.resolve(value);\n }\n var curValueIndex = valueIndex;\n try {\n value.then(function (value) {\n resolvedValues[curValueIndex] = callback ? callback.thenCallback(value) : value;\n unresolvedCount--;\n if (unresolvedCount === 0) {\n resolve(resolvedValues);\n }\n }, function (err) {\n if (!callback) {\n reject(err);\n }\n else {\n resolvedValues[curValueIndex] = callback.errorCallback(err);\n unresolvedCount--;\n if (unresolvedCount === 0) {\n resolve(resolvedValues);\n }\n }\n });\n }\n catch (thenErr) {\n reject(thenErr);\n }\n unresolvedCount++;\n valueIndex++;\n };\n var this_1 = this;\n for (var _i = 0, values_2 = values; _i < values_2.length; _i++) {\n var value = values_2[_i];\n _loop_2(value);\n }\n // Make the unresolvedCount zero-based again.\n unresolvedCount -= 2;\n if (unresolvedCount === 0) {\n resolve(resolvedValues);\n }\n return promise;\n };\n Object.defineProperty(ZoneAwarePromise.prototype, Symbol.toStringTag, {\n get: function () { return 'Promise'; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ZoneAwarePromise.prototype, Symbol.species, {\n get: function () { return ZoneAwarePromise; },\n enumerable: true,\n configurable: true\n });\n ZoneAwarePromise.prototype.then = function (onFulfilled, onRejected) {\n var C = this.constructor[Symbol.species];\n if (!C || typeof C !== 'function') {\n C = this.constructor || ZoneAwarePromise;\n }\n var chainPromise = new C(noop);\n var zone = Zone.current;\n if (this[symbolState] == UNRESOLVED) {\n this[symbolValue].push(zone, chainPromise, onFulfilled, onRejected);\n }\n else {\n scheduleResolveOrReject(this, zone, chainPromise, onFulfilled, onRejected);\n }\n return chainPromise;\n };\n ZoneAwarePromise.prototype.catch = function (onRejected) {\n return this.then(null, onRejected);\n };\n ZoneAwarePromise.prototype.finally = function (onFinally) {\n var C = this.constructor[Symbol.species];\n if (!C || typeof C !== 'function') {\n C = ZoneAwarePromise;\n }\n var chainPromise = new C(noop);\n chainPromise[symbolFinally] = symbolFinally;\n var zone = Zone.current;\n if (this[symbolState] == UNRESOLVED) {\n this[symbolValue].push(zone, chainPromise, onFinally, onFinally);\n }\n else {\n scheduleResolveOrReject(this, zone, chainPromise, onFinally, onFinally);\n }\n return chainPromise;\n };\n return ZoneAwarePromise;\n }());\n // Protect against aggressive optimizers dropping seemingly unused properties.\n // E.g. Closure Compiler in advanced mode.\n ZoneAwarePromise['resolve'] = ZoneAwarePromise.resolve;\n ZoneAwarePromise['reject'] = ZoneAwarePromise.reject;\n ZoneAwarePromise['race'] = ZoneAwarePromise.race;\n ZoneAwarePromise['all'] = ZoneAwarePromise.all;\n var NativePromise = global[symbolPromise] = global['Promise'];\n var ZONE_AWARE_PROMISE = Zone.__symbol__('ZoneAwarePromise');\n var desc = ObjectGetOwnPropertyDescriptor(global, 'Promise');\n if (!desc || desc.configurable) {\n desc && delete desc.writable;\n desc && delete desc.value;\n if (!desc) {\n desc = { configurable: true, enumerable: true };\n }\n desc.get = function () {\n // if we already set ZoneAwarePromise, use patched one\n // otherwise return native one.\n return global[ZONE_AWARE_PROMISE] ? global[ZONE_AWARE_PROMISE] : global[symbolPromise];\n };\n desc.set = function (NewNativePromise) {\n if (NewNativePromise === ZoneAwarePromise) {\n // if the NewNativePromise is ZoneAwarePromise\n // save to global\n global[ZONE_AWARE_PROMISE] = NewNativePromise;\n }\n else {\n // if the NewNativePromise is not ZoneAwarePromise\n // for example: after load zone.js, some library just\n // set es6-promise to global, if we set it to global\n // directly, assertZonePatched will fail and angular\n // will not loaded, so we just set the NewNativePromise\n // to global[symbolPromise], so the result is just like\n // we load ES6 Promise before zone.js\n global[symbolPromise] = NewNativePromise;\n if (!NewNativePromise.prototype[symbolThen]) {\n patchThen(NewNativePromise);\n }\n api.setNativePromise(NewNativePromise);\n }\n };\n ObjectDefineProperty(global, 'Promise', desc);\n }\n global['Promise'] = ZoneAwarePromise;\n var symbolThenPatched = __symbol__('thenPatched');\n function patchThen(Ctor) {\n var proto = Ctor.prototype;\n var prop = ObjectGetOwnPropertyDescriptor(proto, 'then');\n if (prop && (prop.writable === false || !prop.configurable)) {\n // check Ctor.prototype.then propertyDescriptor is writable or not\n // in meteor env, writable is false, we should ignore such case\n return;\n }\n var originalThen = proto.then;\n // Keep a reference to the original method.\n proto[symbolThen] = originalThen;\n Ctor.prototype.then = function (onResolve, onReject) {\n var _this = this;\n var wrapped = new ZoneAwarePromise(function (resolve, reject) { originalThen.call(_this, resolve, reject); });\n return wrapped.then(onResolve, onReject);\n };\n Ctor[symbolThenPatched] = true;\n }\n api.patchThen = patchThen;\n function zoneify(fn) {\n return function () {\n var resultPromise = fn.apply(this, arguments);\n if (resultPromise instanceof ZoneAwarePromise) {\n return resultPromise;\n }\n var ctor = resultPromise.constructor;\n if (!ctor[symbolThenPatched]) {\n patchThen(ctor);\n }\n return resultPromise;\n };\n }\n if (NativePromise) {\n patchThen(NativePromise);\n var fetch_1 = global['fetch'];\n if (typeof fetch_1 == 'function') {\n global[api.symbol('fetch')] = fetch_1;\n global['fetch'] = zoneify(fetch_1);\n }\n }\n // This is not part of public API, but it is useful for tests, so we expose it.\n Promise[Zone.__symbol__('uncaughtPromiseErrors')] = _uncaughtPromiseErrors;\n return ZoneAwarePromise;\n });\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n /**\n * Suppress closure compiler errors about unknown 'Zone' variable\n * @fileoverview\n * @suppress {undefinedVars,globalThis,missingRequire}\n */\n /// \n // issue #989, to reduce bundle size, use short name\n /** Object.getOwnPropertyDescriptor */\n var ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n /** Object.defineProperty */\n var ObjectDefineProperty = Object.defineProperty;\n /** Object.getPrototypeOf */\n var ObjectGetPrototypeOf = Object.getPrototypeOf;\n /** Object.create */\n var ObjectCreate = Object.create;\n /** Array.prototype.slice */\n var ArraySlice = Array.prototype.slice;\n /** addEventListener string const */\n var ADD_EVENT_LISTENER_STR = 'addEventListener';\n /** removeEventListener string const */\n var REMOVE_EVENT_LISTENER_STR = 'removeEventListener';\n /** zoneSymbol addEventListener */\n var ZONE_SYMBOL_ADD_EVENT_LISTENER = Zone.__symbol__(ADD_EVENT_LISTENER_STR);\n /** zoneSymbol removeEventListener */\n var ZONE_SYMBOL_REMOVE_EVENT_LISTENER = Zone.__symbol__(REMOVE_EVENT_LISTENER_STR);\n /** true string const */\n var TRUE_STR = 'true';\n /** false string const */\n var FALSE_STR = 'false';\n /** Zone symbol prefix string const. */\n var ZONE_SYMBOL_PREFIX = Zone.__symbol__('');\n function wrapWithCurrentZone(callback, source) {\n return Zone.current.wrap(callback, source);\n }\n function scheduleMacroTaskWithCurrentZone(source, callback, data, customSchedule, customCancel) {\n return Zone.current.scheduleMacroTask(source, callback, data, customSchedule, customCancel);\n }\n var zoneSymbol = Zone.__symbol__;\n var isWindowExists = typeof window !== 'undefined';\n var internalWindow = isWindowExists ? window : undefined;\n var _global = isWindowExists && internalWindow || typeof self === 'object' && self || global;\n var REMOVE_ATTRIBUTE = 'removeAttribute';\n var NULL_ON_PROP_VALUE = [null];\n function bindArguments(args, source) {\n for (var i = args.length - 1; i >= 0; i--) {\n if (typeof args[i] === 'function') {\n args[i] = wrapWithCurrentZone(args[i], source + '_' + i);\n }\n }\n return args;\n }\n function patchPrototype(prototype, fnNames) {\n var source = prototype.constructor['name'];\n var _loop_3 = function (i) {\n var name_1 = fnNames[i];\n var delegate = prototype[name_1];\n if (delegate) {\n var prototypeDesc = ObjectGetOwnPropertyDescriptor(prototype, name_1);\n if (!isPropertyWritable(prototypeDesc)) {\n return \"continue\";\n }\n prototype[name_1] = (function (delegate) {\n var patched = function () {\n return delegate.apply(this, bindArguments(arguments, source + '.' + name_1));\n };\n attachOriginToPatched(patched, delegate);\n return patched;\n })(delegate);\n }\n };\n for (var i = 0; i < fnNames.length; i++) {\n _loop_3(i);\n }\n }\n function isPropertyWritable(propertyDesc) {\n if (!propertyDesc) {\n return true;\n }\n if (propertyDesc.writable === false) {\n return false;\n }\n return !(typeof propertyDesc.get === 'function' && typeof propertyDesc.set === 'undefined');\n }\n var isWebWorker = (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope);\n // Make sure to access `process` through `_global` so that WebPack does not accidentally browserify\n // this code.\n var isNode = (!('nw' in _global) && typeof _global.process !== 'undefined' &&\n {}.toString.call(_global.process) === '[object process]');\n var isBrowser = !isNode && !isWebWorker && !!(isWindowExists && internalWindow['HTMLElement']);\n // we are in electron of nw, so we are both browser and nodejs\n // Make sure to access `process` through `_global` so that WebPack does not accidentally browserify\n // this code.\n var isMix = typeof _global.process !== 'undefined' &&\n {}.toString.call(_global.process) === '[object process]' && !isWebWorker &&\n !!(isWindowExists && internalWindow['HTMLElement']);\n var zoneSymbolEventNames = {};\n var wrapFn = function (event) {\n // https://github.com/angular/zone.js/issues/911, in IE, sometimes\n // event will be undefined, so we need to use window.event\n event = event || _global.event;\n if (!event) {\n return;\n }\n var eventNameSymbol = zoneSymbolEventNames[event.type];\n if (!eventNameSymbol) {\n eventNameSymbol = zoneSymbolEventNames[event.type] = zoneSymbol('ON_PROPERTY' + event.type);\n }\n var target = this || event.target || _global;\n var listener = target[eventNameSymbol];\n var result;\n if (isBrowser && target === internalWindow && event.type === 'error') {\n // window.onerror have different signiture\n // https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror#window.onerror\n // and onerror callback will prevent default when callback return true\n var errorEvent = event;\n result = listener &&\n listener.call(this, errorEvent.message, errorEvent.filename, errorEvent.lineno, errorEvent.colno, errorEvent.error);\n if (result === true) {\n event.preventDefault();\n }\n }\n else {\n result = listener && listener.apply(this, arguments);\n if (result != undefined && !result) {\n event.preventDefault();\n }\n }\n return result;\n };\n function patchProperty(obj, prop, prototype) {\n var desc = ObjectGetOwnPropertyDescriptor(obj, prop);\n if (!desc && prototype) {\n // when patch window object, use prototype to check prop exist or not\n var prototypeDesc = ObjectGetOwnPropertyDescriptor(prototype, prop);\n if (prototypeDesc) {\n desc = { enumerable: true, configurable: true };\n }\n }\n // if the descriptor not exists or is not configurable\n // just return\n if (!desc || !desc.configurable) {\n return;\n }\n var onPropPatchedSymbol = zoneSymbol('on' + prop + 'patched');\n if (obj.hasOwnProperty(onPropPatchedSymbol) && obj[onPropPatchedSymbol]) {\n return;\n }\n // A property descriptor cannot have getter/setter and be writable\n // deleting the writable and value properties avoids this error:\n //\n // TypeError: property descriptors must not specify a value or be writable when a\n // getter or setter has been specified\n delete desc.writable;\n delete desc.value;\n var originalDescGet = desc.get;\n var originalDescSet = desc.set;\n // substr(2) cuz 'onclick' -> 'click', etc\n var eventName = prop.substr(2);\n var eventNameSymbol = zoneSymbolEventNames[eventName];\n if (!eventNameSymbol) {\n eventNameSymbol = zoneSymbolEventNames[eventName] = zoneSymbol('ON_PROPERTY' + eventName);\n }\n desc.set = function (newValue) {\n // in some of windows's onproperty callback, this is undefined\n // so we need to check it\n var target = this;\n if (!target && obj === _global) {\n target = _global;\n }\n if (!target) {\n return;\n }\n var previousValue = target[eventNameSymbol];\n if (previousValue) {\n target.removeEventListener(eventName, wrapFn);\n }\n // issue #978, when onload handler was added before loading zone.js\n // we should remove it with originalDescSet\n if (originalDescSet) {\n originalDescSet.apply(target, NULL_ON_PROP_VALUE);\n }\n if (typeof newValue === 'function') {\n target[eventNameSymbol] = newValue;\n target.addEventListener(eventName, wrapFn, false);\n }\n else {\n target[eventNameSymbol] = null;\n }\n };\n // The getter would return undefined for unassigned properties but the default value of an\n // unassigned property is null\n desc.get = function () {\n // in some of windows's onproperty callback, this is undefined\n // so we need to check it\n var target = this;\n if (!target && obj === _global) {\n target = _global;\n }\n if (!target) {\n return null;\n }\n var listener = target[eventNameSymbol];\n if (listener) {\n return listener;\n }\n else if (originalDescGet) {\n // result will be null when use inline event attribute,\n // such as \n // because the onclick function is internal raw uncompiled handler\n // the onclick will be evaluated when first time event was triggered or\n // the property is accessed, https://github.com/angular/zone.js/issues/525\n // so we should use original native get to retrieve the handler\n var value = originalDescGet && originalDescGet.call(this);\n if (value) {\n desc.set.call(this, value);\n if (typeof target[REMOVE_ATTRIBUTE] === 'function') {\n target.removeAttribute(prop);\n }\n return value;\n }\n }\n return null;\n };\n ObjectDefineProperty(obj, prop, desc);\n obj[onPropPatchedSymbol] = true;\n }\n function patchOnProperties(obj, properties, prototype) {\n if (properties) {\n for (var i = 0; i < properties.length; i++) {\n patchProperty(obj, 'on' + properties[i], prototype);\n }\n }\n else {\n var onProperties = [];\n for (var prop in obj) {\n if (prop.substr(0, 2) == 'on') {\n onProperties.push(prop);\n }\n }\n for (var j = 0; j < onProperties.length; j++) {\n patchProperty(obj, onProperties[j], prototype);\n }\n }\n }\n var originalInstanceKey = zoneSymbol('originalInstance');\n // wrap some native API on `window`\n function patchClass(className) {\n var OriginalClass = _global[className];\n if (!OriginalClass)\n return;\n // keep original class in global\n _global[zoneSymbol(className)] = OriginalClass;\n _global[className] = function () {\n var a = bindArguments(arguments, className);\n switch (a.length) {\n case 0:\n this[originalInstanceKey] = new OriginalClass();\n break;\n case 1:\n this[originalInstanceKey] = new OriginalClass(a[0]);\n break;\n case 2:\n this[originalInstanceKey] = new OriginalClass(a[0], a[1]);\n break;\n case 3:\n this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2]);\n break;\n case 4:\n this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2], a[3]);\n break;\n default:\n throw new Error('Arg list too long.');\n }\n };\n // attach original delegate to patched function\n attachOriginToPatched(_global[className], OriginalClass);\n var instance = new OriginalClass(function () { });\n var prop;\n for (prop in instance) {\n // https://bugs.webkit.org/show_bug.cgi?id=44721\n if (className === 'XMLHttpRequest' && prop === 'responseBlob')\n continue;\n (function (prop) {\n if (typeof instance[prop] === 'function') {\n _global[className].prototype[prop] = function () {\n return this[originalInstanceKey][prop].apply(this[originalInstanceKey], arguments);\n };\n }\n else {\n ObjectDefineProperty(_global[className].prototype, prop, {\n set: function (fn) {\n if (typeof fn === 'function') {\n this[originalInstanceKey][prop] = wrapWithCurrentZone(fn, className + '.' + prop);\n // keep callback in wrapped function so we can\n // use it in Function.prototype.toString to return\n // the native one.\n attachOriginToPatched(this[originalInstanceKey][prop], fn);\n }\n else {\n this[originalInstanceKey][prop] = fn;\n }\n },\n get: function () { return this[originalInstanceKey][prop]; }\n });\n }\n }(prop));\n }\n for (prop in OriginalClass) {\n if (prop !== 'prototype' && OriginalClass.hasOwnProperty(prop)) {\n _global[className][prop] = OriginalClass[prop];\n }\n }\n }\n function copySymbolProperties(src, dest) {\n if (typeof Object.getOwnPropertySymbols !== 'function') {\n return;\n }\n var symbols = Object.getOwnPropertySymbols(src);\n symbols.forEach(function (symbol) {\n var desc = Object.getOwnPropertyDescriptor(src, symbol);\n Object.defineProperty(dest, symbol, {\n get: function () { return src[symbol]; },\n set: function (value) {\n if (desc && (!desc.writable || typeof desc.set !== 'function')) {\n // if src[symbol] is not writable or not have a setter, just return\n return;\n }\n src[symbol] = value;\n },\n enumerable: desc ? desc.enumerable : true,\n configurable: desc ? desc.configurable : true\n });\n });\n }\n var shouldCopySymbolProperties = false;\n function patchMethod(target, name, patchFn) {\n var proto = target;\n while (proto && !proto.hasOwnProperty(name)) {\n proto = ObjectGetPrototypeOf(proto);\n }\n if (!proto && target[name]) {\n // somehow we did not find it, but we can see it. This happens on IE for Window properties.\n proto = target;\n }\n var delegateName = zoneSymbol(name);\n var delegate = null;\n if (proto && !(delegate = proto[delegateName])) {\n delegate = proto[delegateName] = proto[name];\n // check whether proto[name] is writable\n // some property is readonly in safari, such as HtmlCanvasElement.prototype.toBlob\n var desc = proto && ObjectGetOwnPropertyDescriptor(proto, name);\n if (isPropertyWritable(desc)) {\n var patchDelegate_1 = patchFn(delegate, delegateName, name);\n proto[name] = function () { return patchDelegate_1(this, arguments); };\n attachOriginToPatched(proto[name], delegate);\n if (shouldCopySymbolProperties) {\n copySymbolProperties(delegate, proto[name]);\n }\n }\n }\n return delegate;\n }\n // TODO: @JiaLiPassion, support cancel task later if necessary\n function patchMacroTask(obj, funcName, metaCreator) {\n var setNative = null;\n function scheduleTask(task) {\n var data = task.data;\n data.args[data.cbIdx] = function () { task.invoke.apply(this, arguments); };\n setNative.apply(data.target, data.args);\n return task;\n }\n setNative = patchMethod(obj, funcName, function (delegate) { return function (self, args) {\n var meta = metaCreator(self, args);\n if (meta.cbIdx >= 0 && typeof args[meta.cbIdx] === 'function') {\n return scheduleMacroTaskWithCurrentZone(meta.name, args[meta.cbIdx], meta, scheduleTask);\n }\n else {\n // cause an error by calling it directly.\n return delegate.apply(self, args);\n }\n }; });\n }\n function attachOriginToPatched(patched, original) {\n patched[zoneSymbol('OriginalDelegate')] = original;\n }\n var isDetectedIEOrEdge = false;\n var ieOrEdge = false;\n function isIE() {\n try {\n var ua = internalWindow.navigator.userAgent;\n if (ua.indexOf('MSIE ') !== -1 || ua.indexOf('Trident/') !== -1) {\n return true;\n }\n }\n catch (error) {\n }\n return false;\n }\n function isIEOrEdge() {\n if (isDetectedIEOrEdge) {\n return ieOrEdge;\n }\n isDetectedIEOrEdge = true;\n try {\n var ua = internalWindow.navigator.userAgent;\n if (ua.indexOf('MSIE ') !== -1 || ua.indexOf('Trident/') !== -1 || ua.indexOf('Edge/') !== -1) {\n ieOrEdge = true;\n }\n }\n catch (error) {\n }\n return ieOrEdge;\n }\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n // override Function.prototype.toString to make zone.js patched function\n // look like native function\n Zone.__load_patch('toString', function (global) {\n // patch Func.prototype.toString to let them look like native\n var originalFunctionToString = Function.prototype.toString;\n var ORIGINAL_DELEGATE_SYMBOL = zoneSymbol('OriginalDelegate');\n var PROMISE_SYMBOL = zoneSymbol('Promise');\n var ERROR_SYMBOL = zoneSymbol('Error');\n var newFunctionToString = function toString() {\n if (typeof this === 'function') {\n var originalDelegate = this[ORIGINAL_DELEGATE_SYMBOL];\n if (originalDelegate) {\n if (typeof originalDelegate === 'function') {\n return originalFunctionToString.call(originalDelegate);\n }\n else {\n return Object.prototype.toString.call(originalDelegate);\n }\n }\n if (this === Promise) {\n var nativePromise = global[PROMISE_SYMBOL];\n if (nativePromise) {\n return originalFunctionToString.call(nativePromise);\n }\n }\n if (this === Error) {\n var nativeError = global[ERROR_SYMBOL];\n if (nativeError) {\n return originalFunctionToString.call(nativeError);\n }\n }\n }\n return originalFunctionToString.call(this);\n };\n newFunctionToString[ORIGINAL_DELEGATE_SYMBOL] = originalFunctionToString;\n Function.prototype.toString = newFunctionToString;\n // patch Object.prototype.toString to let them look like native\n var originalObjectToString = Object.prototype.toString;\n var PROMISE_OBJECT_TO_STRING = '[object Promise]';\n Object.prototype.toString = function () {\n if (this instanceof Promise) {\n return PROMISE_OBJECT_TO_STRING;\n }\n return originalObjectToString.call(this);\n };\n });\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var passiveSupported = false;\n if (typeof window !== 'undefined') {\n try {\n var options = Object.defineProperty({}, 'passive', { get: function () { passiveSupported = true; } });\n window.addEventListener('test', options, options);\n window.removeEventListener('test', options, options);\n }\n catch (err) {\n passiveSupported = false;\n }\n }\n // an identifier to tell ZoneTask do not create a new invoke closure\n var OPTIMIZED_ZONE_EVENT_TASK_DATA = {\n useG: true\n };\n var zoneSymbolEventNames$1 = {};\n var globalSources = {};\n var EVENT_NAME_SYMBOL_REGX = new RegExp('^' + ZONE_SYMBOL_PREFIX + '(\\\\w+)(true|false)$');\n var IMMEDIATE_PROPAGATION_SYMBOL = zoneSymbol('propagationStopped');\n function prepareEventNames(eventName, eventNameToString) {\n var falseEventName = (eventNameToString ? eventNameToString(eventName) : eventName) + FALSE_STR;\n var trueEventName = (eventNameToString ? eventNameToString(eventName) : eventName) + TRUE_STR;\n var symbol = ZONE_SYMBOL_PREFIX + falseEventName;\n var symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName;\n zoneSymbolEventNames$1[eventName] = {};\n zoneSymbolEventNames$1[eventName][FALSE_STR] = symbol;\n zoneSymbolEventNames$1[eventName][TRUE_STR] = symbolCapture;\n }\n function patchEventTarget(_global, apis, patchOptions) {\n var ADD_EVENT_LISTENER = (patchOptions && patchOptions.add) || ADD_EVENT_LISTENER_STR;\n var REMOVE_EVENT_LISTENER = (patchOptions && patchOptions.rm) || REMOVE_EVENT_LISTENER_STR;\n var LISTENERS_EVENT_LISTENER = (patchOptions && patchOptions.listeners) || 'eventListeners';\n var REMOVE_ALL_LISTENERS_EVENT_LISTENER = (patchOptions && patchOptions.rmAll) || 'removeAllListeners';\n var zoneSymbolAddEventListener = zoneSymbol(ADD_EVENT_LISTENER);\n var ADD_EVENT_LISTENER_SOURCE = '.' + ADD_EVENT_LISTENER + ':';\n var PREPEND_EVENT_LISTENER = 'prependListener';\n var PREPEND_EVENT_LISTENER_SOURCE = '.' + PREPEND_EVENT_LISTENER + ':';\n var invokeTask = function (task, target, event) {\n // for better performance, check isRemoved which is set\n // by removeEventListener\n if (task.isRemoved) {\n return;\n }\n var delegate = task.callback;\n if (typeof delegate === 'object' && delegate.handleEvent) {\n // create the bind version of handleEvent when invoke\n task.callback = function (event) { return delegate.handleEvent(event); };\n task.originalDelegate = delegate;\n }\n // invoke static task.invoke\n task.invoke(task, target, [event]);\n var options = task.options;\n if (options && typeof options === 'object' && options.once) {\n // if options.once is true, after invoke once remove listener here\n // only browser need to do this, nodejs eventEmitter will cal removeListener\n // inside EventEmitter.once\n var delegate_1 = task.originalDelegate ? task.originalDelegate : task.callback;\n target[REMOVE_EVENT_LISTENER].call(target, event.type, delegate_1, options);\n }\n };\n // global shared zoneAwareCallback to handle all event callback with capture = false\n var globalZoneAwareCallback = function (event) {\n // https://github.com/angular/zone.js/issues/911, in IE, sometimes\n // event will be undefined, so we need to use window.event\n event = event || _global.event;\n if (!event) {\n return;\n }\n // event.target is needed for Samsung TV and SourceBuffer\n // || global is needed https://github.com/angular/zone.js/issues/190\n var target = this || event.target || _global;\n var tasks = target[zoneSymbolEventNames$1[event.type][FALSE_STR]];\n if (tasks) {\n // invoke all tasks which attached to current target with given event.type and capture = false\n // for performance concern, if task.length === 1, just invoke\n if (tasks.length === 1) {\n invokeTask(tasks[0], target, event);\n }\n else {\n // https://github.com/angular/zone.js/issues/836\n // copy the tasks array before invoke, to avoid\n // the callback will remove itself or other listener\n var copyTasks = tasks.slice();\n for (var i = 0; i < copyTasks.length; i++) {\n if (event && event[IMMEDIATE_PROPAGATION_SYMBOL] === true) {\n break;\n }\n invokeTask(copyTasks[i], target, event);\n }\n }\n }\n };\n // global shared zoneAwareCallback to handle all event callback with capture = true\n var globalZoneAwareCaptureCallback = function (event) {\n // https://github.com/angular/zone.js/issues/911, in IE, sometimes\n // event will be undefined, so we need to use window.event\n event = event || _global.event;\n if (!event) {\n return;\n }\n // event.target is needed for Samsung TV and SourceBuffer\n // || global is needed https://github.com/angular/zone.js/issues/190\n var target = this || event.target || _global;\n var tasks = target[zoneSymbolEventNames$1[event.type][TRUE_STR]];\n if (tasks) {\n // invoke all tasks which attached to current target with given event.type and capture = false\n // for performance concern, if task.length === 1, just invoke\n if (tasks.length === 1) {\n invokeTask(tasks[0], target, event);\n }\n else {\n // https://github.com/angular/zone.js/issues/836\n // copy the tasks array before invoke, to avoid\n // the callback will remove itself or other listener\n var copyTasks = tasks.slice();\n for (var i = 0; i < copyTasks.length; i++) {\n if (event && event[IMMEDIATE_PROPAGATION_SYMBOL] === true) {\n break;\n }\n invokeTask(copyTasks[i], target, event);\n }\n }\n }\n };\n function patchEventTargetMethods(obj, patchOptions) {\n if (!obj) {\n return false;\n }\n var useGlobalCallback = true;\n if (patchOptions && patchOptions.useG !== undefined) {\n useGlobalCallback = patchOptions.useG;\n }\n var validateHandler = patchOptions && patchOptions.vh;\n var checkDuplicate = true;\n if (patchOptions && patchOptions.chkDup !== undefined) {\n checkDuplicate = patchOptions.chkDup;\n }\n var returnTarget = false;\n if (patchOptions && patchOptions.rt !== undefined) {\n returnTarget = patchOptions.rt;\n }\n var proto = obj;\n while (proto && !proto.hasOwnProperty(ADD_EVENT_LISTENER)) {\n proto = ObjectGetPrototypeOf(proto);\n }\n if (!proto && obj[ADD_EVENT_LISTENER]) {\n // somehow we did not find it, but we can see it. This happens on IE for Window properties.\n proto = obj;\n }\n if (!proto) {\n return false;\n }\n if (proto[zoneSymbolAddEventListener]) {\n return false;\n }\n var eventNameToString = patchOptions && patchOptions.eventNameToString;\n // a shared global taskData to pass data for scheduleEventTask\n // so we do not need to create a new object just for pass some data\n var taskData = {};\n var nativeAddEventListener = proto[zoneSymbolAddEventListener] = proto[ADD_EVENT_LISTENER];\n var nativeRemoveEventListener = proto[zoneSymbol(REMOVE_EVENT_LISTENER)] =\n proto[REMOVE_EVENT_LISTENER];\n var nativeListeners = proto[zoneSymbol(LISTENERS_EVENT_LISTENER)] =\n proto[LISTENERS_EVENT_LISTENER];\n var nativeRemoveAllListeners = proto[zoneSymbol(REMOVE_ALL_LISTENERS_EVENT_LISTENER)] =\n proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER];\n var nativePrependEventListener;\n if (patchOptions && patchOptions.prepend) {\n nativePrependEventListener = proto[zoneSymbol(patchOptions.prepend)] =\n proto[patchOptions.prepend];\n }\n /**\n * This util function will build an option object with passive option\n * to handle all possible input from the user.\n */\n function buildEventListenerOptions(options, passive) {\n if (!passiveSupported && typeof options === 'object' && options) {\n // doesn't support passive but user want to pass an object as options.\n // this will not work on some old browser, so we just pass a boolean\n // as useCapture parameter\n return !!options.capture;\n }\n if (!passiveSupported || !passive) {\n return options;\n }\n if (typeof options === 'boolean') {\n return { capture: options, passive: true };\n }\n if (!options) {\n return { passive: true };\n }\n if (typeof options === 'object' && options.passive !== false) {\n return Object.assign(Object.assign({}, options), { passive: true });\n }\n return options;\n }\n var customScheduleGlobal = function (task) {\n // if there is already a task for the eventName + capture,\n // just return, because we use the shared globalZoneAwareCallback here.\n if (taskData.isExisting) {\n return;\n }\n return nativeAddEventListener.call(taskData.target, taskData.eventName, taskData.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, taskData.options);\n };\n var customCancelGlobal = function (task) {\n // if task is not marked as isRemoved, this call is directly\n // from Zone.prototype.cancelTask, we should remove the task\n // from tasksList of target first\n if (!task.isRemoved) {\n var symbolEventNames = zoneSymbolEventNames$1[task.eventName];\n var symbolEventName = void 0;\n if (symbolEventNames) {\n symbolEventName = symbolEventNames[task.capture ? TRUE_STR : FALSE_STR];\n }\n var existingTasks = symbolEventName && task.target[symbolEventName];\n if (existingTasks) {\n for (var i = 0; i < existingTasks.length; i++) {\n var existingTask = existingTasks[i];\n if (existingTask === task) {\n existingTasks.splice(i, 1);\n // set isRemoved to data for faster invokeTask check\n task.isRemoved = true;\n if (existingTasks.length === 0) {\n // all tasks for the eventName + capture have gone,\n // remove globalZoneAwareCallback and remove the task cache from target\n task.allRemoved = true;\n task.target[symbolEventName] = null;\n }\n break;\n }\n }\n }\n }\n // if all tasks for the eventName + capture have gone,\n // we will really remove the global event callback,\n // if not, return\n if (!task.allRemoved) {\n return;\n }\n return nativeRemoveEventListener.call(task.target, task.eventName, task.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, task.options);\n };\n var customScheduleNonGlobal = function (task) {\n return nativeAddEventListener.call(taskData.target, taskData.eventName, task.invoke, taskData.options);\n };\n var customSchedulePrepend = function (task) {\n return nativePrependEventListener.call(taskData.target, taskData.eventName, task.invoke, taskData.options);\n };\n var customCancelNonGlobal = function (task) {\n return nativeRemoveEventListener.call(task.target, task.eventName, task.invoke, task.options);\n };\n var customSchedule = useGlobalCallback ? customScheduleGlobal : customScheduleNonGlobal;\n var customCancel = useGlobalCallback ? customCancelGlobal : customCancelNonGlobal;\n var compareTaskCallbackVsDelegate = function (task, delegate) {\n var typeOfDelegate = typeof delegate;\n return (typeOfDelegate === 'function' && task.callback === delegate) ||\n (typeOfDelegate === 'object' && task.originalDelegate === delegate);\n };\n var compare = (patchOptions && patchOptions.diff) ? patchOptions.diff : compareTaskCallbackVsDelegate;\n var blackListedEvents = Zone[zoneSymbol('BLACK_LISTED_EVENTS')];\n var passiveEvents = _global[zoneSymbol('PASSIVE_EVENTS')];\n var makeAddListener = function (nativeListener, addSource, customScheduleFn, customCancelFn, returnTarget, prepend) {\n if (returnTarget === void 0) { returnTarget = false; }\n if (prepend === void 0) { prepend = false; }\n return function () {\n var target = this || _global;\n var eventName = arguments[0];\n if (patchOptions && patchOptions.transferEventName) {\n eventName = patchOptions.transferEventName(eventName);\n }\n var delegate = arguments[1];\n if (!delegate) {\n return nativeListener.apply(this, arguments);\n }\n if (isNode && eventName === 'uncaughtException') {\n // don't patch uncaughtException of nodejs to prevent endless loop\n return nativeListener.apply(this, arguments);\n }\n // don't create the bind delegate function for handleEvent\n // case here to improve addEventListener performance\n // we will create the bind delegate when invoke\n var isHandleEvent = false;\n if (typeof delegate !== 'function') {\n if (!delegate.handleEvent) {\n return nativeListener.apply(this, arguments);\n }\n isHandleEvent = true;\n }\n if (validateHandler && !validateHandler(nativeListener, delegate, target, arguments)) {\n return;\n }\n var passive = passiveSupported && !!passiveEvents && passiveEvents.indexOf(eventName) !== -1;\n var options = buildEventListenerOptions(arguments[2], passive);\n if (blackListedEvents) {\n // check black list\n for (var i = 0; i < blackListedEvents.length; i++) {\n if (eventName === blackListedEvents[i]) {\n if (passive) {\n return nativeListener.call(target, eventName, delegate, options);\n }\n else {\n return nativeListener.apply(this, arguments);\n }\n }\n }\n }\n var capture = !options ? false : typeof options === 'boolean' ? true : options.capture;\n var once = options && typeof options === 'object' ? options.once : false;\n var zone = Zone.current;\n var symbolEventNames = zoneSymbolEventNames$1[eventName];\n if (!symbolEventNames) {\n prepareEventNames(eventName, eventNameToString);\n symbolEventNames = zoneSymbolEventNames$1[eventName];\n }\n var symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR];\n var existingTasks = target[symbolEventName];\n var isExisting = false;\n if (existingTasks) {\n // already have task registered\n isExisting = true;\n if (checkDuplicate) {\n for (var i = 0; i < existingTasks.length; i++) {\n if (compare(existingTasks[i], delegate)) {\n // same callback, same capture, same event name, just return\n return;\n }\n }\n }\n }\n else {\n existingTasks = target[symbolEventName] = [];\n }\n var source;\n var constructorName = target.constructor['name'];\n var targetSource = globalSources[constructorName];\n if (targetSource) {\n source = targetSource[eventName];\n }\n if (!source) {\n source = constructorName + addSource +\n (eventNameToString ? eventNameToString(eventName) : eventName);\n }\n // do not create a new object as task.data to pass those things\n // just use the global shared one\n taskData.options = options;\n if (once) {\n // if addEventListener with once options, we don't pass it to\n // native addEventListener, instead we keep the once setting\n // and handle ourselves.\n taskData.options.once = false;\n }\n taskData.target = target;\n taskData.capture = capture;\n taskData.eventName = eventName;\n taskData.isExisting = isExisting;\n var data = useGlobalCallback ? OPTIMIZED_ZONE_EVENT_TASK_DATA : undefined;\n // keep taskData into data to allow onScheduleEventTask to access the task information\n if (data) {\n data.taskData = taskData;\n }\n var task = zone.scheduleEventTask(source, delegate, data, customScheduleFn, customCancelFn);\n // should clear taskData.target to avoid memory leak\n // issue, https://github.com/angular/angular/issues/20442\n taskData.target = null;\n // need to clear up taskData because it is a global object\n if (data) {\n data.taskData = null;\n }\n // have to save those information to task in case\n // application may call task.zone.cancelTask() directly\n if (once) {\n options.once = true;\n }\n if (!(!passiveSupported && typeof task.options === 'boolean')) {\n // if not support passive, and we pass an option object\n // to addEventListener, we should save the options to task\n task.options = options;\n }\n task.target = target;\n task.capture = capture;\n task.eventName = eventName;\n if (isHandleEvent) {\n // save original delegate for compare to check duplicate\n task.originalDelegate = delegate;\n }\n if (!prepend) {\n existingTasks.push(task);\n }\n else {\n existingTasks.unshift(task);\n }\n if (returnTarget) {\n return target;\n }\n };\n };\n proto[ADD_EVENT_LISTENER] = makeAddListener(nativeAddEventListener, ADD_EVENT_LISTENER_SOURCE, customSchedule, customCancel, returnTarget);\n if (nativePrependEventListener) {\n proto[PREPEND_EVENT_LISTENER] = makeAddListener(nativePrependEventListener, PREPEND_EVENT_LISTENER_SOURCE, customSchedulePrepend, customCancel, returnTarget, true);\n }\n proto[REMOVE_EVENT_LISTENER] = function () {\n var target = this || _global;\n var eventName = arguments[0];\n if (patchOptions && patchOptions.transferEventName) {\n eventName = patchOptions.transferEventName(eventName);\n }\n var options = arguments[2];\n var capture = !options ? false : typeof options === 'boolean' ? true : options.capture;\n var delegate = arguments[1];\n if (!delegate) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n if (validateHandler &&\n !validateHandler(nativeRemoveEventListener, delegate, target, arguments)) {\n return;\n }\n var symbolEventNames = zoneSymbolEventNames$1[eventName];\n var symbolEventName;\n if (symbolEventNames) {\n symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR];\n }\n var existingTasks = symbolEventName && target[symbolEventName];\n if (existingTasks) {\n for (var i = 0; i < existingTasks.length; i++) {\n var existingTask = existingTasks[i];\n if (compare(existingTask, delegate)) {\n existingTasks.splice(i, 1);\n // set isRemoved to data for faster invokeTask check\n existingTask.isRemoved = true;\n if (existingTasks.length === 0) {\n // all tasks for the eventName + capture have gone,\n // remove globalZoneAwareCallback and remove the task cache from target\n existingTask.allRemoved = true;\n target[symbolEventName] = null;\n // in the target, we have an event listener which is added by on_property\n // such as target.onclick = function() {}, so we need to clear this internal\n // property too if all delegates all removed\n if (typeof eventName === 'string') {\n var onPropertySymbol = ZONE_SYMBOL_PREFIX + 'ON_PROPERTY' + eventName;\n target[onPropertySymbol] = null;\n }\n }\n existingTask.zone.cancelTask(existingTask);\n if (returnTarget) {\n return target;\n }\n return;\n }\n }\n }\n // issue 930, didn't find the event name or callback\n // from zone kept existingTasks, the callback maybe\n // added outside of zone, we need to call native removeEventListener\n // to try to remove it.\n return nativeRemoveEventListener.apply(this, arguments);\n };\n proto[LISTENERS_EVENT_LISTENER] = function () {\n var target = this || _global;\n var eventName = arguments[0];\n if (patchOptions && patchOptions.transferEventName) {\n eventName = patchOptions.transferEventName(eventName);\n }\n var listeners = [];\n var tasks = findEventTasks(target, eventNameToString ? eventNameToString(eventName) : eventName);\n for (var i = 0; i < tasks.length; i++) {\n var task = tasks[i];\n var delegate = task.originalDelegate ? task.originalDelegate : task.callback;\n listeners.push(delegate);\n }\n return listeners;\n };\n proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER] = function () {\n var target = this || _global;\n var eventName = arguments[0];\n if (!eventName) {\n var keys = Object.keys(target);\n for (var i = 0; i < keys.length; i++) {\n var prop = keys[i];\n var match = EVENT_NAME_SYMBOL_REGX.exec(prop);\n var evtName = match && match[1];\n // in nodejs EventEmitter, removeListener event is\n // used for monitoring the removeListener call,\n // so just keep removeListener eventListener until\n // all other eventListeners are removed\n if (evtName && evtName !== 'removeListener') {\n this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].call(this, evtName);\n }\n }\n // remove removeListener listener finally\n this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].call(this, 'removeListener');\n }\n else {\n if (patchOptions && patchOptions.transferEventName) {\n eventName = patchOptions.transferEventName(eventName);\n }\n var symbolEventNames = zoneSymbolEventNames$1[eventName];\n if (symbolEventNames) {\n var symbolEventName = symbolEventNames[FALSE_STR];\n var symbolCaptureEventName = symbolEventNames[TRUE_STR];\n var tasks = target[symbolEventName];\n var captureTasks = target[symbolCaptureEventName];\n if (tasks) {\n var removeTasks = tasks.slice();\n for (var i = 0; i < removeTasks.length; i++) {\n var task = removeTasks[i];\n var delegate = task.originalDelegate ? task.originalDelegate : task.callback;\n this[REMOVE_EVENT_LISTENER].call(this, eventName, delegate, task.options);\n }\n }\n if (captureTasks) {\n var removeTasks = captureTasks.slice();\n for (var i = 0; i < removeTasks.length; i++) {\n var task = removeTasks[i];\n var delegate = task.originalDelegate ? task.originalDelegate : task.callback;\n this[REMOVE_EVENT_LISTENER].call(this, eventName, delegate, task.options);\n }\n }\n }\n }\n if (returnTarget) {\n return this;\n }\n };\n // for native toString patch\n attachOriginToPatched(proto[ADD_EVENT_LISTENER], nativeAddEventListener);\n attachOriginToPatched(proto[REMOVE_EVENT_LISTENER], nativeRemoveEventListener);\n if (nativeRemoveAllListeners) {\n attachOriginToPatched(proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER], nativeRemoveAllListeners);\n }\n if (nativeListeners) {\n attachOriginToPatched(proto[LISTENERS_EVENT_LISTENER], nativeListeners);\n }\n return true;\n }\n var results = [];\n for (var i = 0; i < apis.length; i++) {\n results[i] = patchEventTargetMethods(apis[i], patchOptions);\n }\n return results;\n }\n function findEventTasks(target, eventName) {\n if (!eventName) {\n var foundTasks = [];\n for (var prop in target) {\n var match = EVENT_NAME_SYMBOL_REGX.exec(prop);\n var evtName = match && match[1];\n if (evtName && (!eventName || evtName === eventName)) {\n var tasks = target[prop];\n if (tasks) {\n for (var i = 0; i < tasks.length; i++) {\n foundTasks.push(tasks[i]);\n }\n }\n }\n }\n return foundTasks;\n }\n var symbolEventName = zoneSymbolEventNames$1[eventName];\n if (!symbolEventName) {\n prepareEventNames(eventName);\n symbolEventName = zoneSymbolEventNames$1[eventName];\n }\n var captureFalseTasks = target[symbolEventName[FALSE_STR]];\n var captureTrueTasks = target[symbolEventName[TRUE_STR]];\n if (!captureFalseTasks) {\n return captureTrueTasks ? captureTrueTasks.slice() : [];\n }\n else {\n return captureTrueTasks ? captureFalseTasks.concat(captureTrueTasks) :\n captureFalseTasks.slice();\n }\n }\n function patchEventPrototype(global, api) {\n var Event = global['Event'];\n if (Event && Event.prototype) {\n api.patchMethod(Event.prototype, 'stopImmediatePropagation', function (delegate) { return function (self, args) {\n self[IMMEDIATE_PROPAGATION_SYMBOL] = true;\n // we need to call the native stopImmediatePropagation\n // in case in some hybrid application, some part of\n // application will be controlled by zone, some are not\n delegate && delegate.apply(self, args);\n }; });\n }\n }\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n function patchCallbacks(api, target, targetName, method, callbacks) {\n var symbol = Zone.__symbol__(method);\n if (target[symbol]) {\n return;\n }\n var nativeDelegate = target[symbol] = target[method];\n target[method] = function (name, opts, options) {\n if (opts && opts.prototype) {\n callbacks.forEach(function (callback) {\n var source = targetName + \".\" + method + \"::\" + callback;\n var prototype = opts.prototype;\n if (prototype.hasOwnProperty(callback)) {\n var descriptor = api.ObjectGetOwnPropertyDescriptor(prototype, callback);\n if (descriptor && descriptor.value) {\n descriptor.value = api.wrapWithCurrentZone(descriptor.value, source);\n api._redefineProperty(opts.prototype, callback, descriptor);\n }\n else if (prototype[callback]) {\n prototype[callback] = api.wrapWithCurrentZone(prototype[callback], source);\n }\n }\n else if (prototype[callback]) {\n prototype[callback] = api.wrapWithCurrentZone(prototype[callback], source);\n }\n });\n }\n return nativeDelegate.call(target, name, opts, options);\n };\n api.attachOriginToPatched(target[method], nativeDelegate);\n }\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var globalEventHandlersEventNames = [\n 'abort',\n 'animationcancel',\n 'animationend',\n 'animationiteration',\n 'auxclick',\n 'beforeinput',\n 'blur',\n 'cancel',\n 'canplay',\n 'canplaythrough',\n 'change',\n 'compositionstart',\n 'compositionupdate',\n 'compositionend',\n 'cuechange',\n 'click',\n 'close',\n 'contextmenu',\n 'curechange',\n 'dblclick',\n 'drag',\n 'dragend',\n 'dragenter',\n 'dragexit',\n 'dragleave',\n 'dragover',\n 'drop',\n 'durationchange',\n 'emptied',\n 'ended',\n 'error',\n 'focus',\n 'focusin',\n 'focusout',\n 'gotpointercapture',\n 'input',\n 'invalid',\n 'keydown',\n 'keypress',\n 'keyup',\n 'load',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'lostpointercapture',\n 'mousedown',\n 'mouseenter',\n 'mouseleave',\n 'mousemove',\n 'mouseout',\n 'mouseover',\n 'mouseup',\n 'mousewheel',\n 'orientationchange',\n 'pause',\n 'play',\n 'playing',\n 'pointercancel',\n 'pointerdown',\n 'pointerenter',\n 'pointerleave',\n 'pointerlockchange',\n 'mozpointerlockchange',\n 'webkitpointerlockerchange',\n 'pointerlockerror',\n 'mozpointerlockerror',\n 'webkitpointerlockerror',\n 'pointermove',\n 'pointout',\n 'pointerover',\n 'pointerup',\n 'progress',\n 'ratechange',\n 'reset',\n 'resize',\n 'scroll',\n 'seeked',\n 'seeking',\n 'select',\n 'selectionchange',\n 'selectstart',\n 'show',\n 'sort',\n 'stalled',\n 'submit',\n 'suspend',\n 'timeupdate',\n 'volumechange',\n 'touchcancel',\n 'touchmove',\n 'touchstart',\n 'touchend',\n 'transitioncancel',\n 'transitionend',\n 'waiting',\n 'wheel'\n ];\n var documentEventNames = [\n 'afterscriptexecute', 'beforescriptexecute', 'DOMContentLoaded', 'freeze', 'fullscreenchange',\n 'mozfullscreenchange', 'webkitfullscreenchange', 'msfullscreenchange', 'fullscreenerror',\n 'mozfullscreenerror', 'webkitfullscreenerror', 'msfullscreenerror', 'readystatechange',\n 'visibilitychange', 'resume'\n ];\n var windowEventNames = [\n 'absolutedeviceorientation',\n 'afterinput',\n 'afterprint',\n 'appinstalled',\n 'beforeinstallprompt',\n 'beforeprint',\n 'beforeunload',\n 'devicelight',\n 'devicemotion',\n 'deviceorientation',\n 'deviceorientationabsolute',\n 'deviceproximity',\n 'hashchange',\n 'languagechange',\n 'message',\n 'mozbeforepaint',\n 'offline',\n 'online',\n 'paint',\n 'pageshow',\n 'pagehide',\n 'popstate',\n 'rejectionhandled',\n 'storage',\n 'unhandledrejection',\n 'unload',\n 'userproximity',\n 'vrdisplayconnected',\n 'vrdisplaydisconnected',\n 'vrdisplaypresentchange'\n ];\n var htmlElementEventNames = [\n 'beforecopy', 'beforecut', 'beforepaste', 'copy', 'cut', 'paste', 'dragstart', 'loadend',\n 'animationstart', 'search', 'transitionrun', 'transitionstart', 'webkitanimationend',\n 'webkitanimationiteration', 'webkitanimationstart', 'webkittransitionend'\n ];\n var mediaElementEventNames = ['encrypted', 'waitingforkey', 'msneedkey', 'mozinterruptbegin', 'mozinterruptend'];\n var ieElementEventNames = [\n 'activate',\n 'afterupdate',\n 'ariarequest',\n 'beforeactivate',\n 'beforedeactivate',\n 'beforeeditfocus',\n 'beforeupdate',\n 'cellchange',\n 'controlselect',\n 'dataavailable',\n 'datasetchanged',\n 'datasetcomplete',\n 'errorupdate',\n 'filterchange',\n 'layoutcomplete',\n 'losecapture',\n 'move',\n 'moveend',\n 'movestart',\n 'propertychange',\n 'resizeend',\n 'resizestart',\n 'rowenter',\n 'rowexit',\n 'rowsdelete',\n 'rowsinserted',\n 'command',\n 'compassneedscalibration',\n 'deactivate',\n 'help',\n 'mscontentzoom',\n 'msmanipulationstatechanged',\n 'msgesturechange',\n 'msgesturedoubletap',\n 'msgestureend',\n 'msgesturehold',\n 'msgesturestart',\n 'msgesturetap',\n 'msgotpointercapture',\n 'msinertiastart',\n 'mslostpointercapture',\n 'mspointercancel',\n 'mspointerdown',\n 'mspointerenter',\n 'mspointerhover',\n 'mspointerleave',\n 'mspointermove',\n 'mspointerout',\n 'mspointerover',\n 'mspointerup',\n 'pointerout',\n 'mssitemodejumplistitemremoved',\n 'msthumbnailclick',\n 'stop',\n 'storagecommit'\n ];\n var webglEventNames = ['webglcontextrestored', 'webglcontextlost', 'webglcontextcreationerror'];\n var formEventNames = ['autocomplete', 'autocompleteerror'];\n var detailEventNames = ['toggle'];\n var frameEventNames = ['load'];\n var frameSetEventNames = ['blur', 'error', 'focus', 'load', 'resize', 'scroll', 'messageerror'];\n var marqueeEventNames = ['bounce', 'finish', 'start'];\n var XMLHttpRequestEventNames = [\n 'loadstart', 'progress', 'abort', 'error', 'load', 'progress', 'timeout', 'loadend',\n 'readystatechange'\n ];\n var IDBIndexEventNames = ['upgradeneeded', 'complete', 'abort', 'success', 'error', 'blocked', 'versionchange', 'close'];\n var websocketEventNames = ['close', 'error', 'open', 'message'];\n var workerEventNames = ['error', 'message'];\n var eventNames = globalEventHandlersEventNames.concat(webglEventNames, formEventNames, detailEventNames, documentEventNames, windowEventNames, htmlElementEventNames, ieElementEventNames);\n function filterProperties(target, onProperties, ignoreProperties) {\n if (!ignoreProperties || ignoreProperties.length === 0) {\n return onProperties;\n }\n var tip = ignoreProperties.filter(function (ip) { return ip.target === target; });\n if (!tip || tip.length === 0) {\n return onProperties;\n }\n var targetIgnoreProperties = tip[0].ignoreProperties;\n return onProperties.filter(function (op) { return targetIgnoreProperties.indexOf(op) === -1; });\n }\n function patchFilteredProperties(target, onProperties, ignoreProperties, prototype) {\n // check whether target is available, sometimes target will be undefined\n // because different browser or some 3rd party plugin.\n if (!target) {\n return;\n }\n var filteredProperties = filterProperties(target, onProperties, ignoreProperties);\n patchOnProperties(target, filteredProperties, prototype);\n }\n function propertyDescriptorPatch(api, _global) {\n if (isNode && !isMix) {\n return;\n }\n if (Zone[api.symbol('patchEvents')]) {\n // events are already been patched by legacy patch.\n return;\n }\n var supportsWebSocket = typeof WebSocket !== 'undefined';\n var ignoreProperties = _global['__Zone_ignore_on_properties'];\n // for browsers that we can patch the descriptor: Chrome & Firefox\n if (isBrowser) {\n var internalWindow_1 = window;\n var ignoreErrorProperties = isIE ? [{ target: internalWindow_1, ignoreProperties: ['error'] }] : [];\n // in IE/Edge, onProp not exist in window object, but in WindowPrototype\n // so we need to pass WindowPrototype to check onProp exist or not\n patchFilteredProperties(internalWindow_1, eventNames.concat(['messageerror']), ignoreProperties ? ignoreProperties.concat(ignoreErrorProperties) : ignoreProperties, ObjectGetPrototypeOf(internalWindow_1));\n patchFilteredProperties(Document.prototype, eventNames, ignoreProperties);\n if (typeof internalWindow_1['SVGElement'] !== 'undefined') {\n patchFilteredProperties(internalWindow_1['SVGElement'].prototype, eventNames, ignoreProperties);\n }\n patchFilteredProperties(Element.prototype, eventNames, ignoreProperties);\n patchFilteredProperties(HTMLElement.prototype, eventNames, ignoreProperties);\n patchFilteredProperties(HTMLMediaElement.prototype, mediaElementEventNames, ignoreProperties);\n patchFilteredProperties(HTMLFrameSetElement.prototype, windowEventNames.concat(frameSetEventNames), ignoreProperties);\n patchFilteredProperties(HTMLBodyElement.prototype, windowEventNames.concat(frameSetEventNames), ignoreProperties);\n patchFilteredProperties(HTMLFrameElement.prototype, frameEventNames, ignoreProperties);\n patchFilteredProperties(HTMLIFrameElement.prototype, frameEventNames, ignoreProperties);\n var HTMLMarqueeElement_1 = internalWindow_1['HTMLMarqueeElement'];\n if (HTMLMarqueeElement_1) {\n patchFilteredProperties(HTMLMarqueeElement_1.prototype, marqueeEventNames, ignoreProperties);\n }\n var Worker_1 = internalWindow_1['Worker'];\n if (Worker_1) {\n patchFilteredProperties(Worker_1.prototype, workerEventNames, ignoreProperties);\n }\n }\n var XMLHttpRequest = _global['XMLHttpRequest'];\n if (XMLHttpRequest) {\n // XMLHttpRequest is not available in ServiceWorker, so we need to check here\n patchFilteredProperties(XMLHttpRequest.prototype, XMLHttpRequestEventNames, ignoreProperties);\n }\n var XMLHttpRequestEventTarget = _global['XMLHttpRequestEventTarget'];\n if (XMLHttpRequestEventTarget) {\n patchFilteredProperties(XMLHttpRequestEventTarget && XMLHttpRequestEventTarget.prototype, XMLHttpRequestEventNames, ignoreProperties);\n }\n if (typeof IDBIndex !== 'undefined') {\n patchFilteredProperties(IDBIndex.prototype, IDBIndexEventNames, ignoreProperties);\n patchFilteredProperties(IDBRequest.prototype, IDBIndexEventNames, ignoreProperties);\n patchFilteredProperties(IDBOpenDBRequest.prototype, IDBIndexEventNames, ignoreProperties);\n patchFilteredProperties(IDBDatabase.prototype, IDBIndexEventNames, ignoreProperties);\n patchFilteredProperties(IDBTransaction.prototype, IDBIndexEventNames, ignoreProperties);\n patchFilteredProperties(IDBCursor.prototype, IDBIndexEventNames, ignoreProperties);\n }\n if (supportsWebSocket) {\n patchFilteredProperties(WebSocket.prototype, websocketEventNames, ignoreProperties);\n }\n }\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n Zone.__load_patch('util', function (global, Zone, api) {\n api.patchOnProperties = patchOnProperties;\n api.patchMethod = patchMethod;\n api.bindArguments = bindArguments;\n api.patchMacroTask = patchMacroTask;\n // In earlier version of zone.js (<0.9.0), we use env name `__zone_symbol__BLACK_LISTED_EVENTS` to\n // define which events will not be patched by `Zone.js`.\n // In newer version (>=0.9.0), we change the env name to `__zone_symbol__UNPATCHED_EVENTS` to keep\n // the name consistent with angular repo.\n // The `__zone_symbol__BLACK_LISTED_EVENTS` is deprecated, but it is still be supported for\n // backwards compatibility.\n var SYMBOL_BLACK_LISTED_EVENTS = Zone.__symbol__('BLACK_LISTED_EVENTS');\n var SYMBOL_UNPATCHED_EVENTS = Zone.__symbol__('UNPATCHED_EVENTS');\n if (global[SYMBOL_UNPATCHED_EVENTS]) {\n global[SYMBOL_BLACK_LISTED_EVENTS] = global[SYMBOL_UNPATCHED_EVENTS];\n }\n if (global[SYMBOL_BLACK_LISTED_EVENTS]) {\n Zone[SYMBOL_BLACK_LISTED_EVENTS] = Zone[SYMBOL_UNPATCHED_EVENTS] =\n global[SYMBOL_BLACK_LISTED_EVENTS];\n }\n api.patchEventPrototype = patchEventPrototype;\n api.patchEventTarget = patchEventTarget;\n api.isIEOrEdge = isIEOrEdge;\n api.ObjectDefineProperty = ObjectDefineProperty;\n api.ObjectGetOwnPropertyDescriptor = ObjectGetOwnPropertyDescriptor;\n api.ObjectCreate = ObjectCreate;\n api.ArraySlice = ArraySlice;\n api.patchClass = patchClass;\n api.wrapWithCurrentZone = wrapWithCurrentZone;\n api.filterProperties = filterProperties;\n api.attachOriginToPatched = attachOriginToPatched;\n api._redefineProperty = Object.defineProperty;\n api.patchCallbacks = patchCallbacks;\n api.getGlobalObjects = function () { return ({ globalSources: globalSources, zoneSymbolEventNames: zoneSymbolEventNames$1, eventNames: eventNames, isBrowser: isBrowser, isMix: isMix, isNode: isNode, TRUE_STR: TRUE_STR,\n FALSE_STR: FALSE_STR, ZONE_SYMBOL_PREFIX: ZONE_SYMBOL_PREFIX, ADD_EVENT_LISTENER_STR: ADD_EVENT_LISTENER_STR, REMOVE_EVENT_LISTENER_STR: REMOVE_EVENT_LISTENER_STR }); };\n });\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n /*\n * This is necessary for Chrome and Chrome mobile, to enable\n * things like redefining `createdCallback` on an element.\n */\n var zoneSymbol$1;\n var _defineProperty;\n var _getOwnPropertyDescriptor;\n var _create;\n var unconfigurablesKey;\n function propertyPatch() {\n zoneSymbol$1 = Zone.__symbol__;\n _defineProperty = Object[zoneSymbol$1('defineProperty')] = Object.defineProperty;\n _getOwnPropertyDescriptor = Object[zoneSymbol$1('getOwnPropertyDescriptor')] =\n Object.getOwnPropertyDescriptor;\n _create = Object.create;\n unconfigurablesKey = zoneSymbol$1('unconfigurables');\n Object.defineProperty = function (obj, prop, desc) {\n if (isUnconfigurable(obj, prop)) {\n throw new TypeError('Cannot assign to read only property \\'' + prop + '\\' of ' + obj);\n }\n var originalConfigurableFlag = desc.configurable;\n if (prop !== 'prototype') {\n desc = rewriteDescriptor(obj, prop, desc);\n }\n return _tryDefineProperty(obj, prop, desc, originalConfigurableFlag);\n };\n Object.defineProperties = function (obj, props) {\n Object.keys(props).forEach(function (prop) { Object.defineProperty(obj, prop, props[prop]); });\n return obj;\n };\n Object.create = function (obj, proto) {\n if (typeof proto === 'object' && !Object.isFrozen(proto)) {\n Object.keys(proto).forEach(function (prop) {\n proto[prop] = rewriteDescriptor(obj, prop, proto[prop]);\n });\n }\n return _create(obj, proto);\n };\n Object.getOwnPropertyDescriptor = function (obj, prop) {\n var desc = _getOwnPropertyDescriptor(obj, prop);\n if (desc && isUnconfigurable(obj, prop)) {\n desc.configurable = false;\n }\n return desc;\n };\n }\n function _redefineProperty(obj, prop, desc) {\n var originalConfigurableFlag = desc.configurable;\n desc = rewriteDescriptor(obj, prop, desc);\n return _tryDefineProperty(obj, prop, desc, originalConfigurableFlag);\n }\n function isUnconfigurable(obj, prop) {\n return obj && obj[unconfigurablesKey] && obj[unconfigurablesKey][prop];\n }\n function rewriteDescriptor(obj, prop, desc) {\n // issue-927, if the desc is frozen, don't try to change the desc\n if (!Object.isFrozen(desc)) {\n desc.configurable = true;\n }\n if (!desc.configurable) {\n // issue-927, if the obj is frozen, don't try to set the desc to obj\n if (!obj[unconfigurablesKey] && !Object.isFrozen(obj)) {\n _defineProperty(obj, unconfigurablesKey, { writable: true, value: {} });\n }\n if (obj[unconfigurablesKey]) {\n obj[unconfigurablesKey][prop] = true;\n }\n }\n return desc;\n }\n function _tryDefineProperty(obj, prop, desc, originalConfigurableFlag) {\n try {\n return _defineProperty(obj, prop, desc);\n }\n catch (error) {\n if (desc.configurable) {\n // In case of errors, when the configurable flag was likely set by rewriteDescriptor(), let's\n // retry with the original flag value\n if (typeof originalConfigurableFlag == 'undefined') {\n delete desc.configurable;\n }\n else {\n desc.configurable = originalConfigurableFlag;\n }\n try {\n return _defineProperty(obj, prop, desc);\n }\n catch (error) {\n var descJson = null;\n try {\n descJson = JSON.stringify(desc);\n }\n catch (error) {\n descJson = desc.toString();\n }\n console.log(\"Attempting to configure '\" + prop + \"' with descriptor '\" + descJson + \"' on object '\" + obj + \"' and got error, giving up: \" + error);\n }\n }\n else {\n throw error;\n }\n }\n }\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n function eventTargetLegacyPatch(_global, api) {\n var _a = api.getGlobalObjects(), eventNames = _a.eventNames, globalSources = _a.globalSources, zoneSymbolEventNames = _a.zoneSymbolEventNames, TRUE_STR = _a.TRUE_STR, FALSE_STR = _a.FALSE_STR, ZONE_SYMBOL_PREFIX = _a.ZONE_SYMBOL_PREFIX;\n var WTF_ISSUE_555 = 'Anchor,Area,Audio,BR,Base,BaseFont,Body,Button,Canvas,Content,DList,Directory,Div,Embed,FieldSet,Font,Form,Frame,FrameSet,HR,Head,Heading,Html,IFrame,Image,Input,Keygen,LI,Label,Legend,Link,Map,Marquee,Media,Menu,Meta,Meter,Mod,OList,Object,OptGroup,Option,Output,Paragraph,Pre,Progress,Quote,Script,Select,Source,Span,Style,TableCaption,TableCell,TableCol,Table,TableRow,TableSection,TextArea,Title,Track,UList,Unknown,Video';\n var NO_EVENT_TARGET = 'ApplicationCache,EventSource,FileReader,InputMethodContext,MediaController,MessagePort,Node,Performance,SVGElementInstance,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebKitNamedFlow,Window,Worker,WorkerGlobalScope,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload,IDBRequest,IDBOpenDBRequest,IDBDatabase,IDBTransaction,IDBCursor,DBIndex,WebSocket'\n .split(',');\n var EVENT_TARGET = 'EventTarget';\n var apis = [];\n var isWtf = _global['wtf'];\n var WTF_ISSUE_555_ARRAY = WTF_ISSUE_555.split(',');\n if (isWtf) {\n // Workaround for: https://github.com/google/tracing-framework/issues/555\n apis = WTF_ISSUE_555_ARRAY.map(function (v) { return 'HTML' + v + 'Element'; }).concat(NO_EVENT_TARGET);\n }\n else if (_global[EVENT_TARGET]) {\n apis.push(EVENT_TARGET);\n }\n else {\n // Note: EventTarget is not available in all browsers,\n // if it's not available, we instead patch the APIs in the IDL that inherit from EventTarget\n apis = NO_EVENT_TARGET;\n }\n var isDisableIECheck = _global['__Zone_disable_IE_check'] || false;\n var isEnableCrossContextCheck = _global['__Zone_enable_cross_context_check'] || false;\n var ieOrEdge = api.isIEOrEdge();\n var ADD_EVENT_LISTENER_SOURCE = '.addEventListener:';\n var FUNCTION_WRAPPER = '[object FunctionWrapper]';\n var BROWSER_TOOLS = 'function __BROWSERTOOLS_CONSOLE_SAFEFUNC() { [native code] }';\n var pointerEventsMap = {\n 'MSPointerCancel': 'pointercancel',\n 'MSPointerDown': 'pointerdown',\n 'MSPointerEnter': 'pointerenter',\n 'MSPointerHover': 'pointerhover',\n 'MSPointerLeave': 'pointerleave',\n 'MSPointerMove': 'pointermove',\n 'MSPointerOut': 'pointerout',\n 'MSPointerOver': 'pointerover',\n 'MSPointerUp': 'pointerup'\n };\n // predefine all __zone_symbol__ + eventName + true/false string\n for (var i = 0; i < eventNames.length; i++) {\n var eventName = eventNames[i];\n var falseEventName = eventName + FALSE_STR;\n var trueEventName = eventName + TRUE_STR;\n var symbol = ZONE_SYMBOL_PREFIX + falseEventName;\n var symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName;\n zoneSymbolEventNames[eventName] = {};\n zoneSymbolEventNames[eventName][FALSE_STR] = symbol;\n zoneSymbolEventNames[eventName][TRUE_STR] = symbolCapture;\n }\n // predefine all task.source string\n for (var i = 0; i < WTF_ISSUE_555_ARRAY.length; i++) {\n var target = WTF_ISSUE_555_ARRAY[i];\n var targets = globalSources[target] = {};\n for (var j = 0; j < eventNames.length; j++) {\n var eventName = eventNames[j];\n targets[eventName] = target + ADD_EVENT_LISTENER_SOURCE + eventName;\n }\n }\n var checkIEAndCrossContext = function (nativeDelegate, delegate, target, args) {\n if (!isDisableIECheck && ieOrEdge) {\n if (isEnableCrossContextCheck) {\n try {\n var testString = delegate.toString();\n if ((testString === FUNCTION_WRAPPER || testString == BROWSER_TOOLS)) {\n nativeDelegate.apply(target, args);\n return false;\n }\n }\n catch (error) {\n nativeDelegate.apply(target, args);\n return false;\n }\n }\n else {\n var testString = delegate.toString();\n if ((testString === FUNCTION_WRAPPER || testString == BROWSER_TOOLS)) {\n nativeDelegate.apply(target, args);\n return false;\n }\n }\n }\n else if (isEnableCrossContextCheck) {\n try {\n delegate.toString();\n }\n catch (error) {\n nativeDelegate.apply(target, args);\n return false;\n }\n }\n return true;\n };\n var apiTypes = [];\n for (var i = 0; i < apis.length; i++) {\n var type = _global[apis[i]];\n apiTypes.push(type && type.prototype);\n }\n // vh is validateHandler to check event handler\n // is valid or not(for security check)\n api.patchEventTarget(_global, apiTypes, {\n vh: checkIEAndCrossContext,\n transferEventName: function (eventName) {\n var pointerEventName = pointerEventsMap[eventName];\n return pointerEventName || eventName;\n }\n });\n Zone[api.symbol('patchEventTarget')] = !!_global[EVENT_TARGET];\n return true;\n }\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n // we have to patch the instance since the proto is non-configurable\n function apply(api, _global) {\n var _a = api.getGlobalObjects(), ADD_EVENT_LISTENER_STR = _a.ADD_EVENT_LISTENER_STR, REMOVE_EVENT_LISTENER_STR = _a.REMOVE_EVENT_LISTENER_STR;\n var WS = _global.WebSocket;\n // On Safari window.EventTarget doesn't exist so need to patch WS add/removeEventListener\n // On older Chrome, no need since EventTarget was already patched\n if (!_global.EventTarget) {\n api.patchEventTarget(_global, [WS.prototype]);\n }\n _global.WebSocket = function (x, y) {\n var socket = arguments.length > 1 ? new WS(x, y) : new WS(x);\n var proxySocket;\n var proxySocketProto;\n // Safari 7.0 has non-configurable own 'onmessage' and friends properties on the socket instance\n var onmessageDesc = api.ObjectGetOwnPropertyDescriptor(socket, 'onmessage');\n if (onmessageDesc && onmessageDesc.configurable === false) {\n proxySocket = api.ObjectCreate(socket);\n // socket have own property descriptor 'onopen', 'onmessage', 'onclose', 'onerror'\n // but proxySocket not, so we will keep socket as prototype and pass it to\n // patchOnProperties method\n proxySocketProto = socket;\n [ADD_EVENT_LISTENER_STR, REMOVE_EVENT_LISTENER_STR, 'send', 'close'].forEach(function (propName) {\n proxySocket[propName] = function () {\n var args = api.ArraySlice.call(arguments);\n if (propName === ADD_EVENT_LISTENER_STR || propName === REMOVE_EVENT_LISTENER_STR) {\n var eventName = args.length > 0 ? args[0] : undefined;\n if (eventName) {\n var propertySymbol = Zone.__symbol__('ON_PROPERTY' + eventName);\n socket[propertySymbol] = proxySocket[propertySymbol];\n }\n }\n return socket[propName].apply(socket, args);\n };\n });\n }\n else {\n // we can patch the real socket\n proxySocket = socket;\n }\n api.patchOnProperties(proxySocket, ['close', 'error', 'message', 'open'], proxySocketProto);\n return proxySocket;\n };\n var globalWebSocket = _global['WebSocket'];\n for (var prop in WS) {\n globalWebSocket[prop] = WS[prop];\n }\n }\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n function propertyDescriptorLegacyPatch(api, _global) {\n var _a = api.getGlobalObjects(), isNode = _a.isNode, isMix = _a.isMix;\n if (isNode && !isMix) {\n return;\n }\n if (!canPatchViaPropertyDescriptor(api, _global)) {\n var supportsWebSocket = typeof WebSocket !== 'undefined';\n // Safari, Android browsers (Jelly Bean)\n patchViaCapturingAllTheEvents(api);\n api.patchClass('XMLHttpRequest');\n if (supportsWebSocket) {\n apply(api, _global);\n }\n Zone[api.symbol('patchEvents')] = true;\n }\n }\n function canPatchViaPropertyDescriptor(api, _global) {\n var _a = api.getGlobalObjects(), isBrowser = _a.isBrowser, isMix = _a.isMix;\n if ((isBrowser || isMix) &&\n !api.ObjectGetOwnPropertyDescriptor(HTMLElement.prototype, 'onclick') &&\n typeof Element !== 'undefined') {\n // WebKit https://bugs.webkit.org/show_bug.cgi?id=134364\n // IDL interface attributes are not configurable\n var desc = api.ObjectGetOwnPropertyDescriptor(Element.prototype, 'onclick');\n if (desc && !desc.configurable)\n return false;\n // try to use onclick to detect whether we can patch via propertyDescriptor\n // because XMLHttpRequest is not available in service worker\n if (desc) {\n api.ObjectDefineProperty(Element.prototype, 'onclick', { enumerable: true, configurable: true, get: function () { return true; } });\n var div = document.createElement('div');\n var result = !!div.onclick;\n api.ObjectDefineProperty(Element.prototype, 'onclick', desc);\n return result;\n }\n }\n var XMLHttpRequest = _global['XMLHttpRequest'];\n if (!XMLHttpRequest) {\n // XMLHttpRequest is not available in service worker\n return false;\n }\n var ON_READY_STATE_CHANGE = 'onreadystatechange';\n var XMLHttpRequestPrototype = XMLHttpRequest.prototype;\n var xhrDesc = api.ObjectGetOwnPropertyDescriptor(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE);\n // add enumerable and configurable here because in opera\n // by default XMLHttpRequest.prototype.onreadystatechange is undefined\n // without adding enumerable and configurable will cause onreadystatechange\n // non-configurable\n // and if XMLHttpRequest.prototype.onreadystatechange is undefined,\n // we should set a real desc instead a fake one\n if (xhrDesc) {\n api.ObjectDefineProperty(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE, { enumerable: true, configurable: true, get: function () { return true; } });\n var req = new XMLHttpRequest();\n var result = !!req.onreadystatechange;\n // restore original desc\n api.ObjectDefineProperty(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE, xhrDesc || {});\n return result;\n }\n else {\n var SYMBOL_FAKE_ONREADYSTATECHANGE_1 = api.symbol('fake');\n api.ObjectDefineProperty(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE, {\n enumerable: true,\n configurable: true,\n get: function () { return this[SYMBOL_FAKE_ONREADYSTATECHANGE_1]; },\n set: function (value) { this[SYMBOL_FAKE_ONREADYSTATECHANGE_1] = value; }\n });\n var req = new XMLHttpRequest();\n var detectFunc = function () { };\n req.onreadystatechange = detectFunc;\n var result = req[SYMBOL_FAKE_ONREADYSTATECHANGE_1] === detectFunc;\n req.onreadystatechange = null;\n return result;\n }\n }\n // Whenever any eventListener fires, we check the eventListener target and all parents\n // for `onwhatever` properties and replace them with zone-bound functions\n // - Chrome (for now)\n function patchViaCapturingAllTheEvents(api) {\n var eventNames = api.getGlobalObjects().eventNames;\n var unboundKey = api.symbol('unbound');\n var _loop_4 = function (i) {\n var property = eventNames[i];\n var onproperty = 'on' + property;\n self.addEventListener(property, function (event) {\n var elt = event.target, bound, source;\n if (elt) {\n source = elt.constructor['name'] + '.' + onproperty;\n }\n else {\n source = 'unknown.' + onproperty;\n }\n while (elt) {\n if (elt[onproperty] && !elt[onproperty][unboundKey]) {\n bound = api.wrapWithCurrentZone(elt[onproperty], source);\n bound[unboundKey] = elt[onproperty];\n elt[onproperty] = bound;\n }\n elt = elt.parentElement;\n }\n }, true);\n };\n for (var i = 0; i < eventNames.length; i++) {\n _loop_4(i);\n }\n }\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n function registerElementPatch(_global, api) {\n var _a = api.getGlobalObjects(), isBrowser = _a.isBrowser, isMix = _a.isMix;\n if ((!isBrowser && !isMix) || !('registerElement' in _global.document)) {\n return;\n }\n var callbacks = ['createdCallback', 'attachedCallback', 'detachedCallback', 'attributeChangedCallback'];\n api.patchCallbacks(api, document, 'Document', 'registerElement', callbacks);\n }\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n (function (_global) {\n var symbolPrefix = _global['__Zone_symbol_prefix'] || '__zone_symbol__';\n function __symbol__(name) { return symbolPrefix + name; }\n _global[__symbol__('legacyPatch')] = function () {\n var Zone = _global['Zone'];\n Zone.__load_patch('defineProperty', function (global, Zone, api) {\n api._redefineProperty = _redefineProperty;\n propertyPatch();\n });\n Zone.__load_patch('registerElement', function (global, Zone, api) {\n registerElementPatch(global, api);\n });\n Zone.__load_patch('EventTargetLegacy', function (global, Zone, api) {\n eventTargetLegacyPatch(global, api);\n propertyDescriptorLegacyPatch(api, global);\n });\n };\n })(typeof window !== 'undefined' ?\n window :\n typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {});\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n var taskSymbol = zoneSymbol('zoneTask');\n function patchTimer(window, setName, cancelName, nameSuffix) {\n var setNative = null;\n var clearNative = null;\n setName += nameSuffix;\n cancelName += nameSuffix;\n var tasksByHandleId = {};\n function scheduleTask(task) {\n var data = task.data;\n function timer() {\n try {\n task.invoke.apply(this, arguments);\n }\n finally {\n // issue-934, task will be cancelled\n // even it is a periodic task such as\n // setInterval\n if (!(task.data && task.data.isPeriodic)) {\n if (typeof data.handleId === 'number') {\n // in non-nodejs env, we remove timerId\n // from local cache\n delete tasksByHandleId[data.handleId];\n }\n else if (data.handleId) {\n // Node returns complex objects as handleIds\n // we remove task reference from timer object\n data.handleId[taskSymbol] = null;\n }\n }\n }\n }\n data.args[0] = timer;\n data.handleId = setNative.apply(window, data.args);\n return task;\n }\n function clearTask(task) { return clearNative(task.data.handleId); }\n setNative =\n patchMethod(window, setName, function (delegate) { return function (self, args) {\n if (typeof args[0] === 'function') {\n var options = {\n isPeriodic: nameSuffix === 'Interval',\n delay: (nameSuffix === 'Timeout' || nameSuffix === 'Interval') ? args[1] || 0 :\n undefined,\n args: args\n };\n var task = scheduleMacroTaskWithCurrentZone(setName, args[0], options, scheduleTask, clearTask);\n if (!task) {\n return task;\n }\n // Node.js must additionally support the ref and unref functions.\n var handle = task.data.handleId;\n if (typeof handle === 'number') {\n // for non nodejs env, we save handleId: task\n // mapping in local cache for clearTimeout\n tasksByHandleId[handle] = task;\n }\n else if (handle) {\n // for nodejs env, we save task\n // reference in timerId Object for clearTimeout\n handle[taskSymbol] = task;\n }\n // check whether handle is null, because some polyfill or browser\n // may return undefined from setTimeout/setInterval/setImmediate/requestAnimationFrame\n if (handle && handle.ref && handle.unref && typeof handle.ref === 'function' &&\n typeof handle.unref === 'function') {\n task.ref = handle.ref.bind(handle);\n task.unref = handle.unref.bind(handle);\n }\n if (typeof handle === 'number' || handle) {\n return handle;\n }\n return task;\n }\n else {\n // cause an error by calling it directly.\n return delegate.apply(window, args);\n }\n }; });\n clearNative =\n patchMethod(window, cancelName, function (delegate) { return function (self, args) {\n var id = args[0];\n var task;\n if (typeof id === 'number') {\n // non nodejs env.\n task = tasksByHandleId[id];\n }\n else {\n // nodejs env.\n task = id && id[taskSymbol];\n // other environments.\n if (!task) {\n task = id;\n }\n }\n if (task && typeof task.type === 'string') {\n if (task.state !== 'notScheduled' &&\n (task.cancelFn && task.data.isPeriodic || task.runCount === 0)) {\n if (typeof id === 'number') {\n delete tasksByHandleId[id];\n }\n else if (id) {\n id[taskSymbol] = null;\n }\n // Do not cancel already canceled functions\n task.zone.cancelTask(task);\n }\n }\n else {\n // cause an error by calling it directly.\n delegate.apply(window, args);\n }\n }; });\n }\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n function patchCustomElements(_global, api) {\n var _a = api.getGlobalObjects(), isBrowser = _a.isBrowser, isMix = _a.isMix;\n if ((!isBrowser && !isMix) || !_global['customElements'] || !('customElements' in _global)) {\n return;\n }\n var callbacks = ['connectedCallback', 'disconnectedCallback', 'adoptedCallback', 'attributeChangedCallback'];\n api.patchCallbacks(api, _global.customElements, 'customElements', 'define', callbacks);\n }\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n function eventTargetPatch(_global, api) {\n if (Zone[api.symbol('patchEventTarget')]) {\n // EventTarget is already patched.\n return;\n }\n var _a = api.getGlobalObjects(), eventNames = _a.eventNames, zoneSymbolEventNames = _a.zoneSymbolEventNames, TRUE_STR = _a.TRUE_STR, FALSE_STR = _a.FALSE_STR, ZONE_SYMBOL_PREFIX = _a.ZONE_SYMBOL_PREFIX;\n // predefine all __zone_symbol__ + eventName + true/false string\n for (var i = 0; i < eventNames.length; i++) {\n var eventName = eventNames[i];\n var falseEventName = eventName + FALSE_STR;\n var trueEventName = eventName + TRUE_STR;\n var symbol = ZONE_SYMBOL_PREFIX + falseEventName;\n var symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName;\n zoneSymbolEventNames[eventName] = {};\n zoneSymbolEventNames[eventName][FALSE_STR] = symbol;\n zoneSymbolEventNames[eventName][TRUE_STR] = symbolCapture;\n }\n var EVENT_TARGET = _global['EventTarget'];\n if (!EVENT_TARGET || !EVENT_TARGET.prototype) {\n return;\n }\n api.patchEventTarget(_global, [EVENT_TARGET && EVENT_TARGET.prototype]);\n return true;\n }\n function patchEvent(global, api) {\n api.patchEventPrototype(global, api);\n }\n /**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n Zone.__load_patch('legacy', function (global) {\n var legacyPatch = global[Zone.__symbol__('legacyPatch')];\n if (legacyPatch) {\n legacyPatch();\n }\n });\n Zone.__load_patch('timers', function (global) {\n var set = 'set';\n var clear = 'clear';\n patchTimer(global, set, clear, 'Timeout');\n patchTimer(global, set, clear, 'Interval');\n patchTimer(global, set, clear, 'Immediate');\n });\n Zone.__load_patch('requestAnimationFrame', function (global) {\n patchTimer(global, 'request', 'cancel', 'AnimationFrame');\n patchTimer(global, 'mozRequest', 'mozCancel', 'AnimationFrame');\n patchTimer(global, 'webkitRequest', 'webkitCancel', 'AnimationFrame');\n });\n Zone.__load_patch('blocking', function (global, Zone) {\n var blockingMethods = ['alert', 'prompt', 'confirm'];\n for (var i = 0; i < blockingMethods.length; i++) {\n var name_2 = blockingMethods[i];\n patchMethod(global, name_2, function (delegate, symbol, name) {\n return function (s, args) {\n return Zone.current.run(delegate, global, args, name);\n };\n });\n }\n });\n Zone.__load_patch('EventTarget', function (global, Zone, api) {\n patchEvent(global, api);\n eventTargetPatch(global, api);\n // patch XMLHttpRequestEventTarget's addEventListener/removeEventListener\n var XMLHttpRequestEventTarget = global['XMLHttpRequestEventTarget'];\n if (XMLHttpRequestEventTarget && XMLHttpRequestEventTarget.prototype) {\n api.patchEventTarget(global, [XMLHttpRequestEventTarget.prototype]);\n }\n patchClass('MutationObserver');\n patchClass('WebKitMutationObserver');\n patchClass('IntersectionObserver');\n patchClass('FileReader');\n });\n Zone.__load_patch('on_property', function (global, Zone, api) {\n propertyDescriptorPatch(api, global);\n });\n Zone.__load_patch('customElements', function (global, Zone, api) {\n patchCustomElements(global, api);\n });\n Zone.__load_patch('XHR', function (global, Zone) {\n // Treat XMLHttpRequest as a macrotask.\n patchXHR(global);\n var XHR_TASK = zoneSymbol('xhrTask');\n var XHR_SYNC = zoneSymbol('xhrSync');\n var XHR_LISTENER = zoneSymbol('xhrListener');\n var XHR_SCHEDULED = zoneSymbol('xhrScheduled');\n var XHR_URL = zoneSymbol('xhrURL');\n var XHR_ERROR_BEFORE_SCHEDULED = zoneSymbol('xhrErrorBeforeScheduled');\n function patchXHR(window) {\n var XMLHttpRequest = window['XMLHttpRequest'];\n if (!XMLHttpRequest) {\n // XMLHttpRequest is not available in service worker\n return;\n }\n var XMLHttpRequestPrototype = XMLHttpRequest.prototype;\n function findPendingTask(target) { return target[XHR_TASK]; }\n var oriAddListener = XMLHttpRequestPrototype[ZONE_SYMBOL_ADD_EVENT_LISTENER];\n var oriRemoveListener = XMLHttpRequestPrototype[ZONE_SYMBOL_REMOVE_EVENT_LISTENER];\n if (!oriAddListener) {\n var XMLHttpRequestEventTarget_1 = window['XMLHttpRequestEventTarget'];\n if (XMLHttpRequestEventTarget_1) {\n var XMLHttpRequestEventTargetPrototype = XMLHttpRequestEventTarget_1.prototype;\n oriAddListener = XMLHttpRequestEventTargetPrototype[ZONE_SYMBOL_ADD_EVENT_LISTENER];\n oriRemoveListener = XMLHttpRequestEventTargetPrototype[ZONE_SYMBOL_REMOVE_EVENT_LISTENER];\n }\n }\n var READY_STATE_CHANGE = 'readystatechange';\n var SCHEDULED = 'scheduled';\n function scheduleTask(task) {\n var data = task.data;\n var target = data.target;\n target[XHR_SCHEDULED] = false;\n target[XHR_ERROR_BEFORE_SCHEDULED] = false;\n // remove existing event listener\n var listener = target[XHR_LISTENER];\n if (!oriAddListener) {\n oriAddListener = target[ZONE_SYMBOL_ADD_EVENT_LISTENER];\n oriRemoveListener = target[ZONE_SYMBOL_REMOVE_EVENT_LISTENER];\n }\n if (listener) {\n oriRemoveListener.call(target, READY_STATE_CHANGE, listener);\n }\n var newListener = target[XHR_LISTENER] = function () {\n if (target.readyState === target.DONE) {\n // sometimes on some browsers XMLHttpRequest will fire onreadystatechange with\n // readyState=4 multiple times, so we need to check task state here\n if (!data.aborted && target[XHR_SCHEDULED] && task.state === SCHEDULED) {\n // check whether the xhr has registered onload listener\n // if that is the case, the task should invoke after all\n // onload listeners finish.\n var loadTasks = target[Zone.__symbol__('loadfalse')];\n if (loadTasks && loadTasks.length > 0) {\n var oriInvoke_1 = task.invoke;\n task.invoke = function () {\n // need to load the tasks again, because in other\n // load listener, they may remove themselves\n var loadTasks = target[Zone.__symbol__('loadfalse')];\n for (var i = 0; i < loadTasks.length; i++) {\n if (loadTasks[i] === task) {\n loadTasks.splice(i, 1);\n }\n }\n if (!data.aborted && task.state === SCHEDULED) {\n oriInvoke_1.call(task);\n }\n };\n loadTasks.push(task);\n }\n else {\n task.invoke();\n }\n }\n else if (!data.aborted && target[XHR_SCHEDULED] === false) {\n // error occurs when xhr.send()\n target[XHR_ERROR_BEFORE_SCHEDULED] = true;\n }\n }\n };\n oriAddListener.call(target, READY_STATE_CHANGE, newListener);\n var storedTask = target[XHR_TASK];\n if (!storedTask) {\n target[XHR_TASK] = task;\n }\n sendNative.apply(target, data.args);\n target[XHR_SCHEDULED] = true;\n return task;\n }\n function placeholderCallback() { }\n function clearTask(task) {\n var data = task.data;\n // Note - ideally, we would call data.target.removeEventListener here, but it's too late\n // to prevent it from firing. So instead, we store info for the event listener.\n data.aborted = true;\n return abortNative.apply(data.target, data.args);\n }\n var openNative = patchMethod(XMLHttpRequestPrototype, 'open', function () { return function (self, args) {\n self[XHR_SYNC] = args[2] == false;\n self[XHR_URL] = args[1];\n return openNative.apply(self, args);\n }; });\n var XMLHTTPREQUEST_SOURCE = 'XMLHttpRequest.send';\n var fetchTaskAborting = zoneSymbol('fetchTaskAborting');\n var fetchTaskScheduling = zoneSymbol('fetchTaskScheduling');\n var sendNative = patchMethod(XMLHttpRequestPrototype, 'send', function () { return function (self, args) {\n if (Zone.current[fetchTaskScheduling] === true) {\n // a fetch is scheduling, so we are using xhr to polyfill fetch\n // and because we already schedule macroTask for fetch, we should\n // not schedule a macroTask for xhr again\n return sendNative.apply(self, args);\n }\n if (self[XHR_SYNC]) {\n // if the XHR is sync there is no task to schedule, just execute the code.\n return sendNative.apply(self, args);\n }\n else {\n var options = { target: self, url: self[XHR_URL], isPeriodic: false, args: args, aborted: false };\n var task = scheduleMacroTaskWithCurrentZone(XMLHTTPREQUEST_SOURCE, placeholderCallback, options, scheduleTask, clearTask);\n if (self && self[XHR_ERROR_BEFORE_SCHEDULED] === true && !options.aborted &&\n task.state === SCHEDULED) {\n // xhr request throw error when send\n // we should invoke task instead of leaving a scheduled\n // pending macroTask\n task.invoke();\n }\n }\n }; });\n var abortNative = patchMethod(XMLHttpRequestPrototype, 'abort', function () { return function (self, args) {\n var task = findPendingTask(self);\n if (task && typeof task.type == 'string') {\n // If the XHR has already completed, do nothing.\n // If the XHR has already been aborted, do nothing.\n // Fix #569, call abort multiple times before done will cause\n // macroTask task count be negative number\n if (task.cancelFn == null || (task.data && task.data.aborted)) {\n return;\n }\n task.zone.cancelTask(task);\n }\n else if (Zone.current[fetchTaskAborting] === true) {\n // the abort is called from fetch polyfill, we need to call native abort of XHR.\n return abortNative.apply(self, args);\n }\n // Otherwise, we are trying to abort an XHR which has not yet been sent, so there is no\n // task\n // to cancel. Do nothing.\n }; });\n }\n });\n Zone.__load_patch('geolocation', function (global) {\n /// GEO_LOCATION\n if (global['navigator'] && global['navigator'].geolocation) {\n patchPrototype(global['navigator'].geolocation, ['getCurrentPosition', 'watchPosition']);\n }\n });\n Zone.__load_patch('PromiseRejectionEvent', function (global, Zone) {\n // handle unhandled promise rejection\n function findPromiseRejectionHandler(evtName) {\n return function (e) {\n var eventTasks = findEventTasks(global, evtName);\n eventTasks.forEach(function (eventTask) {\n // windows has added unhandledrejection event listener\n // trigger the event listener\n var PromiseRejectionEvent = global['PromiseRejectionEvent'];\n if (PromiseRejectionEvent) {\n var evt = new PromiseRejectionEvent(evtName, { promise: e.promise, reason: e.rejection });\n eventTask.invoke(evt);\n }\n });\n };\n }\n if (global['PromiseRejectionEvent']) {\n Zone[zoneSymbol('unhandledPromiseRejectionHandler')] =\n findPromiseRejectionHandler('unhandledrejection');\n Zone[zoneSymbol('rejectionHandledHandler')] =\n findPromiseRejectionHandler('rejectionhandled');\n }\n });\n})));\n","var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob:\n 'FileReader' in self &&\n 'Blob' in self &&\n (function() {\n try {\n new Blob()\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n}\n\nfunction isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n}\n\nif (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ]\n\n var isArrayBufferView =\n ArrayBuffer.isView ||\n function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n }\n}\n\nfunction normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n}\n\nfunction normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n}\n\n// Build a destructive iterator for the value list\nfunction iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift()\n return {done: value === undefined, value: value}\n }\n }\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n }\n }\n\n return iterator\n}\n\nexport function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1])\n }, this)\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n}\n\nHeaders.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var oldValue = this.map[name]\n this.map[name] = oldValue ? oldValue + ', ' + value : value\n}\n\nHeaders.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n}\n\nHeaders.prototype.get = function(name) {\n name = normalizeName(name)\n return this.has(name) ? this.map[name] : null\n}\n\nHeaders.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n}\n\nHeaders.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value)\n}\n\nHeaders.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this)\n }\n }\n}\n\nHeaders.prototype.keys = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push(name)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.values = function() {\n var items = []\n this.forEach(function(value) {\n items.push(value)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.entries = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push([name, value])\n })\n return iteratorFor(items)\n}\n\nif (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n}\n\nfunction consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n}\n\nfunction fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n}\n\nfunction readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsArrayBuffer(blob)\n return promise\n}\n\nfunction readBlobAsText(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsText(blob)\n return promise\n}\n\nfunction readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf)\n var chars = new Array(view.length)\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i])\n }\n return chars.join('')\n}\n\nfunction bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength)\n view.set(new Uint8Array(buf))\n return view.buffer\n }\n}\n\nfunction Body() {\n this.bodyUsed = false\n\n this._initBody = function(body) {\n this._bodyInit = body\n if (!body) {\n this._bodyText = ''\n } else if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString()\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer)\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer])\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body)\n } else {\n this._bodyText = body = Object.prototype.toString.call(body)\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8')\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type)\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n }\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n }\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n}\n\n// HTTP methods whose capitalization should be normalized\nvar methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\nfunction normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return methods.indexOf(upcased) > -1 ? upcased : method\n}\n\nexport function Request(input, options) {\n options = options || {}\n var body = options.body\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n this.signal = input.signal\n if (!body && input._bodyInit != null) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = String(input)\n }\n\n this.credentials = options.credentials || this.credentials || 'same-origin'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.signal = options.signal || this.signal\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n}\n\nRequest.prototype.clone = function() {\n return new Request(this, {body: this._bodyInit})\n}\n\nfunction decode(body) {\n var form = new FormData()\n body\n .trim()\n .split('&')\n .forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n}\n\nfunction parseHeaders(rawHeaders) {\n var headers = new Headers()\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ')\n preProcessedHeaders.split(/\\r?\\n/).forEach(function(line) {\n var parts = line.split(':')\n var key = parts.shift().trim()\n if (key) {\n var value = parts.join(':').trim()\n headers.append(key, value)\n }\n })\n return headers\n}\n\nBody.call(Request.prototype)\n\nexport function Response(bodyInit, options) {\n if (!options) {\n options = {}\n }\n\n this.type = 'default'\n this.status = options.status === undefined ? 200 : options.status\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = 'statusText' in options ? options.statusText : 'OK'\n this.headers = new Headers(options.headers)\n this.url = options.url || ''\n this._initBody(bodyInit)\n}\n\nBody.call(Response.prototype)\n\nResponse.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n}\n\nResponse.error = function() {\n var response = new Response(null, {status: 0, statusText: ''})\n response.type = 'error'\n return response\n}\n\nvar redirectStatuses = [301, 302, 303, 307, 308]\n\nResponse.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n}\n\nexport var DOMException = self.DOMException\ntry {\n new DOMException()\n} catch (err) {\n DOMException = function(message, name) {\n this.message = message\n this.name = name\n var error = Error(message)\n this.stack = error.stack\n }\n DOMException.prototype = Object.create(Error.prototype)\n DOMException.prototype.constructor = DOMException\n}\n\nexport function fetch(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init)\n\n if (request.signal && request.signal.aborted) {\n return reject(new DOMException('Aborted', 'AbortError'))\n }\n\n var xhr = new XMLHttpRequest()\n\n function abortXhr() {\n xhr.abort()\n }\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n }\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n var body = 'response' in xhr ? xhr.response : xhr.responseText\n resolve(new Response(body, options))\n }\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.onabort = function() {\n reject(new DOMException('Aborted', 'AbortError'))\n }\n\n xhr.open(request.method, request.url, true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob'\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n\n if (request.signal) {\n request.signal.addEventListener('abort', abortXhr)\n\n xhr.onreadystatechange = function() {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener('abort', abortXhr)\n }\n }\n }\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n}\n\nfetch.polyfill = true\n\nif (!self.fetch) {\n self.fetch = fetch\n self.Headers = Headers\n self.Request = Request\n self.Response = Response\n}\n","/**\n * @file Web Cryptography API shim\n * @author Artem S Vybornov \n * @license MIT\n */\n(function (global, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define([], function () {\n return factory(global);\n });\n } else if (typeof module === 'object' && module.exports) {\n // CommonJS-like environments that support module.exports\n module.exports = factory(global);\n } else {\n factory(global);\n }\n}(typeof self !== 'undefined' ? self : this, function (global) {\n 'use strict';\n\n if ( typeof Promise !== 'function' )\n throw \"Promise support required\";\n\n var _crypto = global.crypto || global.msCrypto;\n if ( !_crypto ) return;\n\n var _subtle = _crypto.subtle || _crypto.webkitSubtle;\n if ( !_subtle ) return;\n\n var _Crypto = global.Crypto || _crypto.constructor || Object,\n _SubtleCrypto = global.SubtleCrypto || _subtle.constructor || Object,\n _CryptoKey = global.CryptoKey || global.Key || Object;\n\n var isEdge = global.navigator.userAgent.indexOf('Edge/') > -1;\n var isIE = !!global.msCrypto && !isEdge;\n var isWebkit = !_crypto.subtle && !!_crypto.webkitSubtle;\n if ( !isIE && !isWebkit ) return;\n\n function s2a ( s ) {\n return btoa(s).replace(/\\=+$/, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n }\n\n function a2s ( s ) {\n s += '===', s = s.slice( 0, -s.length % 4 );\n return atob( s.replace(/-/g, '+').replace(/_/g, '/') );\n }\n\n function s2b ( s ) {\n var b = new Uint8Array(s.length);\n for ( var i = 0; i < s.length; i++ ) b[i] = s.charCodeAt(i);\n return b;\n }\n\n function b2s ( b ) {\n if ( b instanceof ArrayBuffer ) b = new Uint8Array(b);\n return String.fromCharCode.apply( String, b );\n }\n\n function alg ( a ) {\n var r = { 'name': (a.name || a || '').toUpperCase().replace('V','v') };\n switch ( r.name ) {\n case 'SHA-1':\n case 'SHA-256':\n case 'SHA-384':\n case 'SHA-512':\n break;\n case 'AES-CBC':\n case 'AES-GCM':\n case 'AES-KW':\n if ( a.length ) r['length'] = a.length;\n break;\n case 'HMAC':\n if ( a.hash ) r['hash'] = alg(a.hash);\n if ( a.length ) r['length'] = a.length;\n break;\n case 'RSAES-PKCS1-v1_5':\n if ( a.publicExponent ) r['publicExponent'] = new Uint8Array(a.publicExponent);\n if ( a.modulusLength ) r['modulusLength'] = a.modulusLength;\n break;\n case 'RSASSA-PKCS1-v1_5':\n case 'RSA-OAEP':\n if ( a.hash ) r['hash'] = alg(a.hash);\n if ( a.publicExponent ) r['publicExponent'] = new Uint8Array(a.publicExponent);\n if ( a.modulusLength ) r['modulusLength'] = a.modulusLength;\n break;\n default:\n throw new SyntaxError(\"Bad algorithm name\");\n }\n return r;\n };\n\n function jwkAlg ( a ) {\n return {\n 'HMAC': {\n 'SHA-1': 'HS1',\n 'SHA-256': 'HS256',\n 'SHA-384': 'HS384',\n 'SHA-512': 'HS512',\n },\n 'RSASSA-PKCS1-v1_5': {\n 'SHA-1': 'RS1',\n 'SHA-256': 'RS256',\n 'SHA-384': 'RS384',\n 'SHA-512': 'RS512',\n },\n 'RSAES-PKCS1-v1_5': {\n '': 'RSA1_5',\n },\n 'RSA-OAEP': {\n 'SHA-1': 'RSA-OAEP',\n 'SHA-256': 'RSA-OAEP-256',\n },\n 'AES-KW': {\n '128': 'A128KW',\n '192': 'A192KW',\n '256': 'A256KW',\n },\n 'AES-GCM': {\n '128': 'A128GCM',\n '192': 'A192GCM',\n '256': 'A256GCM',\n },\n 'AES-CBC': {\n '128': 'A128CBC',\n '192': 'A192CBC',\n '256': 'A256CBC',\n },\n }[a.name][ ( a.hash || {} ).name || a.length || '' ];\n }\n\n function b2jwk ( k ) {\n if ( k instanceof ArrayBuffer || k instanceof Uint8Array ) k = JSON.parse( decodeURIComponent( escape( b2s(k) ) ) );\n var jwk = { 'kty': k.kty, 'alg': k.alg, 'ext': k.ext || k.extractable };\n switch ( jwk.kty ) {\n case 'oct':\n jwk.k = k.k;\n case 'RSA':\n [ 'n', 'e', 'd', 'p', 'q', 'dp', 'dq', 'qi', 'oth' ].forEach( function ( x ) { if ( x in k ) jwk[x] = k[x] } );\n break;\n default:\n throw new TypeError(\"Unsupported key type\");\n }\n return jwk;\n }\n\n function jwk2b ( k ) {\n var jwk = b2jwk(k);\n if ( isIE ) jwk['extractable'] = jwk.ext, delete jwk.ext;\n return s2b( unescape( encodeURIComponent( JSON.stringify(jwk) ) ) ).buffer;\n }\n\n function pkcs2jwk ( k ) {\n var info = b2der(k), prv = false;\n if ( info.length > 2 ) prv = true, info.shift(); // remove version from PKCS#8 PrivateKeyInfo structure\n var jwk = { 'ext': true };\n switch ( info[0][0] ) {\n case '1.2.840.113549.1.1.1':\n var rsaComp = [ 'n', 'e', 'd', 'p', 'q', 'dp', 'dq', 'qi' ],\n rsaKey = b2der( info[1] );\n if ( prv ) rsaKey.shift(); // remove version from PKCS#1 RSAPrivateKey structure\n for ( var i = 0; i < rsaKey.length; i++ ) {\n if ( !rsaKey[i][0] ) rsaKey[i] = rsaKey[i].subarray(1);\n jwk[ rsaComp[i] ] = s2a( b2s( rsaKey[i] ) );\n }\n jwk['kty'] = 'RSA';\n break;\n default:\n throw new TypeError(\"Unsupported key type\");\n }\n return jwk;\n }\n\n function jwk2pkcs ( k ) {\n var key, info = [ [ '', null ] ], prv = false;\n switch ( k.kty ) {\n case 'RSA':\n var rsaComp = [ 'n', 'e', 'd', 'p', 'q', 'dp', 'dq', 'qi' ],\n rsaKey = [];\n for ( var i = 0; i < rsaComp.length; i++ ) {\n if ( !( rsaComp[i] in k ) ) break;\n var b = rsaKey[i] = s2b( a2s( k[ rsaComp[i] ] ) );\n if ( b[0] & 0x80 ) rsaKey[i] = new Uint8Array(b.length + 1), rsaKey[i].set( b, 1 );\n }\n if ( rsaKey.length > 2 ) prv = true, rsaKey.unshift( new Uint8Array([0]) ); // add version to PKCS#1 RSAPrivateKey structure\n info[0][0] = '1.2.840.113549.1.1.1';\n key = rsaKey;\n break;\n default:\n throw new TypeError(\"Unsupported key type\");\n }\n info.push( new Uint8Array( der2b(key) ).buffer );\n if ( !prv ) info[1] = { 'tag': 0x03, 'value': info[1] };\n else info.unshift( new Uint8Array([0]) ); // add version to PKCS#8 PrivateKeyInfo structure\n return new Uint8Array( der2b(info) ).buffer;\n }\n\n var oid2str = { 'KoZIhvcNAQEB': '1.2.840.113549.1.1.1' },\n str2oid = { '1.2.840.113549.1.1.1': 'KoZIhvcNAQEB' };\n\n function b2der ( buf, ctx ) {\n if ( buf instanceof ArrayBuffer ) buf = new Uint8Array(buf);\n if ( !ctx ) ctx = { pos: 0, end: buf.length };\n\n if ( ctx.end - ctx.pos < 2 || ctx.end > buf.length ) throw new RangeError(\"Malformed DER\");\n\n var tag = buf[ctx.pos++],\n len = buf[ctx.pos++];\n\n if ( len >= 0x80 ) {\n len &= 0x7f;\n if ( ctx.end - ctx.pos < len ) throw new RangeError(\"Malformed DER\");\n for ( var xlen = 0; len--; ) xlen <<= 8, xlen |= buf[ctx.pos++];\n len = xlen;\n }\n\n if ( ctx.end - ctx.pos < len ) throw new RangeError(\"Malformed DER\");\n\n var rv;\n\n switch ( tag ) {\n case 0x02: // Universal Primitive INTEGER\n rv = buf.subarray( ctx.pos, ctx.pos += len );\n break;\n case 0x03: // Universal Primitive BIT STRING\n if ( buf[ctx.pos++] ) throw new Error( \"Unsupported bit string\" );\n len--;\n case 0x04: // Universal Primitive OCTET STRING\n rv = new Uint8Array( buf.subarray( ctx.pos, ctx.pos += len ) ).buffer;\n break;\n case 0x05: // Universal Primitive NULL\n rv = null;\n break;\n case 0x06: // Universal Primitive OBJECT IDENTIFIER\n var oid = btoa( b2s( buf.subarray( ctx.pos, ctx.pos += len ) ) );\n if ( !( oid in oid2str ) ) throw new Error( \"Unsupported OBJECT ID \" + oid );\n rv = oid2str[oid];\n break;\n case 0x30: // Universal Constructed SEQUENCE\n rv = [];\n for ( var end = ctx.pos + len; ctx.pos < end; ) rv.push( b2der( buf, ctx ) );\n break;\n default:\n throw new Error( \"Unsupported DER tag 0x\" + tag.toString(16) );\n }\n\n return rv;\n }\n\n function der2b ( val, buf ) {\n if ( !buf ) buf = [];\n\n var tag = 0, len = 0,\n pos = buf.length + 2;\n\n buf.push( 0, 0 ); // placeholder\n\n if ( val instanceof Uint8Array ) { // Universal Primitive INTEGER\n tag = 0x02, len = val.length;\n for ( var i = 0; i < len; i++ ) buf.push( val[i] );\n }\n else if ( val instanceof ArrayBuffer ) { // Universal Primitive OCTET STRING\n tag = 0x04, len = val.byteLength, val = new Uint8Array(val);\n for ( var i = 0; i < len; i++ ) buf.push( val[i] );\n }\n else if ( val === null ) { // Universal Primitive NULL\n tag = 0x05, len = 0;\n }\n else if ( typeof val === 'string' && val in str2oid ) { // Universal Primitive OBJECT IDENTIFIER\n var oid = s2b( atob( str2oid[val] ) );\n tag = 0x06, len = oid.length;\n for ( var i = 0; i < len; i++ ) buf.push( oid[i] );\n }\n else if ( val instanceof Array ) { // Universal Constructed SEQUENCE\n for ( var i = 0; i < val.length; i++ ) der2b( val[i], buf );\n tag = 0x30, len = buf.length - pos;\n }\n else if ( typeof val === 'object' && val.tag === 0x03 && val.value instanceof ArrayBuffer ) { // Tag hint\n val = new Uint8Array(val.value), tag = 0x03, len = val.byteLength;\n buf.push(0); for ( var i = 0; i < len; i++ ) buf.push( val[i] );\n len++;\n }\n else {\n throw new Error( \"Unsupported DER value \" + val );\n }\n\n if ( len >= 0x80 ) {\n var xlen = len, len = 4;\n buf.splice( pos, 0, (xlen >> 24) & 0xff, (xlen >> 16) & 0xff, (xlen >> 8) & 0xff, xlen & 0xff );\n while ( len > 1 && !(xlen >> 24) ) xlen <<= 8, len--;\n if ( len < 4 ) buf.splice( pos, 4 - len );\n len |= 0x80;\n }\n\n buf.splice( pos - 2, 2, tag, len );\n\n return buf;\n }\n\n function CryptoKey ( key, alg, ext, use ) {\n Object.defineProperties( this, {\n _key: {\n value: key\n },\n type: {\n value: key.type,\n enumerable: true,\n },\n extractable: {\n value: (ext === undefined) ? key.extractable : ext,\n enumerable: true,\n },\n algorithm: {\n value: (alg === undefined) ? key.algorithm : alg,\n enumerable: true,\n },\n usages: {\n value: (use === undefined) ? key.usages : use,\n enumerable: true,\n },\n });\n }\n\n function isPubKeyUse ( u ) {\n return u === 'verify' || u === 'encrypt' || u === 'wrapKey';\n }\n\n function isPrvKeyUse ( u ) {\n return u === 'sign' || u === 'decrypt' || u === 'unwrapKey';\n }\n\n [ 'generateKey', 'importKey', 'unwrapKey' ]\n .forEach( function ( m ) {\n var _fn = _subtle[m];\n\n _subtle[m] = function ( a, b, c ) {\n var args = [].slice.call(arguments),\n ka, kx, ku;\n\n switch ( m ) {\n case 'generateKey':\n ka = alg(a), kx = b, ku = c;\n break;\n case 'importKey':\n ka = alg(c), kx = args[3], ku = args[4];\n if ( a === 'jwk' ) {\n b = b2jwk(b);\n if ( !b.alg ) b.alg = jwkAlg(ka);\n if ( !b.key_ops ) b.key_ops = ( b.kty !== 'oct' ) ? ( 'd' in b ) ? ku.filter(isPrvKeyUse) : ku.filter(isPubKeyUse) : ku.slice();\n args[1] = jwk2b(b);\n }\n break;\n case 'unwrapKey':\n ka = args[4], kx = args[5], ku = args[6];\n args[2] = c._key;\n break;\n }\n\n if ( m === 'generateKey' && ka.name === 'HMAC' && ka.hash ) {\n ka.length = ka.length || { 'SHA-1': 512, 'SHA-256': 512, 'SHA-384': 1024, 'SHA-512': 1024 }[ka.hash.name];\n return _subtle.importKey( 'raw', _crypto.getRandomValues( new Uint8Array( (ka.length+7)>>3 ) ), ka, kx, ku );\n }\n\n if ( isWebkit && m === 'generateKey' && ka.name === 'RSASSA-PKCS1-v1_5' && ( !ka.modulusLength || ka.modulusLength >= 2048 ) ) {\n a = alg(a), a.name = 'RSAES-PKCS1-v1_5', delete a.hash;\n return _subtle.generateKey( a, true, [ 'encrypt', 'decrypt' ] )\n .then( function ( k ) {\n return Promise.all([\n _subtle.exportKey( 'jwk', k.publicKey ),\n _subtle.exportKey( 'jwk', k.privateKey ),\n ]);\n })\n .then( function ( keys ) {\n keys[0].alg = keys[1].alg = jwkAlg(ka);\n keys[0].key_ops = ku.filter(isPubKeyUse), keys[1].key_ops = ku.filter(isPrvKeyUse);\n return Promise.all([\n _subtle.importKey( 'jwk', keys[0], ka, true, keys[0].key_ops ),\n _subtle.importKey( 'jwk', keys[1], ka, kx, keys[1].key_ops ),\n ]);\n })\n .then( function ( keys ) {\n return {\n publicKey: keys[0],\n privateKey: keys[1],\n };\n });\n }\n\n if ( ( isWebkit || ( isIE && ( ka.hash || {} ).name === 'SHA-1' ) )\n && m === 'importKey' && a === 'jwk' && ka.name === 'HMAC' && b.kty === 'oct' ) {\n return _subtle.importKey( 'raw', s2b( a2s(b.k) ), c, args[3], args[4] );\n }\n\n if ( isWebkit && m === 'importKey' && ( a === 'spki' || a === 'pkcs8' ) ) {\n return _subtle.importKey( 'jwk', pkcs2jwk(b), c, args[3], args[4] );\n }\n\n if ( isIE && m === 'unwrapKey' ) {\n return _subtle.decrypt( args[3], c, b )\n .then( function ( k ) {\n return _subtle.importKey( a, k, args[4], args[5], args[6] );\n });\n }\n\n var op;\n try {\n op = _fn.apply( _subtle, args );\n }\n catch ( e ) {\n return Promise.reject(e);\n }\n\n if ( isIE ) {\n op = new Promise( function ( res, rej ) {\n op.onabort =\n op.onerror = function ( e ) { rej(e) };\n op.oncomplete = function ( r ) { res(r.target.result) };\n });\n }\n\n op = op.then( function ( k ) {\n if ( ka.name === 'HMAC' ) {\n if ( !ka.length ) ka.length = 8 * k.algorithm.length;\n }\n if ( ka.name.search('RSA') == 0 ) {\n if ( !ka.modulusLength ) ka.modulusLength = (k.publicKey || k).algorithm.modulusLength;\n if ( !ka.publicExponent ) ka.publicExponent = (k.publicKey || k).algorithm.publicExponent;\n }\n if ( k.publicKey && k.privateKey ) {\n k = {\n publicKey: new CryptoKey( k.publicKey, ka, kx, ku.filter(isPubKeyUse) ),\n privateKey: new CryptoKey( k.privateKey, ka, kx, ku.filter(isPrvKeyUse) ),\n };\n }\n else {\n k = new CryptoKey( k, ka, kx, ku );\n }\n return k;\n });\n\n return op;\n }\n });\n\n [ 'exportKey', 'wrapKey' ]\n .forEach( function ( m ) {\n var _fn = _subtle[m];\n\n _subtle[m] = function ( a, b, c ) {\n var args = [].slice.call(arguments);\n\n switch ( m ) {\n case 'exportKey':\n args[1] = b._key;\n break;\n case 'wrapKey':\n args[1] = b._key, args[2] = c._key;\n break;\n }\n\n if ( ( isWebkit || ( isIE && ( b.algorithm.hash || {} ).name === 'SHA-1' ) )\n && m === 'exportKey' && a === 'jwk' && b.algorithm.name === 'HMAC' ) {\n args[0] = 'raw';\n }\n\n if ( isWebkit && m === 'exportKey' && ( a === 'spki' || a === 'pkcs8' ) ) {\n args[0] = 'jwk';\n }\n\n if ( isIE && m === 'wrapKey' ) {\n return _subtle.exportKey( a, b )\n .then( function ( k ) {\n if ( a === 'jwk' ) k = s2b( unescape( encodeURIComponent( JSON.stringify( b2jwk(k) ) ) ) );\n return _subtle.encrypt( args[3], c, k );\n });\n }\n\n var op;\n try {\n op = _fn.apply( _subtle, args );\n }\n catch ( e ) {\n return Promise.reject(e);\n }\n\n if ( isIE ) {\n op = new Promise( function ( res, rej ) {\n op.onabort =\n op.onerror = function ( e ) { rej(e) };\n op.oncomplete = function ( r ) { res(r.target.result) };\n });\n }\n\n if ( m === 'exportKey' && a === 'jwk' ) {\n op = op.then( function ( k ) {\n if ( ( isWebkit || ( isIE && ( b.algorithm.hash || {} ).name === 'SHA-1' ) )\n && b.algorithm.name === 'HMAC') {\n return { 'kty': 'oct', 'alg': jwkAlg(b.algorithm), 'key_ops': b.usages.slice(), 'ext': true, 'k': s2a( b2s(k) ) };\n }\n k = b2jwk(k);\n if ( !k.alg ) k['alg'] = jwkAlg(b.algorithm);\n if ( !k.key_ops ) k['key_ops'] = ( b.type === 'public' ) ? b.usages.filter(isPubKeyUse) : ( b.type === 'private' ) ? b.usages.filter(isPrvKeyUse) : b.usages.slice();\n return k;\n });\n }\n\n if ( isWebkit && m === 'exportKey' && ( a === 'spki' || a === 'pkcs8' ) ) {\n op = op.then( function ( k ) {\n k = jwk2pkcs( b2jwk(k) );\n return k;\n });\n }\n\n return op;\n }\n });\n\n [ 'encrypt', 'decrypt', 'sign', 'verify' ]\n .forEach( function ( m ) {\n var _fn = _subtle[m];\n\n _subtle[m] = function ( a, b, c, d ) {\n if ( isIE && ( !c.byteLength || ( d && !d.byteLength ) ) )\n throw new Error(\"Empy input is not allowed\");\n\n var args = [].slice.call(arguments),\n ka = alg(a);\n\n if ( isIE && m === 'decrypt' && ka.name === 'AES-GCM' ) {\n var tl = a.tagLength >> 3;\n args[2] = (c.buffer || c).slice( 0, c.byteLength - tl ),\n a.tag = (c.buffer || c).slice( c.byteLength - tl );\n }\n\n args[1] = b._key;\n\n var op;\n try {\n op = _fn.apply( _subtle, args );\n }\n catch ( e ) {\n return Promise.reject(e);\n }\n\n if ( isIE ) {\n op = new Promise( function ( res, rej ) {\n op.onabort =\n op.onerror = function ( e ) {\n rej(e);\n };\n\n op.oncomplete = function ( r ) {\n var r = r.target.result;\n\n if ( m === 'encrypt' && r instanceof AesGcmEncryptResult ) {\n var c = r.ciphertext, t = r.tag;\n r = new Uint8Array( c.byteLength + t.byteLength );\n r.set( new Uint8Array(c), 0 );\n r.set( new Uint8Array(t), c.byteLength );\n r = r.buffer;\n }\n\n res(r);\n };\n });\n }\n\n return op;\n }\n });\n\n if ( isIE ) {\n var _digest = _subtle.digest;\n\n _subtle['digest'] = function ( a, b ) {\n if ( !b.byteLength )\n throw new Error(\"Empy input is not allowed\");\n\n var op;\n try {\n op = _digest.call( _subtle, a, b );\n }\n catch ( e ) {\n return Promise.reject(e);\n }\n\n op = new Promise( function ( res, rej ) {\n op.onabort =\n op.onerror = function ( e ) { rej(e) };\n op.oncomplete = function ( r ) { res(r.target.result) };\n });\n\n return op;\n };\n\n global.crypto = Object.create( _crypto, {\n getRandomValues: { value: function ( a ) { return _crypto.getRandomValues(a) } },\n subtle: { value: _subtle },\n });\n\n global.CryptoKey = CryptoKey;\n }\n\n if ( isWebkit ) {\n _crypto.subtle = _subtle;\n\n global.Crypto = _Crypto;\n global.SubtleCrypto = _SubtleCrypto;\n global.CryptoKey = CryptoKey;\n }\n}));\n","!function(t,e){if(\"object\"==typeof exports&&\"object\"==typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var n=e();for(var r in n)(\"object\"==typeof exports?exports:t)[r]=n[r]}}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var n={};return e.m=t,e.c=n,e.p=\"\",e(0)}([function(t,e,n){\"use strict\";function r(t){return t&&t.__esModule?t:{\"default\":t}}n(84);var o=n(41),i=r(o),a=function(){i[\"default\"].addPickerToOtherInputs(),i[\"default\"].supportsDateInput()||i[\"default\"].addPickerToDateInputs()};a(),document.addEventListener(\"DOMContentLoaded\",function(){a()}),document.querySelector(\"body\").addEventListener(\"mousedown\",function(){a()})},function(t,e,n){t.exports=!n(11)(function(){return 7!=Object.defineProperty({},\"a\",{get:function(){return 7}}).a})},function(t,e){var n=t.exports=\"undefined\"!=typeof window&&window.Math==Math?window:\"undefined\"!=typeof self&&self.Math==Math?self:Function(\"return this\")();\"number\"==typeof __g&&(__g=n)},function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e,n){var r=n(9),o=n(32),i=n(25),a=Object.defineProperty;e.f=n(1)?Object.defineProperty:function(t,e,n){if(r(t),e=i(e,!0),r(n),o)try{return a(t,e,n)}catch(u){}if(\"get\"in n||\"set\"in n)throw TypeError(\"Accessors not supported!\");return\"value\"in n&&(t[e]=n.value),t}},function(t,e,n){var r=n(59),o=n(16);t.exports=function(t){return r(o(t))}},function(t,e,n){var r=n(4),o=n(14);t.exports=n(1)?function(t,e,n){return r.f(t,e,o(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var r=n(23)(\"wks\"),o=n(15),i=n(2).Symbol,a=\"function\"==typeof i,u=t.exports=function(t){return r[t]||(r[t]=a&&i[t]||(a?i:o)(\"Symbol.\"+t))};u.store=r},function(t,e){var n=t.exports={version:\"2.4.0\"};\"number\"==typeof __e&&(__e=n)},function(t,e,n){var r=n(12);t.exports=function(t){if(!r(t))throw TypeError(t+\" is not an object!\");return t}},function(t,e,n){var r=n(2),o=n(8),i=n(56),a=n(6),u=\"prototype\",s=function(t,e,n){var c,l,f,d=t&s.F,p=t&s.G,h=t&s.S,y=t&s.P,m=t&s.B,v=t&s.W,b=p?o:o[e]||(o[e]={}),g=b[u],x=p?r:h?r[e]:(r[e]||{})[u];p&&(n=e);for(c in n)l=!d&&x&&void 0!==x[c],l&&c in b||(f=l?x[c]:n[c],b[c]=p&&\"function\"!=typeof x[c]?n[c]:m&&l?i(f,r):v&&x[c]==f?function(t){var e=function(e,n,r){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,n)}return new t(e,n,r)}return t.apply(this,arguments)};return e[u]=t[u],e}(f):y&&\"function\"==typeof f?i(Function.call,f):f,y&&((b.virtual||(b.virtual={}))[c]=f,t&s.R&&g&&!g[c]&&a(g,c,f)))};s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,t.exports=s},function(t,e){t.exports=function(t){try{return!!t()}catch(e){return!0}}},function(t,e){t.exports=function(t){return\"object\"==typeof t?null!==t:\"function\"==typeof t}},function(t,e,n){var r=n(38),o=n(17);t.exports=Object.keys||function(t){return r(t,o)}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e){var n=0,r=Math.random();t.exports=function(t){return\"Symbol(\".concat(void 0===t?\"\":t,\")_\",(++n+r).toString(36))}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError(\"Can't call method on \"+t);return t}},function(t,e){t.exports=\"constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf\".split(\",\")},function(t,e){t.exports={}},function(t,e){t.exports=!0},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,n){var r=n(4).f,o=n(3),i=n(7)(\"toStringTag\");t.exports=function(t,e,n){t&&!o(t=n?t:t.prototype,i)&&r(t,i,{configurable:!0,value:e})}},function(t,e,n){var r=n(23)(\"keys\"),o=n(15);t.exports=function(t){return r[t]||(r[t]=o(t))}},function(t,e,n){var r=n(2),o=\"__core-js_shared__\",i=r[o]||(r[o]={});t.exports=function(t){return i[t]||(i[t]={})}},function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},function(t,e,n){var r=n(12);t.exports=function(t,e){if(!r(t))return t;var n,o;if(e&&\"function\"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;if(\"function\"==typeof(n=t.valueOf)&&!r(o=n.call(t)))return o;if(!e&&\"function\"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;throw TypeError(\"Can't convert object to primitive value\")}},function(t,e,n){var r=n(2),o=n(8),i=n(19),a=n(27),u=n(4).f;t.exports=function(t){var e=o.Symbol||(o.Symbol=i?{}:r.Symbol||{});\"_\"==t.charAt(0)||t in e||u(e,t,{value:a.f(t)})}},function(t,e,n){e.f=n(7)},function(t,e){\"use strict\";e.__esModule=!0,e[\"default\"]=function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}},function(t,e,n){\"use strict\";function r(t){return t&&t.__esModule?t:{\"default\":t}}e.__esModule=!0;var o=n(45),i=r(o);e[\"default\"]=function(){function t(t,e){for(var n=0;n\";for(e.style.display=\"none\",n(58).appendChild(e),e.src=\"javascript:\",t=e.contentWindow.document,t.open(),t.write(o+\"script\"+a+\"document.F=Object\"+o+\"/script\"+a),t.close(),c=t.F;r--;)delete c[s][i[r]];return c()};t.exports=Object.create||function(t,e){var n;return null!==t?(u[s]=r(t),n=new u,u[s]=null,n[a]=t):n=c(),void 0===e?n:o(n,e)}},function(t,e,n){var r=n(4),o=n(9),i=n(13);t.exports=n(1)?Object.defineProperties:function(t,e){o(t);for(var n,a=i(e),u=a.length,s=0;u>s;)r.f(t,n=a[s++],e[n]);return t}},function(t,e,n){var r=n(38),o=n(17).concat(\"length\",\"prototype\");e.f=Object.getOwnPropertyNames||function(t){return r(t,o)}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,n){var r=n(3),o=n(5),i=n(55)(!1),a=n(22)(\"IE_PROTO\");t.exports=function(t,e){var n,u=o(t),s=0,c=[];for(n in u)n!=a&&r(u,n)&&c.push(n);for(;e.length>s;)r(u,n=e[s++])&&(~i(c,n)||c.push(n));return c}},function(t,e,n){t.exports=n(6)},function(t,e,n){\"use strict\";function r(t){return t&&t.__esModule?t:{\"default\":t}}function o(t,e){for(t=String(t),e=e||2;t.length0?\"-\":\"+\")+o(100*Math.floor(Math.abs(w)/60)+Math.abs(w)%60,4),S:[\"th\",\"st\",\"nd\",\"rd\"][h%10>3?0:(h%100-h%10!=10)*h%10],W:S,N:O};return s.replace(t,function(t){return t in D?D[t]:t.slice(1,t.length-1)})}}();l.masks={\"default\":\"ddd mmm dd yyyy HH:MM:ss\",shortDate:\"m/d/yy\",mediumDate:\"mmm d, yyyy\",longDate:\"mmmm d, yyyy\",fullDate:\"dddd, mmmm d, yyyy\",shortTime:\"h:MM TT\",mediumTime:\"h:MM:ss TT\",longTime:\"h:MM:ss TT Z\",isoDate:\"yyyy-mm-dd\",isoTime:\"HH:MM:ss\",isoDateTime:\"yyyy-mm-dd'T'HH:MM:sso\",isoUtcDateTime:\"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'\",expiresHeaderFormat:\"ddd, dd mmm yyyy HH:MM:ss Z\"},l.i18n={dayNames:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],monthNames:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\",\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"]},e[\"default\"]=l},function(t,e,n){\"use strict\";function r(t){return t&&t.__esModule?t:{\"default\":t}}Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(44),i=r(o),a=n(28),u=r(a),s=n(29),c=r(s),l=n(43),f=r(l),d=n(42),p=r(d),h=n(40),y=r(h),m=function(){function t(e){var n=this;(0,u[\"default\"])(this,t),this.element=e,this.element.setAttribute(\"data-has-picker\",\"\"),this.locale=this.element.getAttribute(\"lang\")||document.body.getAttribute(\"lang\")||\"en\",this.format=this.element.getAttribute(\"date-format\")||document.body.getAttribute(\"date-format\")||this.element.getAttribute(\"data-date-format\")||document.body.getAttribute(\"data-date-format\")||\"yyyy-mm-dd\",this.localeText=this.getLocaleText(),(0,i[\"default\"])(this.element,{valueAsDate:{get:function(){if(!n.element.value)return null;var t=n.format||\"yyyy-mm-dd\",e=n.element.value.match(/(\\d+)/g),r=0,o={};return t.replace(/(yyyy|dd|mm)/g,function(t){o[t]=r++}),new Date(e[o.yyyy],e[o.mm]-1,e[o.dd])},set:function(t){n.element.value=(0,y[\"default\"])(t,n.format)}},valueAsNumber:{get:function(){return n.element.value?n.element.valueAsDate.valueOf():NaN},set:function(t){n.element.valueAsDate=new Date(t)}}});var r=function(t){var e=n.element;e.locale=n.localeText,f[\"default\"].attachTo(e)};this.element.addEventListener(\"focus\",r),this.element.addEventListener(\"mouseup\",r),this.element.addEventListener(\"keydown\",function(t){var e=new Date;switch(t.keyCode){case 9:case 27:f[\"default\"].hide();break;case 38:n.element.valueAsDate&&(e.setDate(n.element.valueAsDate.getDate()+1),n.element.valueAsDate=e,f[\"default\"].pingInput());break;case 40:n.element.valueAsDate&&(e.setDate(n.element.valueAsDate.getDate()-1),n.element.valueAsDate=e,f[\"default\"].pingInput())}f[\"default\"].sync()}),this.element.addEventListener(\"keyup\",function(t){f[\"default\"].sync()})}return(0,c[\"default\"])(t,[{key:\"getLocaleText\",value:function(){var t=this.locale.toLowerCase();for(var e in p[\"default\"]){var n=e.split(\"_\");if(n.map(function(t){return t.toLowerCase()}),~n.indexOf(t)||~n.indexOf(t.substr(0,2)))return p[\"default\"][e]}}}],[{key:\"supportsDateInput\",value:function(){var t=document.createElement(\"input\");t.setAttribute(\"type\",\"date\");var e=\"not-a-date\";return t.setAttribute(\"value\",e),!(t.value===e)}},{key:\"addPickerToDateInputs\",value:function(){var e=document.querySelectorAll('input[type=\"date\"]:not([data-has-picker])'),n=e.length;if(!n)return!1;for(var r=0;r\"],n=0,r=this.locale.days.length;n'+this.locale.days[n]+\"\");this.daysHead.innerHTML=e.join(\"\"),t.createRangeSelect(this.month,0,11,this.locale.months)}},{key:\"refreshDaysMatrix\",value:function(){this.refreshLocale();for(var e=this.date.getFullYear(),n=this.date.getMonth(),r=new Date(e,n,1).getDay(),o=new Date(this.date.getFullYear(),n+1,0).getDate(),i=t.absoluteDate(this.input.valueAsDate)||!1,a=i&&e===i.getFullYear()&&n===i.getMonth(),u=[],s=0;s\":\"\")+\"\\n \\n \"),s+1<=r)u.push(\"\");else{var c=s+1-r,l=a&&i.getDate()===c;u.push(\"\\n \"+c+\"\\n \")}this.days.innerHTML=u.join(\"\")}},{key:\"pingInput\",value:function(){var t=void 0,e=void 0;try{t=new Event(\"input\"),e=new Event(\"change\")}catch(n){t=document.createEvent(\"KeyboardEvent\"),t.initEvent(\"input\",!0,!1),e=document.createEvent(\"KeyboardEvent\"),e.initEvent(\"change\",!0,!1)}this.input.dispatchEvent(t),this.input.dispatchEvent(e)}}],[{key:\"createRangeSelect\",value:function(t,e,n,r){t.innerHTML=\"\";for(var o=e;o<=n;++o){var i=document.createElement(\"option\");t.appendChild(i);var a=r?r[o-e]:o;i.text=a,i.value=o}return t}},{key:\"absoluteDate\",value:function(t){return t&&new Date(t.getTime()+60*t.getTimezoneOffset()*1e3)}}]),t}();window.thePicker=new s,e[\"default\"]=window.thePicker},function(t,e,n){t.exports={\"default\":n(49),__esModule:!0}},function(t,e,n){t.exports={\"default\":n(50),__esModule:!0}},function(t,e,n){t.exports={\"default\":n(51),__esModule:!0}},function(t,e,n){t.exports={\"default\":n(52),__esModule:!0}},function(t,e,n){\"use strict\";function r(t){return t&&t.__esModule?t:{\"default\":t}}e.__esModule=!0;var o=n(47),i=r(o),a=n(46),u=r(a),s=\"function\"==typeof u[\"default\"]&&\"symbol\"==typeof i[\"default\"]?function(t){return typeof t}:function(t){return t&&\"function\"==typeof u[\"default\"]&&t.constructor===u[\"default\"]?\"symbol\":typeof t};e[\"default\"]=\"function\"==typeof u[\"default\"]&&\"symbol\"===s(i[\"default\"])?function(t){return\"undefined\"==typeof t?\"undefined\":s(t)}:function(t){return t&&\"function\"==typeof u[\"default\"]&&t.constructor===u[\"default\"]?\"symbol\":\"undefined\"==typeof t?\"undefined\":s(t)}},function(t,e,n){n(73);var r=n(8).Object;t.exports=function(t,e){return r.defineProperties(t,e)}},function(t,e,n){n(74);var r=n(8).Object;t.exports=function(t,e,n){return r.defineProperty(t,e,n)}},function(t,e,n){n(77),n(75),n(78),n(79),t.exports=n(8).Symbol},function(t,e,n){n(76),n(80),t.exports=n(27).f(\"iterator\")},function(t,e){t.exports=function(t){if(\"function\"!=typeof t)throw TypeError(t+\" is not a function!\");return t}},function(t,e){t.exports=function(){}},function(t,e,n){var r=n(5),o=n(70),i=n(69);t.exports=function(t){return function(e,n,a){var u,s=r(e),c=o(s.length),l=i(a,c);if(t&&n!=n){for(;c>l;)if(u=s[l++],u!=u)return!0}else for(;c>l;l++)if((t||l in s)&&s[l]===n)return t||l||0;return!t&&-1}}},function(t,e,n){var r=n(53);t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}}},function(t,e,n){var r=n(13),o=n(37),i=n(20);t.exports=function(t){var e=r(t),n=o.f;if(n)for(var a,u=n(t),s=i.f,c=0;u.length>c;)s.call(t,a=u[c++])&&e.push(a);return e}},function(t,e,n){t.exports=n(2).document&&document.documentElement},function(t,e,n){var r=n(30);t.exports=Object(\"z\").propertyIsEnumerable(0)?Object:function(t){return\"String\"==r(t)?t.split(\"\"):Object(t)}},function(t,e,n){var r=n(30);t.exports=Array.isArray||function(t){return\"Array\"==r(t)}},function(t,e,n){\"use strict\";var r=n(34),o=n(14),i=n(21),a={};n(6)(a,n(7)(\"iterator\"),function(){return this}),t.exports=function(t,e,n){t.prototype=r(a,{next:o(1,n)}),i(t,e+\" Iterator\")}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e,n){var r=n(13),o=n(5);t.exports=function(t,e){for(var n,i=o(t),a=r(i),u=a.length,s=0;u>s;)if(i[n=a[s++]]===e)return n}},function(t,e,n){var r=n(15)(\"meta\"),o=n(12),i=n(3),a=n(4).f,u=0,s=Object.isExtensible||function(){return!0},c=!n(11)(function(){return s(Object.preventExtensions({}))}),l=function(t){a(t,r,{value:{i:\"O\"+ ++u,w:{}}})},f=function(t,e){if(!o(t))return\"symbol\"==typeof t?t:(\"string\"==typeof t?\"S\":\"P\")+t;if(!i(t,r)){if(!s(t))return\"F\";if(!e)return\"E\";l(t)}return t[r].i},d=function(t,e){if(!i(t,r)){if(!s(t))return!0;if(!e)return!1;l(t)}return t[r].w},p=function(t){return c&&h.NEED&&s(t)&&!i(t,r)&&l(t),t},h=t.exports={KEY:r,NEED:!1,fastKey:f,getWeak:d,onFreeze:p}},function(t,e,n){var r=n(20),o=n(14),i=n(5),a=n(25),u=n(3),s=n(32),c=Object.getOwnPropertyDescriptor;e.f=n(1)?c:function(t,e){if(t=i(t),e=a(e,!0),s)try{return c(t,e)}catch(n){}if(u(t,e))return o(!r.f.call(t,e),t[e])}},function(t,e,n){var r=n(5),o=n(36).f,i={}.toString,a=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],u=function(t){try{return o(t)}catch(e){return a.slice()}};t.exports.f=function(t){return a&&\"[object Window]\"==i.call(t)?u(t):o(r(t))}},function(t,e,n){var r=n(3),o=n(71),i=n(22)(\"IE_PROTO\"),a=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=o(t),r(t,i)?t[i]:\"function\"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?a:null}},function(t,e,n){var r=n(24),o=n(16);t.exports=function(t){return function(e,n){var i,a,u=String(o(e)),s=r(n),c=u.length;return s<0||s>=c?t?\"\":void 0:(i=u.charCodeAt(s),i<55296||i>56319||s+1===c||(a=u.charCodeAt(s+1))<56320||a>57343?t?u.charAt(s):i:t?u.slice(s,s+2):(i-55296<<10)+(a-56320)+65536)}}},function(t,e,n){var r=n(24),o=Math.max,i=Math.min;t.exports=function(t,e){return t=r(t),t<0?o(t+e,0):i(t,e)}},function(t,e,n){var r=n(24),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},function(t,e,n){var r=n(16);t.exports=function(t){return Object(r(t))}},function(t,e,n){\"use strict\";var r=n(54),o=n(62),i=n(18),a=n(5);t.exports=n(33)(Array,\"Array\",function(t,e){this._t=a(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,o(1)):\"keys\"==e?o(0,n):\"values\"==e?o(0,t[n]):o(0,[n,t[n]])},\"values\"),i.Arguments=i.Array,r(\"keys\"),r(\"values\"),r(\"entries\")},function(t,e,n){var r=n(10);r(r.S+r.F*!n(1),\"Object\",{defineProperties:n(35)})},function(t,e,n){var r=n(10);r(r.S+r.F*!n(1),\"Object\",{defineProperty:n(4).f})},function(t,e){},function(t,e,n){\"use strict\";var r=n(68)(!0);n(33)(String,\"String\",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=r(e,n),this._i+=t.length,{value:t,done:!1})})},function(t,e,n){\"use strict\";var r=n(2),o=n(3),i=n(1),a=n(10),u=n(39),s=n(64).KEY,c=n(11),l=n(23),f=n(21),d=n(15),p=n(7),h=n(27),y=n(26),m=n(63),v=n(57),b=n(60),g=n(9),x=n(5),M=n(25),w=n(14),S=n(34),O=n(66),D=n(65),T=n(4),_=n(13),A=D.f,k=T.f,E=O.f,j=r.Symbol,C=r.JSON,N=C&&C.stringify,L=\"prototype\",P=p(\"_hidden\"),F=p(\"toPrimitive\"),J={}.propertyIsEnumerable,H=l(\"symbol-registry\"),I=l(\"symbols\"),Y=l(\"op-symbols\"),R=Object[L],z=\"function\"==typeof j,U=r.QObject,B=!U||!U[L]||!U[L].findChild,W=i&&c(function(){return 7!=S(k({},\"a\",{get:function(){return k(this,\"a\",{value:7}).a}})).a})?function(t,e,n){var r=A(R,e);r&&delete R[e],k(t,e,n),r&&t!==R&&k(R,e,r)}:k,Z=function(t){var e=I[t]=S(j[L]);return e._k=t,e},G=z&&\"symbol\"==typeof j.iterator?function(t){return\"symbol\"==typeof t}:function(t){return t instanceof j},K=function(t,e,n){return t===R&&K(Y,e,n),g(t),e=M(e,!0),g(n),o(I,e)?(n.enumerable?(o(t,P)&&t[P][e]&&(t[P][e]=!1),n=S(n,{enumerable:w(0,!1)})):(o(t,P)||k(t,P,w(1,{})),t[P][e]=!0),W(t,e,n)):k(t,e,n)},V=function(t,e){g(t);for(var n,r=v(e=x(e)),o=0,i=r.length;i>o;)K(t,n=r[o++],e[n]);return t},q=function(t,e){return void 0===e?S(t):V(S(t),e)},Q=function(t){var e=J.call(this,t=M(t,!0));return!(this===R&&o(I,t)&&!o(Y,t))&&(!(e||!o(this,t)||!o(I,t)||o(this,P)&&this[P][t])||e)},X=function(t,e){if(t=x(t),e=M(e,!0),t!==R||!o(I,e)||o(Y,e)){var n=A(t,e);return!n||!o(I,e)||o(t,P)&&t[P][e]||(n.enumerable=!0),n}},$=function(t){for(var e,n=E(x(t)),r=[],i=0;n.length>i;)o(I,e=n[i++])||e==P||e==s||r.push(e);return r},tt=function(t){for(var e,n=t===R,r=E(n?Y:x(t)),i=[],a=0;r.length>a;)!o(I,e=r[a++])||n&&!o(R,e)||i.push(I[e]);return i};z||(j=function(){if(this instanceof j)throw TypeError(\"Symbol is not a constructor!\");var t=d(arguments.length>0?arguments[0]:void 0),e=function(n){this===R&&e.call(Y,n),o(this,P)&&o(this[P],t)&&(this[P][t]=!1),W(this,t,w(1,n))};return i&&B&&W(R,t,{configurable:!0,set:e}),Z(t)},u(j[L],\"toString\",function(){return this._k}),D.f=X,T.f=K,n(36).f=O.f=$,n(20).f=Q,n(37).f=tt,i&&!n(19)&&u(R,\"propertyIsEnumerable\",Q,!0),h.f=function(t){return Z(p(t))}),a(a.G+a.W+a.F*!z,{Symbol:j});for(var et=\"hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables\".split(\",\"),nt=0;et.length>nt;)p(et[nt++]);for(var et=_(p.store),nt=0;et.length>nt;)y(et[nt++]);a(a.S+a.F*!z,\"Symbol\",{\"for\":function(t){return o(H,t+=\"\")?H[t]:H[t]=j(t)},keyFor:function(t){if(G(t))return m(H,t);throw TypeError(t+\" is not a symbol!\")},useSetter:function(){B=!0},useSimple:function(){B=!1}}),a(a.S+a.F*!z,\"Object\",{create:q,defineProperty:K,defineProperties:V,getOwnPropertyDescriptor:X,getOwnPropertyNames:$,getOwnPropertySymbols:tt}),C&&a(a.S+a.F*(!z||c(function(){var t=j();return\"[null]\"!=N([t])||\"{}\"!=N({a:t})||\"{}\"!=N(Object(t))})),\"JSON\",{stringify:function(t){if(void 0!==t&&!G(t)){for(var e,n,r=[t],o=1;arguments.length>o;)r.push(arguments[o++]);return e=r[1],\"function\"==typeof e&&(n=e),!n&&b(e)||(e=function(t,e){if(n&&(e=n.call(this,t,e)),!G(e))return e}),r[1]=e,N.apply(C,r)}}}),j[L][F]||n(6)(j[L],F,j[L].valueOf),f(j,\"Symbol\"),f(Math,\"Math\",!0),f(r.JSON,\"JSON\",!0)},function(t,e,n){n(26)(\"asyncIterator\")},function(t,e,n){n(26)(\"observable\")},function(t,e,n){n(72);for(var r=n(2),o=n(6),i=n(18),a=n(7)(\"toStringTag\"),u=[\"NodeList\",\"DOMTokenList\",\"MediaList\",\"StyleSheetList\",\"CSSRuleList\"],s=0;s<5;s++){var c=u[s],l=r[c],f=l&&l.prototype;f&&!f[a]&&o(f,a,c),i[c]=i.Array}},function(t,e,n){e=t.exports=n(82)(),e.push([t.id,\"date-input-polyfill{background:#fff;color:#000;text-shadow:none;border:0;padding:0;height:auto;width:auto;line-height:normal;font-family:sans-serif;font-size:14px;position:absolute!important;text-align:center;box-shadow:0 3px 10px 1px rgba(0,0,0,.22);cursor:default;z-index:1;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;overflow:hidden;display:block}date-input-polyfill[data-open=false]{visibility:hidden;z-index:-100!important;top:0}date-input-polyfill[data-open=true]{visibility:visible}date-input-polyfill select,date-input-polyfill table,date-input-polyfill td,date-input-polyfill th{background:#fff;color:#000;text-shadow:none;border:0;padding:0;height:auto;width:auto;line-height:normal;font-family:sans-serif;font-size:14px;box-shadow:none;font-family:Lato,Helvetica,Arial,sans-serif}date-input-polyfill button,date-input-polyfill select{border:0;border-radius:0;border-bottom:1px solid #dadfe1;height:24px;vertical-align:top;-webkit-appearance:none;-moz-appearance:none}date-input-polyfill .monthSelect-wrapper{width:55%;display:inline-block}date-input-polyfill .yearSelect-wrapper{width:25%;display:inline-block}date-input-polyfill select{width:100%}date-input-polyfill select:first-of-type{border-right:1px solid #dadfe1;border-radius:5px 0 0 0;-moz-border-radius:5px 0 0 0;-webkit-border-radius:5px 0 0 0}date-input-polyfill button{width:20%;background:#dadfe1;border-radius:0 5px 0 0;-moz-border-radius:0 5px 0 0;-webkit-border-radius:0 5px 0 0}date-input-polyfill button:hover{background:#eee}date-input-polyfill table{border-collapse:separate!important;border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0 0 5px 5px;overflow:hidden;max-width:280px;width:280px}date-input-polyfill td,date-input-polyfill th{width:32px;padding:4px;text-align:center;box-sizing:content-box}date-input-polyfill td[data-day]{cursor:pointer}date-input-polyfill td[data-day]:hover{background:#dadfe1}date-input-polyfill [data-selected]{font-weight:700;background:#d8eaf6}\",\"\"]);\n},function(t,e){t.exports=function(){var t=[];return t.toString=function(){for(var t=[],e=0;e=0&&g.splice(e,1)}function u(t){var e=document.createElement(\"style\");return e.type=\"text/css\",i(t,e),e}function s(t){var e=document.createElement(\"link\");return e.rel=\"stylesheet\",i(t,e),e}function c(t,e){var n,r,o;if(e.singleton){var i=b++;n=v||(v=u(e)),r=l.bind(null,n,i,!1),o=l.bind(null,n,i,!0)}else t.sourceMap&&\"function\"==typeof URL&&\"function\"==typeof URL.createObjectURL&&\"function\"==typeof URL.revokeObjectURL&&\"function\"==typeof Blob&&\"function\"==typeof btoa?(n=s(e),r=d.bind(null,n),o=function(){a(n),n.href&&URL.revokeObjectURL(n.href)}):(n=u(e),r=f.bind(null,n),o=function(){a(n)});return r(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap)return;r(t=e)}else o()}}function l(t,e,n,r){var o=n?\"\":r.css;if(t.styleSheet)t.styleSheet.cssText=x(e,o);else{var i=document.createTextNode(o),a=t.childNodes;a[e]&&t.removeChild(a[e]),a.length?t.insertBefore(i,a[e]):t.appendChild(i)}}function f(t,e){var n=e.css,r=e.media;if(r&&t.setAttribute(\"media\",r),t.styleSheet)t.styleSheet.cssText=n;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(n))}}function d(t,e){var n=e.css,r=e.sourceMap;r&&(n+=\"\\n/*# sourceMappingURL=data:application/json;base64,\"+btoa(unescape(encodeURIComponent(JSON.stringify(r))))+\" */\");var o=new Blob([n],{type:\"text/css\"}),i=t.href;t.href=URL.createObjectURL(o),i&&URL.revokeObjectURL(i)}var p={},h=function(t){var e;return function(){return\"undefined\"==typeof e&&(e=t.apply(this,arguments)),e}},y=h(function(){return/msie [6-9]\\b/.test(window.navigator.userAgent.toLowerCase())}),m=h(function(){return document.head||document.getElementsByTagName(\"head\")[0]}),v=null,b=0,g=[];t.exports=function(t,e){e=e||{},\"undefined\"==typeof e.singleton&&(e.singleton=y()),\"undefined\"==typeof e.insertAt&&(e.insertAt=\"bottom\");var n=o(t);return r(n,e),function(t){for(var i=[],a=0;a0?o(r(t),9007199254740991):0}},,,function(t,e,n){var r=n(41),o=n(378),i=n(38),a=n(98),u=Object.defineProperty;e.f=r?u:function(t,e,n){if(i(t),e=a(e,!0),i(n),o)try{return u(t,e,n)}catch(r){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},,,,function(t,e,n){var r=n(68);t.exports=function(t){return Object(r(t))}},,,,,function(t,e,n){var r=n(52),o={}.hasOwnProperty;t.exports=Object.hasOwn||function(t,e){return o.call(r(t),e)}},,,,,,,,function(t,e,n){var r=n(133),o=n(187),i=n(52),a=n(45),u=n(193),c=[].push,s=function(t){var e=1==t,n=2==t,s=3==t,f=4==t,l=6==t,p=7==t,h=5==t||l;return function(d,v,y,g){for(var m,b,w=i(d),S=o(w),x=r(v,y,3),E=a(S.length),_=0,k=g||u,T=e?k(d,E):n||p?k(d,0):void 0;E>_;_++)if((h||_ in S)&&(b=x(m=S[_],_,w),t))if(e)T[_]=b;else if(b)switch(t){case 3:return!0;case 5:return m;case 6:return _;case 2:c.call(T,m)}else switch(t){case 4:return!1;case 7:c.call(T,m)}return l?-1:s||f?f:T}};t.exports={forEach:s(0),map:s(1),filter:s(2),some:s(3),every:s(4),find:s(5),findIndex:s(6),filterOut:s(7)}},,function(t,e,n){var r=n(41),o=n(220),i=n(114),a=n(86),u=n(98),c=n(57),s=n(378),f=Object.getOwnPropertyDescriptor;e.f=r?f:function(t,e){if(t=a(t),e=u(e,!0),s)try{return f(t,e)}catch(n){}if(c(t,e))return i(!o.f.call(t,e),t[e])}},function(t,e){t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,n){var r=n(41),o=n(48),i=n(114);t.exports=r?function(t,e,n){return o.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var r=n(30),o=n(69),i=n(57),a=n(280),u=n(281),c=n(76),s=c.get,f=c.enforce,l=String(String).split("String");(t.exports=function(t,e,n,u){var c,s=!!u&&!!u.unsafe,p=!!u&&!!u.enumerable,h=!!u&&!!u.noTargetGet;"function"==typeof n&&("string"!=typeof e||i(n,"name")||o(n,"name",e),(c=f(n)).source||(c.source=l.join("string"==typeof e?e:""))),t!==r?(s?!h&&t[e]&&(p=!0):delete t[e],p?t[e]=n:o(t,e,n)):p?t[e]=n:a(e,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&s(this).source||u(this)}))},,,,,function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(r){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){var r,o,i,a=n(379),u=n(30),c=n(37),s=n(69),f=n(57),l=n(282),p=n(221),h=n(189),d="Object already initialized",v=u.WeakMap;if(a||l.state){var y=l.state||(l.state=new v),g=y.get,m=y.has,b=y.set;r=function(t,e){if(m.call(y,t))throw new TypeError(d);return e.facade=t,b.call(y,t,e),e},o=function(t){return g.call(y,t)||{}},i=function(t){return m.call(y,t)}}else{var w=p("state");h[w]=!0,r=function(t,e){if(f(t,w))throw new TypeError(d);return e.facade=t,s(t,w,e),e},o=function(t){return f(t,w)?t[w]:{}},i=function(t){return f(t,w)}}t.exports={set:r,get:o,has:i,enforce:function(t){return i(t)?o(t):r(t,{})},getterFor:function(t){return function(e){var n;if(!c(e)||(n=o(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return n}}}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t}},,,,,function(t,e,n){var r=n(284),o=n(57),i=n(385),a=n(48).f;t.exports=function(t){var e=r.Symbol||(r.Symbol={});o(e,t)||a(e,t,{value:i.f(t)})}},,,,function(t,e,n){var r=n(187),o=n(68);t.exports=function(t){return r(o(t))}},function(t,e,n){var r=n(284),o=n(30),i=function(t){return"function"==typeof t?t:void 0};t.exports=function(t,e){return arguments.length<2?i(r[t])||i(o[t]):r[t]&&r[t][e]||o[t]&&o[t][e]}},function(t,e,n){var r=n(68),o=/"/g;t.exports=function(t,e,n,i){var a=String(r(t)),u="<"+e;return""!==n&&(u+=" "+n+'="'+String(i).replace(o,""")+'"'),u+">"+a+""}},function(t,e,n){var r=n(20);t.exports=function(t){return r((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}))}},,,function(t,e){t.exports=!1},function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},function(t,e,n){var r=n(57),o=n(52),i=n(221),a=n(289),u=i("IE_PROTO"),c=Object.prototype;t.exports=a?Object.getPrototypeOf:function(t){return t=o(t),r(t,u)?t[u]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?c:null}},,,,function(t,e,n){var r=n(37);t.exports=function(t,e){if(!r(t))return t;var n,o;if(e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;if("function"==typeof(n=t.valueOf)&&!r(o=n.call(t)))return o;if(!e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},function(t,e,n){var r=n(48).f,o=n(57),i=n(42)("toStringTag");t.exports=function(t,e,n){t&&!o(t=n?t:t.prototype,i)&&r(t,i,{configurable:!0,value:e})}},,,,,,,function(t,e,n){var r,o=n(38),i=n(288),a=n(285),u=n(189),c=n(383),s=n(279),f=n(221),l=f("IE_PROTO"),p=function(){},h=function(t){return"
\ No newline at end of file diff --git a/connectors/captcha.d875a1005df5117243c1.css b/connectors/captcha.d875a1005df5117243c1.css new file mode 100644 index 00000000..ad90ca27 --- /dev/null +++ b/connectors/captcha.d875a1005df5117243c1.css @@ -0,0 +1,3 @@ +body{min-width:0px !important;padding:0;margin:0;background:transparent} + +/*# sourceMappingURL=captcha.d875a1005df5117243c1.css.map*/ \ No newline at end of file diff --git a/connectors/captcha.d875a1005df5117243c1.css.map b/connectors/captcha.d875a1005df5117243c1.css.map new file mode 100644 index 00000000..134b9caa --- /dev/null +++ b/connectors/captcha.d875a1005df5117243c1.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/connectors/captcha.scss"],"names":[],"mappings":"AAAA,KACI,yBACA,UACA,SACA,uB","file":"connectors/captcha.d875a1005df5117243c1.css","sourcesContent":["body {\n min-width: 0px !important;\n padding: 0;\n margin: 0;\n background: transparent;\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/connectors/captcha.d875a1005df5117243c1.js b/connectors/captcha.d875a1005df5117243c1.js new file mode 100644 index 00000000..f78fe441 --- /dev/null +++ b/connectors/captcha.d875a1005df5117243c1.js @@ -0,0 +1,2 @@ +!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1169)}({1169:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(128);n(1170),document.addEventListener("DOMContentLoaded",(function(){var e;i(),window.addEventListener("message",(function(e){e.origin&&""!==e.origin&&e.origin===a&&"start"===e.data&&i()}),!1),e="ready",parent.postMessage("info|"+e,o)})),window.captchaSuccess=function(e){!function(e){if(c)return;parent.postMessage("success|"+e,o),c=!0}(e)},window.captchaError=function(){u("An error occurred with the captcha. Try again.")};var o=null,a=null,c=!1;function i(){c=!1,r.getQsParam("data")?(o=r.getQsParam("parent"))?(o=decodeURIComponent(o),a=new URL(o).origin,hcaptcha.render("captcha",{sitekey:"bc38c8a2-5311-4e8c-9dfc-49e99f6df417",callback:"captchaSuccess","error-callback":"captchaError"})):u("No parent."):u("No data.")}function u(e){parent.postMessage("error|"+e,o)}},1170:function(e,t,n){"use strict";n.r(t)},128:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getQsParam=void 0,t.getQsParam=function(e){var t=window.location.href;e=e.replace(/[\[\]]/g,"\\$&");var n=new RegExp("[?&]"+e+"(=([^&#]*)|&|#|$)").exec(t);return n?n[2]?decodeURIComponent(n[2].replace(/\+/g," ")):"":null}}}); +//# sourceMappingURL=captcha.d875a1005df5117243c1.js.map \ No newline at end of file diff --git a/connectors/captcha.d875a1005df5117243c1.js.map b/connectors/captcha.d875a1005df5117243c1.js.map new file mode 100644 index 00000000..090c2367 --- /dev/null +++ b/connectors/captcha.d875a1005df5117243c1.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/connectors/captcha.ts","webpack:///./src/connectors/captcha.scss?77dc","webpack:///./src/connectors/common.ts"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","document","addEventListener","message","start","window","event","origin","parentOrigin","data","parent","postMessage","parentUrl","captchaSuccess","response","sentSuccess","success","captchaError","error","getQsParam","decodeURIComponent","URL","hcaptcha","render","sitekey","callback","url","location","href","replace","results","RegExp","exec"],"mappings":"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","file":"connectors/captcha.d875a1005df5117243c1.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1169);\n","import { getQsParam } from './common';\n\ndeclare var hcaptcha: any;\n\n// tslint:disable-next-line\nrequire('./captcha.scss');\n\ndocument.addEventListener('DOMContentLoaded', () => {\n init();\n});\n\n(window as any).captchaSuccess = captchaSuccess;\n(window as any).captchaError = captchaError;\n\nlet parentUrl: string = null;\nlet parentOrigin: string = null;\nlet sentSuccess = false;\n\nfunction init() {\n start();\n onMessage();\n info('ready');\n}\n\nfunction start() {\n sentSuccess = false;\n\n const data = getQsParam('data');\n if (!data) {\n error('No data.');\n return;\n }\n\n parentUrl = getQsParam('parent');\n if (!parentUrl) {\n error('No parent.');\n return;\n } else {\n parentUrl = decodeURIComponent(parentUrl);\n parentOrigin = new URL(parentUrl).origin;\n }\n\n hcaptcha.render('captcha', {\n sitekey: 'bc38c8a2-5311-4e8c-9dfc-49e99f6df417',\n callback: 'captchaSuccess',\n 'error-callback': 'captchaError',\n });\n}\n\nfunction captchaSuccess(response: string) {\n success(response);\n}\n\nfunction captchaError() {\n error('An error occurred with the captcha. Try again.');\n}\n\nfunction onMessage() {\n window.addEventListener('message', event => {\n if (!event.origin || event.origin === '' || event.origin !== parentOrigin) {\n return;\n }\n\n if (event.data === 'start') {\n start();\n }\n }, false);\n}\n\nfunction error(message: string) {\n parent.postMessage('error|' + message, parentUrl);\n}\n\nfunction success(data: string) {\n if (sentSuccess) {\n return;\n }\n parent.postMessage('success|' + data, parentUrl);\n sentSuccess = true;\n}\n\nfunction info(message: string) {\n parent.postMessage('info|' + message, parentUrl);\n}\n\n","// extracted by mini-css-extract-plugin\nexport {};","export function getQsParam(name: string) {\n const url = window.location.href;\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\n const regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)');\n const results = regex.exec(url);\n\n if (!results) {\n return null;\n }\n if (!results[2]) {\n return '';\n }\n\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/connectors/duo.6edbb1cdf4d2e063961a.css.map b/connectors/duo.6edbb1cdf4d2e063961a.css.map deleted file mode 100644 index 636f8ec4..00000000 --- a/connectors/duo.6edbb1cdf4d2e063961a.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./src/connectors/duo.scss"],"names":[],"mappings":"AAAA,UAAU,SAAS,UAAU,KAAK,4DAA4D,OAAO,cAAc,WAAW,aAAa,YAAY,SAAS","file":"connectors/duo.6edbb1cdf4d2e063961a.css","sourcesContent":["html,body{margin:0;padding:0}body{background:#efeff4 url(../images/loading.svg) 0 0 no-repeat}iframe{display:block;width:100%;height:400px;border:none;margin:0;padding:0}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/connectors/duo.6edbb1cdf4d2e063961a.js b/connectors/duo.6edbb1cdf4d2e063961a.js deleted file mode 100644 index b29c60ed..00000000 --- a/connectors/duo.6edbb1cdf4d2e063961a.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1098)}({1098:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(465),r=n(196);n(1099),document.addEventListener("DOMContentLoaded",(function(e){var t=document.createElement("iframe");t.setAttribute("id","duo_iframe"),a(),document.body.appendChild(t);var n=r.getQsParam("host"),i=r.getQsParam("request");function a(){t.style.height=window.innerHeight+"px"}o.init({iframe:"duo_iframe",host:n,sig_request:i,submit_callback:function(e){!function(e){try{window.invokeCSharpAction(e)}catch(t){}}(e.elements.sig_response.value)}}),window.onresize=a}))},1099:function(e,t,n){},196:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getQsParam=function(e){var t=window.location.href;e=e.replace(/[\[\]]/g,"\\$&");var n=new RegExp("[?&]"+e+"(=([^&#]*)|&|#|$)").exec(t);return n?n[2]?decodeURIComponent(n[2].replace(/\+/g," ")):"":null}},465:function(e,t,n){var o,r,i;r=[],void 0===(i="function"==typeof(o=function(){var e,t,n,o,r,i,a,u,s=/^(?:AUTH|ENROLL)+\|[A-Za-z0-9\+\/=]+\|[A-Za-z0-9\+\/=]+$/,d=/^ERR\|[\w\s\.\(\)]+$/,c=/^DUO_OPEN_WINDOW\|/,f=["duo.com","duosecurity.com","duomobile.s3-us-west-1.amazonaws.com"];function m(){e="duo_iframe",t="",n="sig_response",o=void 0,r=void 0,i=void 0,a=void 0,u=void 0}function l(e,t){throw new Error("Duo Web SDK error: "+e+(t?"\nSee "+t+" for more information":""))}function p(e,t){return"dataset"in e?e.dataset[t]:e.getAttribute("data-"+t.replace(/([a-z])([A-Z])/,"$1-$2").toLowerCase())}function h(e,t,n,o){"addEventListener"in window?e.addEventListener(t,o,!1):e.attachEvent(n,o)}function g(e,t,n,o){"removeEventListener"in window?e.removeEventListener(t,o,!1):e.detachEvent(n,o)}function w(e){h(document,"DOMContentLoaded","onreadystatechange",e)}function v(e){g(document,"DOMContentLoaded","onreadystatechange",e)}function b(e){if(e){0===e.indexOf("ERR|")&&l(e.split("|")[1]),-1!==e.indexOf(":")&&2===e.split(":").length||l("Duo was given a bad token. This might indicate a configuration problem with one of Duo's client libraries.","https://www.duosecurity.com/docs/duoweb#first-steps");var t=e.split(":");return r=t[0],i=t[1],{sigRequest:e,duoSig:t[0],appSig:t[1]}}}function _(){if(!(a=document.getElementById(e)))throw new Error('This page does not contain an iframe for Duo to use.Add an element like to this page. See https://www.duosecurity.com/docs/duoweb#3.-show-the-iframe for more information.');O(),v(_)}function y(e){return Boolean(e.origin==="https://"+o&&"string"==typeof e.data&&(e.data.match(s)||e.data.match(d)||e.data.match(c)))}function E(e){if(y(e))if(e.data.match(c)){var t=e.data.substring("DUO_OPEN_WINDOW|".length);(function(e){if(!e)return!1;var t=document.createElement("a");if(t.href=e,"duotrustedendpoints:"===t.protocol)return!0;if("https:"!==t.protocol)return!1;for(var n=0;n {\n const frameElement = document.createElement('iframe');\n frameElement.setAttribute('id', 'duo_iframe');\n setFrameHeight();\n document.body.appendChild(frameElement);\n\n const hostParam = getQsParam('host');\n const requestParam = getQsParam('request');\n DuoWebSDK.init({\n iframe: 'duo_iframe',\n host: hostParam,\n sig_request: requestParam,\n submit_callback: (form: any) => {\n invokeCSCode(form.elements.sig_response.value);\n },\n });\n\n window.onresize = setFrameHeight;\n\n function setFrameHeight() {\n frameElement.style.height = window.innerHeight + 'px';\n }\n});\n\nfunction invokeCSCode(data: string) {\n try {\n (window as any).invokeCSharpAction(data);\n } catch (err) { }\n}\n","export function getQsParam(name: string) {\n const url = window.location.href;\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\n const regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)');\n const results = regex.exec(url);\n\n if (!results) {\n return null;\n }\n if (!results[2]) {\n return '';\n }\n\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n}\n","/**\n * Duo Web SDK v2\n * Copyright 2017, Duo Security\n */\n\n(function (root, factory) {\n /*eslint-disable */\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define([], factory);\n /*eslint-enable */\n } else if (typeof module === 'object' && module.exports) {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory();\n } else {\n // Browser globals (root is window)\n var Duo = factory();\n // If the Javascript was loaded via a script tag, attempt to autoload\n // the frame.\n Duo._onReady(Duo.init);\n\n // Attach Duo to the `window` object\n root.Duo = Duo;\n }\n}(this, function() {\n var DUO_MESSAGE_FORMAT = /^(?:AUTH|ENROLL)+\\|[A-Za-z0-9\\+\\/=]+\\|[A-Za-z0-9\\+\\/=]+$/;\n var DUO_ERROR_FORMAT = /^ERR\\|[\\w\\s\\.\\(\\)]+$/;\n var DUO_OPEN_WINDOW_FORMAT = /^DUO_OPEN_WINDOW\\|/;\n var VALID_OPEN_WINDOW_DOMAINS = [\n 'duo.com',\n 'duosecurity.com',\n 'duomobile.s3-us-west-1.amazonaws.com'\n ];\n\n var iframeId,\n postAction,\n postArgument,\n host,\n sigRequest,\n duoSig,\n appSig,\n iframe,\n submitCallback;\n\n // We use this function instead of setting initial values in the var\n // declarations to make sure the initial values and subsequent\n // re-initializations are always the same.\n initializeStatefulVariables();\n\n /**\n * Set local variables to whatever they should be before you call init().\n */\n function initializeStatefulVariables() {\n iframeId = 'duo_iframe';\n postAction = '';\n postArgument = 'sig_response';\n host = undefined;\n sigRequest = undefined;\n duoSig = undefined;\n appSig = undefined;\n iframe = undefined;\n submitCallback = undefined;\n }\n\n function throwError(message, url) {\n throw new Error(\n 'Duo Web SDK error: ' + message +\n (url ? ('\\n' + 'See ' + url + ' for more information') : '')\n );\n }\n\n function hyphenize(str) {\n return str.replace(/([a-z])([A-Z])/, '$1-$2').toLowerCase();\n }\n\n // cross-browser data attributes\n function getDataAttribute(element, name) {\n if ('dataset' in element) {\n return element.dataset[name];\n } else {\n return element.getAttribute('data-' + hyphenize(name));\n }\n }\n\n // cross-browser event binding/unbinding\n function on(context, event, fallbackEvent, callback) {\n if ('addEventListener' in window) {\n context.addEventListener(event, callback, false);\n } else {\n context.attachEvent(fallbackEvent, callback);\n }\n }\n\n function off(context, event, fallbackEvent, callback) {\n if ('removeEventListener' in window) {\n context.removeEventListener(event, callback, false);\n } else {\n context.detachEvent(fallbackEvent, callback);\n }\n }\n\n function onReady(callback) {\n on(document, 'DOMContentLoaded', 'onreadystatechange', callback);\n }\n\n function offReady(callback) {\n off(document, 'DOMContentLoaded', 'onreadystatechange', callback);\n }\n\n function onMessage(callback) {\n on(window, 'message', 'onmessage', callback);\n }\n\n function offMessage(callback) {\n off(window, 'message', 'onmessage', callback);\n }\n\n /**\n * Parse the sig_request parameter, throwing errors if the token contains\n * a server error or if the token is invalid.\n *\n * @param {String} sig Request token\n */\n function parseSigRequest(sig) {\n if (!sig) {\n // nothing to do\n return;\n }\n\n // see if the token contains an error, throwing it if it does\n if (sig.indexOf('ERR|') === 0) {\n throwError(sig.split('|')[1]);\n }\n\n // validate the token\n if (sig.indexOf(':') === -1 || sig.split(':').length !== 2) {\n throwError(\n 'Duo was given a bad token. This might indicate a configuration ' +\n 'problem with one of Duo\\'s client libraries.',\n 'https://www.duosecurity.com/docs/duoweb#first-steps'\n );\n }\n\n var sigParts = sig.split(':');\n\n // hang on to the token, and the parsed duo and app sigs\n sigRequest = sig;\n duoSig = sigParts[0];\n appSig = sigParts[1];\n\n return {\n sigRequest: sig,\n duoSig: sigParts[0],\n appSig: sigParts[1]\n };\n }\n\n /**\n * This function is set up to run when the DOM is ready, if the iframe was\n * not available during `init`.\n */\n function onDOMReady() {\n iframe = document.getElementById(iframeId);\n\n if (!iframe) {\n throw new Error(\n 'This page does not contain an iframe for Duo to use.' +\n 'Add an element like ' +\n 'to this page. ' +\n 'See https://www.duosecurity.com/docs/duoweb#3.-show-the-iframe ' +\n 'for more information.'\n );\n }\n\n // we've got an iframe, away we go!\n ready();\n\n // always clean up after yourself\n offReady(onDOMReady);\n }\n\n /**\n * Validate that a MessageEvent came from the Duo service, and that it\n * is a properly formatted payload.\n *\n * The Google Chrome sign-in page injects some JS into pages that also\n * make use of postMessage, so we need to do additional validation above\n * and beyond the origin.\n *\n * @param {MessageEvent} event Message received via postMessage\n */\n function isDuoMessage(event) {\n return Boolean(\n event.origin === ('https://' + host) &&\n typeof event.data === 'string' &&\n (\n event.data.match(DUO_MESSAGE_FORMAT) ||\n event.data.match(DUO_ERROR_FORMAT) ||\n event.data.match(DUO_OPEN_WINDOW_FORMAT)\n )\n );\n }\n\n /**\n * Validate the request token and prepare for the iframe to become ready.\n *\n * All options below can be passed into an options hash to `Duo.init`, or\n * specified on the iframe using `data-` attributes.\n *\n * Options specified using the options hash will take precedence over\n * `data-` attributes.\n *\n * Example using options hash:\n * ```javascript\n * Duo.init({\n * iframe: \"some_other_id\",\n * host: \"api-main.duo.test\",\n * sig_request: \"...\",\n * post_action: \"/auth\",\n * post_argument: \"resp\"\n * });\n * ```\n *\n * Example using `data-` attributes:\n * ```\n * \n * ```\n *\n * @param {Object} options\n * @param {String} options.iframe The iframe, or id of an iframe to set up\n * @param {String} options.host Hostname\n * @param {String} options.sig_request Request token\n * @param {String} [options.post_action=''] URL to POST back to after successful auth\n * @param {String} [options.post_argument='sig_response'] Parameter name to use for response token\n * @param {Function} [options.submit_callback] If provided, duo will not submit the form instead execute\n * the callback function with reference to the \"duo_form\" form object\n * submit_callback can be used to prevent the webpage from reloading.\n */\n function init(options) {\n // If init() is called more than once we have to reset all the local\n // variables to ensure init() will work the same way every time. This\n // helps people making single page applications. SPAs may periodically\n // remove the iframe and add a new one that has to be initialized.\n initializeStatefulVariables();\n\n if (options) {\n if (options.host) {\n host = options.host;\n }\n\n if (options.sig_request) {\n parseSigRequest(options.sig_request);\n }\n\n if (options.post_action) {\n postAction = options.post_action;\n }\n\n if (options.post_argument) {\n postArgument = options.post_argument;\n }\n\n if (options.iframe) {\n if (options.iframe.tagName) {\n iframe = options.iframe;\n } else if (typeof options.iframe === 'string') {\n iframeId = options.iframe;\n }\n }\n\n if (typeof options.submit_callback === 'function') {\n submitCallback = options.submit_callback;\n }\n }\n\n // if we were given an iframe, no need to wait for the rest of the DOM\n if (iframe) {\n ready();\n } else {\n // try to find the iframe in the DOM\n iframe = document.getElementById(iframeId);\n\n // iframe is in the DOM, away we go!\n if (iframe) {\n ready();\n } else {\n // wait until the DOM is ready, then try again\n onReady(onDOMReady);\n }\n }\n\n // always clean up after yourself!\n offReady(init);\n }\n\n /**\n * This function is called when a message was received from another domain\n * using the `postMessage` API. Check that the event came from the Duo\n * service domain, and that the message is a properly formatted payload,\n * then perform the post back to the primary service.\n *\n * @param event Event object (contains origin and data)\n */\n function onReceivedMessage(event) {\n if (isDuoMessage(event)) {\n if (event.data.match(DUO_OPEN_WINDOW_FORMAT)) {\n var url = event.data.substring(\"DUO_OPEN_WINDOW|\".length);\n if (isValidUrlToOpen(url)) {\n // Open the URL that comes after the DUO_WINDOW_OPEN token.\n window.open(url, \"_self\");\n }\n }\n else {\n // the event came from duo, do the post back\n doPostBack(event.data);\n\n // always clean up after yourself!\n offMessage(onReceivedMessage);\n }\n }\n }\n\n /**\n * Validate that this passed in URL is one that we will actually allow to\n * be opened.\n * @param url String URL that the message poster wants to open\n * @returns {boolean} true if we allow this url to be opened in the window\n */\n function isValidUrlToOpen(url) {\n if (!url) {\n return false;\n }\n\n var parser = document.createElement('a');\n parser.href = url;\n\n if (parser.protocol === \"duotrustedendpoints:\") {\n return true;\n } else if (parser.protocol !== \"https:\") {\n return false;\n }\n\n for (var i = 0; i < VALID_OPEN_WINDOW_DOMAINS.length; i++) {\n if (parser.hostname.endsWith(\".\" + VALID_OPEN_WINDOW_DOMAINS[i]) ||\n parser.hostname === VALID_OPEN_WINDOW_DOMAINS[i]) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Point the iframe at Duo, then wait for it to postMessage back to us.\n */\n function ready() {\n if (!host) {\n host = getDataAttribute(iframe, 'host');\n\n if (!host) {\n throwError(\n 'No API hostname is given for Duo to use. Be sure to pass ' +\n 'a `host` parameter to Duo.init, or through the `data-host` ' +\n 'attribute on the iframe element.',\n 'https://www.duosecurity.com/docs/duoweb#3.-show-the-iframe'\n );\n }\n }\n\n if (!duoSig || !appSig) {\n parseSigRequest(getDataAttribute(iframe, 'sigRequest'));\n\n if (!duoSig || !appSig) {\n throwError(\n 'No valid signed request is given. Be sure to give the ' +\n '`sig_request` parameter to Duo.init, or use the ' +\n '`data-sig-request` attribute on the iframe element.',\n 'https://www.duosecurity.com/docs/duoweb#3.-show-the-iframe'\n );\n }\n }\n\n // if postAction/Argument are defaults, see if they are specified\n // as data attributes on the iframe\n if (postAction === '') {\n postAction = getDataAttribute(iframe, 'postAction') || postAction;\n }\n\n if (postArgument === 'sig_response') {\n postArgument = getDataAttribute(iframe, 'postArgument') || postArgument;\n }\n\n // point the iframe at Duo\n iframe.src = [\n 'https://', host, '/frame/web/v1/auth?tx=', duoSig,\n '&parent=', encodeURIComponent(document.location.href),\n '&v=2.7'\n ].join('');\n\n // listen for the 'message' event\n onMessage(onReceivedMessage);\n }\n\n /**\n * We received a postMessage from Duo. POST back to the primary service\n * with the response token, and any additional user-supplied parameters\n * given in form#duo_form.\n */\n function doPostBack(response) {\n // create a hidden input to contain the response token\n var input = document.createElement('input');\n input.type = 'hidden';\n input.name = postArgument;\n input.value = response + ':' + appSig;\n\n // user may supply their own form with additional inputs\n var form = document.getElementById('duo_form');\n\n // if the form doesn't exist, create one\n if (!form) {\n form = document.createElement('form');\n\n // insert the new form after the iframe\n iframe.parentElement.insertBefore(form, iframe.nextSibling);\n }\n\n // make sure we are actually posting to the right place\n form.method = 'POST';\n form.action = postAction;\n\n // add the response token input to the form\n form.appendChild(input);\n\n // away we go!\n if (typeof submitCallback === \"function\") {\n submitCallback.call(null, form);\n } else {\n form.submit();\n }\n }\n\n return {\n init: init,\n _onReady: onReady,\n _parseSigRequest: parseSigRequest,\n _isDuoMessage: isDuoMessage,\n _doPostBack: doPostBack\n };\n}));\n"],"sourceRoot":""} \ No newline at end of file diff --git a/connectors/duo.6edbb1cdf4d2e063961a.css b/connectors/duo.d875a1005df5117243c1.css similarity index 75% rename from connectors/duo.6edbb1cdf4d2e063961a.css rename to connectors/duo.d875a1005df5117243c1.css index 10ab0aab..13c5dcb4 100644 --- a/connectors/duo.6edbb1cdf4d2e063961a.css +++ b/connectors/duo.d875a1005df5117243c1.css @@ -1,4 +1,3 @@ html,body{margin:0;padding:0}body{background:#efeff4 url(../images/loading.svg) 0 0 no-repeat}iframe{display:block;width:100%;height:400px;border:none;margin:0;padding:0} - -/*# sourceMappingURL=duo.6edbb1cdf4d2e063961a.css.map*/ \ No newline at end of file +/*# sourceMappingURL=duo.d875a1005df5117243c1.css.map*/ \ No newline at end of file diff --git a/connectors/duo.d875a1005df5117243c1.css.map b/connectors/duo.d875a1005df5117243c1.css.map new file mode 100644 index 00000000..8c6f6d0e --- /dev/null +++ b/connectors/duo.d875a1005df5117243c1.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/connectors/duo.scss"],"names":[],"mappings":"AAAA,UACI,SACA,UAGJ,KACI,yEAGJ,OACI,cACA,WACA,aACA,YACA,M","file":"connectors/duo.d875a1005df5117243c1.css","sourcesContent":["html, body {\n margin: 0;\n padding: 0;\n}\n\nbody {\n background: #efeff4 url('../images/loading.svg') 0 0 no-repeat;\n}\n\niframe {\n display: block;\n width: 100%;\n height: 400px;\n border: none;\n margin: 0;\n padding: 0;\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/connectors/duo.d875a1005df5117243c1.js b/connectors/duo.d875a1005df5117243c1.js new file mode 100644 index 00000000..d3b7bd69 --- /dev/null +++ b/connectors/duo.d875a1005df5117243c1.js @@ -0,0 +1,2 @@ +!function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1165)}({1165:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(311),r=n(128);n(1166),document.addEventListener("DOMContentLoaded",(function(e){var t=document.createElement("iframe");t.setAttribute("id","duo_iframe"),a(),document.body.appendChild(t);var n=r.getQsParam("host"),i=r.getQsParam("request");function a(){t.style.height=window.innerHeight+"px"}o.init({iframe:"duo_iframe",host:n,sig_request:i,submit_callback:function(e){!function(e){try{window.invokeCSharpAction(e)}catch(t){}}(e.elements.sig_response.value)}}),window.onresize=a}))},1166:function(e,t,n){"use strict";n.r(t)},128:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getQsParam=void 0,t.getQsParam=function(e){var t=window.location.href;e=e.replace(/[\[\]]/g,"\\$&");var n=new RegExp("[?&]"+e+"(=([^&#]*)|&|#|$)").exec(t);return n?n[2]?decodeURIComponent(n[2].replace(/\+/g," ")):"":null}},311:function(e,t,n){var o,r,i;r=[],void 0===(i="function"==typeof(o=function(){var e,t,n,o,r,i,a,u=/^(?:AUTH|ENROLL)+\|[A-Za-z0-9\+\/=]+\|[A-Za-z0-9\+\/=]+$/,s=/^ERR\|[\w\s\.\(\)]+$/,f=/^DUO_OPEN_WINDOW\|/,c=["duo.com","duosecurity.com","duomobile.s3-us-west-1.amazonaws.com"];function d(){e="",t="sig_response",n=void 0,o=void 0,r=void 0,i=void 0,a=void 0}function m(e,t){var n=t||"https://www.duosecurity.com/docs/duoweb#3.-show-the-iframe";throw new Error("Duo Web SDK error: "+e+(n?"\nSee "+n+" for more information":""))}function l(e){return e.replace(/([a-z])([A-Z])/,"$1-$2").toLowerCase()}function p(e,t){return"dataset"in e?e.dataset[t]:e.getAttribute("data-"+l(t))}function g(e,t,n,o){"addEventListener"in window?e.addEventListener(t,o,!1):e.attachEvent(n,o)}function h(e,t,n,o){"removeEventListener"in window?e.removeEventListener(t,o,!1):e.detachEvent(n,o)}function v(e){g(document,"DOMContentLoaded","onreadystatechange",e)}function b(e){h(document,"DOMContentLoaded","onreadystatechange",e)}function _(e){g(window,"message","onmessage",e)}function w(e){h(window,"message","onmessage",e)}function y(e){if(e){0===e.indexOf("ERR|")&&m(e.split("|")[1]),-1!==e.indexOf(":")&&2===e.split(":").length||m("Duo was given a bad token. This might indicate a configuration problem with one of Duo's client libraries.");var t=e.split(":");return o=t[0],r=t[1],{sigRequest:e,duoSig:t[0],appSig:t[1]}}}function E(e){return Boolean(e.origin==="https://"+n&&"string"==typeof e.data&&(e.data.match(u)||e.data.match(s)||e.data.match(f)))}function O(o){d(),o&&(o.host&&(n=o.host),o.sig_request&&y(o.sig_request),o.post_action&&(e=o.post_action),o.post_argument&&(t=o.post_argument),"function"==typeof o.submit_callback&&(a=o.submit_callback));var r=C(o);r?q(r,o.iframeAttributes||{}):j(o),b(O)}function C(e){var t;return e.iframe&&e.iframeContainer?m("Passing both `iframe` and `iframeContainer` arguments at the same time is not allowed."):e.iframe?A(t=D(e.iframe)):e.iframeContainer?x(t=D(e.iframeContainer)):t=document.getElementById("duo_iframe"),t}function D(e){return e.tagName?e:"string"==typeof e?document.getElementById(e):null}function P(e){return e&&e.tagName&&"iframe"===e.tagName.toLowerCase()}function A(e){e&&!P(e)&&m("`iframe` only accepts an iframe element or the id of an iframe. To use a non-iframe element, use the `iframeContainer` argument.")}function x(e){e&&P(e)&&m("`iframeContainer` only accepts a non-iframe element or the id of a non-iframe. To use a non-iframe element, use the `iframeContainer` argument on Duo.init().")}function S(){return["https://",n,"/frame/web/v1/auth?tx=",o,"&parent=",encodeURIComponent(document.location.href),"&v=2.8"].join("")}function L(e){if(E(e))if(e.data.match(f)){var t=e.data.substring("DUO_OPEN_WINDOW|".length);R(t)&&window.open(t,"_self")}else M(e.data),w(L)}function R(e){if(!e)return!1;var t=document.createElement("a");if(t.href=e,"duotrustedendpoints:"===t.protocol)return!0;if("https:"!==t.protocol)return!1;for(var n=0;n to this page.'),q(n,e.iframeAttributes||{}),b(t)};v(t)}function q(a,u){if(n||(n=p(a,"host"))||m("No API hostname is given for Duo to use. Be sure to pass a `host` parameter to Duo.init, or through the `data-host` attribute on the iframe element."),o&&r||(y(p(a,"sigRequest")),o&&r||m("No valid signed request is given. Be sure to give the `sig_request` parameter to Duo.init, or use the `data-sig-request` attribute on the iframe element.")),""===e&&(e=p(a,"postAction")||e),"sig_response"===t&&(t=p(a,"postArgument")||t),P(a))(i=a).src=S();else{for(;a.firstChild;)a.removeChild(a.firstChild);for(var s in i=document.createElement("iframe"),u.src=S(),u)i.setAttribute(s,u[s]);a.appendChild(i)}_(L)}function M(n){var o=document.createElement("input");o.type="hidden",o.name=t,o.value=n+":"+r;var u=document.getElementById("duo_form");u||(u=document.createElement("form"),i.parentElement.insertBefore(u,i.nextSibling)),u.method="POST",u.action=e,u.appendChild(o),"function"==typeof a?a.call(null,u):u.submit()}return d(),{init:O,_onReady:v,_parseSigRequest:y,_isDuoMessage:E,_doPostBack:M}})?o.apply(t,r):o)||(e.exports=i)}}); +//# sourceMappingURL=duo.d875a1005df5117243c1.js.map \ No newline at end of file diff --git a/connectors/duo.d875a1005df5117243c1.js.map b/connectors/duo.d875a1005df5117243c1.js.map new file mode 100644 index 00000000..4f48594d --- /dev/null +++ b/connectors/duo.d875a1005df5117243c1.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/connectors/duo.ts","webpack:///./src/connectors/duo.scss?3558","webpack:///./src/connectors/common.ts","webpack:///./node_modules/duo_web_sdk/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","document","addEventListener","event","frameElement","createElement","setAttribute","setFrameHeight","body","appendChild","hostParam","getQsParam","requestParam","style","height","window","innerHeight","DuoWebSDK","init","iframe","host","sig_request","submit_callback","form","data","invokeCSharpAction","err","invokeCSCode","elements","sig_response","onresize","url","location","href","replace","results","RegExp","exec","decodeURIComponent","postAction","postArgument","duoSig","appSig","submitCallback","DUO_MESSAGE_FORMAT","DUO_ERROR_FORMAT","DUO_OPEN_WINDOW_FORMAT","VALID_OPEN_WINDOW_DOMAINS","initializeStatefulVariables","undefined","throwError","message","givenUrl","Error","hyphenize","str","toLowerCase","getDataAttribute","element","dataset","getAttribute","on","context","fallbackEvent","callback","attachEvent","off","removeEventListener","detachEvent","onReady","offReady","onMessage","offMessage","parseSigRequest","sig","indexOf","split","length","sigParts","sigRequest","isDuoMessage","Boolean","origin","match","options","post_action","post_argument","promptElement","getPromptElement","ready","iframeAttributes","asyncReady","result","iframeContainer","validateIframe","getUserDefinedElement","validateIframeContainer","getElementById","tagName","isIframe","generateIframeSrc","encodeURIComponent","join","onReceivedMessage","substring","isValidUrlToOpen","open","doPostBack","parser","protocol","hostname","endsWith","src","firstChild","removeChild","response","input","type","parentElement","insertBefore","nextSibling","method","action","submit","_onReady","_parseSigRequest","_isDuoMessage","_doPostBack"],"mappings":"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","file":"connectors/duo.d875a1005df5117243c1.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1165);\n","import * as DuoWebSDK from 'duo_web_sdk';\nimport { getQsParam } from './common';\n\n// tslint:disable-next-line\nrequire('./duo.scss');\n\ndocument.addEventListener('DOMContentLoaded', event => {\n const frameElement = document.createElement('iframe');\n frameElement.setAttribute('id', 'duo_iframe');\n setFrameHeight();\n document.body.appendChild(frameElement);\n\n const hostParam = getQsParam('host');\n const requestParam = getQsParam('request');\n DuoWebSDK.init({\n iframe: 'duo_iframe',\n host: hostParam,\n sig_request: requestParam,\n submit_callback: (form: any) => {\n invokeCSCode(form.elements.sig_response.value);\n },\n });\n\n window.onresize = setFrameHeight;\n\n function setFrameHeight() {\n frameElement.style.height = window.innerHeight + 'px';\n }\n});\n\nfunction invokeCSCode(data: string) {\n try {\n (window as any).invokeCSharpAction(data);\n } catch (err) { }\n}\n","// extracted by mini-css-extract-plugin\nexport {};","export function getQsParam(name: string) {\n const url = window.location.href;\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\n const regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)');\n const results = regex.exec(url);\n\n if (!results) {\n return null;\n }\n if (!results[2]) {\n return '';\n }\n\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n}\n","/**\n * Duo Web SDK v2\n * Copyright 2019, Duo Security\n */\n\n(function (root, factory) {\n /*eslint-disable */\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define([], factory);\n /*eslint-enable */\n } else if (typeof module === 'object' && module.exports) {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory();\n } else {\n // Browser globals (root is window)\n var Duo = factory();\n // If the Javascript was loaded via a script tag, attempt to autoload\n // the frame.\n Duo._onReady(Duo.init);\n\n // Attach Duo to the `window` object\n root.Duo = Duo;\n }\n}(this, function() {\n var DUO_MESSAGE_FORMAT = /^(?:AUTH|ENROLL)+\\|[A-Za-z0-9\\+\\/=]+\\|[A-Za-z0-9\\+\\/=]+$/;\n var DUO_ERROR_FORMAT = /^ERR\\|[\\w\\s\\.\\(\\)]+$/;\n var DUO_OPEN_WINDOW_FORMAT = /^DUO_OPEN_WINDOW\\|/;\n var VALID_OPEN_WINDOW_DOMAINS = [\n 'duo.com',\n 'duosecurity.com',\n 'duomobile.s3-us-west-1.amazonaws.com'\n ];\n\n var postAction,\n postArgument,\n host,\n sigRequest,\n duoSig,\n appSig,\n iframe,\n submitCallback;\n\n // We use this function instead of setting initial values in the var\n // declarations to make sure the initial values and subsequent\n // re-initializations are always the same.\n initializeStatefulVariables();\n\n /**\n * Set local variables to whatever they should be before you call init().\n */\n function initializeStatefulVariables() {\n postAction = '';\n postArgument = 'sig_response';\n host = undefined;\n sigRequest = undefined;\n duoSig = undefined;\n appSig = undefined;\n iframe = undefined;\n submitCallback = undefined;\n }\n\n function throwError(message, givenUrl) {\n var url = (\n givenUrl ||\n 'https://www.duosecurity.com/docs/duoweb#3.-show-the-iframe'\n );\n throw new Error(\n 'Duo Web SDK error: ' + message +\n (url ? ('\\n' + 'See ' + url + ' for more information') : '')\n );\n }\n\n function hyphenize(str) {\n return str.replace(/([a-z])([A-Z])/, '$1-$2').toLowerCase();\n }\n\n // cross-browser data attributes\n function getDataAttribute(element, name) {\n if ('dataset' in element) {\n return element.dataset[name];\n } else {\n return element.getAttribute('data-' + hyphenize(name));\n }\n }\n\n // cross-browser event binding/unbinding\n function on(context, event, fallbackEvent, callback) {\n if ('addEventListener' in window) {\n context.addEventListener(event, callback, false);\n } else {\n context.attachEvent(fallbackEvent, callback);\n }\n }\n\n function off(context, event, fallbackEvent, callback) {\n if ('removeEventListener' in window) {\n context.removeEventListener(event, callback, false);\n } else {\n context.detachEvent(fallbackEvent, callback);\n }\n }\n\n function onReady(callback) {\n on(document, 'DOMContentLoaded', 'onreadystatechange', callback);\n }\n\n function offReady(callback) {\n off(document, 'DOMContentLoaded', 'onreadystatechange', callback);\n }\n\n function onMessage(callback) {\n on(window, 'message', 'onmessage', callback);\n }\n\n function offMessage(callback) {\n off(window, 'message', 'onmessage', callback);\n }\n\n /**\n * Parse the sig_request parameter, throwing errors if the token contains\n * a server error or if the token is invalid.\n *\n * @param {String} sig Request token\n */\n function parseSigRequest(sig) {\n if (!sig) {\n // nothing to do\n return;\n }\n\n // see if the token contains an error, throwing it if it does\n if (sig.indexOf('ERR|') === 0) {\n throwError(sig.split('|')[1]);\n }\n\n // validate the token\n if (sig.indexOf(':') === -1 || sig.split(':').length !== 2) {\n throwError(\n 'Duo was given a bad token. This might indicate a configuration ' +\n 'problem with one of Duo\\'s client libraries.'\n );\n }\n\n var sigParts = sig.split(':');\n\n // hang on to the token, and the parsed duo and app sigs\n sigRequest = sig;\n duoSig = sigParts[0];\n appSig = sigParts[1];\n\n return {\n sigRequest: sig,\n duoSig: sigParts[0],\n appSig: sigParts[1]\n };\n }\n\n /**\n * Validate that a MessageEvent came from the Duo service, and that it\n * is a properly formatted payload.\n *\n * The Google Chrome sign-in page injects some JS into pages that also\n * make use of postMessage, so we need to do additional validation above\n * and beyond the origin.\n *\n * @param {MessageEvent} event Message received via postMessage\n */\n function isDuoMessage(event) {\n return Boolean(\n event.origin === ('https://' + host) &&\n typeof event.data === 'string' &&\n (\n event.data.match(DUO_MESSAGE_FORMAT) ||\n event.data.match(DUO_ERROR_FORMAT) ||\n event.data.match(DUO_OPEN_WINDOW_FORMAT)\n )\n );\n }\n\n /**\n * Validate the request token and prepare for the iframe to become ready.\n *\n * All options below can be passed into an options hash to `Duo.init`, or\n * specified on the iframe using `data-` attributes.\n *\n * Options specified using the options hash will take precedence over\n * `data-` attributes.\n *\n * Example using options hash:\n * ```javascript\n * Duo.init({\n * iframe: \"some_other_id\",\n * host: \"api-main.duo.test\",\n * sig_request: \"...\",\n * post_action: \"/auth\",\n * post_argument: \"resp\"\n * });\n * ```\n *\n * Example using `data-` attributes:\n * ```html\n * \n * ```\n *\n * Some browsers (especially embedded browsers) don't like it when the Duo\n * Web SDK changes the `src` attribute on the iframe. To prevent this, there\n * is an alternative way to use the Duo Web SDK:\n *\n * Add a div (or any other container element) instead of an iframe to the\n * DOM with an id of \"duo_iframe\", or pass that element to the\n * `iframeContainer` parameter of `Duo.init`. An iframe will be created and\n * inserted into that container element, preventing `src` change related\n * bugs. WARNING: All other elements in the container will be deleted.\n *\n * The `iframeAttributes` parameter of `Duo.init` is available to set any\n * attributes on the inserted iframe if the Duo Web SDK is inserting the\n * iframe. For details, see the parameter documentation below.\n *\n * @param {Object} options\n * @param {String} options.host - Hostname for the Duo Prompt.\n * @param {String} options.sig_request - Request token.\n * @param {String|HTMLElement} [options.iframe] - The iframe, or id of an\n * iframe that will be used for the Duo Prompt. If you don't provide\n * this or the `iframeContainer` parameter the Duo Web SDK will default\n * to using whatever element has an id of \"duo_iframe\".\n * @param {String|HTMLElement} [options.iframeContainer] - The element you\n * want the Duo Prompt inserted into, or the id of that element.\n * Anything inside this element will be deleted and replaced with an\n * iframe hosting the Duo prompt. If you don't provide this or the\n * `iframe` parameter the Duo Web SDK will default to using whatever\n * element has an id of \"duo_iframe\".\n * @param {Object} [options.iframeAttributes] - Object with names and\n * values coresponding to attributes you want added to the Duo Prompt\n * iframe, like `title`, `width` and `allow`. WARNING: this parameter\n * only works if you use the `iframeContainer` parameter or add an id\n * of \"duo_iframe\" to an element that isn't an iframe. If you have\n * added an iframe to the DOM yourself, you should set those attributes\n * directly on the iframe.\n * @param {String} [options.post_action=''] - URL to POST back to after a\n * successful auth.\n * @param {String} [options.post_argument='sig_response'] - Parameter name\n * to use for response token.\n * @param {Function} [options.submit_callback] - If provided, the Duo Web\n * SDK will not submit the form. Instead it will execute this callback\n * function passing in a reference to the \"duo_form\" form object.\n * `submit_callback`` can be used to prevent the webpage from reloading.\n */\n function init(options) {\n // If init() is called more than once we have to reset all the local\n // variables to ensure init() will work the same way every time. This\n // helps people making single page applications. SPAs may periodically\n // remove the iframe and add a new one that has to be initialized.\n initializeStatefulVariables();\n\n if (options) {\n if (options.host) {\n host = options.host;\n }\n\n if (options.sig_request) {\n parseSigRequest(options.sig_request);\n }\n\n if (options.post_action) {\n postAction = options.post_action;\n }\n\n if (options.post_argument) {\n postArgument = options.post_argument;\n }\n\n if (typeof options.submit_callback === 'function') {\n submitCallback = options.submit_callback;\n }\n }\n\n var promptElement = getPromptElement(options);\n if (promptElement) {\n // If we can get the element that will host the prompt, set it.\n ready(promptElement, options.iframeAttributes || {});\n } else {\n // If the element that will host the prompt isn't available yet, set\n // it up after the DOM finishes loading.\n asyncReady(options);\n }\n\n // always clean up after yourself!\n offReady(init);\n }\n\n /**\n * Given the options from init(), get the iframe or iframe container that\n * should be used for the Duo Prompt. Returns `null` if nothing was found.\n */\n function getPromptElement(options) {\n var result;\n\n if (options.iframe && options.iframeContainer) {\n throwError(\n 'Passing both `iframe` and `iframeContainer` arguments at the' +\n ' same time is not allowed.'\n );\n } else if (options.iframe) {\n // If we are getting an iframe, try to get it and raise if the\n // element we find is NOT an iframe.\n result = getUserDefinedElement(options.iframe);\n validateIframe(result);\n } else if (options.iframeContainer) {\n result = getUserDefinedElement(options.iframeContainer);\n validateIframeContainer(result);\n } else {\n result = document.getElementById('duo_iframe');\n }\n\n return result;\n }\n\n /**\n * When given an HTMLElement, return it. When given a string, get an element\n * with that id, else return null.\n */\n function getUserDefinedElement(object) {\n if (object.tagName) {\n return object;\n } else if (typeof object == 'string') {\n return document.getElementById(object);\n }\n return null;\n }\n\n /**\n * Check if the given thing is an iframe.\n */\n function isIframe(element) {\n return (\n element &&\n element.tagName &&\n element.tagName.toLowerCase() === 'iframe'\n );\n }\n\n /**\n * Throw an error if we are given an element that is NOT an iframe.\n */\n function validateIframe(element) {\n if (element && !isIframe(element)) {\n throwError(\n '`iframe` only accepts an iframe element or the id of an' +\n ' iframe. To use a non-iframe element, use the' +\n ' `iframeContainer` argument.'\n );\n }\n }\n\n /**\n * Throw an error if we are given an element that IS an iframe instead of an\n * element that we can insert an iframe into.\n */\n function validateIframeContainer(element) {\n if (element && isIframe(element)) {\n throwError(\n '`iframeContainer` only accepts a non-iframe element or the' +\n ' id of a non-iframe. To use a non-iframe element, use the' +\n ' `iframeContainer` argument on Duo.init().'\n );\n }\n }\n\n /**\n * Generate the URL that goes to the Duo Prompt.\n */\n function generateIframeSrc() {\n return [\n 'https://', host, '/frame/web/v1/auth?tx=', duoSig,\n '&parent=', encodeURIComponent(document.location.href),\n '&v=2.8'\n ].join('');\n }\n\n /**\n * This function is called when a message was received from another domain\n * using the `postMessage` API. Check that the event came from the Duo\n * service domain, and that the message is a properly formatted payload,\n * then perform the post back to the primary service.\n *\n * @param event Event object (contains origin and data)\n */\n function onReceivedMessage(event) {\n if (isDuoMessage(event)) {\n if (event.data.match(DUO_OPEN_WINDOW_FORMAT)) {\n var url = event.data.substring(\"DUO_OPEN_WINDOW|\".length);\n if (isValidUrlToOpen(url)) {\n // Open the URL that comes after the DUO_WINDOW_OPEN token.\n window.open(url, \"_self\");\n }\n }\n else {\n // the event came from duo, do the post back\n doPostBack(event.data);\n\n // always clean up after yourself!\n offMessage(onReceivedMessage);\n }\n }\n }\n\n /**\n * Validate that this passed in URL is one that we will actually allow to\n * be opened.\n * @param url String URL that the message poster wants to open\n * @returns {boolean} true if we allow this url to be opened in the window\n */\n function isValidUrlToOpen(url) {\n if (!url) {\n return false;\n }\n\n var parser = document.createElement('a');\n parser.href = url;\n\n if (parser.protocol === \"duotrustedendpoints:\") {\n return true;\n } else if (parser.protocol !== \"https:\") {\n return false;\n }\n\n for (var i = 0; i < VALID_OPEN_WINDOW_DOMAINS.length; i++) {\n if (parser.hostname.endsWith(\".\" + VALID_OPEN_WINDOW_DOMAINS[i]) ||\n parser.hostname === VALID_OPEN_WINDOW_DOMAINS[i]) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Register a callback to call ready() after the DOM has loaded.\n */\n function asyncReady(options) {\n var callback = function() {\n var promptElement = getPromptElement(options);\n if (!promptElement) {\n throwError(\n 'This page does not contain an iframe for Duo to use.' +\n ' Add an element like' +\n ' to this page.'\n );\n }\n\n ready(promptElement, options.iframeAttributes || {});\n\n // Always clean up after yourself.\n offReady(callback)\n };\n\n onReady(callback);\n }\n\n /**\n * Point the iframe at Duo, then wait for it to postMessage back to us.\n */\n function ready(promptElement, iframeAttributes) {\n if (!host) {\n host = getDataAttribute(promptElement, 'host');\n\n if (!host) {\n throwError(\n 'No API hostname is given for Duo to use. Be sure to pass ' +\n 'a `host` parameter to Duo.init, or through the `data-host` ' +\n 'attribute on the iframe element.'\n );\n }\n }\n\n if (!duoSig || !appSig) {\n parseSigRequest(getDataAttribute(promptElement, 'sigRequest'));\n\n if (!duoSig || !appSig) {\n throwError(\n 'No valid signed request is given. Be sure to give the ' +\n '`sig_request` parameter to Duo.init, or use the ' +\n '`data-sig-request` attribute on the iframe element.'\n );\n }\n }\n\n // if postAction/Argument are defaults, see if they are specified\n // as data attributes on the iframe\n if (postAction === '') {\n postAction = getDataAttribute(promptElement, 'postAction') || postAction;\n }\n\n if (postArgument === 'sig_response') {\n postArgument = getDataAttribute(promptElement, 'postArgument') || postArgument;\n }\n\n if (isIframe(promptElement)) {\n iframe = promptElement;\n iframe.src = generateIframeSrc();\n } else {\n // If given a container to put an iframe in, clean out any children\n // child elements in case `init()` was called more than once.\n while (promptElement.firstChild) {\n // We call `removeChild()` instead of doing `innerHTML = \"\"`\n // to make sure we unbind any events.\n promptElement.removeChild(promptElement.firstChild);\n }\n\n iframe = document.createElement('iframe');\n\n // Set the src and all other attributes on the new iframe.\n iframeAttributes['src'] = generateIframeSrc();\n for (var name in iframeAttributes) {\n iframe.setAttribute(name, iframeAttributes[name]);\n }\n\n promptElement.appendChild(iframe);\n }\n\n // listen for the 'message' event\n onMessage(onReceivedMessage);\n }\n\n /**\n * We received a postMessage from Duo. POST back to the primary service\n * with the response token, and any additional user-supplied parameters\n * given in form#duo_form.\n */\n function doPostBack(response) {\n // create a hidden input to contain the response token\n var input = document.createElement('input');\n input.type = 'hidden';\n input.name = postArgument;\n input.value = response + ':' + appSig;\n\n // user may supply their own form with additional inputs\n var form = document.getElementById('duo_form');\n\n // if the form doesn't exist, create one\n if (!form) {\n form = document.createElement('form');\n\n // insert the new form after the iframe\n iframe.parentElement.insertBefore(form, iframe.nextSibling);\n }\n\n // make sure we are actually posting to the right place\n form.method = 'POST';\n form.action = postAction;\n\n // add the response token input to the form\n form.appendChild(input);\n\n // away we go!\n if (typeof submitCallback === \"function\") {\n submitCallback.call(null, form);\n } else {\n form.submit();\n }\n }\n\n return {\n init: init,\n _onReady: onReady,\n _parseSigRequest: parseSigRequest,\n _isDuoMessage: isDuoMessage,\n _doPostBack: doPostBack\n };\n}));\n"],"sourceRoot":""} \ No newline at end of file diff --git a/connectors/sso.6edbb1cdf4d2e063961a.css b/connectors/sso.6edbb1cdf4d2e063961a.css deleted file mode 100644 index 5db78aad..00000000 --- a/connectors/sso.6edbb1cdf4d2e063961a.css +++ /dev/null @@ -1,88 +0,0 @@ -@font-face { - font-family: 'Open Sans'; - font-style: italic; - font-weight: 300; - src: url(../fonts/Open_Sans-italic-300.woff) format('woff'); - unicode-range: U+0-10FFFF; -} - -@font-face { - font-family: 'Open Sans'; - font-style: italic; - font-weight: 400; - src: url(../fonts/Open_Sans-italic-400.woff) format('woff'); - unicode-range: U+0-10FFFF; -} - -@font-face { - font-family: 'Open Sans'; - font-style: italic; - font-weight: 600; - src: url(../fonts/Open_Sans-italic-600.woff) format('woff'); - unicode-range: U+0-10FFFF; -} - -@font-face { - font-family: 'Open Sans'; - font-style: italic; - font-weight: 700; - src: url(../fonts/Open_Sans-italic-700.woff) format('woff'); - unicode-range: U+0-10FFFF; -} - -@font-face { - font-family: 'Open Sans'; - font-style: italic; - font-weight: 800; - src: url(../fonts/Open_Sans-italic-800.woff) format('woff'); - unicode-range: U+0-10FFFF; -} - -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 300; - src: url(../fonts/Open_Sans-normal-300.woff) format('woff'); - unicode-range: U+0-10FFFF; -} - -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 400; - src: url(../fonts/Open_Sans-normal-400.woff) format('woff'); - unicode-range: U+0-10FFFF; -} - -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 600; - src: url(../fonts/Open_Sans-normal-600.woff) format('woff'); - unicode-range: U+0-10FFFF; -} - -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 700; - src: url(../fonts/Open_Sans-normal-700.woff) format('woff'); - unicode-range: U+0-10FFFF; -} - -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 800; - src: url(../fonts/Open_Sans-normal-800.woff) format('woff'); - unicode-range: U+0-10FFFF; -} - - -:root{--blue: #007bff;--indigo: #6610f2;--purple: #6f42c1;--pink: #e83e8c;--red: #dc3545;--orange: #fd7e14;--yellow: #ffc107;--green: #28a745;--teal: #20c997;--cyan: #17a2b8;--white: #fff;--gray: #6c757d;--gray-dark: #343a40;--primary: #175DDC;--secondary: #ced4da;--success: #00a65a;--info: #555;--warning: #bf7e16;--danger: #dd4b39;--light: #f8f9fa;--dark: #343a40;--primary-accent: #1252A3;--secondary-alt: #1A3B66;--breakpoint-xs: 0;--breakpoint-sm: 1px;--breakpoint-md: 2px;--breakpoint-lg: 3px;--breakpoint-xl: 4px;--font-family-sans-serif: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}*,*::before,*::after{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#333;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0 !important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#175DDC;text-decoration:none;background-color:transparent}a:hover{color:#104097;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):hover,a:not([href]):not([tabindex]):focus{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}pre,code,kbd,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button:not(:disabled),[type="button"]:not(:disabled),[type="reset"]:not(:disabled),[type="submit"]:not(:disabled){cursor:pointer}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{padding:0;border-style:none}input[type="radio"],input[type="checkbox"]{box-sizing:border-box;padding:0}input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{outline-offset:-2px;-webkit-appearance:none}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none !important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1{font-size:1.7rem}h2,.h2{font-size:1.3rem}h3,.h3{font-size:1rem}h4,.h4{font-size:1rem}h5,.h5{font-size:1rem}h6,.h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:normal}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,0.1)}small,.small{font-size:90%;font-weight:400}mark,.mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:90%;color:#6c757d}.blockquote-footer::before{content:"\2014\A0"}.img-fluid,.table.table-list td.table-list-icon img{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:100%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:100%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:100%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:10px;padding-left:10px;margin-right:auto;margin-left:auto}@media (min-width: 1px){.container{max-width:540px}}@media (min-width: 2px){.container{max-width:720px}}@media (min-width: 3px){.container{max-width:960px}}@media (min-width: 4px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:10px;padding-left:10px;margin-right:auto;margin-left:auto}.row{display:flex;flex-wrap:wrap;margin-right:-10px;margin-left:-10px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*="col-"]{padding-right:0;padding-left:0}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col,.col-auto,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm,.col-sm-auto,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md,.col-md-auto,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg,.col-lg-auto,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl,.col-xl-auto{position:relative;width:100%;padding-right:10px;padding-left:10px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.33333%;max-width:8.33333%}.col-2{flex:0 0 16.66667%;max-width:16.66667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.33333%;max-width:33.33333%}.col-5{flex:0 0 41.66667%;max-width:41.66667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.33333%;max-width:58.33333%}.col-8{flex:0 0 66.66667%;max-width:66.66667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.33333%;max-width:83.33333%}.col-11{flex:0 0 91.66667%;max-width:91.66667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}@media (min-width: 1px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.33333%;max-width:8.33333%}.col-sm-2{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.33333%;max-width:33.33333%}.col-sm-5{flex:0 0 41.66667%;max-width:41.66667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.33333%;max-width:58.33333%}.col-sm-8{flex:0 0 66.66667%;max-width:66.66667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.33333%;max-width:83.33333%}.col-sm-11{flex:0 0 91.66667%;max-width:91.66667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width: 2px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.33333%;max-width:8.33333%}.col-md-2{flex:0 0 16.66667%;max-width:16.66667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.33333%;max-width:33.33333%}.col-md-5{flex:0 0 41.66667%;max-width:41.66667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.33333%;max-width:58.33333%}.col-md-8{flex:0 0 66.66667%;max-width:66.66667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.33333%;max-width:83.33333%}.col-md-11{flex:0 0 91.66667%;max-width:91.66667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width: 3px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.33333%;max-width:8.33333%}.col-lg-2{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.33333%;max-width:33.33333%}.col-lg-5{flex:0 0 41.66667%;max-width:41.66667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}.col-lg-8{flex:0 0 66.66667%;max-width:66.66667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.33333%;max-width:83.33333%}.col-lg-11{flex:0 0 91.66667%;max-width:91.66667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width: 4px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.33333%;max-width:8.33333%}.col-xl-2{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.33333%;max-width:33.33333%}.col-xl-5{flex:0 0 41.66667%;max-width:41.66667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.33333%;max-width:58.33333%}.col-xl-8{flex:0 0 66.66667%;max-width:66.66667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.33333%;max-width:83.33333%}.col-xl-11{flex:0 0 91.66667%;max-width:91.66667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.table{width:100%;margin-bottom:1rem;color:#333}.table th,.table td{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm th,.table-sm td{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered th,.table-bordered td{border:1px solid #dee2e6}.table-bordered thead th,.table-bordered thead td{border-bottom-width:2px}.table-borderless th,.table-borderless td,.table-borderless thead th,.table-borderless tbody+tbody{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,0.02)}.table-hover tbody tr:hover{color:#333;background-color:rgba(0,0,0,0.03)}.table-primary,.table-primary>th,.table-primary>td{background-color:#bed2f5}.table-primary th,.table-primary td,.table-primary thead th,.table-primary tbody+tbody{border-color:#86abed}.table-hover .table-primary:hover{background-color:#a8c3f2}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#a8c3f2}.table-secondary,.table-secondary>th,.table-secondary>td{background-color:#f1f3f5}.table-secondary th,.table-secondary td,.table-secondary thead th,.table-secondary tbody+tbody{border-color:#e6e9ec}.table-hover .table-secondary:hover{background-color:#e2e6ea}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#e2e6ea}.table-success,.table-success>th,.table-success>td{background-color:#b8e6d1}.table-success th,.table-success td,.table-success thead th,.table-success tbody+tbody{border-color:#7ad1a9}.table-hover .table-success:hover{background-color:#a5dfc5}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#a5dfc5}.table-info,.table-info>th,.table-info>td{background-color:#cfcfcf}.table-info th,.table-info td,.table-info thead th,.table-info tbody+tbody{border-color:#a7a7a7}.table-hover .table-info:hover{background-color:#c2c2c2}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#c2c2c2}.table-warning,.table-warning>th,.table-warning>td{background-color:#eddbbe}.table-warning th,.table-warning td,.table-warning thead th,.table-warning tbody+tbody{border-color:#debc86}.table-hover .table-warning:hover{background-color:#e7d0aa}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#e7d0aa}.table-danger,.table-danger>th,.table-danger>td{background-color:#f5cdc8}.table-danger th,.table-danger td,.table-danger thead th,.table-danger tbody+tbody{border-color:#eda198}.table-hover .table-danger:hover{background-color:#f1b9b2}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b9b2}.table-light,.table-light>th,.table-light>td{background-color:#fdfdfe}.table-light th,.table-light td,.table-light thead th,.table-light tbody+tbody{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>th,.table-dark>td{background-color:#c6c8ca}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-primary-accent,.table-primary-accent>th,.table-primary-accent>td{background-color:#bdcfe5}.table-primary-accent th,.table-primary-accent td,.table-primary-accent thead th,.table-primary-accent tbody+tbody{border-color:#84a5cf}.table-hover .table-primary-accent:hover{background-color:#abc2de}.table-hover .table-primary-accent:hover>td,.table-hover .table-primary-accent:hover>th{background-color:#abc2de}.table-secondary-alt,.table-secondary-alt>th,.table-secondary-alt>td{background-color:#bfc8d4}.table-secondary-alt th,.table-secondary-alt td,.table-secondary-alt thead th,.table-secondary-alt tbody+tbody{border-color:#8899af}.table-hover .table-secondary-alt:hover{background-color:#b0bbca}.table-hover .table-secondary-alt:hover>td,.table-hover .table-secondary-alt:hover>th{background-color:#b0bbca}.table-active,.table-active>th,.table-active>td{background-color:rgba(0,0,0,0.03)}.table-hover .table-active:hover{background-color:rgba(0,0,0,0.03)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,0.03)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark th,.table-dark td,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,0.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,0.075)}@media (max-width: 0.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width: 1.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width: 2.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width: 3.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fbfbfb;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#81a9f2;outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.form-control::placeholder{color:#b4b4b4;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e0e0e0;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fbfbfb}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.15rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#333;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.15rem;line-height:1.5;border-radius:.3rem}select.form-control[size],select.form-control[multiple]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*="col-"]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled ~ .form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:90%;color:#00a65a}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(0,166,90,0.9);border-radius:.25rem}.was-validated .form-control:valid,.form-control.is-valid{border-color:#00a65a;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2300a65a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#00a65a;box-shadow:0 0 0 .2rem rgba(0,166,90,0.25)}.was-validated .form-control:valid ~ .valid-feedback,.was-validated .form-control:valid ~ .valid-tooltip,.form-control.is-valid ~ .valid-feedback,.form-control.is-valid ~ .valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .custom-select:valid,.custom-select.is-valid{border-color:#00a65a;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2300a65a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fbfbfb no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .custom-select:valid:focus,.custom-select.is-valid:focus{border-color:#00a65a;box-shadow:0 0 0 .2rem rgba(0,166,90,0.25)}.was-validated .custom-select:valid ~ .valid-feedback,.was-validated .custom-select:valid ~ .valid-tooltip,.custom-select.is-valid ~ .valid-feedback,.custom-select.is-valid ~ .valid-tooltip{display:block}.was-validated .form-control-file:valid ~ .valid-feedback,.was-validated .form-control-file:valid ~ .valid-tooltip,.form-control-file.is-valid ~ .valid-feedback,.form-control-file.is-valid ~ .valid-tooltip{display:block}.was-validated .form-check-input:valid ~ .form-check-label,.form-check-input.is-valid ~ .form-check-label{color:#00a65a}.was-validated .form-check-input:valid ~ .valid-feedback,.was-validated .form-check-input:valid ~ .valid-tooltip,.form-check-input.is-valid ~ .valid-feedback,.form-check-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-control-input:valid ~ .custom-control-label,.custom-control-input.is-valid ~ .custom-control-label{color:#00a65a}.was-validated .custom-control-input:valid ~ .custom-control-label::before,.custom-control-input.is-valid ~ .custom-control-label::before{border-color:#00a65a}.was-validated .custom-control-input:valid ~ .valid-feedback,.was-validated .custom-control-input:valid ~ .valid-tooltip,.custom-control-input.is-valid ~ .valid-feedback,.custom-control-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before,.custom-control-input.is-valid:checked ~ .custom-control-label::before{border-color:#00d976;background-color:#00d976}.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before,.custom-control-input.is-valid:focus ~ .custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,166,90,0.25)}.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before,.custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before{border-color:#00a65a}.was-validated .custom-file-input:valid ~ .custom-file-label,.custom-file-input.is-valid ~ .custom-file-label{border-color:#00a65a}.was-validated .custom-file-input:valid ~ .valid-feedback,.was-validated .custom-file-input:valid ~ .valid-tooltip,.custom-file-input.is-valid ~ .valid-feedback,.custom-file-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-file-input:valid:focus ~ .custom-file-label,.custom-file-input.is-valid:focus ~ .custom-file-label{border-color:#00a65a;box-shadow:0 0 0 .2rem rgba(0,166,90,0.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:90%;color:#dd4b39}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(221,75,57,0.9);border-radius:.25rem}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#dd4b39;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dd4b39' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dd4b39' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dd4b39;box-shadow:0 0 0 .2rem rgba(221,75,57,0.25)}.was-validated .form-control:invalid ~ .invalid-feedback,.was-validated .form-control:invalid ~ .invalid-tooltip,.form-control.is-invalid ~ .invalid-feedback,.form-control.is-invalid ~ .invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .custom-select:invalid,.custom-select.is-invalid{border-color:#dd4b39;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dd4b39' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dd4b39' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fbfbfb no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .custom-select:invalid:focus,.custom-select.is-invalid:focus{border-color:#dd4b39;box-shadow:0 0 0 .2rem rgba(221,75,57,0.25)}.was-validated .custom-select:invalid ~ .invalid-feedback,.was-validated .custom-select:invalid ~ .invalid-tooltip,.custom-select.is-invalid ~ .invalid-feedback,.custom-select.is-invalid ~ .invalid-tooltip{display:block}.was-validated .form-control-file:invalid ~ .invalid-feedback,.was-validated .form-control-file:invalid ~ .invalid-tooltip,.form-control-file.is-invalid ~ .invalid-feedback,.form-control-file.is-invalid ~ .invalid-tooltip{display:block}.was-validated .form-check-input:invalid ~ .form-check-label,.form-check-input.is-invalid ~ .form-check-label{color:#dd4b39}.was-validated .form-check-input:invalid ~ .invalid-feedback,.was-validated .form-check-input:invalid ~ .invalid-tooltip,.form-check-input.is-invalid ~ .invalid-feedback,.form-check-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-control-input:invalid ~ .custom-control-label,.custom-control-input.is-invalid ~ .custom-control-label{color:#dd4b39}.was-validated .custom-control-input:invalid ~ .custom-control-label::before,.custom-control-input.is-invalid ~ .custom-control-label::before{border-color:#dd4b39}.was-validated .custom-control-input:invalid ~ .invalid-feedback,.was-validated .custom-control-input:invalid ~ .invalid-tooltip,.custom-control-input.is-invalid ~ .invalid-feedback,.custom-control-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before,.custom-control-input.is-invalid:checked ~ .custom-control-label::before{border-color:#e47365;background-color:#e47365}.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before,.custom-control-input.is-invalid:focus ~ .custom-control-label::before{box-shadow:0 0 0 .2rem rgba(221,75,57,0.25)}.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before,.custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before{border-color:#dd4b39}.was-validated .custom-file-input:invalid ~ .custom-file-label,.custom-file-input.is-invalid ~ .custom-file-label{border-color:#dd4b39}.was-validated .custom-file-input:invalid ~ .invalid-feedback,.was-validated .custom-file-input:invalid ~ .invalid-tooltip,.custom-file-input.is-invalid ~ .invalid-feedback,.custom-file-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-file-input:invalid:focus ~ .custom-file-label,.custom-file-input.is-invalid:focus ~ .custom-file-label{border-color:#dd4b39;box-shadow:0 0 0 .2rem rgba(221,75,57,0.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width: 1px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group,.form-inline .custom-select{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn,.swal2-popup .swal2-actions button{display:inline-block;font-weight:600;color:#333;text-align:center;vertical-align:middle;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn,.swal2-popup .swal2-actions button{transition:none}}.btn:hover,.swal2-popup .swal2-actions button:hover{color:#333;text-decoration:none}.btn:focus,.swal2-popup .swal2-actions button:focus,.btn.focus,.swal2-popup .swal2-actions button.focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.btn.disabled,.swal2-popup .swal2-actions button.disabled,.btn:disabled,.swal2-popup .swal2-actions button:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary,.swal2-popup .swal2-actions button.swal2-confirm{color:#fff;background-color:#175DDC;border-color:#175DDC}.btn-primary:hover,.swal2-popup .swal2-actions button.swal2-confirm:hover{color:#fff;background-color:#134eb9;border-color:#1249ae}.btn-primary:focus,.swal2-popup .swal2-actions button.swal2-confirm:focus,.btn-primary.focus,.swal2-popup .swal2-actions button.focus.swal2-confirm{box-shadow:0 0 0 .2rem rgba(58,117,225,0.5)}.btn-primary.disabled,.swal2-popup .swal2-actions button.disabled.swal2-confirm,.btn-primary:disabled,.swal2-popup .swal2-actions button.swal2-confirm:disabled{color:#fff;background-color:#175DDC;border-color:#175DDC}.btn-primary:not(:disabled):not(.disabled):active,.swal2-popup .swal2-actions button.swal2-confirm:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.swal2-popup .swal2-actions button.swal2-confirm:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle,.swal2-popup .swal2-actions .show>button.dropdown-toggle.swal2-confirm{color:#fff;background-color:#1249ae;border-color:#1145a2}.btn-primary:not(:disabled):not(.disabled):active:focus,.swal2-popup .swal2-actions button.swal2-confirm:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.swal2-popup .swal2-actions button.swal2-confirm:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus,.swal2-popup .swal2-actions .show>button.dropdown-toggle.swal2-confirm:focus{box-shadow:0 0 0 .2rem rgba(58,117,225,0.5)}.btn-secondary{color:#212529;background-color:#ced4da;border-color:#ced4da}.btn-secondary:hover{color:#212529;background-color:#b8c1ca;border-color:#b1bbc4}.btn-secondary:focus,.btn-secondary.focus{box-shadow:0 0 0 .2rem rgba(180,186,191,0.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#212529;background-color:#ced4da;border-color:#ced4da}.btn-secondary:not(:disabled):not(.disabled):active,.btn-secondary:not(:disabled):not(.disabled).active,.show>.btn-secondary.dropdown-toggle{color:#212529;background-color:#b1bbc4;border-color:#aab4bf}.btn-secondary:not(:disabled):not(.disabled):active:focus,.btn-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(180,186,191,0.5)}.btn-success{color:#fff;background-color:#00a65a;border-color:#00a65a}.btn-success:hover{color:#fff;background-color:#008045;border-color:#00733e}.btn-success:focus,.btn-success.focus{box-shadow:0 0 0 .2rem rgba(38,179,115,0.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#00a65a;border-color:#00a65a}.btn-success:not(:disabled):not(.disabled):active,.btn-success:not(:disabled):not(.disabled).active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#00733e;border-color:#006637}.btn-success:not(:disabled):not(.disabled):active:focus,.btn-success:not(:disabled):not(.disabled).active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,179,115,0.5)}.btn-info{color:#fff;background-color:#555;border-color:#555}.btn-info:hover{color:#fff;background-color:#424242;border-color:#3c3c3c}.btn-info:focus,.btn-info.focus{box-shadow:0 0 0 .2rem rgba(111,111,111,0.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#555;border-color:#555}.btn-info:not(:disabled):not(.disabled):active,.btn-info:not(:disabled):not(.disabled).active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#3c3c3c;border-color:#353535}.btn-info:not(:disabled):not(.disabled):active:focus,.btn-info:not(:disabled):not(.disabled).active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(111,111,111,0.5)}.btn-warning{color:#fff;background-color:#bf7e16;border-color:#bf7e16}.btn-warning:hover{color:#fff;background-color:#9d6712;border-color:#916011}.btn-warning:focus,.btn-warning.focus{box-shadow:0 0 0 .2rem rgba(201,145,57,0.5)}.btn-warning.disabled,.btn-warning:disabled{color:#fff;background-color:#bf7e16;border-color:#bf7e16}.btn-warning:not(:disabled):not(.disabled):active,.btn-warning:not(:disabled):not(.disabled).active,.show>.btn-warning.dropdown-toggle{color:#fff;background-color:#916011;border-color:#86580f}.btn-warning:not(:disabled):not(.disabled):active:focus,.btn-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(201,145,57,0.5)}.btn-danger{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.btn-danger:hover{color:#fff;background-color:#cd3623;border-color:#c23321}.btn-danger:focus,.btn-danger.focus{box-shadow:0 0 0 .2rem rgba(226,102,87,0.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.btn-danger:not(:disabled):not(.disabled):active,.btn-danger:not(:disabled):not(.disabled).active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#c23321;border-color:#b7301f}.btn-danger:not(:disabled):not(.disabled):active:focus,.btn-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(226,102,87,0.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light:focus,.btn-light.focus{box-shadow:0 0 0 .2rem rgba(216,217,219,0.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled):active,.btn-light:not(:disabled):not(.disabled).active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled):active:focus,.btn-light:not(:disabled):not(.disabled).active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,0.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark:focus,.btn-dark.focus{box-shadow:0 0 0 .2rem rgba(82,88,93,0.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled):active,.btn-dark:not(:disabled):not(.disabled).active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled):active:focus,.btn-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,0.5)}.btn-primary-accent{color:#fff;background-color:#1252A3;border-color:#1252A3}.btn-primary-accent:hover{color:#fff;background-color:#0e4181;border-color:#0d3b75}.btn-primary-accent:focus,.btn-primary-accent.focus{box-shadow:0 0 0 .2rem rgba(54,108,177,0.5)}.btn-primary-accent.disabled,.btn-primary-accent:disabled{color:#fff;background-color:#1252A3;border-color:#1252A3}.btn-primary-accent:not(:disabled):not(.disabled):active,.btn-primary-accent:not(:disabled):not(.disabled).active,.show>.btn-primary-accent.dropdown-toggle{color:#fff;background-color:#0d3b75;border-color:#0c356a}.btn-primary-accent:not(:disabled):not(.disabled):active:focus,.btn-primary-accent:not(:disabled):not(.disabled).active:focus,.show>.btn-primary-accent.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(54,108,177,0.5)}.btn-secondary-alt{color:#fff;background-color:#1A3B66;border-color:#1A3B66}.btn-secondary-alt:hover{color:#fff;background-color:#122948;border-color:#10233d}.btn-secondary-alt:focus,.btn-secondary-alt.focus{box-shadow:0 0 0 .2rem rgba(60,88,125,0.5)}.btn-secondary-alt.disabled,.btn-secondary-alt:disabled{color:#fff;background-color:#1A3B66;border-color:#1A3B66}.btn-secondary-alt:not(:disabled):not(.disabled):active,.btn-secondary-alt:not(:disabled):not(.disabled).active,.show>.btn-secondary-alt.dropdown-toggle{color:#fff;background-color:#10233d;border-color:#0d1e33}.btn-secondary-alt:not(:disabled):not(.disabled):active:focus,.btn-secondary-alt:not(:disabled):not(.disabled).active:focus,.show>.btn-secondary-alt.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(60,88,125,0.5)}.btn-outline-primary{color:#175DDC;border-color:#175DDC}.btn-outline-primary:hover{color:#fff;background-color:#175DDC;border-color:#175DDC}.btn-outline-primary:focus,.btn-outline-primary.focus{box-shadow:0 0 0 .2rem rgba(23,93,220,0.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#175DDC;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled):active,.btn-outline-primary:not(:disabled):not(.disabled).active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#175DDC;border-color:#175DDC}.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,93,220,0.5)}.btn-outline-secondary,.swal2-popup .swal2-actions button.swal2-cancel{color:#ced4da;border-color:#ced4da}.btn-outline-secondary:hover,.swal2-popup .swal2-actions button.swal2-cancel:hover{color:#212529;background-color:#ced4da;border-color:#ced4da}.btn-outline-secondary:focus,.swal2-popup .swal2-actions button.swal2-cancel:focus,.btn-outline-secondary.focus,.swal2-popup .swal2-actions button.focus.swal2-cancel{box-shadow:0 0 0 .2rem rgba(206,212,218,0.5)}.btn-outline-secondary.disabled,.swal2-popup .swal2-actions button.disabled.swal2-cancel,.btn-outline-secondary:disabled,.swal2-popup .swal2-actions button.swal2-cancel:disabled{color:#ced4da;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled):active,.swal2-popup .swal2-actions button.swal2-cancel:not(:disabled):not(.disabled):active,.btn-outline-secondary:not(:disabled):not(.disabled).active,.swal2-popup .swal2-actions button.swal2-cancel:not(:disabled):not(.disabled).active,.show>.btn-outline-secondary.dropdown-toggle,.swal2-popup .swal2-actions .show>button.dropdown-toggle.swal2-cancel{color:#212529;background-color:#ced4da;border-color:#ced4da}.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.swal2-popup .swal2-actions button.swal2-cancel:not(:disabled):not(.disabled):active:focus,.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.swal2-popup .swal2-actions button.swal2-cancel:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus,.swal2-popup .swal2-actions .show>button.dropdown-toggle.swal2-cancel:focus{box-shadow:0 0 0 .2rem rgba(206,212,218,0.5)}.btn-outline-success{color:#00a65a;border-color:#00a65a}.btn-outline-success:hover{color:#fff;background-color:#00a65a;border-color:#00a65a}.btn-outline-success:focus,.btn-outline-success.focus{box-shadow:0 0 0 .2rem rgba(0,166,90,0.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#00a65a;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled):active,.btn-outline-success:not(:disabled):not(.disabled).active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#00a65a;border-color:#00a65a}.btn-outline-success:not(:disabled):not(.disabled):active:focus,.btn-outline-success:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,166,90,0.5)}.btn-outline-info{color:#555;border-color:#555}.btn-outline-info:hover{color:#fff;background-color:#555;border-color:#555}.btn-outline-info:focus,.btn-outline-info.focus{box-shadow:0 0 0 .2rem rgba(85,85,85,0.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#555;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled):active,.btn-outline-info:not(:disabled):not(.disabled).active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#555;border-color:#555}.btn-outline-info:not(:disabled):not(.disabled):active:focus,.btn-outline-info:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(85,85,85,0.5)}.btn-outline-warning{color:#bf7e16;border-color:#bf7e16}.btn-outline-warning:hover{color:#fff;background-color:#bf7e16;border-color:#bf7e16}.btn-outline-warning:focus,.btn-outline-warning.focus{box-shadow:0 0 0 .2rem rgba(191,126,22,0.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#bf7e16;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled):active,.btn-outline-warning:not(:disabled):not(.disabled).active,.show>.btn-outline-warning.dropdown-toggle{color:#fff;background-color:#bf7e16;border-color:#bf7e16}.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(191,126,22,0.5)}.btn-outline-danger{color:#dd4b39;border-color:#dd4b39}.btn-outline-danger:hover{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.btn-outline-danger:focus,.btn-outline-danger.focus{box-shadow:0 0 0 .2rem rgba(221,75,57,0.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dd4b39;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled):active,.btn-outline-danger:not(:disabled):not(.disabled).active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(221,75,57,0.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:focus,.btn-outline-light.focus{box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled):active,.btn-outline-light:not(:disabled):not(.disabled).active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled):active:focus,.btn-outline-light:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:focus,.btn-outline-dark.focus{box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled):active,.btn-outline-dark:not(:disabled):not(.disabled).active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.btn-outline-primary-accent{color:#1252A3;border-color:#1252A3}.btn-outline-primary-accent:hover{color:#fff;background-color:#1252A3;border-color:#1252A3}.btn-outline-primary-accent:focus,.btn-outline-primary-accent.focus{box-shadow:0 0 0 .2rem rgba(18,82,163,0.5)}.btn-outline-primary-accent.disabled,.btn-outline-primary-accent:disabled{color:#1252A3;background-color:transparent}.btn-outline-primary-accent:not(:disabled):not(.disabled):active,.btn-outline-primary-accent:not(:disabled):not(.disabled).active,.show>.btn-outline-primary-accent.dropdown-toggle{color:#fff;background-color:#1252A3;border-color:#1252A3}.btn-outline-primary-accent:not(:disabled):not(.disabled):active:focus,.btn-outline-primary-accent:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-primary-accent.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(18,82,163,0.5)}.btn-outline-secondary-alt{color:#1A3B66;border-color:#1A3B66}.btn-outline-secondary-alt:hover{color:#fff;background-color:#1A3B66;border-color:#1A3B66}.btn-outline-secondary-alt:focus,.btn-outline-secondary-alt.focus{box-shadow:0 0 0 .2rem rgba(26,59,102,0.5)}.btn-outline-secondary-alt.disabled,.btn-outline-secondary-alt:disabled{color:#1A3B66;background-color:transparent}.btn-outline-secondary-alt:not(:disabled):not(.disabled):active,.btn-outline-secondary-alt:not(:disabled):not(.disabled).active,.show>.btn-outline-secondary-alt.dropdown-toggle{color:#fff;background-color:#1A3B66;border-color:#1A3B66}.btn-outline-secondary-alt:not(:disabled):not(.disabled):active:focus,.btn-outline-secondary-alt:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-secondary-alt.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(26,59,102,0.5)}.btn-link{font-weight:400;color:#175DDC;text-decoration:none}.btn-link:hover{color:#104097;text-decoration:underline}.btn-link:focus,.btn-link.focus{text-decoration:underline;box-shadow:none}.btn-link:disabled,.btn-link.disabled{color:#6c757d;pointer-events:none}.btn-lg,.btn-group-lg>.btn,.swal2-popup .swal2-actions .btn-group-lg>button{padding:.5rem 1rem;font-size:1.15rem;line-height:1.5;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn,.swal2-popup .swal2-actions .btn-group-sm>button{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{transition:opacity 0.15s linear}@media (prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height 0.35s ease}@media (prefers-reduced-motion: reduce){.collapsing{transition:none}}.dropup,.dropright,.dropdown,.dropleft{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#333;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width: 1px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width: 2px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width: 3px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width: 4px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^="top"],.dropdown-menu[x-placement^="right"],.dropdown-menu[x-placement^="bottom"],.dropdown-menu[x-placement^="left"]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#333;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:hover,.dropdown-item:focus{color:#16181b;text-decoration:none;background-color:rgba(0,0,0,0.06)}.dropdown-item.active,.dropdown-item:active{color:#333;text-decoration:none;background-color:rgba(0,0,0,0.1)}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#333}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.swal2-popup .swal2-actions .btn-group>button,.btn-group-vertical>.btn,.swal2-popup .swal2-actions .btn-group-vertical>button{position:relative;flex:1 1 auto}.btn-group>.btn:hover,.swal2-popup .swal2-actions .btn-group>button:hover,.btn-group-vertical>.btn:hover,.swal2-popup .swal2-actions .btn-group-vertical>button:hover{z-index:1}.btn-group>.btn:focus,.swal2-popup .swal2-actions .btn-group>button:focus,.btn-group>.btn:active,.swal2-popup .swal2-actions .btn-group>button:active,.btn-group>.btn.active,.swal2-popup .swal2-actions .btn-group>button.active,.btn-group-vertical>.btn:focus,.swal2-popup .swal2-actions .btn-group-vertical>button:focus,.btn-group-vertical>.btn:active,.swal2-popup .swal2-actions .btn-group-vertical>button:active,.btn-group-vertical>.btn.active,.swal2-popup .swal2-actions .btn-group-vertical>button.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.swal2-popup .swal2-actions .btn-group>button:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-left:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.swal2-popup .swal2-actions .btn-group>button:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn,.swal2-popup .swal2-actions .btn-group>.btn-group:not(:last-child)>button{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:not(:first-child),.swal2-popup .swal2-actions .btn-group>button:not(:first-child),.btn-group>.btn-group:not(:first-child)>.btn,.swal2-popup .swal2-actions .btn-group>.btn-group:not(:first-child)>button{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split,.swal2-popup .swal2-actions .btn-group-sm>button+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split,.swal2-popup .swal2-actions .btn-group-lg>button+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.swal2-popup .swal2-actions .btn-group-vertical>button,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.swal2-popup .swal2-actions .btn-group-vertical>button:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.swal2-popup .swal2-actions .btn-group-vertical>button:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn,.swal2-popup .swal2-actions .btn-group-vertical>.btn-group:not(:last-child)>button{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:not(:first-child),.swal2-popup .swal2-actions .btn-group-vertical>button:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child)>.btn,.swal2-popup .swal2-actions .btn-group-vertical>.btn-group:not(:first-child)>button{border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.swal2-popup .swal2-actions .btn-group-toggle>button,.btn-group-toggle>.btn-group>.btn,.swal2-popup .swal2-actions .btn-group-toggle>.btn-group>button{margin-bottom:0}.btn-group-toggle>.btn input[type="radio"],.swal2-popup .swal2-actions .btn-group-toggle>button input[type="radio"],.btn-group-toggle>.btn input[type="checkbox"],.swal2-popup .swal2-actions .btn-group-toggle>button input[type="checkbox"],.btn-group-toggle>.btn-group>.btn input[type="radio"],.swal2-popup .swal2-actions .btn-group-toggle>.btn-group>button input[type="radio"],.btn-group-toggle>.btn-group>.btn input[type="checkbox"],.swal2-popup .swal2-actions .btn-group-toggle>.btn-group>button input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-control-plaintext,.input-group>.custom-select,.input-group>.custom-file{position:relative;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.form-control+.form-control,.input-group>.form-control+.custom-select,.input-group>.form-control+.custom-file,.input-group>.form-control-plaintext+.form-control,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.custom-file,.input-group>.custom-select+.form-control,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.custom-file,.input-group>.custom-file+.form-control,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.custom-file{margin-left:-1px}.input-group>.form-control:focus,.input-group>.custom-select:focus,.input-group>.custom-file .custom-file-input:focus ~ .custom-file-label{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.form-control:not(:last-child),.input-group>.custom-select:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.form-control:not(:first-child),.input-group>.custom-select:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-prepend,.input-group-append{display:flex}.input-group-prepend .btn,.input-group-prepend .swal2-popup .swal2-actions button,.swal2-popup .swal2-actions .input-group-prepend button,.input-group-append .btn,.input-group-append .swal2-popup .swal2-actions button,.swal2-popup .swal2-actions .input-group-append button{position:relative;z-index:2}.input-group-prepend .btn:focus,.input-group-prepend .swal2-popup .swal2-actions button:focus,.swal2-popup .swal2-actions .input-group-prepend button:focus,.input-group-append .btn:focus,.input-group-append .swal2-popup .swal2-actions button:focus,.swal2-popup .swal2-actions .input-group-append button:focus{z-index:3}.input-group-prepend .btn+.btn,.input-group-prepend .swal2-popup .swal2-actions button+.btn,.swal2-popup .swal2-actions .input-group-prepend button+.btn,.input-group-prepend .swal2-popup .swal2-actions .btn+button,.swal2-popup .swal2-actions .input-group-prepend .btn+button,.input-group-prepend .swal2-popup .swal2-actions button+button,.swal2-popup .swal2-actions .input-group-prepend button+button,.input-group-prepend .btn+.input-group-text,.input-group-prepend .swal2-popup .swal2-actions button+.input-group-text,.swal2-popup .swal2-actions .input-group-prepend button+.input-group-text,.input-group-prepend .input-group-text+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .swal2-popup .swal2-actions .input-group-text+button,.swal2-popup .swal2-actions .input-group-prepend .input-group-text+button,.input-group-append .btn+.btn,.input-group-append .swal2-popup .swal2-actions button+.btn,.swal2-popup .swal2-actions .input-group-append button+.btn,.input-group-append .swal2-popup .swal2-actions .btn+button,.swal2-popup .swal2-actions .input-group-append .btn+button,.input-group-append .swal2-popup .swal2-actions button+button,.swal2-popup .swal2-actions .input-group-append button+button,.input-group-append .btn+.input-group-text,.input-group-append .swal2-popup .swal2-actions button+.input-group-text,.swal2-popup .swal2-actions .input-group-append button+.input-group-text,.input-group-append .input-group-text+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .swal2-popup .swal2-actions .input-group-text+button,.swal2-popup .swal2-actions .input-group-append .input-group-text+button{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type="radio"],.input-group-text input[type="checkbox"]{margin-top:0}.input-group-lg>.form-control:not(textarea),.input-group-lg>.custom-select{height:calc(1.5em + 1rem + 2px)}.input-group-lg>.form-control,.input-group-lg>.custom-select,.input-group-lg>.input-group-prepend>.input-group-text,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.swal2-popup .swal2-actions .input-group-lg>.input-group-prepend>button,.input-group-lg>.input-group-append>.btn,.swal2-popup .swal2-actions .input-group-lg>.input-group-append>button{padding:.5rem 1rem;font-size:1.15rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.form-control:not(textarea),.input-group-sm>.custom-select{height:calc(1.5em + .5rem + 2px)}.input-group-sm>.form-control,.input-group-sm>.custom-select,.input-group-sm>.input-group-prepend>.input-group-text,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.swal2-popup .swal2-actions .input-group-sm>.input-group-prepend>button,.input-group-sm>.input-group-append>.btn,.swal2-popup .swal2-actions .input-group-sm>.input-group-append>button{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-prepend>.btn,.swal2-popup .swal2-actions .input-group>.input-group-prepend>button,.input-group>.input-group-prepend>.input-group-text,.input-group>.input-group-append:not(:last-child)>.btn,.swal2-popup .swal2-actions .input-group>.input-group-append:not(:last-child)>button,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.swal2-popup .swal2-actions .input-group>.input-group-append:last-child>button:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.swal2-popup .swal2-actions .input-group>.input-group-append>button,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:not(:first-child)>.btn,.swal2-popup .swal2-actions .input-group>.input-group-prepend:not(:first-child)>button,.input-group>.input-group-prepend:not(:first-child)>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.swal2-popup .swal2-actions .input-group>.input-group-prepend:first-child>button:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked ~ .custom-control-label::before{color:#fff;border-color:#175DDC;background-color:#175DDC}.custom-control-input:focus ~ .custom-control-label::before{box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.custom-control-input:focus:not(:checked) ~ .custom-control-label::before{border-color:#81a9f2}.custom-control-input:not(:disabled):active ~ .custom-control-label::before{color:#fff;background-color:#afc8f7;border-color:#afc8f7}.custom-control-input:disabled ~ .custom-control-label{color:#6c757d}.custom-control-input:disabled ~ .custom-control-label::before{background-color:#e0e0e0}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fbfbfb;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50% / 50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before{border-color:#175DDC;background-color:#175DDC}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(23,93,220,0.5)}.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before{background-color:rgba(23,93,220,0.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked ~ .custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(23,93,220,0.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked ~ .custom-control-label::after{background-color:#fbfbfb;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(23,93,220,0.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;background-color:#fbfbfb;border:1px solid #ced4da;border-radius:.25rem;appearance:none}.custom-select:focus{border-color:#81a9f2;outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fbfbfb}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.15rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus ~ .custom-file-label{border-color:#81a9f2;box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.custom-file-input:disabled ~ .custom-file-label{background-color:#e0e0e0}.custom-file-input:lang(en) ~ .custom-file-label::after{content:"Browse"}.custom-file-input ~ .custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fbfbfb;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:calc(1rem + .4rem);padding:0;background-color:transparent;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(23,93,220,0.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(23,93,220,0.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(23,93,220,0.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#175DDC;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#afc8f7}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#175DDC;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#afc8f7}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#175DDC;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#afc8f7}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:hover,.nav-link:focus{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#175DDC}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:.75rem 1rem}.navbar>.container,.navbar>.container-fluid{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:0;padding-bottom:0;margin-right:1rem;font-size:2.1875rem;line-height:inherit;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.15rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:hover,.navbar-toggler:focus{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width: 0.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 1px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width: 1.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 2px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width: 2.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 3px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width: 3.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 4px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,0.9)}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:rgba(0,0,0,0.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,0.5)}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:rgba(0,0,0,0.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,0.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .nav-link.active{color:rgba(0,0,0,0.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,0.5);border-color:rgba(0,0,0,0.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0,0,0,0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,0.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,0.9)}.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:rgba(0,0,0,0.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,0.7)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,0.9)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,0.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,0.7);border-color:rgba(255,255,255,0.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255,255,255,0.7)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,0.7)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,0.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.6rem}.card-subtitle{margin-top:-.3rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.6rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,0.03);border-bottom:1px solid rgba(0,0,0,0.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.6rem 1.25rem;background-color:rgba(0,0,0,0.03);border-top:1px solid rgba(0,0,0,0.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.6rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:flex;flex-direction:column}.card-deck .card{margin-bottom:10px}@media (min-width: 1px){.card-deck{flex-flow:row wrap;margin-right:-10px;margin-left:-10px}.card-deck .card{display:flex;flex:1 0 0%;flex-direction:column;margin-right:10px;margin-bottom:0;margin-left:10px}}.card-group{display:flex;flex-direction:column}.card-group>.card{margin-bottom:10px}@media (min-width: 1px){.card-group{flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.6rem}@media (min-width: 1px){.card-columns{column-count:3;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#175DDC;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#104097;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#175DDC;border-color:#175DDC}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.15rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.badge{transition:none}}a.badge:hover,a.badge:focus{text-decoration:none}.badge:empty{display:none}.btn .badge,.swal2-popup .swal2-actions button .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#175DDC}a.badge-primary:hover,a.badge-primary:focus{color:#fff;background-color:#1249ae}a.badge-primary:focus,a.badge-primary.focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,0.5)}.badge-secondary{color:#212529;background-color:#ced4da}a.badge-secondary:hover,a.badge-secondary:focus{color:#212529;background-color:#b1bbc4}a.badge-secondary:focus,a.badge-secondary.focus{outline:0;box-shadow:0 0 0 .2rem rgba(206,212,218,0.5)}.badge-success{color:#fff;background-color:#00a65a}a.badge-success:hover,a.badge-success:focus{color:#fff;background-color:#00733e}a.badge-success:focus,a.badge-success.focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,166,90,0.5)}.badge-info{color:#fff;background-color:#555}a.badge-info:hover,a.badge-info:focus{color:#fff;background-color:#3c3c3c}a.badge-info:focus,a.badge-info.focus{outline:0;box-shadow:0 0 0 .2rem rgba(85,85,85,0.5)}.badge-warning{color:#fff;background-color:#bf7e16}a.badge-warning:hover,a.badge-warning:focus{color:#fff;background-color:#916011}a.badge-warning:focus,a.badge-warning.focus{outline:0;box-shadow:0 0 0 .2rem rgba(191,126,22,0.5)}.badge-danger{color:#fff;background-color:#dd4b39}a.badge-danger:hover,a.badge-danger:focus{color:#fff;background-color:#c23321}a.badge-danger:focus,a.badge-danger.focus{outline:0;box-shadow:0 0 0 .2rem rgba(221,75,57,0.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:hover,a.badge-light:focus{color:#212529;background-color:#dae0e5}a.badge-light:focus,a.badge-light.focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:hover,a.badge-dark:focus{color:#fff;background-color:#1d2124}a.badge-dark:focus,a.badge-dark.focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.badge-primary-accent{color:#fff;background-color:#1252A3}a.badge-primary-accent:hover,a.badge-primary-accent:focus{color:#fff;background-color:#0d3b75}a.badge-primary-accent:focus,a.badge-primary-accent.focus{outline:0;box-shadow:0 0 0 .2rem rgba(18,82,163,0.5)}.badge-secondary-alt{color:#fff;background-color:#1A3B66}a.badge-secondary-alt:hover,a.badge-secondary-alt:focus{color:#fff;background-color:#10233d}a.badge-secondary-alt:focus,a.badge-secondary-alt.focus{outline:0;box-shadow:0 0 0 .2rem rgba(26,59,102,0.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width: 1px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#0c3072;background-color:#d1dff8;border-color:#bed2f5}.alert-primary hr{border-top-color:#a8c3f2}.alert-primary .alert-link{color:#071d44}.alert-secondary{color:#6b6e71;background-color:#f5f6f8;border-color:#f1f3f5}.alert-secondary hr{border-top-color:#e2e6ea}.alert-secondary .alert-link{color:#525557}.alert-success{color:#00562f;background-color:#ccedde;border-color:#b8e6d1}.alert-success hr{border-top-color:#a5dfc5}.alert-success .alert-link{color:#002313}.alert-info{color:#2c2c2c;background-color:#ddd;border-color:#cfcfcf}.alert-info hr{border-top-color:#c2c2c2}.alert-info .alert-link{color:#131313}.alert-warning{color:#63420b;background-color:#f2e5d0;border-color:#eddbbe}.alert-warning hr{border-top-color:#e7d0aa}.alert-warning .alert-link{color:#352306}.alert-danger{color:#73271e;background-color:#f8dbd7;border-color:#f5cdc8}.alert-danger hr{border-top-color:#f1b9b2}.alert-danger .alert-link{color:#4b1913}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}.alert-primary-accent{color:#092b55;background-color:#d0dced;border-color:#bdcfe5}.alert-primary-accent hr{border-top-color:#abc2de}.alert-primary-accent .alert-link{color:#041427}.alert-secondary-alt{color:#0e1f35;background-color:#d1d8e0;border-color:#bfc8d4}.alert-secondary-alt hr{border-top-color:#b0bbca}.alert-secondary-alt .alert-link{color:#03070d}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#175DDC;transition:width 0.6s ease}@media (prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:1rem 1rem}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#333;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.6rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,0.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#333;background-color:#fff;border-color:rgba(0,0,0,0.125)}.list-group-horizontal{flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}@media (min-width: 1px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width: 2px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width: 3px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width: 4px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#0c3072;background-color:#bed2f5}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#0c3072;background-color:#a8c3f2}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#0c3072;border-color:#0c3072}.list-group-item-secondary{color:#6b6e71;background-color:#f1f3f5}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#6b6e71;background-color:#e2e6ea}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#6b6e71;border-color:#6b6e71}.list-group-item-success{color:#00562f;background-color:#b8e6d1}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#00562f;background-color:#a5dfc5}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#00562f;border-color:#00562f}.list-group-item-info{color:#2c2c2c;background-color:#cfcfcf}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#2c2c2c;background-color:#c2c2c2}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#2c2c2c;border-color:#2c2c2c}.list-group-item-warning{color:#63420b;background-color:#eddbbe}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#63420b;background-color:#e7d0aa}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#63420b;border-color:#63420b}.list-group-item-danger{color:#73271e;background-color:#f5cdc8}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#73271e;background-color:#f1b9b2}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#73271e;border-color:#73271e}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.list-group-item-primary-accent{color:#092b55;background-color:#bdcfe5}.list-group-item-primary-accent.list-group-item-action:hover,.list-group-item-primary-accent.list-group-item-action:focus{color:#092b55;background-color:#abc2de}.list-group-item-primary-accent.list-group-item-action.active{color:#fff;background-color:#092b55;border-color:#092b55}.list-group-item-secondary-alt{color:#0e1f35;background-color:#bfc8d4}.list-group-item-secondary-alt.list-group-item-action:hover,.list-group-item-secondary-alt.list-group-item-action:focus{color:#0e1f35;background-color:#b0bbca}.list-group-item-secondary-alt.list-group-item-action.active{color:#fff;background-color:#0e1f35;border-color:#0e1f35}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):hover,.close:not(:disabled):not(.disabled):focus{opacity:.75}button.close{padding:0;background-color:transparent;border:0;appearance:none}a.close.disabled{pointer-events:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform 0.3s ease-out;transform:translate(0, -50px)}@media (prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-header,.modal-dialog-scrollable .modal-footer{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.3}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;align-items:center;justify-content:flex-end;padding:1rem;border-top:1px solid #dee2e6;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 1px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width: 3px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width: 4px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top,.bs-tooltip-auto[x-placement^="top"]{padding:.4rem 0}.bs-tooltip-top .arrow,.bs-tooltip-auto[x-placement^="top"] .arrow{bottom:0}.bs-tooltip-top .arrow::before,.bs-tooltip-auto[x-placement^="top"] .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-right,.bs-tooltip-auto[x-placement^="right"]{padding:0 .4rem}.bs-tooltip-right .arrow,.bs-tooltip-auto[x-placement^="right"] .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-right .arrow::before,.bs-tooltip-auto[x-placement^="right"] .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-bottom,.bs-tooltip-auto[x-placement^="bottom"]{padding:.4rem 0}.bs-tooltip-bottom .arrow,.bs-tooltip-auto[x-placement^="bottom"] .arrow{top:0}.bs-tooltip-bottom .arrow::before,.bs-tooltip-auto[x-placement^="bottom"] .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-left,.bs-tooltip-auto[x-placement^="left"]{padding:0 .4rem}.bs-tooltip-left .arrow,.bs-tooltip-auto[x-placement^="left"] .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-left .arrow::before,.bs-tooltip-auto[x-placement^="left"] .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::before,.popover .arrow::after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-top,.bs-popover-auto[x-placement^="top"]{margin-bottom:.5rem}.bs-popover-top>.arrow,.bs-popover-auto[x-placement^="top"]>.arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-top>.arrow::before,.bs-popover-auto[x-placement^="top"]>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,0.25)}.bs-popover-top>.arrow::after,.bs-popover-auto[x-placement^="top"]>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-right,.bs-popover-auto[x-placement^="right"]{margin-left:.5rem}.bs-popover-right>.arrow,.bs-popover-auto[x-placement^="right"]>.arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-right>.arrow::before,.bs-popover-auto[x-placement^="right"]>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,0.25)}.bs-popover-right>.arrow::after,.bs-popover-auto[x-placement^="right"]>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-bottom,.bs-popover-auto[x-placement^="bottom"]{margin-top:.5rem}.bs-popover-bottom>.arrow,.bs-popover-auto[x-placement^="bottom"]>.arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-bottom>.arrow::before,.bs-popover-auto[x-placement^="bottom"]>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,0.25)}.bs-popover-bottom>.arrow::after,.bs-popover-auto[x-placement^="bottom"]>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-bottom .popover-header::before,.bs-popover-auto[x-placement^="bottom"] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-left,.bs-popover-auto[x-placement^="left"]{margin-right:.5rem}.bs-popover-left>.arrow,.bs-popover-auto[x-placement^="left"]>.arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-left>.arrow::before,.bs-popover-auto[x-placement^="left"]>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,0.25)}.bs-popover-left>.arrow::after,.bs-popover-auto[x-placement^="left"]>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#333}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-left),.active.carousel-item-right{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-right),.active.carousel-item-left{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:0s .6s opacity}@media (prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity 0.15s ease}@media (prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50% / 100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity 0.6s ease}@media (prefers-reduced-motion: reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.bg-primary{background-color:#175DDC !important}a.bg-primary:hover,a.bg-primary:focus,button.bg-primary:hover,button.bg-primary:focus{background-color:#1249ae !important}.bg-secondary{background-color:#ced4da !important}a.bg-secondary:hover,a.bg-secondary:focus,button.bg-secondary:hover,button.bg-secondary:focus{background-color:#b1bbc4 !important}.bg-success{background-color:#00a65a !important}a.bg-success:hover,a.bg-success:focus,button.bg-success:hover,button.bg-success:focus{background-color:#00733e !important}.bg-info{background-color:#555 !important}a.bg-info:hover,a.bg-info:focus,button.bg-info:hover,button.bg-info:focus{background-color:#3c3c3c !important}.bg-warning{background-color:#bf7e16 !important}a.bg-warning:hover,a.bg-warning:focus,button.bg-warning:hover,button.bg-warning:focus{background-color:#916011 !important}.bg-danger{background-color:#dd4b39 !important}a.bg-danger:hover,a.bg-danger:focus,button.bg-danger:hover,button.bg-danger:focus{background-color:#c23321 !important}.bg-light{background-color:#f8f9fa !important}a.bg-light:hover,a.bg-light:focus,button.bg-light:hover,button.bg-light:focus{background-color:#dae0e5 !important}.bg-dark{background-color:#343a40 !important}a.bg-dark:hover,a.bg-dark:focus,button.bg-dark:hover,button.bg-dark:focus{background-color:#1d2124 !important}.bg-primary-accent{background-color:#1252A3 !important}a.bg-primary-accent:hover,a.bg-primary-accent:focus,button.bg-primary-accent:hover,button.bg-primary-accent:focus{background-color:#0d3b75 !important}.bg-secondary-alt{background-color:#1A3B66 !important}a.bg-secondary-alt:hover,a.bg-secondary-alt:focus,button.bg-secondary-alt:hover,button.bg-secondary-alt:focus{background-color:#10233d !important}.bg-white{background-color:#fff !important}.bg-transparent{background-color:transparent !important}.border{border:1px solid #dee2e6 !important}.border-top{border-top:1px solid #dee2e6 !important}.border-right{border-right:1px solid #dee2e6 !important}.border-bottom{border-bottom:1px solid #dee2e6 !important}.border-left{border-left:1px solid #dee2e6 !important}.border-0{border:0 !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.border-primary{border-color:#175DDC !important}.border-secondary{border-color:#ced4da !important}.border-success{border-color:#00a65a !important}.border-info{border-color:#555 !important}.border-warning{border-color:#bf7e16 !important}.border-danger{border-color:#dd4b39 !important}.border-light{border-color:#f8f9fa !important}.border-dark{border-color:#343a40 !important}.border-primary-accent{border-color:#1252A3 !important}.border-secondary-alt{border-color:#1A3B66 !important}.border-white{border-color:#fff !important}.rounded-sm{border-radius:.2rem !important}.rounded,.table.table-list td.table-list-icon img,app-avatar img{border-radius:.25rem !important}.rounded-top{border-top-left-radius:.25rem !important;border-top-right-radius:.25rem !important}.rounded-right{border-top-right-radius:.25rem !important;border-bottom-right-radius:.25rem !important}.rounded-bottom{border-bottom-right-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-left{border-top-left-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-lg{border-radius:.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-0{border-radius:0 !important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}@media (min-width: 1px){.d-sm-none{display:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}}@media (min-width: 2px){.d-md-none{display:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}}@media (min-width: 3px){.d-lg-none{display:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}}@media (min-width: 4px){.d-xl-none{display:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}}@media print{.d-print-none{display:none !important}.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.85714%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-fill{flex:1 1 auto !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}@media (min-width: 1px){.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}}@media (min-width: 2px){.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}}@media (min-width: 3px){.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}}@media (min-width: 4px){.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}}.float-left{float:left !important}.float-right{float:right !important}.float-none{float:none !important}@media (min-width: 1px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media (min-width: 2px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media (min-width: 3px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media (min-width: 4px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports (position: sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only,.table.table-list tr:not(:hover) td.table-list-options>.dropdown:not(.show) button:not(:focus):not(:active),.table.table-list tr:not(:hover) td.table-list-options>button:not(:focus):not(:active){position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important}.shadow{box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important}.shadow-none{box-shadow:none !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mw-100{max-width:100% !important}.mh-100{max-height:100% !important}.min-vw-100{min-width:100vw !important}.min-vh-100{min-height:100vh !important}.vw-100{width:100vw !important}.vh-100{height:100vh !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:.25rem !important}.mt-1,.my-1{margin-top:.25rem !important}.mr-1,.mx-1{margin-right:.25rem !important}.mb-1,.my-1{margin-bottom:.25rem !important}.ml-1,.mx-1{margin-left:.25rem !important}.m-2{margin:.5rem !important}.mt-2,.form-check-block .form-check-label>span,.my-2{margin-top:.5rem !important}.mr-2,.mx-2{margin-right:.5rem !important}.mb-2,.my-2{margin-bottom:.5rem !important}.ml-2,.mx-2{margin-left:.5rem !important}.m-3{margin:1rem !important}.mt-3,.form-check-block+.form-check-block:not(.mt-2),.my-3{margin-top:1rem !important}.mr-3,.mx-3{margin-right:1rem !important}.mb-3,.my-3{margin-bottom:1rem !important}.ml-3,.mx-3{margin-left:1rem !important}.m-4{margin:1.5rem !important}.mt-4,.my-4{margin-top:1.5rem !important}.mr-4,.mx-4{margin-right:1.5rem !important}.mb-4,.card-body-header,.my-4{margin-bottom:1.5rem !important}.ml-4,.mx-4{margin-left:1.5rem !important}.m-5{margin:3rem !important}.mt-5,.my-5{margin-top:3rem !important}.mr-5,.mx-5{margin-right:3rem !important}.mb-5,.my-5{margin-bottom:3rem !important}.ml-5,.mx-5{margin-left:3rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:.25rem !important}.pt-1,.py-1{padding-top:.25rem !important}.pr-1,.px-1{padding-right:.25rem !important}.pb-1,.py-1{padding-bottom:.25rem !important}.pl-1,.px-1{padding-left:.25rem !important}.p-2{padding:.5rem !important}.pt-2,.py-2{padding-top:.5rem !important}.pr-2,.px-2{padding-right:.5rem !important}.pb-2,.py-2{padding-bottom:.5rem !important}.pl-2,.px-2{padding-left:.5rem !important}.p-3{padding:1rem !important}.pt-3,.py-3{padding-top:1rem !important}.pr-3,.px-3{padding-right:1rem !important}.pb-3,.py-3{padding-bottom:1rem !important}.pl-3,.px-3{padding-left:1rem !important}.p-4{padding:1.5rem !important}.pt-4,.py-4{padding-top:1.5rem !important}.pr-4,.px-4{padding-right:1.5rem !important}.pb-4,.py-4{padding-bottom:1.5rem !important}.pl-4,.px-4{padding-left:1.5rem !important}.p-5{padding:3rem !important}.pt-5,.py-5{padding-top:3rem !important}.pr-5,.px-5{padding-right:3rem !important}.pb-5,.py-5{padding-bottom:3rem !important}.pl-5,.px-5{padding-left:3rem !important}.m-n1{margin:-.25rem !important}.mt-n1,.my-n1{margin-top:-.25rem !important}.mr-n1,.mx-n1{margin-right:-.25rem !important}.mb-n1,.my-n1{margin-bottom:-.25rem !important}.ml-n1,.mx-n1{margin-left:-.25rem !important}.m-n2{margin:-.5rem !important}.mt-n2,.my-n2{margin-top:-.5rem !important}.mr-n2,.mx-n2{margin-right:-.5rem !important}.mb-n2,.my-n2{margin-bottom:-.5rem !important}.ml-n2,.mx-n2{margin-left:-.5rem !important}.m-n3{margin:-1rem !important}.mt-n3,.my-n3{margin-top:-1rem !important}.mr-n3,.mx-n3{margin-right:-1rem !important}.mb-n3,.my-n3{margin-bottom:-1rem !important}.ml-n3,.mx-n3{margin-left:-1rem !important}.m-n4{margin:-1.5rem !important}.mt-n4,.my-n4{margin-top:-1.5rem !important}.mr-n4,.mx-n4{margin-right:-1.5rem !important}.mb-n4,.my-n4{margin-bottom:-1.5rem !important}.ml-n4,.mx-n4{margin-left:-1.5rem !important}.m-n5{margin:-3rem !important}.mt-n5,.my-n5{margin-top:-3rem !important}.mr-n5,.mx-n5{margin-right:-3rem !important}.mb-n5,.my-n5{margin-bottom:-3rem !important}.ml-n5,.mx-n5{margin-left:-3rem !important}.m-auto{margin:auto !important}.mt-auto,.my-auto{margin-top:auto !important}.mr-auto,.mx-auto{margin-right:auto !important}.mb-auto,.my-auto{margin-bottom:auto !important}.ml-auto,.mx-auto{margin-left:auto !important}@media (min-width: 1px){.m-sm-0{margin:0 !important}.mt-sm-0,.my-sm-0{margin-top:0 !important}.mr-sm-0,.mx-sm-0{margin-right:0 !important}.mb-sm-0,.my-sm-0{margin-bottom:0 !important}.ml-sm-0,.mx-sm-0{margin-left:0 !important}.m-sm-1{margin:.25rem !important}.mt-sm-1,.my-sm-1{margin-top:.25rem !important}.mr-sm-1,.mx-sm-1{margin-right:.25rem !important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem !important}.ml-sm-1,.mx-sm-1{margin-left:.25rem !important}.m-sm-2{margin:.5rem !important}.mt-sm-2,.my-sm-2{margin-top:.5rem !important}.mr-sm-2,.mx-sm-2{margin-right:.5rem !important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem !important}.ml-sm-2,.mx-sm-2{margin-left:.5rem !important}.m-sm-3{margin:1rem !important}.mt-sm-3,.my-sm-3{margin-top:1rem !important}.mr-sm-3,.mx-sm-3{margin-right:1rem !important}.mb-sm-3,.my-sm-3{margin-bottom:1rem !important}.ml-sm-3,.mx-sm-3{margin-left:1rem !important}.m-sm-4{margin:1.5rem !important}.mt-sm-4,.my-sm-4{margin-top:1.5rem !important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem !important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem !important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem !important}.m-sm-5{margin:3rem !important}.mt-sm-5,.my-sm-5{margin-top:3rem !important}.mr-sm-5,.mx-sm-5{margin-right:3rem !important}.mb-sm-5,.my-sm-5{margin-bottom:3rem !important}.ml-sm-5,.mx-sm-5{margin-left:3rem !important}.p-sm-0{padding:0 !important}.pt-sm-0,.py-sm-0{padding-top:0 !important}.pr-sm-0,.px-sm-0{padding-right:0 !important}.pb-sm-0,.py-sm-0{padding-bottom:0 !important}.pl-sm-0,.px-sm-0{padding-left:0 !important}.p-sm-1{padding:.25rem !important}.pt-sm-1,.py-sm-1{padding-top:.25rem !important}.pr-sm-1,.px-sm-1{padding-right:.25rem !important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem !important}.pl-sm-1,.px-sm-1{padding-left:.25rem !important}.p-sm-2{padding:.5rem !important}.pt-sm-2,.py-sm-2{padding-top:.5rem !important}.pr-sm-2,.px-sm-2{padding-right:.5rem !important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem !important}.pl-sm-2,.px-sm-2{padding-left:.5rem !important}.p-sm-3{padding:1rem !important}.pt-sm-3,.py-sm-3{padding-top:1rem !important}.pr-sm-3,.px-sm-3{padding-right:1rem !important}.pb-sm-3,.py-sm-3{padding-bottom:1rem !important}.pl-sm-3,.px-sm-3{padding-left:1rem !important}.p-sm-4{padding:1.5rem !important}.pt-sm-4,.py-sm-4{padding-top:1.5rem !important}.pr-sm-4,.px-sm-4{padding-right:1.5rem !important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem !important}.pl-sm-4,.px-sm-4{padding-left:1.5rem !important}.p-sm-5{padding:3rem !important}.pt-sm-5,.py-sm-5{padding-top:3rem !important}.pr-sm-5,.px-sm-5{padding-right:3rem !important}.pb-sm-5,.py-sm-5{padding-bottom:3rem !important}.pl-sm-5,.px-sm-5{padding-left:3rem !important}.m-sm-n1{margin:-.25rem !important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem !important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem !important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem !important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem !important}.m-sm-n2{margin:-.5rem !important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem !important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem !important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem !important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem !important}.m-sm-n3{margin:-1rem !important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem !important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem !important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem !important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem !important}.m-sm-n4{margin:-1.5rem !important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem !important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem !important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem !important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem !important}.m-sm-n5{margin:-3rem !important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem !important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem !important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem !important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem !important}.m-sm-auto{margin:auto !important}.mt-sm-auto,.my-sm-auto{margin-top:auto !important}.mr-sm-auto,.mx-sm-auto{margin-right:auto !important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto !important}.ml-sm-auto,.mx-sm-auto{margin-left:auto !important}}@media (min-width: 2px){.m-md-0{margin:0 !important}.mt-md-0,.my-md-0{margin-top:0 !important}.mr-md-0,.mx-md-0{margin-right:0 !important}.mb-md-0,.my-md-0{margin-bottom:0 !important}.ml-md-0,.mx-md-0{margin-left:0 !important}.m-md-1{margin:.25rem !important}.mt-md-1,.my-md-1{margin-top:.25rem !important}.mr-md-1,.mx-md-1{margin-right:.25rem !important}.mb-md-1,.my-md-1{margin-bottom:.25rem !important}.ml-md-1,.mx-md-1{margin-left:.25rem !important}.m-md-2{margin:.5rem !important}.mt-md-2,.my-md-2{margin-top:.5rem !important}.mr-md-2,.mx-md-2{margin-right:.5rem !important}.mb-md-2,.my-md-2{margin-bottom:.5rem !important}.ml-md-2,.mx-md-2{margin-left:.5rem !important}.m-md-3{margin:1rem !important}.mt-md-3,.my-md-3{margin-top:1rem !important}.mr-md-3,.mx-md-3{margin-right:1rem !important}.mb-md-3,.my-md-3{margin-bottom:1rem !important}.ml-md-3,.mx-md-3{margin-left:1rem !important}.m-md-4{margin:1.5rem !important}.mt-md-4,.my-md-4{margin-top:1.5rem !important}.mr-md-4,.mx-md-4{margin-right:1.5rem !important}.mb-md-4,.my-md-4{margin-bottom:1.5rem !important}.ml-md-4,.mx-md-4{margin-left:1.5rem !important}.m-md-5{margin:3rem !important}.mt-md-5,.my-md-5{margin-top:3rem !important}.mr-md-5,.mx-md-5{margin-right:3rem !important}.mb-md-5,.my-md-5{margin-bottom:3rem !important}.ml-md-5,.mx-md-5{margin-left:3rem !important}.p-md-0{padding:0 !important}.pt-md-0,.py-md-0{padding-top:0 !important}.pr-md-0,.px-md-0{padding-right:0 !important}.pb-md-0,.py-md-0{padding-bottom:0 !important}.pl-md-0,.px-md-0{padding-left:0 !important}.p-md-1{padding:.25rem !important}.pt-md-1,.py-md-1{padding-top:.25rem !important}.pr-md-1,.px-md-1{padding-right:.25rem !important}.pb-md-1,.py-md-1{padding-bottom:.25rem !important}.pl-md-1,.px-md-1{padding-left:.25rem !important}.p-md-2{padding:.5rem !important}.pt-md-2,.py-md-2{padding-top:.5rem !important}.pr-md-2,.px-md-2{padding-right:.5rem !important}.pb-md-2,.py-md-2{padding-bottom:.5rem !important}.pl-md-2,.px-md-2{padding-left:.5rem !important}.p-md-3{padding:1rem !important}.pt-md-3,.py-md-3{padding-top:1rem !important}.pr-md-3,.px-md-3{padding-right:1rem !important}.pb-md-3,.py-md-3{padding-bottom:1rem !important}.pl-md-3,.px-md-3{padding-left:1rem !important}.p-md-4{padding:1.5rem !important}.pt-md-4,.py-md-4{padding-top:1.5rem !important}.pr-md-4,.px-md-4{padding-right:1.5rem !important}.pb-md-4,.py-md-4{padding-bottom:1.5rem !important}.pl-md-4,.px-md-4{padding-left:1.5rem !important}.p-md-5{padding:3rem !important}.pt-md-5,.py-md-5{padding-top:3rem !important}.pr-md-5,.px-md-5{padding-right:3rem !important}.pb-md-5,.py-md-5{padding-bottom:3rem !important}.pl-md-5,.px-md-5{padding-left:3rem !important}.m-md-n1{margin:-.25rem !important}.mt-md-n1,.my-md-n1{margin-top:-.25rem !important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem !important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem !important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem !important}.m-md-n2{margin:-.5rem !important}.mt-md-n2,.my-md-n2{margin-top:-.5rem !important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem !important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem !important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem !important}.m-md-n3{margin:-1rem !important}.mt-md-n3,.my-md-n3{margin-top:-1rem !important}.mr-md-n3,.mx-md-n3{margin-right:-1rem !important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem !important}.ml-md-n3,.mx-md-n3{margin-left:-1rem !important}.m-md-n4{margin:-1.5rem !important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem !important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem !important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem !important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem !important}.m-md-n5{margin:-3rem !important}.mt-md-n5,.my-md-n5{margin-top:-3rem !important}.mr-md-n5,.mx-md-n5{margin-right:-3rem !important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem !important}.ml-md-n5,.mx-md-n5{margin-left:-3rem !important}.m-md-auto{margin:auto !important}.mt-md-auto,.my-md-auto{margin-top:auto !important}.mr-md-auto,.mx-md-auto{margin-right:auto !important}.mb-md-auto,.my-md-auto{margin-bottom:auto !important}.ml-md-auto,.mx-md-auto{margin-left:auto !important}}@media (min-width: 3px){.m-lg-0{margin:0 !important}.mt-lg-0,.my-lg-0{margin-top:0 !important}.mr-lg-0,.mx-lg-0{margin-right:0 !important}.mb-lg-0,.my-lg-0{margin-bottom:0 !important}.ml-lg-0,.mx-lg-0{margin-left:0 !important}.m-lg-1{margin:.25rem !important}.mt-lg-1,.my-lg-1{margin-top:.25rem !important}.mr-lg-1,.mx-lg-1{margin-right:.25rem !important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem !important}.ml-lg-1,.mx-lg-1{margin-left:.25rem !important}.m-lg-2{margin:.5rem !important}.mt-lg-2,.my-lg-2{margin-top:.5rem !important}.mr-lg-2,.mx-lg-2{margin-right:.5rem !important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem !important}.ml-lg-2,.mx-lg-2{margin-left:.5rem !important}.m-lg-3{margin:1rem !important}.mt-lg-3,.my-lg-3{margin-top:1rem !important}.mr-lg-3,.mx-lg-3{margin-right:1rem !important}.mb-lg-3,.my-lg-3{margin-bottom:1rem !important}.ml-lg-3,.mx-lg-3{margin-left:1rem !important}.m-lg-4{margin:1.5rem !important}.mt-lg-4,.my-lg-4{margin-top:1.5rem !important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem !important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem !important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem !important}.m-lg-5{margin:3rem !important}.mt-lg-5,.my-lg-5{margin-top:3rem !important}.mr-lg-5,.mx-lg-5{margin-right:3rem !important}.mb-lg-5,.my-lg-5{margin-bottom:3rem !important}.ml-lg-5,.mx-lg-5{margin-left:3rem !important}.p-lg-0{padding:0 !important}.pt-lg-0,.py-lg-0{padding-top:0 !important}.pr-lg-0,.px-lg-0{padding-right:0 !important}.pb-lg-0,.py-lg-0{padding-bottom:0 !important}.pl-lg-0,.px-lg-0{padding-left:0 !important}.p-lg-1{padding:.25rem !important}.pt-lg-1,.py-lg-1{padding-top:.25rem !important}.pr-lg-1,.px-lg-1{padding-right:.25rem !important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem !important}.pl-lg-1,.px-lg-1{padding-left:.25rem !important}.p-lg-2{padding:.5rem !important}.pt-lg-2,.py-lg-2{padding-top:.5rem !important}.pr-lg-2,.px-lg-2{padding-right:.5rem !important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem !important}.pl-lg-2,.px-lg-2{padding-left:.5rem !important}.p-lg-3{padding:1rem !important}.pt-lg-3,.py-lg-3{padding-top:1rem !important}.pr-lg-3,.px-lg-3{padding-right:1rem !important}.pb-lg-3,.py-lg-3{padding-bottom:1rem !important}.pl-lg-3,.px-lg-3{padding-left:1rem !important}.p-lg-4{padding:1.5rem !important}.pt-lg-4,.py-lg-4{padding-top:1.5rem !important}.pr-lg-4,.px-lg-4{padding-right:1.5rem !important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem !important}.pl-lg-4,.px-lg-4{padding-left:1.5rem !important}.p-lg-5{padding:3rem !important}.pt-lg-5,.py-lg-5{padding-top:3rem !important}.pr-lg-5,.px-lg-5{padding-right:3rem !important}.pb-lg-5,.py-lg-5{padding-bottom:3rem !important}.pl-lg-5,.px-lg-5{padding-left:3rem !important}.m-lg-n1{margin:-.25rem !important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem !important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem !important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem !important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem !important}.m-lg-n2{margin:-.5rem !important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem !important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem !important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem !important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem !important}.m-lg-n3{margin:-1rem !important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem !important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem !important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem !important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem !important}.m-lg-n4{margin:-1.5rem !important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem !important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem !important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem !important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem !important}.m-lg-n5{margin:-3rem !important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem !important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem !important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem !important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem !important}.m-lg-auto{margin:auto !important}.mt-lg-auto,.my-lg-auto{margin-top:auto !important}.mr-lg-auto,.mx-lg-auto{margin-right:auto !important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto !important}.ml-lg-auto,.mx-lg-auto{margin-left:auto !important}}@media (min-width: 4px){.m-xl-0{margin:0 !important}.mt-xl-0,.my-xl-0{margin-top:0 !important}.mr-xl-0,.mx-xl-0{margin-right:0 !important}.mb-xl-0,.my-xl-0{margin-bottom:0 !important}.ml-xl-0,.mx-xl-0{margin-left:0 !important}.m-xl-1{margin:.25rem !important}.mt-xl-1,.my-xl-1{margin-top:.25rem !important}.mr-xl-1,.mx-xl-1{margin-right:.25rem !important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem !important}.ml-xl-1,.mx-xl-1{margin-left:.25rem !important}.m-xl-2{margin:.5rem !important}.mt-xl-2,.my-xl-2{margin-top:.5rem !important}.mr-xl-2,.mx-xl-2{margin-right:.5rem !important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem !important}.ml-xl-2,.mx-xl-2{margin-left:.5rem !important}.m-xl-3{margin:1rem !important}.mt-xl-3,.my-xl-3{margin-top:1rem !important}.mr-xl-3,.mx-xl-3{margin-right:1rem !important}.mb-xl-3,.my-xl-3{margin-bottom:1rem !important}.ml-xl-3,.mx-xl-3{margin-left:1rem !important}.m-xl-4{margin:1.5rem !important}.mt-xl-4,.my-xl-4{margin-top:1.5rem !important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem !important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem !important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem !important}.m-xl-5{margin:3rem !important}.mt-xl-5,.my-xl-5{margin-top:3rem !important}.mr-xl-5,.mx-xl-5{margin-right:3rem !important}.mb-xl-5,.my-xl-5{margin-bottom:3rem !important}.ml-xl-5,.mx-xl-5{margin-left:3rem !important}.p-xl-0{padding:0 !important}.pt-xl-0,.py-xl-0{padding-top:0 !important}.pr-xl-0,.px-xl-0{padding-right:0 !important}.pb-xl-0,.py-xl-0{padding-bottom:0 !important}.pl-xl-0,.px-xl-0{padding-left:0 !important}.p-xl-1{padding:.25rem !important}.pt-xl-1,.py-xl-1{padding-top:.25rem !important}.pr-xl-1,.px-xl-1{padding-right:.25rem !important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem !important}.pl-xl-1,.px-xl-1{padding-left:.25rem !important}.p-xl-2{padding:.5rem !important}.pt-xl-2,.py-xl-2{padding-top:.5rem !important}.pr-xl-2,.px-xl-2{padding-right:.5rem !important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem !important}.pl-xl-2,.px-xl-2{padding-left:.5rem !important}.p-xl-3{padding:1rem !important}.pt-xl-3,.py-xl-3{padding-top:1rem !important}.pr-xl-3,.px-xl-3{padding-right:1rem !important}.pb-xl-3,.py-xl-3{padding-bottom:1rem !important}.pl-xl-3,.px-xl-3{padding-left:1rem !important}.p-xl-4{padding:1.5rem !important}.pt-xl-4,.py-xl-4{padding-top:1.5rem !important}.pr-xl-4,.px-xl-4{padding-right:1.5rem !important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem !important}.pl-xl-4,.px-xl-4{padding-left:1.5rem !important}.p-xl-5{padding:3rem !important}.pt-xl-5,.py-xl-5{padding-top:3rem !important}.pr-xl-5,.px-xl-5{padding-right:3rem !important}.pb-xl-5,.py-xl-5{padding-bottom:3rem !important}.pl-xl-5,.px-xl-5{padding-left:3rem !important}.m-xl-n1{margin:-.25rem !important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem !important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem !important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem !important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem !important}.m-xl-n2{margin:-.5rem !important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem !important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem !important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem !important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem !important}.m-xl-n3{margin:-1rem !important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem !important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem !important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem !important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem !important}.m-xl-n4{margin:-1.5rem !important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem !important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem !important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem !important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem !important}.m-xl-n5{margin:-3rem !important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem !important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem !important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem !important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem !important}.m-xl-auto{margin:auto !important}.mt-xl-auto,.my-xl-auto{margin-top:auto !important}.mr-xl-auto,.mx-xl-auto{margin-right:auto !important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto !important}.ml-xl-auto,.mx-xl-auto{margin-left:auto !important}}.text-monospace,.totp .totp-code{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace !important}.text-justify{text-align:justify !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}@media (min-width: 1px){.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 2px){.text-md-left{text-align:left !important}.text-md-right{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 3px){.text-lg-left{text-align:left !important}.text-lg-right{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 4px){.text-xl-left{text-align:left !important}.text-xl-right{text-align:right !important}.text-xl-center{text-align:center !important}}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.font-weight-light{font-weight:300 !important}.font-weight-lighter{font-weight:lighter !important}.font-weight-normal{font-weight:400 !important}.font-weight-bold{font-weight:700 !important}.font-weight-bolder{font-weight:bolder !important}.font-italic{font-style:italic !important}.text-white{color:#fff !important}.text-primary{color:#175DDC !important}a.text-primary:hover,a.text-primary:focus{color:#104097 !important}.text-secondary{color:#ced4da !important}a.text-secondary:hover,a.text-secondary:focus{color:#a2aeb9 !important}.text-success{color:#00a65a !important}a.text-success:hover,a.text-success:focus{color:#005a31 !important}.text-info{color:#555 !important}a.text-info:hover,a.text-info:focus{color:#2f2f2f !important}.text-warning{color:#bf7e16 !important}a.text-warning:hover,a.text-warning:focus{color:#7a510e !important}.text-danger{color:#dd4b39 !important}a.text-danger:hover,a.text-danger:focus{color:#ac2d1e !important}.text-light{color:#f8f9fa !important}a.text-light:hover,a.text-light:focus{color:#cbd3da !important}.text-dark{color:#343a40 !important}a.text-dark:hover,a.text-dark:focus{color:#121416 !important}.text-primary-accent{color:#1252A3 !important}a.text-primary-accent:hover,a.text-primary-accent:focus{color:#0a2f5e !important}.text-secondary-alt{color:#1A3B66 !important}a.text-secondary-alt:hover,a.text-secondary-alt:focus{color:#0a1829 !important}.text-body{color:#333 !important}.text-muted,.card-header small,.modal-header small{color:#6c757d !important}.text-black-50{color:rgba(0,0,0,0.5) !important}.text-white-50{color:rgba(255,255,255,0.5) !important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none !important}.text-break{word-break:break-word !important;overflow-wrap:break-word !important}.text-reset{color:inherit !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media print{*,*::before,*::after{text-shadow:none !important;box-shadow:none !important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap !important}pre,blockquote{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:3px !important}.container{min-width:3px !important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #dee2e6 !important}.table-dark{color:inherit}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}/*! - * 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:'FontAwesome';src:url(../fonts/fontawesome-webfont.eot);src:url(../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0) format("embedded-opentype"),url(../fonts/fontawesome-webfont.woff2) format("woff2"),url(../fonts/fontawesome-webfont.woff) format("woff"),url(../fonts/fontawesome-webfont.ttf) format("truetype"),url(../fonts/fontawesome-webfont.svg#fontawesomeregular) format("svg");font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\F000"}.fa-music:before{content:"\F001"}.fa-search:before{content:"\F002"}.fa-envelope-o:before{content:"\F003"}.fa-heart:before{content:"\F004"}.fa-star:before{content:"\F005"}.fa-star-o:before{content:"\F006"}.fa-user:before{content:"\F007"}.fa-film:before{content:"\F008"}.fa-th-large:before{content:"\F009"}.fa-th:before{content:"\F00A"}.fa-th-list:before{content:"\F00B"}.fa-check:before{content:"\F00C"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\F00D"}.fa-search-plus:before{content:"\F00E"}.fa-search-minus:before{content:"\F010"}.fa-power-off:before{content:"\F011"}.fa-signal:before{content:"\F012"}.fa-gear:before,.fa-cog:before{content:"\F013"}.fa-trash-o:before{content:"\F014"}.fa-home:before{content:"\F015"}.fa-file-o:before{content:"\F016"}.fa-clock-o:before{content:"\F017"}.fa-road:before{content:"\F018"}.fa-download:before{content:"\F019"}.fa-arrow-circle-o-down:before{content:"\F01A"}.fa-arrow-circle-o-up:before{content:"\F01B"}.fa-inbox:before{content:"\F01C"}.fa-play-circle-o:before{content:"\F01D"}.fa-rotate-right:before,.fa-repeat:before{content:"\F01E"}.fa-refresh:before{content:"\F021"}.fa-list-alt:before{content:"\F022"}.fa-lock:before{content:"\F023"}.fa-flag:before{content:"\F024"}.fa-headphones:before{content:"\F025"}.fa-volume-off:before{content:"\F026"}.fa-volume-down:before{content:"\F027"}.fa-volume-up:before{content:"\F028"}.fa-qrcode:before{content:"\F029"}.fa-barcode:before{content:"\F02A"}.fa-tag:before{content:"\F02B"}.fa-tags:before{content:"\F02C"}.fa-book:before{content:"\F02D"}.fa-bookmark:before{content:"\F02E"}.fa-print:before{content:"\F02F"}.fa-camera:before{content:"\F030"}.fa-font:before{content:"\F031"}.fa-bold:before{content:"\F032"}.fa-italic:before{content:"\F033"}.fa-text-height:before{content:"\F034"}.fa-text-width:before{content:"\F035"}.fa-align-left:before{content:"\F036"}.fa-align-center:before{content:"\F037"}.fa-align-right:before{content:"\F038"}.fa-align-justify:before{content:"\F039"}.fa-list:before{content:"\F03A"}.fa-dedent:before,.fa-outdent:before{content:"\F03B"}.fa-indent:before{content:"\F03C"}.fa-video-camera:before{content:"\F03D"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\F03E"}.fa-pencil:before{content:"\F040"}.fa-map-marker:before{content:"\F041"}.fa-adjust:before{content:"\F042"}.fa-tint:before{content:"\F043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\F044"}.fa-share-square-o:before{content:"\F045"}.fa-check-square-o:before{content:"\F046"}.fa-arrows:before{content:"\F047"}.fa-step-backward:before{content:"\F048"}.fa-fast-backward:before{content:"\F049"}.fa-backward:before{content:"\F04A"}.fa-play:before{content:"\F04B"}.fa-pause:before{content:"\F04C"}.fa-stop:before{content:"\F04D"}.fa-forward:before{content:"\F04E"}.fa-fast-forward:before{content:"\F050"}.fa-step-forward:before{content:"\F051"}.fa-eject:before{content:"\F052"}.fa-chevron-left:before{content:"\F053"}.fa-chevron-right:before{content:"\F054"}.fa-plus-circle:before{content:"\F055"}.fa-minus-circle:before{content:"\F056"}.fa-times-circle:before{content:"\F057"}.fa-check-circle:before{content:"\F058"}.fa-question-circle:before{content:"\F059"}.fa-info-circle:before{content:"\F05A"}.fa-crosshairs:before{content:"\F05B"}.fa-times-circle-o:before{content:"\F05C"}.fa-check-circle-o:before{content:"\F05D"}.fa-ban:before{content:"\F05E"}.fa-arrow-left:before{content:"\F060"}.fa-arrow-right:before{content:"\F061"}.fa-arrow-up:before{content:"\F062"}.fa-arrow-down:before{content:"\F063"}.fa-mail-forward:before,.fa-share:before{content:"\F064"}.fa-expand:before{content:"\F065"}.fa-compress:before{content:"\F066"}.fa-plus:before{content:"\F067"}.fa-minus:before{content:"\F068"}.fa-asterisk:before{content:"\F069"}.fa-exclamation-circle:before{content:"\F06A"}.fa-gift:before{content:"\F06B"}.fa-leaf:before{content:"\F06C"}.fa-fire:before{content:"\F06D"}.fa-eye:before{content:"\F06E"}.fa-eye-slash:before{content:"\F070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\F071"}.fa-plane:before{content:"\F072"}.fa-calendar:before{content:"\F073"}.fa-random:before{content:"\F074"}.fa-comment:before{content:"\F075"}.fa-magnet:before{content:"\F076"}.fa-chevron-up:before{content:"\F077"}.fa-chevron-down:before{content:"\F078"}.fa-retweet:before{content:"\F079"}.fa-shopping-cart:before{content:"\F07A"}.fa-folder:before{content:"\F07B"}.fa-folder-open:before{content:"\F07C"}.fa-arrows-v:before{content:"\F07D"}.fa-arrows-h:before{content:"\F07E"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\F080"}.fa-twitter-square:before{content:"\F081"}.fa-facebook-square:before{content:"\F082"}.fa-camera-retro:before{content:"\F083"}.fa-key:before{content:"\F084"}.fa-gears:before,.fa-cogs:before{content:"\F085"}.fa-comments:before{content:"\F086"}.fa-thumbs-o-up:before{content:"\F087"}.fa-thumbs-o-down:before{content:"\F088"}.fa-star-half:before{content:"\F089"}.fa-heart-o:before{content:"\F08A"}.fa-sign-out:before{content:"\F08B"}.fa-linkedin-square:before{content:"\F08C"}.fa-thumb-tack:before{content:"\F08D"}.fa-external-link:before{content:"\F08E"}.fa-sign-in:before{content:"\F090"}.fa-trophy:before{content:"\F091"}.fa-github-square:before{content:"\F092"}.fa-upload:before{content:"\F093"}.fa-lemon-o:before{content:"\F094"}.fa-phone:before{content:"\F095"}.fa-square-o:before{content:"\F096"}.fa-bookmark-o:before{content:"\F097"}.fa-phone-square:before{content:"\F098"}.fa-twitter:before{content:"\F099"}.fa-facebook-f:before,.fa-facebook:before{content:"\F09A"}.fa-github:before{content:"\F09B"}.fa-unlock:before{content:"\F09C"}.fa-credit-card:before{content:"\F09D"}.fa-feed:before,.fa-rss:before{content:"\F09E"}.fa-hdd-o:before{content:"\F0A0"}.fa-bullhorn:before{content:"\F0A1"}.fa-bell:before{content:"\F0F3"}.fa-certificate:before{content:"\F0A3"}.fa-hand-o-right:before{content:"\F0A4"}.fa-hand-o-left:before{content:"\F0A5"}.fa-hand-o-up:before{content:"\F0A6"}.fa-hand-o-down:before{content:"\F0A7"}.fa-arrow-circle-left:before{content:"\F0A8"}.fa-arrow-circle-right:before{content:"\F0A9"}.fa-arrow-circle-up:before{content:"\F0AA"}.fa-arrow-circle-down:before{content:"\F0AB"}.fa-globe:before{content:"\F0AC"}.fa-wrench:before{content:"\F0AD"}.fa-tasks:before{content:"\F0AE"}.fa-filter:before{content:"\F0B0"}.fa-briefcase:before{content:"\F0B1"}.fa-arrows-alt:before{content:"\F0B2"}.fa-group:before,.fa-users:before{content:"\F0C0"}.fa-chain:before,.fa-link:before{content:"\F0C1"}.fa-cloud:before{content:"\F0C2"}.fa-flask:before{content:"\F0C3"}.fa-cut:before,.fa-scissors:before{content:"\F0C4"}.fa-copy:before,.fa-files-o:before{content:"\F0C5"}.fa-paperclip:before{content:"\F0C6"}.fa-save:before,.fa-floppy-o:before{content:"\F0C7"}.fa-square:before{content:"\F0C8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\F0C9"}.fa-list-ul:before{content:"\F0CA"}.fa-list-ol:before{content:"\F0CB"}.fa-strikethrough:before{content:"\F0CC"}.fa-underline:before{content:"\F0CD"}.fa-table:before{content:"\F0CE"}.fa-magic:before{content:"\F0D0"}.fa-truck:before{content:"\F0D1"}.fa-pinterest:before{content:"\F0D2"}.fa-pinterest-square:before{content:"\F0D3"}.fa-google-plus-square:before{content:"\F0D4"}.fa-google-plus:before{content:"\F0D5"}.fa-money:before{content:"\F0D6"}.fa-caret-down:before{content:"\F0D7"}.fa-caret-up:before{content:"\F0D8"}.fa-caret-left:before{content:"\F0D9"}.fa-caret-right:before{content:"\F0DA"}.fa-columns:before{content:"\F0DB"}.fa-unsorted:before,.fa-sort:before{content:"\F0DC"}.fa-sort-down:before,.fa-sort-desc:before{content:"\F0DD"}.fa-sort-up:before,.fa-sort-asc:before{content:"\F0DE"}.fa-envelope:before{content:"\F0E0"}.fa-linkedin:before{content:"\F0E1"}.fa-rotate-left:before,.fa-undo:before{content:"\F0E2"}.fa-legal:before,.fa-gavel:before{content:"\F0E3"}.fa-dashboard:before,.fa-tachometer:before{content:"\F0E4"}.fa-comment-o:before{content:"\F0E5"}.fa-comments-o:before{content:"\F0E6"}.fa-flash:before,.fa-bolt:before{content:"\F0E7"}.fa-sitemap:before{content:"\F0E8"}.fa-umbrella:before{content:"\F0E9"}.fa-paste:before,.fa-clipboard:before{content:"\F0EA"}.fa-lightbulb-o:before{content:"\F0EB"}.fa-exchange:before{content:"\F0EC"}.fa-cloud-download:before{content:"\F0ED"}.fa-cloud-upload:before{content:"\F0EE"}.fa-user-md:before{content:"\F0F0"}.fa-stethoscope:before{content:"\F0F1"}.fa-suitcase:before{content:"\F0F2"}.fa-bell-o:before{content:"\F0A2"}.fa-coffee:before{content:"\F0F4"}.fa-cutlery:before{content:"\F0F5"}.fa-file-text-o:before{content:"\F0F6"}.fa-building-o:before{content:"\F0F7"}.fa-hospital-o:before{content:"\F0F8"}.fa-ambulance:before{content:"\F0F9"}.fa-medkit:before{content:"\F0FA"}.fa-fighter-jet:before{content:"\F0FB"}.fa-beer:before{content:"\F0FC"}.fa-h-square:before{content:"\F0FD"}.fa-plus-square:before{content:"\F0FE"}.fa-angle-double-left:before{content:"\F100"}.fa-angle-double-right:before{content:"\F101"}.fa-angle-double-up:before{content:"\F102"}.fa-angle-double-down:before{content:"\F103"}.fa-angle-left:before{content:"\F104"}.fa-angle-right:before{content:"\F105"}.fa-angle-up:before{content:"\F106"}.fa-angle-down:before{content:"\F107"}.fa-desktop:before{content:"\F108"}.fa-laptop:before{content:"\F109"}.fa-tablet:before{content:"\F10A"}.fa-mobile-phone:before,.fa-mobile:before{content:"\F10B"}.fa-circle-o:before{content:"\F10C"}.fa-quote-left:before{content:"\F10D"}.fa-quote-right:before{content:"\F10E"}.fa-spinner:before{content:"\F110"}.fa-circle:before{content:"\F111"}.fa-mail-reply:before,.fa-reply:before{content:"\F112"}.fa-github-alt:before{content:"\F113"}.fa-folder-o:before{content:"\F114"}.fa-folder-open-o:before{content:"\F115"}.fa-smile-o:before{content:"\F118"}.fa-frown-o:before{content:"\F119"}.fa-meh-o:before{content:"\F11A"}.fa-gamepad:before{content:"\F11B"}.fa-keyboard-o:before{content:"\F11C"}.fa-flag-o:before{content:"\F11D"}.fa-flag-checkered:before{content:"\F11E"}.fa-terminal:before{content:"\F120"}.fa-code:before{content:"\F121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\F122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\F123"}.fa-location-arrow:before{content:"\F124"}.fa-crop:before{content:"\F125"}.fa-code-fork:before{content:"\F126"}.fa-unlink:before,.fa-chain-broken:before{content:"\F127"}.fa-question:before{content:"\F128"}.fa-info:before{content:"\F129"}.fa-exclamation:before{content:"\F12A"}.fa-superscript:before{content:"\F12B"}.fa-subscript:before{content:"\F12C"}.fa-eraser:before{content:"\F12D"}.fa-puzzle-piece:before{content:"\F12E"}.fa-microphone:before{content:"\F130"}.fa-microphone-slash:before{content:"\F131"}.fa-shield:before{content:"\F132"}.fa-calendar-o:before{content:"\F133"}.fa-fire-extinguisher:before{content:"\F134"}.fa-rocket:before{content:"\F135"}.fa-maxcdn:before{content:"\F136"}.fa-chevron-circle-left:before{content:"\F137"}.fa-chevron-circle-right:before{content:"\F138"}.fa-chevron-circle-up:before{content:"\F139"}.fa-chevron-circle-down:before{content:"\F13A"}.fa-html5:before{content:"\F13B"}.fa-css3:before{content:"\F13C"}.fa-anchor:before{content:"\F13D"}.fa-unlock-alt:before{content:"\F13E"}.fa-bullseye:before{content:"\F140"}.fa-ellipsis-h:before{content:"\F141"}.fa-ellipsis-v:before{content:"\F142"}.fa-rss-square:before{content:"\F143"}.fa-play-circle:before{content:"\F144"}.fa-ticket:before{content:"\F145"}.fa-minus-square:before{content:"\F146"}.fa-minus-square-o:before{content:"\F147"}.fa-level-up:before{content:"\F148"}.fa-level-down:before{content:"\F149"}.fa-check-square:before{content:"\F14A"}.fa-pencil-square:before{content:"\F14B"}.fa-external-link-square:before{content:"\F14C"}.fa-share-square:before{content:"\F14D"}.fa-compass:before{content:"\F14E"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\F150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\F151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\F152"}.fa-euro:before,.fa-eur:before{content:"\F153"}.fa-gbp:before{content:"\F154"}.fa-dollar:before,.fa-usd:before{content:"\F155"}.fa-rupee:before,.fa-inr:before{content:"\F156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\F157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\F158"}.fa-won:before,.fa-krw:before{content:"\F159"}.fa-bitcoin:before,.fa-btc:before{content:"\F15A"}.fa-file:before{content:"\F15B"}.fa-file-text:before{content:"\F15C"}.fa-sort-alpha-asc:before{content:"\F15D"}.fa-sort-alpha-desc:before{content:"\F15E"}.fa-sort-amount-asc:before{content:"\F160"}.fa-sort-amount-desc:before{content:"\F161"}.fa-sort-numeric-asc:before{content:"\F162"}.fa-sort-numeric-desc:before{content:"\F163"}.fa-thumbs-up:before{content:"\F164"}.fa-thumbs-down:before{content:"\F165"}.fa-youtube-square:before{content:"\F166"}.fa-youtube:before{content:"\F167"}.fa-xing:before{content:"\F168"}.fa-xing-square:before{content:"\F169"}.fa-youtube-play:before{content:"\F16A"}.fa-dropbox:before{content:"\F16B"}.fa-stack-overflow:before{content:"\F16C"}.fa-instagram:before{content:"\F16D"}.fa-flickr:before{content:"\F16E"}.fa-adn:before{content:"\F170"}.fa-bitbucket:before{content:"\F171"}.fa-bitbucket-square:before{content:"\F172"}.fa-tumblr:before{content:"\F173"}.fa-tumblr-square:before{content:"\F174"}.fa-long-arrow-down:before{content:"\F175"}.fa-long-arrow-up:before{content:"\F176"}.fa-long-arrow-left:before{content:"\F177"}.fa-long-arrow-right:before{content:"\F178"}.fa-apple:before{content:"\F179"}.fa-windows:before{content:"\F17A"}.fa-android:before{content:"\F17B"}.fa-linux:before{content:"\F17C"}.fa-dribbble:before{content:"\F17D"}.fa-skype:before{content:"\F17E"}.fa-foursquare:before{content:"\F180"}.fa-trello:before{content:"\F181"}.fa-female:before{content:"\F182"}.fa-male:before{content:"\F183"}.fa-gittip:before,.fa-gratipay:before{content:"\F184"}.fa-sun-o:before{content:"\F185"}.fa-moon-o:before{content:"\F186"}.fa-archive:before{content:"\F187"}.fa-bug:before{content:"\F188"}.fa-vk:before{content:"\F189"}.fa-weibo:before{content:"\F18A"}.fa-renren:before{content:"\F18B"}.fa-pagelines:before{content:"\F18C"}.fa-stack-exchange:before{content:"\F18D"}.fa-arrow-circle-o-right:before{content:"\F18E"}.fa-arrow-circle-o-left:before{content:"\F190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\F191"}.fa-dot-circle-o:before{content:"\F192"}.fa-wheelchair:before{content:"\F193"}.fa-vimeo-square:before{content:"\F194"}.fa-turkish-lira:before,.fa-try:before{content:"\F195"}.fa-plus-square-o:before{content:"\F196"}.fa-space-shuttle:before{content:"\F197"}.fa-slack:before{content:"\F198"}.fa-envelope-square:before{content:"\F199"}.fa-wordpress:before{content:"\F19A"}.fa-openid:before{content:"\F19B"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\F19C"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\F19D"}.fa-yahoo:before{content:"\F19E"}.fa-google:before{content:"\F1A0"}.fa-reddit:before{content:"\F1A1"}.fa-reddit-square:before{content:"\F1A2"}.fa-stumbleupon-circle:before{content:"\F1A3"}.fa-stumbleupon:before{content:"\F1A4"}.fa-delicious:before{content:"\F1A5"}.fa-digg:before{content:"\F1A6"}.fa-pied-piper-pp:before{content:"\F1A7"}.fa-pied-piper-alt:before{content:"\F1A8"}.fa-drupal:before{content:"\F1A9"}.fa-joomla:before{content:"\F1AA"}.fa-language:before{content:"\F1AB"}.fa-fax:before{content:"\F1AC"}.fa-building:before{content:"\F1AD"}.fa-child:before{content:"\F1AE"}.fa-paw:before{content:"\F1B0"}.fa-spoon:before{content:"\F1B1"}.fa-cube:before{content:"\F1B2"}.fa-cubes:before{content:"\F1B3"}.fa-behance:before{content:"\F1B4"}.fa-behance-square:before{content:"\F1B5"}.fa-steam:before{content:"\F1B6"}.fa-steam-square:before{content:"\F1B7"}.fa-recycle:before{content:"\F1B8"}.fa-automobile:before,.fa-car:before{content:"\F1B9"}.fa-cab:before,.fa-taxi:before{content:"\F1BA"}.fa-tree:before{content:"\F1BB"}.fa-spotify:before{content:"\F1BC"}.fa-deviantart:before{content:"\F1BD"}.fa-soundcloud:before{content:"\F1BE"}.fa-database:before{content:"\F1C0"}.fa-file-pdf-o:before{content:"\F1C1"}.fa-file-word-o:before{content:"\F1C2"}.fa-file-excel-o:before{content:"\F1C3"}.fa-file-powerpoint-o:before{content:"\F1C4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\F1C5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\F1C6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\F1C7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\F1C8"}.fa-file-code-o:before{content:"\F1C9"}.fa-vine:before{content:"\F1CA"}.fa-codepen:before{content:"\F1CB"}.fa-jsfiddle:before{content:"\F1CC"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\F1CD"}.fa-circle-o-notch:before{content:"\F1CE"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\F1D0"}.fa-ge:before,.fa-empire:before{content:"\F1D1"}.fa-git-square:before{content:"\F1D2"}.fa-git:before{content:"\F1D3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\F1D4"}.fa-tencent-weibo:before{content:"\F1D5"}.fa-qq:before{content:"\F1D6"}.fa-wechat:before,.fa-weixin:before{content:"\F1D7"}.fa-send:before,.fa-paper-plane:before{content:"\F1D8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\F1D9"}.fa-history:before{content:"\F1DA"}.fa-circle-thin:before{content:"\F1DB"}.fa-header:before{content:"\F1DC"}.fa-paragraph:before{content:"\F1DD"}.fa-sliders:before{content:"\F1DE"}.fa-share-alt:before{content:"\F1E0"}.fa-share-alt-square:before{content:"\F1E1"}.fa-bomb:before{content:"\F1E2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\F1E3"}.fa-tty:before{content:"\F1E4"}.fa-binoculars:before{content:"\F1E5"}.fa-plug:before{content:"\F1E6"}.fa-slideshare:before{content:"\F1E7"}.fa-twitch:before{content:"\F1E8"}.fa-yelp:before{content:"\F1E9"}.fa-newspaper-o:before{content:"\F1EA"}.fa-wifi:before{content:"\F1EB"}.fa-calculator:before{content:"\F1EC"}.fa-paypal:before{content:"\F1ED"}.fa-google-wallet:before{content:"\F1EE"}.fa-cc-visa:before{content:"\F1F0"}.fa-cc-mastercard:before{content:"\F1F1"}.fa-cc-discover:before{content:"\F1F2"}.fa-cc-amex:before{content:"\F1F3"}.fa-cc-paypal:before{content:"\F1F4"}.fa-cc-stripe:before{content:"\F1F5"}.fa-bell-slash:before{content:"\F1F6"}.fa-bell-slash-o:before{content:"\F1F7"}.fa-trash:before{content:"\F1F8"}.fa-copyright:before{content:"\F1F9"}.fa-at:before{content:"\F1FA"}.fa-eyedropper:before{content:"\F1FB"}.fa-paint-brush:before{content:"\F1FC"}.fa-birthday-cake:before{content:"\F1FD"}.fa-area-chart:before{content:"\F1FE"}.fa-pie-chart:before{content:"\F200"}.fa-line-chart:before{content:"\F201"}.fa-lastfm:before{content:"\F202"}.fa-lastfm-square:before{content:"\F203"}.fa-toggle-off:before{content:"\F204"}.fa-toggle-on:before{content:"\F205"}.fa-bicycle:before{content:"\F206"}.fa-bus:before{content:"\F207"}.fa-ioxhost:before{content:"\F208"}.fa-angellist:before{content:"\F209"}.fa-cc:before{content:"\F20A"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\F20B"}.fa-meanpath:before{content:"\F20C"}.fa-buysellads:before{content:"\F20D"}.fa-connectdevelop:before{content:"\F20E"}.fa-dashcube:before{content:"\F210"}.fa-forumbee:before{content:"\F211"}.fa-leanpub:before{content:"\F212"}.fa-sellsy:before{content:"\F213"}.fa-shirtsinbulk:before{content:"\F214"}.fa-simplybuilt:before{content:"\F215"}.fa-skyatlas:before{content:"\F216"}.fa-cart-plus:before{content:"\F217"}.fa-cart-arrow-down:before{content:"\F218"}.fa-diamond:before{content:"\F219"}.fa-ship:before{content:"\F21A"}.fa-user-secret:before{content:"\F21B"}.fa-motorcycle:before{content:"\F21C"}.fa-street-view:before{content:"\F21D"}.fa-heartbeat:before{content:"\F21E"}.fa-venus:before{content:"\F221"}.fa-mars:before{content:"\F222"}.fa-mercury:before{content:"\F223"}.fa-intersex:before,.fa-transgender:before{content:"\F224"}.fa-transgender-alt:before{content:"\F225"}.fa-venus-double:before{content:"\F226"}.fa-mars-double:before{content:"\F227"}.fa-venus-mars:before{content:"\F228"}.fa-mars-stroke:before{content:"\F229"}.fa-mars-stroke-v:before{content:"\F22A"}.fa-mars-stroke-h:before{content:"\F22B"}.fa-neuter:before{content:"\F22C"}.fa-genderless:before{content:"\F22D"}.fa-facebook-official:before{content:"\F230"}.fa-pinterest-p:before{content:"\F231"}.fa-whatsapp:before{content:"\F232"}.fa-server:before{content:"\F233"}.fa-user-plus:before{content:"\F234"}.fa-user-times:before{content:"\F235"}.fa-hotel:before,.fa-bed:before{content:"\F236"}.fa-viacoin:before{content:"\F237"}.fa-train:before{content:"\F238"}.fa-subway:before{content:"\F239"}.fa-medium:before{content:"\F23A"}.fa-yc:before,.fa-y-combinator:before{content:"\F23B"}.fa-optin-monster:before{content:"\F23C"}.fa-opencart:before{content:"\F23D"}.fa-expeditedssl:before{content:"\F23E"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\F240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\F241"}.fa-battery-2:before,.fa-battery-half:before{content:"\F242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\F243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\F244"}.fa-mouse-pointer:before{content:"\F245"}.fa-i-cursor:before{content:"\F246"}.fa-object-group:before{content:"\F247"}.fa-object-ungroup:before{content:"\F248"}.fa-sticky-note:before{content:"\F249"}.fa-sticky-note-o:before{content:"\F24A"}.fa-cc-jcb:before{content:"\F24B"}.fa-cc-diners-club:before{content:"\F24C"}.fa-clone:before{content:"\F24D"}.fa-balance-scale:before{content:"\F24E"}.fa-hourglass-o:before{content:"\F250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\F251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\F252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\F253"}.fa-hourglass:before{content:"\F254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\F255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\F256"}.fa-hand-scissors-o:before{content:"\F257"}.fa-hand-lizard-o:before{content:"\F258"}.fa-hand-spock-o:before{content:"\F259"}.fa-hand-pointer-o:before{content:"\F25A"}.fa-hand-peace-o:before{content:"\F25B"}.fa-trademark:before{content:"\F25C"}.fa-registered:before{content:"\F25D"}.fa-creative-commons:before{content:"\F25E"}.fa-gg:before{content:"\F260"}.fa-gg-circle:before{content:"\F261"}.fa-tripadvisor:before{content:"\F262"}.fa-odnoklassniki:before{content:"\F263"}.fa-odnoklassniki-square:before{content:"\F264"}.fa-get-pocket:before{content:"\F265"}.fa-wikipedia-w:before{content:"\F266"}.fa-safari:before{content:"\F267"}.fa-chrome:before{content:"\F268"}.fa-firefox:before{content:"\F269"}.fa-opera:before{content:"\F26A"}.fa-internet-explorer:before{content:"\F26B"}.fa-tv:before,.fa-television:before{content:"\F26C"}.fa-contao:before{content:"\F26D"}.fa-500px:before{content:"\F26E"}.fa-amazon:before{content:"\F270"}.fa-calendar-plus-o:before{content:"\F271"}.fa-calendar-minus-o:before{content:"\F272"}.fa-calendar-times-o:before{content:"\F273"}.fa-calendar-check-o:before{content:"\F274"}.fa-industry:before{content:"\F275"}.fa-map-pin:before{content:"\F276"}.fa-map-signs:before{content:"\F277"}.fa-map-o:before{content:"\F278"}.fa-map:before{content:"\F279"}.fa-commenting:before{content:"\F27A"}.fa-commenting-o:before{content:"\F27B"}.fa-houzz:before{content:"\F27C"}.fa-vimeo:before{content:"\F27D"}.fa-black-tie:before{content:"\F27E"}.fa-fonticons:before{content:"\F280"}.fa-reddit-alien:before{content:"\F281"}.fa-edge:before{content:"\F282"}.fa-credit-card-alt:before{content:"\F283"}.fa-codiepie:before{content:"\F284"}.fa-modx:before{content:"\F285"}.fa-fort-awesome:before{content:"\F286"}.fa-usb:before{content:"\F287"}.fa-product-hunt:before{content:"\F288"}.fa-mixcloud:before{content:"\F289"}.fa-scribd:before{content:"\F28A"}.fa-pause-circle:before{content:"\F28B"}.fa-pause-circle-o:before{content:"\F28C"}.fa-stop-circle:before{content:"\F28D"}.fa-stop-circle-o:before{content:"\F28E"}.fa-shopping-bag:before{content:"\F290"}.fa-shopping-basket:before{content:"\F291"}.fa-hashtag:before{content:"\F292"}.fa-bluetooth:before{content:"\F293"}.fa-bluetooth-b:before{content:"\F294"}.fa-percent:before{content:"\F295"}.fa-gitlab:before{content:"\F296"}.fa-wpbeginner:before{content:"\F297"}.fa-wpforms:before{content:"\F298"}.fa-envira:before{content:"\F299"}.fa-universal-access:before{content:"\F29A"}.fa-wheelchair-alt:before{content:"\F29B"}.fa-question-circle-o:before{content:"\F29C"}.fa-blind:before{content:"\F29D"}.fa-audio-description:before{content:"\F29E"}.fa-volume-control-phone:before{content:"\F2A0"}.fa-braille:before{content:"\F2A1"}.fa-assistive-listening-systems:before{content:"\F2A2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\F2A3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\F2A4"}.fa-glide:before{content:"\F2A5"}.fa-glide-g:before{content:"\F2A6"}.fa-signing:before,.fa-sign-language:before{content:"\F2A7"}.fa-low-vision:before{content:"\F2A8"}.fa-viadeo:before{content:"\F2A9"}.fa-viadeo-square:before{content:"\F2AA"}.fa-snapchat:before{content:"\F2AB"}.fa-snapchat-ghost:before{content:"\F2AC"}.fa-snapchat-square:before{content:"\F2AD"}.fa-pied-piper:before{content:"\F2AE"}.fa-first-order:before{content:"\F2B0"}.fa-yoast:before{content:"\F2B1"}.fa-themeisle:before{content:"\F2B2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\F2B3"}.fa-fa:before,.fa-font-awesome:before{content:"\F2B4"}.fa-handshake-o:before{content:"\F2B5"}.fa-envelope-open:before{content:"\F2B6"}.fa-envelope-open-o:before{content:"\F2B7"}.fa-linode:before{content:"\F2B8"}.fa-address-book:before{content:"\F2B9"}.fa-address-book-o:before{content:"\F2BA"}.fa-vcard:before,.fa-address-card:before{content:"\F2BB"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\F2BC"}.fa-user-circle:before{content:"\F2BD"}.fa-user-circle-o:before{content:"\F2BE"}.fa-user-o:before{content:"\F2C0"}.fa-id-badge:before{content:"\F2C1"}.fa-drivers-license:before,.fa-id-card:before{content:"\F2C2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\F2C3"}.fa-quora:before{content:"\F2C4"}.fa-free-code-camp:before{content:"\F2C5"}.fa-telegram:before{content:"\F2C6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\F2C7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\F2C8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\F2C9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\F2CA"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\F2CB"}.fa-shower:before{content:"\F2CC"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\F2CD"}.fa-podcast:before{content:"\F2CE"}.fa-window-maximize:before{content:"\F2D0"}.fa-window-minimize:before{content:"\F2D1"}.fa-window-restore:before{content:"\F2D2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\F2D3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\F2D4"}.fa-bandcamp:before{content:"\F2D5"}.fa-grav:before{content:"\F2D6"}.fa-etsy:before{content:"\F2D7"}.fa-imdb:before{content:"\F2D8"}.fa-ravelry:before{content:"\F2D9"}.fa-eercast:before{content:"\F2DA"}.fa-microchip:before{content:"\F2DB"}.fa-snowflake-o:before{content:"\F2DC"}.fa-superpowers:before{content:"\F2DD"}.fa-wpexplorer:before{content:"\F2DE"}.fa-meetup:before{content:"\F2E0"}.sr-only,.table.table-list tr:not(:hover) td.table-list-options>.dropdown:not(.show) button:not(:focus):not(:active),.table.table-list tr:not(:hover) td.table-list-options>button:not(:focus):not(:active){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.toaster-icon{position:absolute;left:0.0em;top:0.0em;font-weight:normal;color:#ffffff}.toast-title{font-weight:bold}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#ffffff}.toast-message a:hover{color:#cccccc;text-decoration:none}.toast-close-button{position:relative;right:-0.3em;top:-0.3em;float:right;font-size:20px;font-weight:bold;color:#ffffff;-webkit-text-shadow:0 1px 0 #ffffff;text-shadow:0 1px 0 #ffffff;opacity:0.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80);z-index:999}.toast-close-button:hover,.toast-close-button:focus{color:#000000;text-decoration:none;cursor:pointer;opacity:0.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}button.toast-close-button{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.toast-content{display:inline-block;width:95%}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-center{top:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-center{bottom:12px}.toast-bottom-left{bottom:12px;left:12px}.toast-center{top:45%}#toast-container{position:fixed;z-index:999999;pointer-events:auto}#toast-container.toast-center,#toast-container.toast-top-center,#toast-container.toast-bottom-center{width:100%;pointer-events:none;left:0;right:0}#toast-container.toast-center>div,#toast-container.toast-top-center>div,#toast-container.toast-bottom-center>div{margin:6px auto;pointer-events:auto}#toast-container.toast-center>button,#toast-container.toast-top-center>button,#toast-container.toast-bottom-center>button{pointer-events:auto}#toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;-moz-border-radius:3px 3px 3px 3px;-webkit-border-radius:3px 3px 3px 3px;border-radius:3px 3px 3px 3px;background-position:15px center;background-repeat:no-repeat;-moz-box-shadow:0 0 12px #999999;-webkit-box-shadow:0 0 12px #999999;box-shadow:0 0 12px #999999;color:#ffffff;opacity:0.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80)}#toast-container>:hover{-moz-box-shadow:0 0 12px #000000;-webkit-box-shadow:0 0 12px #000000;box-shadow:0 0 12px #000000;opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100);cursor:pointer}.icon-success{width:35px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:100% 50%;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important}.icon-error{width:35px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:100% 50%;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important}.icon-info{width:35px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:100% 50%;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=") !important}.icon-wait{width:35px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:100% 50%;background-image:url("data:image/gif;base64,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") !important}.icon-warning{width:35px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:100% 50%;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important}#toast-container.toast-top-full-width>div,#toast-container.toast-bottom-full-width>div{width:96%;margin:auto}.toast{position:relative;background-color:#030303}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-wait{background-color:#2f96b4}.toast-warning{background-color:#f89406}@media all and (max-width: 240px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container .toast-close-button{right:-0.1em;top:-0.2em}.toast-content{width:94%}}@media all and (min-width: 241px) and (max-width: 480px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container .toast-close-button{right:-0.1em;top:-0.2em}.toast-content{width:94%}}@media all and (min-width: 481px) and (max-width: 768px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}}.swal2-popup.swal2-toast{flex-direction:row;align-items:center;width:auto;padding:.625em;overflow-y:hidden;background:#fff;box-shadow:0 0 0.625em #d9d9d9}.swal2-popup.swal2-toast .swal2-header{flex-direction:row;padding:0}.swal2-popup.swal2-toast .swal2-title{flex-grow:1;justify-content:flex-start;margin:0 0.6em;font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:0.5em 0 0;padding:0.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{position:static;width:.8em;height:.8em;line-height:.8}.swal2-popup.swal2-toast .swal2-content{justify-content:flex-start;padding:0;font-size:1em}.swal2-popup.swal2-toast .swal2-icon{width:2em;min-width:2em;height:2em;margin:0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}@media all and (-ms-high-contrast: none), (-ms-high-contrast: active){.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{font-size:.25em}}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^='swal2-x-mark-line']{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^='swal2-x-mark-line'][class$='left']{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^='swal2-x-mark-line'][class$='right']{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{flex-basis:auto !important;width:auto;height:auto;margin:0 .3125em;padding:0}.swal2-popup.swal2-toast .swal2-styled{margin:.125em .3125em;padding:.3125em .625em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(100,150,200,0.5)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^='swal2-success-circular-line']{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^='swal2-success-circular-line'][class$='left']{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^='swal2-success-circular-line'][class$='right']{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^='swal2-success-line']{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^='swal2-success-line'][class$='tip']{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^='swal2-success-line'][class$='long']{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{animation:swal2-toast-show 0.5s}.swal2-popup.swal2-toast.swal2-hide{animation:swal2-toast-hide 0.1s forwards}.swal2-container{display:flex;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;flex-direction:row;align-items:center;justify-content:center;padding:.625em;overflow-x:hidden;transition:background-color 0.1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,0.4)}.swal2-container.swal2-backdrop-hide{background:transparent !important}.swal2-container.swal2-top{align-items:flex-start}.swal2-container.swal2-top-start,.swal2-container.swal2-top-left{align-items:flex-start;justify-content:flex-start}.swal2-container.swal2-top-end,.swal2-container.swal2-top-right{align-items:flex-start;justify-content:flex-end}.swal2-container.swal2-center{align-items:center}.swal2-container.swal2-center-start,.swal2-container.swal2-center-left{align-items:center;justify-content:flex-start}.swal2-container.swal2-center-end,.swal2-container.swal2-center-right{align-items:center;justify-content:flex-end}.swal2-container.swal2-bottom{align-items:flex-end}.swal2-container.swal2-bottom-start,.swal2-container.swal2-bottom-left{align-items:flex-end;justify-content:flex-start}.swal2-container.swal2-bottom-end,.swal2-container.swal2-bottom-right{align-items:flex-end;justify-content:flex-end}.swal2-container.swal2-bottom>:first-child,.swal2-container.swal2-bottom-start>:first-child,.swal2-container.swal2-bottom-left>:first-child,.swal2-container.swal2-bottom-end>:first-child,.swal2-container.swal2-bottom-right>:first-child{margin-top:auto}.swal2-container.swal2-grow-fullscreen>.swal2-modal{display:flex !important;flex:1;align-self:stretch;justify-content:center}.swal2-container.swal2-grow-row>.swal2-modal{display:flex !important;flex:1;align-content:center;justify-content:center}.swal2-container.swal2-grow-column{flex:1;flex-direction:column}.swal2-container.swal2-grow-column.swal2-top,.swal2-container.swal2-grow-column.swal2-center,.swal2-container.swal2-grow-column.swal2-bottom{align-items:center}.swal2-container.swal2-grow-column.swal2-top-start,.swal2-container.swal2-grow-column.swal2-center-start,.swal2-container.swal2-grow-column.swal2-bottom-start,.swal2-container.swal2-grow-column.swal2-top-left,.swal2-container.swal2-grow-column.swal2-center-left,.swal2-container.swal2-grow-column.swal2-bottom-left{align-items:flex-start}.swal2-container.swal2-grow-column.swal2-top-end,.swal2-container.swal2-grow-column.swal2-center-end,.swal2-container.swal2-grow-column.swal2-bottom-end,.swal2-container.swal2-grow-column.swal2-top-right,.swal2-container.swal2-grow-column.swal2-center-right,.swal2-container.swal2-grow-column.swal2-bottom-right{align-items:flex-end}.swal2-container.swal2-grow-column>.swal2-modal{display:flex !important;flex:1;align-content:center;justify-content:center}.swal2-container.swal2-no-transition{transition:none !important}.swal2-container:not(.swal2-top):not(.swal2-top-start):not(.swal2-top-end):not(.swal2-top-left):not(.swal2-top-right):not(.swal2-center-start):not(.swal2-center-end):not(.swal2-center-left):not(.swal2-center-right):not(.swal2-bottom):not(.swal2-bottom-start):not(.swal2-bottom-end):not(.swal2-bottom-left):not(.swal2-bottom-right):not(.swal2-grow-fullscreen)>.swal2-modal{margin:auto}@media all and (-ms-high-contrast: none), (-ms-high-contrast: active){.swal2-container .swal2-modal{margin:0 !important}}.swal2-popup{display:none;position:relative;box-sizing:border-box;flex-direction:column;justify-content:center;width:32em;max-width:100%;padding:1.25em;border:none;border-radius:5px;background:#fff;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:none}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-header{display:flex;flex-direction:column;align-items:center;padding:0 1.8em}.swal2-title{position:relative;max-width:100%;margin:0 0 0.4em;padding:0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:100%;margin:1.25em auto 0;padding:0 1.6em}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,0.1), rgba(0,0,0,0.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,0.2), rgba(0,0,0,0.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:0.625em 1.1em;box-shadow:none;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#2778c4;color:#fff;font-size:1.0625em}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#d14529;color:#fff;font-size:1.0625em}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#757575;color:#fff;font-size:1.0625em}.swal2-styled:focus{outline:none;box-shadow:0 0 0 3px rgba(100,150,200,0.5)}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1.25em 0 0;padding:1em 0 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;height:.25em;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,0.2)}.swal2-image{max-width:100%;margin:1.25em auto}.swal2-close{position:absolute;z-index:2;top:0;right:0;align-items:center;justify-content:center;width:1.2em;height:1.2em;padding:0;overflow:hidden;transition:color 0.1s ease-out;border:none;border-radius:5px;background:rgba(0,0,0,0);color:#ccc;font-family:serif;font-size:2.5em;line-height:1.2;cursor:pointer}.swal2-close:hover{transform:none;background:rgba(0,0,0,0);color:#f27474}.swal2-close:focus{outline:none;box-shadow:inset 0 0 0 3px rgba(100,150,200,0.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-content{z-index:1;justify-content:center;margin:0;padding:0 1.6em;color:#545454;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;word-wrap:break-word}.swal2-input,.swal2-file,.swal2-textarea,.swal2-select,.swal2-radio,.swal2-checkbox{margin:1em auto}.swal2-input,.swal2-file,.swal2-textarea{box-sizing:border-box;width:100%;transition:border-color 0.3s,box-shadow 0.3s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,0.06);color:inherit;font-size:1.125em}.swal2-input.swal2-inputerror,.swal2-file.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}.swal2-input:focus,.swal2-file:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:none;box-shadow:0 0 0 3px rgba(100,150,200,0.5)}.swal2-input::placeholder,.swal2-file::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em auto;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 0.75em}.swal2-input[type='number']{max-width:10em}.swal2-file{background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-radio,.swal2-checkbox{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-radio label,.swal2-checkbox label{margin:0 .6em;font-size:1.125em}.swal2-radio input,.swal2-checkbox input{margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto}.swal2-validation-message{display:none;align-items:center;justify-content:center;margin:0 -2.7em;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:'!';display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:1.25em auto 1.875em;border:0.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^='swal2-x-mark-line']{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^='swal2-x-mark-line'][class$='left']{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^='swal2-x-mark-line'][class$='right']{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^='swal2-success-circular-line']{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^='swal2-success-circular-line'][class$='left']{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^='swal2-success-circular-line'][class$='right']{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:0.25em solid rgba(165,220,134,0.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^='swal2-success-line']{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^='swal2-success-line'][class$='tip']{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^='swal2-success-line'][class$='long']{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:0 0 1.25em;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^='swal2']{-webkit-tap-highlight-color:transparent}.swal2-show{animation:swal2-show 0.3s}.swal2-hide{animation:swal2-hide 0.15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{right:auto;left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@supports (-ms-accelerator: true){.swal2-range input{width:100% !important}.swal2-range output{display:none}}@media all and (-ms-high-contrast: none), (-ms-high-contrast: active){.swal2-range input{width:100% !important}.swal2-range output{display:none}}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-show{0%{transform:scale(0.7)}45%{transform:scale(1.05)}80%{transform:scale(0.95)}100%{transform:scale(1)}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(0.5);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{top:auto;right:auto;bottom:auto;left:auto;max-width:calc(100% - .625em * 2);background-color:transparent !important}body.swal2-no-backdrop .swal2-container>.swal2-modal{box-shadow:0 0 10px rgba(0,0,0,0.4)}body.swal2-no-backdrop .swal2-container.swal2-top{top:0;left:50%;transform:translateX(-50%)}body.swal2-no-backdrop .swal2-container.swal2-top-start,body.swal2-no-backdrop .swal2-container.swal2-top-left{top:0;left:0}body.swal2-no-backdrop .swal2-container.swal2-top-end,body.swal2-no-backdrop .swal2-container.swal2-top-right{top:0;right:0}body.swal2-no-backdrop .swal2-container.swal2-center{top:50%;left:50%;transform:translate(-50%, -50%)}body.swal2-no-backdrop .swal2-container.swal2-center-start,body.swal2-no-backdrop .swal2-container.swal2-center-left{top:50%;left:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-container.swal2-center-end,body.swal2-no-backdrop .swal2-container.swal2-center-right{top:50%;right:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-container.swal2-bottom{bottom:0;left:50%;transform:translateX(-50%)}body.swal2-no-backdrop .swal2-container.swal2-bottom-start,body.swal2-no-backdrop .swal2-container.swal2-bottom-left{bottom:0;left:0}body.swal2-no-backdrop .swal2-container.swal2-bottom-end,body.swal2-no-backdrop .swal2-container.swal2-bottom-right{right:0;bottom:0}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden='true']{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static !important}}body.swal2-toast-shown .swal2-container{background-color:transparent}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}body.swal2-toast-column .swal2-toast{flex-direction:column;align-items:stretch}body.swal2-toast-column .swal2-toast .swal2-actions{flex:1;align-self:stretch;height:2.2em;margin-top:.3125em}body.swal2-toast-column .swal2-toast .swal2-loading{justify-content:center}body.swal2-toast-column .swal2-toast .swal2-input{height:2em;margin:.3125em auto;font-size:1em}body.swal2-toast-column .swal2-toast .swal2-validation-message{font-size:1em}#toast-container.toast-top-right{top:76px}#toast-container .toast-close-button{right:-0.15em}#toast-container .toast{opacity:1 !important;background-image:none !important;border-radius:.25rem;box-shadow:0 0 8px rgba(0,0,0,0.35);display:flex;align-items:center}#toast-container .toast:hover{box-shadow:0 0 10px rgba(0,0,0,0.6)}#toast-container .toast:before{font-family:FontAwesome;font-size:25px;line-height:20px;float:left;color:#ffffff;padding-right:10px;margin:auto 0 auto -36px}#toast-container .toast .toaster-icon{display:none}#toast-container .toast .toast-message p{margin-bottom:0.5rem}#toast-container .toast .toast-message p:last-child{margin-bottom:0}#toast-container .toast.toast-danger,#toast-container .toast.toast-error{background-image:none !important;background-color:#dd4b39}#toast-container .toast.toast-danger:before,#toast-container .toast.toast-error:before{content:"\F0E7";margin-left:-30px}#toast-container .toast.toast-warning{background-image:none !important;background-color:#bf7e16}#toast-container .toast.toast-warning:before{content:"\F071"}#toast-container .toast.toast-info{background-image:none !important;background-color:#555}#toast-container .toast.toast-info:before{content:"\F05A"}#toast-container .toast.toast-success{background-image:none !important;background-color:#00a65a}#toast-container .toast.toast-success:before{content:"\F00C"}.swal2-container{background-color:rgba(0,0,0,0.3)}.swal2-popup{padding:15px 0 0;background-color:#fff;color:#333;border:1px solid #9a9a9a;border-radius:.3rem;width:34em}.swal2-popup .swal2-header{padding:0 15px}.swal2-popup .swal2-icon{margin:0 auto;width:auto;height:auto;border:none}.swal2-popup .swal2-content{padding-bottom:15px;font-size:1rem;border-bottom:1px solid #dee2e6}.swal2-popup i.swal-custom-icon{display:block;margin:0 auto;font-size:35px}.swal2-popup .swal2-title{padding:10px 0 15px;margin:0;font-size:1.15rem;color:#333}.swal2-popup .swal2-content{font-size:1rem;color:#333;padding:0 15px 15px}.swal2-popup .swal2-actions{padding:15px;margin:0;background-color:#fbfbfb;border-radius:.3rem;display:flex;flex-direction:row;justify-content:flex-start;font-size:1rem}.swal2-popup .swal2-actions button{margin-right:10px}.swal2-popup .swal2-actions button.swal2-confirm{font-weight:bold}.swal2-popup .swal2-actions button.swal2-cancel{background-color:#ffffff}date-input-polyfill[data-open="true"]{z-index:10000 !important}html{font-size:14px}body{min-width:1010px}body.layout_frontend{background-color:#ecf0f5}body.full-width:not(.layout_frontend) .container{min-width:980px;width:90%}.page-header,.secondary-header{border-bottom:1px solid #dee2e6;padding-bottom:0.6rem;margin-bottom:0.5rem}.page-header h1,.page-header h2,.page-header h3,.page-header h4,.secondary-header h1,.secondary-header h2,.secondary-header h3,.secondary-header h4{margin:0}h1 small,h2 small,h3 small,h4 small,h5 small{font-size:80%}input:required,select:required,textarea:required{box-shadow:none}.secondary-header,.spaced-header{margin-top:4rem}.navbar{padding-left:0;padding-right:0}.navbar .dropdown-menu{min-width:200px;max-width:300px}.navbar .dropdown-menu .dropdown-item-text{line-height:1.3}.navbar .dropdown-menu .dropdown-item-text span,.navbar .dropdown-menu .dropdown-item-text small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.navbar .nav-link{font-weight:600}.navbar-brand{margin-top:-20px;margin-bottom:-20px}.dropdown-menu button{cursor:pointer}.container{width:980px;max-width:none !important;margin:0 auto;padding:0}.page-content{margin-top:20px}.footer{margin-top:40px;padding:40px 0 40px 0;border-top:1px solid #dee2e6}.list-group-item.active{border-left:3px solid #175DDC;font-weight:bold;padding-left:calc(1.25rem - 3px)}.card-header,.modal-header{font-weight:bold;text-transform:uppercase}.card-header small,.modal-header small{font-weight:normal;text-transform:none}.card-body-header{font-size:1.15rem}.card ul.fa-ul.card-ul{margin-left:1.9em}.card ul.fa-ul.card-ul li{word-break:break-all}.card ul.fa-ul.card-ul .fa-li{top:4px}.card ul.fa-ul.card-ul.carets{margin-left:1.1em}.card ul.fa-ul.card-ul.carets .fa-li{left:-17px;width:1.1em}.card ul.fa-ul.card-ul ul.carets{margin-left:0.85em}.card-org-plans h2{font-size:1.15rem}.modal-dialog{width:500px}.modal-sm{width:300px}.modal-lg{width:800px}.modal-body h3,.modal-body .section-header>*{font-weight:normal;text-transform:uppercase;color:#6c757d}.modal .list-group-flush :first-child{border-top:none}.modal .list-group-flush :last-child{border-bottom:none}.modal-footer{justify-content:flex-start;background-color:#fbfbfb;border-radius:.3rem}label:not(.form-check-label):not(.btn),label.bold{font-weight:600}input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:searchfield-cancel-button}.btn[class*="btn-outline-"]:not(:hover),.swal2-popup .swal2-actions button[class*="btn-outline-"]:not(:hover){border-color:#ced4da;background-color:#fbfbfb}.btn-link:focus,.btn-link.focus{outline-color:-webkit-focus-ring-color;outline-offset:1px;outline-style:auto;outline-width:1px}.btn-outline-secondary,.swal2-popup .swal2-actions button.swal2-cancel{color:#6c757d}.btn-outline-secondary:hover:not(:disabled),.swal2-popup .swal2-actions button.swal2-cancel:hover:not(:disabled){color:#333}.btn-outline-secondary:disabled,.swal2-popup .swal2-actions button.swal2-cancel:disabled{opacity:1}.btn-outline-secondary:focus,.swal2-popup .swal2-actions button.swal2-cancel:focus,.btn-outline-secondary.focus,.swal2-popup .swal2-actions button.focus.swal2-cancel{box-shadow:0 0 0 .2rem rgba(58,117,225,0.5)}.btn-submit{position:relative}.btn-submit .fa-spinner{position:absolute;display:none;align-items:center;justify-content:center;bottom:0;top:0;left:0;right:0}.btn-submit:disabled:not(.manual) .fa-spinner,.btn-submit.loading .fa-spinner{display:flex}.btn-submit:disabled:not(.manual) span,.btn-submit.loading span{visibility:hidden}.list-group-item:focus,.list-group-item.focus{z-index:100}.fa-icon-above-input{height:1.5em}.table.table-list thead th{border-top:none}.table.table-list tr:first-child td{border:none}.table.table-list td{vertical-align:middle}.table.table-list td.reduced-lh{line-height:1}.table.table-list td.reduced-lh small{font-size:80%}.table.table-list td small,.table.table-list td>.fa,.table.table-list td .icon{color:#6c757d}.table.table-list td.wrap{word-break:break-all}.table.table-list td.table-list-options{width:76px;max-width:76px;text-align:right;height:50px}.table.table-list td.table-list-options.wider{width:100px;max-width:100px}.table.table-list td.table-list-options .btn,.table.table-list td.table-list-options .swal2-popup .swal2-actions button,.swal2-popup .swal2-actions .table.table-list td.table-list-options button{line-height:1;transition:initial}.table.table-list td.table-list-options .dropdown-menu{line-height:1.5}.table.table-list td.table-list-icon{width:45px;max-width:45px;text-align:center}.table.table-list td.table-list-icon img{max-height:24px}.table.table-list td.table-list-checkbox{width:35px;max-width:35px}.table.table-list td.table-list-strike{color:#6c757d;text-decoration:line-through}.text-lg{font-size:1.15rem}.text-strike{text-decoration:line-through}.font-weight-semibold{font-weight:600}.password-wrapper{word-break:break-all;white-space:pre-wrap;min-width:0}.password-row{min-width:0}.password-number{color:#007fde}.password-special{color:#c40800}app-vault-groupings .card #search,app-org-vault-groupings .card #search,.groupings .card #search{margin-bottom:1rem}app-vault-groupings .card h3,app-org-vault-groupings .card h3,.groupings .card h3{font-weight:normal;text-transform:uppercase;color:#6c757d}app-vault-groupings .card ul:last-child,app-org-vault-groupings .card ul:last-child,.groupings .card ul:last-child{margin-bottom:0}app-vault-groupings .card .card-body a,app-org-vault-groupings .card .card-body a,.groupings .card .card-body a{color:#333}app-vault-groupings .card .card-body a:hover.text-muted,app-org-vault-groupings .card .card-body a:hover.text-muted,.groupings .card .card-body a:hover.text-muted{color:#333 !important}app-vault-groupings .card .show-active,app-org-vault-groupings .card .show-active,.groupings .card .show-active{display:none}app-vault-groupings .card li>.fa,app-vault-groupings .card li>div>.fa,app-org-vault-groupings .card li>.fa,app-org-vault-groupings .card li>div>.fa,.groupings .card li>.fa,.groupings .card li>div>.fa{cursor:pointer}app-vault-groupings .card li.active>.show-active,app-vault-groupings .card li.active>div .show-active,app-org-vault-groupings .card li.active>.show-active,app-org-vault-groupings .card li.active>div .show-active,.groupings .card li.active>.show-active,.groupings .card li.active>div .show-active{display:inline}app-vault-groupings .card li.active>a:first-of-type,app-vault-groupings .card li.active>div a:first-of-type,app-org-vault-groupings .card li.active>a:first-of-type,app-org-vault-groupings .card li.active>div a:first-of-type,.groupings .card li.active>a:first-of-type,.groupings .card li.active>div a:first-of-type{font-weight:bold;color:#175DDC}app-vault-groupings .card li.active>.fa,app-vault-groupings .card li.active>div>.fa,app-org-vault-groupings .card li.active>.fa,app-org-vault-groupings .card li.active>div>.fa,.groupings .card li.active>.fa,.groupings .card li.active>div>.fa{color:#175DDC}app-password-generator #lengthRange{width:100%}app-password-generator .card-password .card-body{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;text-align:center;font-size:1.15rem;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}app-password-generator-history .list-group-item{line-height:1}app-password-generator-history .list-group-item .password{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}app-import textarea{height:150px}app-user-billing .progress{height:20px}app-user-billing .progress .progress-bar{min-width:50px}#duo-frame{background:url(../images/loading.svg) 0 0 no-repeat;height:330px}#duo-frame iframe{width:100%;height:100%;border:none}#web-authn-frame{background:url(../images/loading.svg) 0 0 no-repeat;height:290px}#web-authn-frame iframe{width:100%;height:100%;border:none}#bt-dropin-container{background:url(../images/loading.svg) 0 0 no-repeat;min-height:50px}.braintree-placeholder,.braintree-sheet__header{display:none}.braintree-sheet__content--button{text-align:left;padding:0;min-height:0}.braintree-sheet__container{margin-bottom:0}.braintree-sheet{border:none}.totp .totp-code{font-size:1.2rem}.totp .totp-countdown{margin:3px 3px 0 0;display:block;user-select:none}.totp .totp-countdown .totp-sec{font-size:0.85em;position:absolute;line-height:32px;width:32px;text-align:center}.totp .totp-countdown svg{width:32px;height:32px;transform:rotate(-90deg)}.totp .totp-countdown .totp-circle{fill:none;stroke:#175DDC}.totp .totp-countdown .totp-circle.inner{stroke-width:3;stroke-dasharray:78.6;stroke-dashoffset:0}.totp .totp-countdown .totp-circle.outer{stroke-width:2;stroke-dasharray:88;stroke-dashoffset:0}.totp>.align-items-center{margin-bottom:-5px}.totp.low .totp-sec,.totp.low .totp-code{color:#dd4b39}.totp.low .totp-circle{stroke:#dd4b39}.callout{padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid rgba(0,0,0,0.125);border-left-width:5px;border-radius:calc(.25rem - 1px);background-color:#fafafa}.callout .callout-heading{margin-top:0}.callout h3.callout-heading{font-weight:bold;text-transform:uppercase}.callout.callout-primary{border-left-color:#175DDC}.callout.callout-primary .callout-heading{color:#175DDC}.callout.callout-info{border-left-color:#343a40}.callout.callout-info .callout-heading{color:#343a40}.callout.callout-danger{border-left-color:#dd4b39}.callout.callout-danger .callout-heading{color:#dd4b39}.callout.callout-success{border-left-color:#00a65a}.callout.callout-success .callout-heading{color:#00a65a}.callout.callout-warning{border-left-color:#bf7e16}.callout.callout-warning .callout-heading{color:#bf7e16}.list-group-2fa .logo-2fa{min-width:100px}.form-check-block .form-check-label{font-weight:600}.form-check-block .form-check-label>small{display:block;color:#6c757d;font-weight:normal}.form-check-block .form-check-label>span{display:block;font-weight:normal}.form-inline input[type='datetime-local']{width:200px}.form-control.stripe-form-control{padding-top:0.55rem}.form-control.stripe-form-control.is-focused{color:#495057;background-color:#fff;border-color:#81a9f2;outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.form-control.stripe-form-control.is-focused.is-invalid{box-shadow:0 0 0 .2rem rgba(221,75,57,0.25)}.form-control.stripe-form-control.is-invalid{border-color:#dd4b39}.org-nav{background-color:#fbfbfb;border-bottom:1px solid #dee2e6;height:100px;min-height:100px}.org-nav .container{height:100%}.org-nav .nav-tabs{border-bottom:none}.org-nav .nav-tabs a{color:#333}.org-nav .nav-tabs a:not(.active){border-color:transparent}.org-nav .nav-tabs a.active{border-top:3px solid #175DDC;font-weight:bold;padding-top:calc(.5rem - 2px)}.org-nav .nav-tabs a.disabled{color:#b4b4b4}.org-nav .org-name{line-height:1}.org-nav .org-name span{font-size:1.15rem;display:block}img.logo{width:284px;height:43px;margin:0 auto;display:block}.min-height-fix{min-height:1px}.overflow-hidden{overflow:hidden}.cdk-drag-preview{z-index:1070 !important;opacity:0.8;background-color:#fff;border-radius:.25rem}.cursor-move{cursor:move !important}.layout.enterprise2 header{color:#ced4da;background-color:#175DDC}.layout.enterprise2 header:before{content:"";position:absolute;z-index:-1;width:100%;height:340px;left:0;transform:skewY(-3deg);background:#175DDC}.layout.enterprise2 header img.logo{margin:12px 0 0;width:284px;max-width:284px;height:auto}.layout.enterprise2 h2{color:#ffffff;font-size:1.8rem;margin:100px 0 150px 0}.layout.enterprise2 p{margin:20px 0 40px 0;font-size:1.4rem}.layout.enterprise2 p:before{content:"/";padding-right:12px}.layout.enterprise2 p:not(.highlight):before{color:#1252A3}.layout.enterprise2 p b:after{content:"\27F6";font-size:2rem;padding-left:6px}.layout.enterprise2 blockquote{margin:20px 0 0 0;font-size:1.4rem;padding-right:40px} - - -/*# sourceMappingURL=sso.6edbb1cdf4d2e063961a.css.map*/ \ No newline at end of file diff --git a/connectors/sso.6edbb1cdf4d2e063961a.css.map b/connectors/sso.6edbb1cdf4d2e063961a.css.map deleted file mode 100644 index 0cfbdf17..00000000 --- a/connectors/sso.6edbb1cdf4d2e063961a.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./src/css/webfonts.css","webpack:///./src/connectors/sso.scss"],"names":[],"mappings":"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","file":"connectors/sso.6edbb1cdf4d2e063961a.css","sourcesContent":["@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: italic;\n\tfont-weight: 300;\n\tsrc: url(../fonts/Open_Sans-italic-300.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: italic;\n\tfont-weight: 400;\n\tsrc: url(../fonts/Open_Sans-italic-400.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: italic;\n\tfont-weight: 600;\n\tsrc: url(../fonts/Open_Sans-italic-600.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: italic;\n\tfont-weight: 700;\n\tsrc: url(../fonts/Open_Sans-italic-700.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: italic;\n\tfont-weight: 800;\n\tsrc: url(../fonts/Open_Sans-italic-800.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: normal;\n\tfont-weight: 300;\n\tsrc: url(../fonts/Open_Sans-normal-300.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: normal;\n\tfont-weight: 400;\n\tsrc: url(../fonts/Open_Sans-normal-400.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: normal;\n\tfont-weight: 600;\n\tsrc: url(../fonts/Open_Sans-normal-600.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: normal;\n\tfont-weight: 700;\n\tsrc: url(../fonts/Open_Sans-normal-700.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: normal;\n\tfont-weight: 800;\n\tsrc: url(../fonts/Open_Sans-normal-800.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n",":root{--blue: #007bff;--indigo: #6610f2;--purple: #6f42c1;--pink: #e83e8c;--red: #dc3545;--orange: #fd7e14;--yellow: #ffc107;--green: #28a745;--teal: #20c997;--cyan: #17a2b8;--white: #fff;--gray: #6c757d;--gray-dark: #343a40;--primary: #175DDC;--secondary: #ced4da;--success: #00a65a;--info: #555;--warning: #bf7e16;--danger: #dd4b39;--light: #f8f9fa;--dark: #343a40;--primary-accent: #1252A3;--secondary-alt: #1A3B66;--breakpoint-xs: 0;--breakpoint-sm: 1px;--breakpoint-md: 2px;--breakpoint-lg: 3px;--breakpoint-xl: 4px;--font-family-sans-serif: \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace}*,*::before,*::after{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:\"Open Sans\",\"Helvetica Neue\",Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-size:1rem;font-weight:400;line-height:1.5;color:#333;text-align:left;background-color:#fff}[tabindex=\"-1\"]:focus{outline:0 !important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#175DDC;text-decoration:none;background-color:transparent}a:hover{color:#104097;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):hover,a:not([href]):not([tabindex]):focus{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}pre,code,kbd,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}button,[type=\"button\"],[type=\"reset\"],[type=\"submit\"]{-webkit-appearance:button}button:not(:disabled),[type=\"button\"]:not(:disabled),[type=\"reset\"]:not(:disabled),[type=\"submit\"]:not(:disabled){cursor:pointer}button::-moz-focus-inner,[type=\"button\"]::-moz-focus-inner,[type=\"reset\"]::-moz-focus-inner,[type=\"submit\"]::-moz-focus-inner{padding:0;border-style:none}input[type=\"radio\"],input[type=\"checkbox\"]{box-sizing:border-box;padding:0}input[type=\"date\"],input[type=\"time\"],input[type=\"datetime-local\"],input[type=\"month\"]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=\"number\"]::-webkit-inner-spin-button,[type=\"number\"]::-webkit-outer-spin-button{height:auto}[type=\"search\"]{outline-offset:-2px;-webkit-appearance:none}[type=\"search\"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none !important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1{font-size:1.7rem}h2,.h2{font-size:1.3rem}h3,.h3{font-size:1rem}h4,.h4{font-size:1rem}h5,.h5{font-size:1rem}h6,.h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:normal}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,0.1)}small,.small{font-size:90%;font-weight:400}mark,.mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:90%;color:#6c757d}.blockquote-footer::before{content:\"\\2014\\A0\"}.img-fluid,.table.table-list td.table-list-icon img{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:100%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:100%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:100%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:10px;padding-left:10px;margin-right:auto;margin-left:auto}@media (min-width: 1px){.container{max-width:540px}}@media (min-width: 2px){.container{max-width:720px}}@media (min-width: 3px){.container{max-width:960px}}@media (min-width: 4px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:10px;padding-left:10px;margin-right:auto;margin-left:auto}.row{display:flex;flex-wrap:wrap;margin-right:-10px;margin-left:-10px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=\"col-\"]{padding-right:0;padding-left:0}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col,.col-auto,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm,.col-sm-auto,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md,.col-md-auto,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg,.col-lg-auto,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl,.col-xl-auto{position:relative;width:100%;padding-right:10px;padding-left:10px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.33333%;max-width:8.33333%}.col-2{flex:0 0 16.66667%;max-width:16.66667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.33333%;max-width:33.33333%}.col-5{flex:0 0 41.66667%;max-width:41.66667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.33333%;max-width:58.33333%}.col-8{flex:0 0 66.66667%;max-width:66.66667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.33333%;max-width:83.33333%}.col-11{flex:0 0 91.66667%;max-width:91.66667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}@media (min-width: 1px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.33333%;max-width:8.33333%}.col-sm-2{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.33333%;max-width:33.33333%}.col-sm-5{flex:0 0 41.66667%;max-width:41.66667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.33333%;max-width:58.33333%}.col-sm-8{flex:0 0 66.66667%;max-width:66.66667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.33333%;max-width:83.33333%}.col-sm-11{flex:0 0 91.66667%;max-width:91.66667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width: 2px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.33333%;max-width:8.33333%}.col-md-2{flex:0 0 16.66667%;max-width:16.66667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.33333%;max-width:33.33333%}.col-md-5{flex:0 0 41.66667%;max-width:41.66667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.33333%;max-width:58.33333%}.col-md-8{flex:0 0 66.66667%;max-width:66.66667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.33333%;max-width:83.33333%}.col-md-11{flex:0 0 91.66667%;max-width:91.66667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width: 3px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.33333%;max-width:8.33333%}.col-lg-2{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.33333%;max-width:33.33333%}.col-lg-5{flex:0 0 41.66667%;max-width:41.66667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}.col-lg-8{flex:0 0 66.66667%;max-width:66.66667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.33333%;max-width:83.33333%}.col-lg-11{flex:0 0 91.66667%;max-width:91.66667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width: 4px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.33333%;max-width:8.33333%}.col-xl-2{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.33333%;max-width:33.33333%}.col-xl-5{flex:0 0 41.66667%;max-width:41.66667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.33333%;max-width:58.33333%}.col-xl-8{flex:0 0 66.66667%;max-width:66.66667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.33333%;max-width:83.33333%}.col-xl-11{flex:0 0 91.66667%;max-width:91.66667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.table{width:100%;margin-bottom:1rem;color:#333}.table th,.table td{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm th,.table-sm td{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered th,.table-bordered td{border:1px solid #dee2e6}.table-bordered thead th,.table-bordered thead td{border-bottom-width:2px}.table-borderless th,.table-borderless td,.table-borderless thead th,.table-borderless tbody+tbody{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,0.02)}.table-hover tbody tr:hover{color:#333;background-color:rgba(0,0,0,0.03)}.table-primary,.table-primary>th,.table-primary>td{background-color:#bed2f5}.table-primary th,.table-primary td,.table-primary thead th,.table-primary tbody+tbody{border-color:#86abed}.table-hover .table-primary:hover{background-color:#a8c3f2}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#a8c3f2}.table-secondary,.table-secondary>th,.table-secondary>td{background-color:#f1f3f5}.table-secondary th,.table-secondary td,.table-secondary thead th,.table-secondary tbody+tbody{border-color:#e6e9ec}.table-hover .table-secondary:hover{background-color:#e2e6ea}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#e2e6ea}.table-success,.table-success>th,.table-success>td{background-color:#b8e6d1}.table-success th,.table-success td,.table-success thead th,.table-success tbody+tbody{border-color:#7ad1a9}.table-hover .table-success:hover{background-color:#a5dfc5}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#a5dfc5}.table-info,.table-info>th,.table-info>td{background-color:#cfcfcf}.table-info th,.table-info td,.table-info thead th,.table-info tbody+tbody{border-color:#a7a7a7}.table-hover .table-info:hover{background-color:#c2c2c2}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#c2c2c2}.table-warning,.table-warning>th,.table-warning>td{background-color:#eddbbe}.table-warning th,.table-warning td,.table-warning thead th,.table-warning tbody+tbody{border-color:#debc86}.table-hover .table-warning:hover{background-color:#e7d0aa}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#e7d0aa}.table-danger,.table-danger>th,.table-danger>td{background-color:#f5cdc8}.table-danger th,.table-danger td,.table-danger thead th,.table-danger tbody+tbody{border-color:#eda198}.table-hover .table-danger:hover{background-color:#f1b9b2}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b9b2}.table-light,.table-light>th,.table-light>td{background-color:#fdfdfe}.table-light th,.table-light td,.table-light thead th,.table-light tbody+tbody{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>th,.table-dark>td{background-color:#c6c8ca}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-primary-accent,.table-primary-accent>th,.table-primary-accent>td{background-color:#bdcfe5}.table-primary-accent th,.table-primary-accent td,.table-primary-accent thead th,.table-primary-accent tbody+tbody{border-color:#84a5cf}.table-hover .table-primary-accent:hover{background-color:#abc2de}.table-hover .table-primary-accent:hover>td,.table-hover .table-primary-accent:hover>th{background-color:#abc2de}.table-secondary-alt,.table-secondary-alt>th,.table-secondary-alt>td{background-color:#bfc8d4}.table-secondary-alt th,.table-secondary-alt td,.table-secondary-alt thead th,.table-secondary-alt tbody+tbody{border-color:#8899af}.table-hover .table-secondary-alt:hover{background-color:#b0bbca}.table-hover .table-secondary-alt:hover>td,.table-hover .table-secondary-alt:hover>th{background-color:#b0bbca}.table-active,.table-active>th,.table-active>td{background-color:rgba(0,0,0,0.03)}.table-hover .table-active:hover{background-color:rgba(0,0,0,0.03)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,0.03)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark th,.table-dark td,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,0.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,0.075)}@media (max-width: 0.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width: 1.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width: 2.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width: 3.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fbfbfb;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#81a9f2;outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.form-control::placeholder{color:#b4b4b4;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e0e0e0;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fbfbfb}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.15rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#333;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.15rem;line-height:1.5;border-radius:.3rem}select.form-control[size],select.form-control[multiple]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=\"col-\"]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled ~ .form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:90%;color:#00a65a}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(0,166,90,0.9);border-radius:.25rem}.was-validated .form-control:valid,.form-control.is-valid{border-color:#00a65a;padding-right:calc(1.5em + .75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2300a65a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#00a65a;box-shadow:0 0 0 .2rem rgba(0,166,90,0.25)}.was-validated .form-control:valid ~ .valid-feedback,.was-validated .form-control:valid ~ .valid-tooltip,.form-control.is-valid ~ .valid-feedback,.form-control.is-valid ~ .valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .custom-select:valid,.custom-select.is-valid{border-color:#00a65a;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right .75rem center/8px 10px,url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2300a65a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") #fbfbfb no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .custom-select:valid:focus,.custom-select.is-valid:focus{border-color:#00a65a;box-shadow:0 0 0 .2rem rgba(0,166,90,0.25)}.was-validated .custom-select:valid ~ .valid-feedback,.was-validated .custom-select:valid ~ .valid-tooltip,.custom-select.is-valid ~ .valid-feedback,.custom-select.is-valid ~ .valid-tooltip{display:block}.was-validated .form-control-file:valid ~ .valid-feedback,.was-validated .form-control-file:valid ~ .valid-tooltip,.form-control-file.is-valid ~ .valid-feedback,.form-control-file.is-valid ~ .valid-tooltip{display:block}.was-validated .form-check-input:valid ~ .form-check-label,.form-check-input.is-valid ~ .form-check-label{color:#00a65a}.was-validated .form-check-input:valid ~ .valid-feedback,.was-validated .form-check-input:valid ~ .valid-tooltip,.form-check-input.is-valid ~ .valid-feedback,.form-check-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-control-input:valid ~ .custom-control-label,.custom-control-input.is-valid ~ .custom-control-label{color:#00a65a}.was-validated .custom-control-input:valid ~ .custom-control-label::before,.custom-control-input.is-valid ~ .custom-control-label::before{border-color:#00a65a}.was-validated .custom-control-input:valid ~ .valid-feedback,.was-validated .custom-control-input:valid ~ .valid-tooltip,.custom-control-input.is-valid ~ .valid-feedback,.custom-control-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before,.custom-control-input.is-valid:checked ~ .custom-control-label::before{border-color:#00d976;background-color:#00d976}.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before,.custom-control-input.is-valid:focus ~ .custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,166,90,0.25)}.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before,.custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before{border-color:#00a65a}.was-validated .custom-file-input:valid ~ .custom-file-label,.custom-file-input.is-valid ~ .custom-file-label{border-color:#00a65a}.was-validated .custom-file-input:valid ~ .valid-feedback,.was-validated .custom-file-input:valid ~ .valid-tooltip,.custom-file-input.is-valid ~ .valid-feedback,.custom-file-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-file-input:valid:focus ~ .custom-file-label,.custom-file-input.is-valid:focus ~ .custom-file-label{border-color:#00a65a;box-shadow:0 0 0 .2rem rgba(0,166,90,0.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:90%;color:#dd4b39}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(221,75,57,0.9);border-radius:.25rem}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#dd4b39;padding-right:calc(1.5em + .75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dd4b39' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dd4b39' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dd4b39;box-shadow:0 0 0 .2rem rgba(221,75,57,0.25)}.was-validated .form-control:invalid ~ .invalid-feedback,.was-validated .form-control:invalid ~ .invalid-tooltip,.form-control.is-invalid ~ .invalid-feedback,.form-control.is-invalid ~ .invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .custom-select:invalid,.custom-select.is-invalid{border-color:#dd4b39;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right .75rem center/8px 10px,url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dd4b39' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dd4b39' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\") #fbfbfb no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .custom-select:invalid:focus,.custom-select.is-invalid:focus{border-color:#dd4b39;box-shadow:0 0 0 .2rem rgba(221,75,57,0.25)}.was-validated .custom-select:invalid ~ .invalid-feedback,.was-validated .custom-select:invalid ~ .invalid-tooltip,.custom-select.is-invalid ~ .invalid-feedback,.custom-select.is-invalid ~ .invalid-tooltip{display:block}.was-validated .form-control-file:invalid ~ .invalid-feedback,.was-validated .form-control-file:invalid ~ .invalid-tooltip,.form-control-file.is-invalid ~ .invalid-feedback,.form-control-file.is-invalid ~ .invalid-tooltip{display:block}.was-validated .form-check-input:invalid ~ .form-check-label,.form-check-input.is-invalid ~ .form-check-label{color:#dd4b39}.was-validated .form-check-input:invalid ~ .invalid-feedback,.was-validated .form-check-input:invalid ~ .invalid-tooltip,.form-check-input.is-invalid ~ .invalid-feedback,.form-check-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-control-input:invalid ~ .custom-control-label,.custom-control-input.is-invalid ~ .custom-control-label{color:#dd4b39}.was-validated .custom-control-input:invalid ~ .custom-control-label::before,.custom-control-input.is-invalid ~ .custom-control-label::before{border-color:#dd4b39}.was-validated .custom-control-input:invalid ~ .invalid-feedback,.was-validated .custom-control-input:invalid ~ .invalid-tooltip,.custom-control-input.is-invalid ~ .invalid-feedback,.custom-control-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before,.custom-control-input.is-invalid:checked ~ .custom-control-label::before{border-color:#e47365;background-color:#e47365}.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before,.custom-control-input.is-invalid:focus ~ .custom-control-label::before{box-shadow:0 0 0 .2rem rgba(221,75,57,0.25)}.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before,.custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before{border-color:#dd4b39}.was-validated .custom-file-input:invalid ~ .custom-file-label,.custom-file-input.is-invalid ~ .custom-file-label{border-color:#dd4b39}.was-validated .custom-file-input:invalid ~ .invalid-feedback,.was-validated .custom-file-input:invalid ~ .invalid-tooltip,.custom-file-input.is-invalid ~ .invalid-feedback,.custom-file-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-file-input:invalid:focus ~ .custom-file-label,.custom-file-input.is-invalid:focus ~ .custom-file-label{border-color:#dd4b39;box-shadow:0 0 0 .2rem rgba(221,75,57,0.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width: 1px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group,.form-inline .custom-select{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn,.swal2-popup .swal2-actions button{display:inline-block;font-weight:600;color:#333;text-align:center;vertical-align:middle;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn,.swal2-popup .swal2-actions button{transition:none}}.btn:hover,.swal2-popup .swal2-actions button:hover{color:#333;text-decoration:none}.btn:focus,.swal2-popup .swal2-actions button:focus,.btn.focus,.swal2-popup .swal2-actions button.focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.btn.disabled,.swal2-popup .swal2-actions button.disabled,.btn:disabled,.swal2-popup .swal2-actions button:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary,.swal2-popup .swal2-actions button.swal2-confirm{color:#fff;background-color:#175DDC;border-color:#175DDC}.btn-primary:hover,.swal2-popup .swal2-actions button.swal2-confirm:hover{color:#fff;background-color:#134eb9;border-color:#1249ae}.btn-primary:focus,.swal2-popup .swal2-actions button.swal2-confirm:focus,.btn-primary.focus,.swal2-popup .swal2-actions button.focus.swal2-confirm{box-shadow:0 0 0 .2rem rgba(58,117,225,0.5)}.btn-primary.disabled,.swal2-popup .swal2-actions button.disabled.swal2-confirm,.btn-primary:disabled,.swal2-popup .swal2-actions button.swal2-confirm:disabled{color:#fff;background-color:#175DDC;border-color:#175DDC}.btn-primary:not(:disabled):not(.disabled):active,.swal2-popup .swal2-actions button.swal2-confirm:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.swal2-popup .swal2-actions button.swal2-confirm:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle,.swal2-popup .swal2-actions .show>button.dropdown-toggle.swal2-confirm{color:#fff;background-color:#1249ae;border-color:#1145a2}.btn-primary:not(:disabled):not(.disabled):active:focus,.swal2-popup .swal2-actions button.swal2-confirm:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.swal2-popup .swal2-actions button.swal2-confirm:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus,.swal2-popup .swal2-actions .show>button.dropdown-toggle.swal2-confirm:focus{box-shadow:0 0 0 .2rem rgba(58,117,225,0.5)}.btn-secondary{color:#212529;background-color:#ced4da;border-color:#ced4da}.btn-secondary:hover{color:#212529;background-color:#b8c1ca;border-color:#b1bbc4}.btn-secondary:focus,.btn-secondary.focus{box-shadow:0 0 0 .2rem rgba(180,186,191,0.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#212529;background-color:#ced4da;border-color:#ced4da}.btn-secondary:not(:disabled):not(.disabled):active,.btn-secondary:not(:disabled):not(.disabled).active,.show>.btn-secondary.dropdown-toggle{color:#212529;background-color:#b1bbc4;border-color:#aab4bf}.btn-secondary:not(:disabled):not(.disabled):active:focus,.btn-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(180,186,191,0.5)}.btn-success{color:#fff;background-color:#00a65a;border-color:#00a65a}.btn-success:hover{color:#fff;background-color:#008045;border-color:#00733e}.btn-success:focus,.btn-success.focus{box-shadow:0 0 0 .2rem rgba(38,179,115,0.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#00a65a;border-color:#00a65a}.btn-success:not(:disabled):not(.disabled):active,.btn-success:not(:disabled):not(.disabled).active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#00733e;border-color:#006637}.btn-success:not(:disabled):not(.disabled):active:focus,.btn-success:not(:disabled):not(.disabled).active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,179,115,0.5)}.btn-info{color:#fff;background-color:#555;border-color:#555}.btn-info:hover{color:#fff;background-color:#424242;border-color:#3c3c3c}.btn-info:focus,.btn-info.focus{box-shadow:0 0 0 .2rem rgba(111,111,111,0.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#555;border-color:#555}.btn-info:not(:disabled):not(.disabled):active,.btn-info:not(:disabled):not(.disabled).active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#3c3c3c;border-color:#353535}.btn-info:not(:disabled):not(.disabled):active:focus,.btn-info:not(:disabled):not(.disabled).active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(111,111,111,0.5)}.btn-warning{color:#fff;background-color:#bf7e16;border-color:#bf7e16}.btn-warning:hover{color:#fff;background-color:#9d6712;border-color:#916011}.btn-warning:focus,.btn-warning.focus{box-shadow:0 0 0 .2rem rgba(201,145,57,0.5)}.btn-warning.disabled,.btn-warning:disabled{color:#fff;background-color:#bf7e16;border-color:#bf7e16}.btn-warning:not(:disabled):not(.disabled):active,.btn-warning:not(:disabled):not(.disabled).active,.show>.btn-warning.dropdown-toggle{color:#fff;background-color:#916011;border-color:#86580f}.btn-warning:not(:disabled):not(.disabled):active:focus,.btn-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(201,145,57,0.5)}.btn-danger{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.btn-danger:hover{color:#fff;background-color:#cd3623;border-color:#c23321}.btn-danger:focus,.btn-danger.focus{box-shadow:0 0 0 .2rem rgba(226,102,87,0.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.btn-danger:not(:disabled):not(.disabled):active,.btn-danger:not(:disabled):not(.disabled).active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#c23321;border-color:#b7301f}.btn-danger:not(:disabled):not(.disabled):active:focus,.btn-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(226,102,87,0.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light:focus,.btn-light.focus{box-shadow:0 0 0 .2rem rgba(216,217,219,0.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled):active,.btn-light:not(:disabled):not(.disabled).active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled):active:focus,.btn-light:not(:disabled):not(.disabled).active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,0.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark:focus,.btn-dark.focus{box-shadow:0 0 0 .2rem rgba(82,88,93,0.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled):active,.btn-dark:not(:disabled):not(.disabled).active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled):active:focus,.btn-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,0.5)}.btn-primary-accent{color:#fff;background-color:#1252A3;border-color:#1252A3}.btn-primary-accent:hover{color:#fff;background-color:#0e4181;border-color:#0d3b75}.btn-primary-accent:focus,.btn-primary-accent.focus{box-shadow:0 0 0 .2rem rgba(54,108,177,0.5)}.btn-primary-accent.disabled,.btn-primary-accent:disabled{color:#fff;background-color:#1252A3;border-color:#1252A3}.btn-primary-accent:not(:disabled):not(.disabled):active,.btn-primary-accent:not(:disabled):not(.disabled).active,.show>.btn-primary-accent.dropdown-toggle{color:#fff;background-color:#0d3b75;border-color:#0c356a}.btn-primary-accent:not(:disabled):not(.disabled):active:focus,.btn-primary-accent:not(:disabled):not(.disabled).active:focus,.show>.btn-primary-accent.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(54,108,177,0.5)}.btn-secondary-alt{color:#fff;background-color:#1A3B66;border-color:#1A3B66}.btn-secondary-alt:hover{color:#fff;background-color:#122948;border-color:#10233d}.btn-secondary-alt:focus,.btn-secondary-alt.focus{box-shadow:0 0 0 .2rem rgba(60,88,125,0.5)}.btn-secondary-alt.disabled,.btn-secondary-alt:disabled{color:#fff;background-color:#1A3B66;border-color:#1A3B66}.btn-secondary-alt:not(:disabled):not(.disabled):active,.btn-secondary-alt:not(:disabled):not(.disabled).active,.show>.btn-secondary-alt.dropdown-toggle{color:#fff;background-color:#10233d;border-color:#0d1e33}.btn-secondary-alt:not(:disabled):not(.disabled):active:focus,.btn-secondary-alt:not(:disabled):not(.disabled).active:focus,.show>.btn-secondary-alt.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(60,88,125,0.5)}.btn-outline-primary{color:#175DDC;border-color:#175DDC}.btn-outline-primary:hover{color:#fff;background-color:#175DDC;border-color:#175DDC}.btn-outline-primary:focus,.btn-outline-primary.focus{box-shadow:0 0 0 .2rem rgba(23,93,220,0.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#175DDC;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled):active,.btn-outline-primary:not(:disabled):not(.disabled).active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#175DDC;border-color:#175DDC}.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,93,220,0.5)}.btn-outline-secondary,.swal2-popup .swal2-actions button.swal2-cancel{color:#ced4da;border-color:#ced4da}.btn-outline-secondary:hover,.swal2-popup .swal2-actions button.swal2-cancel:hover{color:#212529;background-color:#ced4da;border-color:#ced4da}.btn-outline-secondary:focus,.swal2-popup .swal2-actions button.swal2-cancel:focus,.btn-outline-secondary.focus,.swal2-popup .swal2-actions button.focus.swal2-cancel{box-shadow:0 0 0 .2rem rgba(206,212,218,0.5)}.btn-outline-secondary.disabled,.swal2-popup .swal2-actions button.disabled.swal2-cancel,.btn-outline-secondary:disabled,.swal2-popup .swal2-actions button.swal2-cancel:disabled{color:#ced4da;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled):active,.swal2-popup .swal2-actions button.swal2-cancel:not(:disabled):not(.disabled):active,.btn-outline-secondary:not(:disabled):not(.disabled).active,.swal2-popup .swal2-actions button.swal2-cancel:not(:disabled):not(.disabled).active,.show>.btn-outline-secondary.dropdown-toggle,.swal2-popup .swal2-actions .show>button.dropdown-toggle.swal2-cancel{color:#212529;background-color:#ced4da;border-color:#ced4da}.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.swal2-popup .swal2-actions button.swal2-cancel:not(:disabled):not(.disabled):active:focus,.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.swal2-popup .swal2-actions button.swal2-cancel:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus,.swal2-popup .swal2-actions .show>button.dropdown-toggle.swal2-cancel:focus{box-shadow:0 0 0 .2rem rgba(206,212,218,0.5)}.btn-outline-success{color:#00a65a;border-color:#00a65a}.btn-outline-success:hover{color:#fff;background-color:#00a65a;border-color:#00a65a}.btn-outline-success:focus,.btn-outline-success.focus{box-shadow:0 0 0 .2rem rgba(0,166,90,0.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#00a65a;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled):active,.btn-outline-success:not(:disabled):not(.disabled).active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#00a65a;border-color:#00a65a}.btn-outline-success:not(:disabled):not(.disabled):active:focus,.btn-outline-success:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,166,90,0.5)}.btn-outline-info{color:#555;border-color:#555}.btn-outline-info:hover{color:#fff;background-color:#555;border-color:#555}.btn-outline-info:focus,.btn-outline-info.focus{box-shadow:0 0 0 .2rem rgba(85,85,85,0.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#555;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled):active,.btn-outline-info:not(:disabled):not(.disabled).active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#555;border-color:#555}.btn-outline-info:not(:disabled):not(.disabled):active:focus,.btn-outline-info:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(85,85,85,0.5)}.btn-outline-warning{color:#bf7e16;border-color:#bf7e16}.btn-outline-warning:hover{color:#fff;background-color:#bf7e16;border-color:#bf7e16}.btn-outline-warning:focus,.btn-outline-warning.focus{box-shadow:0 0 0 .2rem rgba(191,126,22,0.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#bf7e16;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled):active,.btn-outline-warning:not(:disabled):not(.disabled).active,.show>.btn-outline-warning.dropdown-toggle{color:#fff;background-color:#bf7e16;border-color:#bf7e16}.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(191,126,22,0.5)}.btn-outline-danger{color:#dd4b39;border-color:#dd4b39}.btn-outline-danger:hover{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.btn-outline-danger:focus,.btn-outline-danger.focus{box-shadow:0 0 0 .2rem rgba(221,75,57,0.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dd4b39;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled):active,.btn-outline-danger:not(:disabled):not(.disabled).active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(221,75,57,0.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:focus,.btn-outline-light.focus{box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled):active,.btn-outline-light:not(:disabled):not(.disabled).active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled):active:focus,.btn-outline-light:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:focus,.btn-outline-dark.focus{box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled):active,.btn-outline-dark:not(:disabled):not(.disabled).active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.btn-outline-primary-accent{color:#1252A3;border-color:#1252A3}.btn-outline-primary-accent:hover{color:#fff;background-color:#1252A3;border-color:#1252A3}.btn-outline-primary-accent:focus,.btn-outline-primary-accent.focus{box-shadow:0 0 0 .2rem rgba(18,82,163,0.5)}.btn-outline-primary-accent.disabled,.btn-outline-primary-accent:disabled{color:#1252A3;background-color:transparent}.btn-outline-primary-accent:not(:disabled):not(.disabled):active,.btn-outline-primary-accent:not(:disabled):not(.disabled).active,.show>.btn-outline-primary-accent.dropdown-toggle{color:#fff;background-color:#1252A3;border-color:#1252A3}.btn-outline-primary-accent:not(:disabled):not(.disabled):active:focus,.btn-outline-primary-accent:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-primary-accent.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(18,82,163,0.5)}.btn-outline-secondary-alt{color:#1A3B66;border-color:#1A3B66}.btn-outline-secondary-alt:hover{color:#fff;background-color:#1A3B66;border-color:#1A3B66}.btn-outline-secondary-alt:focus,.btn-outline-secondary-alt.focus{box-shadow:0 0 0 .2rem rgba(26,59,102,0.5)}.btn-outline-secondary-alt.disabled,.btn-outline-secondary-alt:disabled{color:#1A3B66;background-color:transparent}.btn-outline-secondary-alt:not(:disabled):not(.disabled):active,.btn-outline-secondary-alt:not(:disabled):not(.disabled).active,.show>.btn-outline-secondary-alt.dropdown-toggle{color:#fff;background-color:#1A3B66;border-color:#1A3B66}.btn-outline-secondary-alt:not(:disabled):not(.disabled):active:focus,.btn-outline-secondary-alt:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-secondary-alt.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(26,59,102,0.5)}.btn-link{font-weight:400;color:#175DDC;text-decoration:none}.btn-link:hover{color:#104097;text-decoration:underline}.btn-link:focus,.btn-link.focus{text-decoration:underline;box-shadow:none}.btn-link:disabled,.btn-link.disabled{color:#6c757d;pointer-events:none}.btn-lg,.btn-group-lg>.btn,.swal2-popup .swal2-actions .btn-group-lg>button{padding:.5rem 1rem;font-size:1.15rem;line-height:1.5;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn,.swal2-popup .swal2-actions .btn-group-sm>button{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=\"submit\"].btn-block,input[type=\"reset\"].btn-block,input[type=\"button\"].btn-block{width:100%}.fade{transition:opacity 0.15s linear}@media (prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height 0.35s ease}@media (prefers-reduced-motion: reduce){.collapsing{transition:none}}.dropup,.dropright,.dropdown,.dropleft{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#333;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width: 1px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width: 2px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width: 3px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width: 4px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\"}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=\"top\"],.dropdown-menu[x-placement^=\"right\"],.dropdown-menu[x-placement^=\"bottom\"],.dropdown-menu[x-placement^=\"left\"]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#333;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:hover,.dropdown-item:focus{color:#16181b;text-decoration:none;background-color:rgba(0,0,0,0.06)}.dropdown-item.active,.dropdown-item:active{color:#333;text-decoration:none;background-color:rgba(0,0,0,0.1)}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#333}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.swal2-popup .swal2-actions .btn-group>button,.btn-group-vertical>.btn,.swal2-popup .swal2-actions .btn-group-vertical>button{position:relative;flex:1 1 auto}.btn-group>.btn:hover,.swal2-popup .swal2-actions .btn-group>button:hover,.btn-group-vertical>.btn:hover,.swal2-popup .swal2-actions .btn-group-vertical>button:hover{z-index:1}.btn-group>.btn:focus,.swal2-popup .swal2-actions .btn-group>button:focus,.btn-group>.btn:active,.swal2-popup .swal2-actions .btn-group>button:active,.btn-group>.btn.active,.swal2-popup .swal2-actions .btn-group>button.active,.btn-group-vertical>.btn:focus,.swal2-popup .swal2-actions .btn-group-vertical>button:focus,.btn-group-vertical>.btn:active,.swal2-popup .swal2-actions .btn-group-vertical>button:active,.btn-group-vertical>.btn.active,.swal2-popup .swal2-actions .btn-group-vertical>button.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.swal2-popup .swal2-actions .btn-group>button:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-left:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.swal2-popup .swal2-actions .btn-group>button:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn,.swal2-popup .swal2-actions .btn-group>.btn-group:not(:last-child)>button{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:not(:first-child),.swal2-popup .swal2-actions .btn-group>button:not(:first-child),.btn-group>.btn-group:not(:first-child)>.btn,.swal2-popup .swal2-actions .btn-group>.btn-group:not(:first-child)>button{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split,.swal2-popup .swal2-actions .btn-group-sm>button+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split,.swal2-popup .swal2-actions .btn-group-lg>button+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.swal2-popup .swal2-actions .btn-group-vertical>button,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.swal2-popup .swal2-actions .btn-group-vertical>button:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.swal2-popup .swal2-actions .btn-group-vertical>button:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn,.swal2-popup .swal2-actions .btn-group-vertical>.btn-group:not(:last-child)>button{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:not(:first-child),.swal2-popup .swal2-actions .btn-group-vertical>button:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child)>.btn,.swal2-popup .swal2-actions .btn-group-vertical>.btn-group:not(:first-child)>button{border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.swal2-popup .swal2-actions .btn-group-toggle>button,.btn-group-toggle>.btn-group>.btn,.swal2-popup .swal2-actions .btn-group-toggle>.btn-group>button{margin-bottom:0}.btn-group-toggle>.btn input[type=\"radio\"],.swal2-popup .swal2-actions .btn-group-toggle>button input[type=\"radio\"],.btn-group-toggle>.btn input[type=\"checkbox\"],.swal2-popup .swal2-actions .btn-group-toggle>button input[type=\"checkbox\"],.btn-group-toggle>.btn-group>.btn input[type=\"radio\"],.swal2-popup .swal2-actions .btn-group-toggle>.btn-group>button input[type=\"radio\"],.btn-group-toggle>.btn-group>.btn input[type=\"checkbox\"],.swal2-popup .swal2-actions .btn-group-toggle>.btn-group>button input[type=\"checkbox\"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-control-plaintext,.input-group>.custom-select,.input-group>.custom-file{position:relative;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.form-control+.form-control,.input-group>.form-control+.custom-select,.input-group>.form-control+.custom-file,.input-group>.form-control-plaintext+.form-control,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.custom-file,.input-group>.custom-select+.form-control,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.custom-file,.input-group>.custom-file+.form-control,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.custom-file{margin-left:-1px}.input-group>.form-control:focus,.input-group>.custom-select:focus,.input-group>.custom-file .custom-file-input:focus ~ .custom-file-label{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.form-control:not(:last-child),.input-group>.custom-select:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.form-control:not(:first-child),.input-group>.custom-select:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-prepend,.input-group-append{display:flex}.input-group-prepend .btn,.input-group-prepend .swal2-popup .swal2-actions button,.swal2-popup .swal2-actions .input-group-prepend button,.input-group-append .btn,.input-group-append .swal2-popup .swal2-actions button,.swal2-popup .swal2-actions .input-group-append button{position:relative;z-index:2}.input-group-prepend .btn:focus,.input-group-prepend .swal2-popup .swal2-actions button:focus,.swal2-popup .swal2-actions .input-group-prepend button:focus,.input-group-append .btn:focus,.input-group-append .swal2-popup .swal2-actions button:focus,.swal2-popup .swal2-actions .input-group-append button:focus{z-index:3}.input-group-prepend .btn+.btn,.input-group-prepend .swal2-popup .swal2-actions button+.btn,.swal2-popup .swal2-actions .input-group-prepend button+.btn,.input-group-prepend .swal2-popup .swal2-actions .btn+button,.swal2-popup .swal2-actions .input-group-prepend .btn+button,.input-group-prepend .swal2-popup .swal2-actions button+button,.swal2-popup .swal2-actions .input-group-prepend button+button,.input-group-prepend .btn+.input-group-text,.input-group-prepend .swal2-popup .swal2-actions button+.input-group-text,.swal2-popup .swal2-actions .input-group-prepend button+.input-group-text,.input-group-prepend .input-group-text+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .swal2-popup .swal2-actions .input-group-text+button,.swal2-popup .swal2-actions .input-group-prepend .input-group-text+button,.input-group-append .btn+.btn,.input-group-append .swal2-popup .swal2-actions button+.btn,.swal2-popup .swal2-actions .input-group-append button+.btn,.input-group-append .swal2-popup .swal2-actions .btn+button,.swal2-popup .swal2-actions .input-group-append .btn+button,.input-group-append .swal2-popup .swal2-actions button+button,.swal2-popup .swal2-actions .input-group-append button+button,.input-group-append .btn+.input-group-text,.input-group-append .swal2-popup .swal2-actions button+.input-group-text,.swal2-popup .swal2-actions .input-group-append button+.input-group-text,.input-group-append .input-group-text+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .swal2-popup .swal2-actions .input-group-text+button,.swal2-popup .swal2-actions .input-group-append .input-group-text+button{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=\"radio\"],.input-group-text input[type=\"checkbox\"]{margin-top:0}.input-group-lg>.form-control:not(textarea),.input-group-lg>.custom-select{height:calc(1.5em + 1rem + 2px)}.input-group-lg>.form-control,.input-group-lg>.custom-select,.input-group-lg>.input-group-prepend>.input-group-text,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.swal2-popup .swal2-actions .input-group-lg>.input-group-prepend>button,.input-group-lg>.input-group-append>.btn,.swal2-popup .swal2-actions .input-group-lg>.input-group-append>button{padding:.5rem 1rem;font-size:1.15rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.form-control:not(textarea),.input-group-sm>.custom-select{height:calc(1.5em + .5rem + 2px)}.input-group-sm>.form-control,.input-group-sm>.custom-select,.input-group-sm>.input-group-prepend>.input-group-text,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.swal2-popup .swal2-actions .input-group-sm>.input-group-prepend>button,.input-group-sm>.input-group-append>.btn,.swal2-popup .swal2-actions .input-group-sm>.input-group-append>button{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-prepend>.btn,.swal2-popup .swal2-actions .input-group>.input-group-prepend>button,.input-group>.input-group-prepend>.input-group-text,.input-group>.input-group-append:not(:last-child)>.btn,.swal2-popup .swal2-actions .input-group>.input-group-append:not(:last-child)>button,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.swal2-popup .swal2-actions .input-group>.input-group-append:last-child>button:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.swal2-popup .swal2-actions .input-group>.input-group-append>button,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:not(:first-child)>.btn,.swal2-popup .swal2-actions .input-group>.input-group-prepend:not(:first-child)>button,.input-group>.input-group-prepend:not(:first-child)>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.swal2-popup .swal2-actions .input-group>.input-group-prepend:first-child>button:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked ~ .custom-control-label::before{color:#fff;border-color:#175DDC;background-color:#175DDC}.custom-control-input:focus ~ .custom-control-label::before{box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.custom-control-input:focus:not(:checked) ~ .custom-control-label::before{border-color:#81a9f2}.custom-control-input:not(:disabled):active ~ .custom-control-label::before{color:#fff;background-color:#afc8f7;border-color:#afc8f7}.custom-control-input:disabled ~ .custom-control-label{color:#6c757d}.custom-control-input:disabled ~ .custom-control-label::before{background-color:#e0e0e0}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:\"\";background-color:#fbfbfb;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:\"\";background:no-repeat 50% / 50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e\")}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before{border-color:#175DDC;background-color:#175DDC}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\")}.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(23,93,220,0.5)}.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before{background-color:rgba(23,93,220,0.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked ~ .custom-control-label::after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\")}.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(23,93,220,0.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked ~ .custom-control-label::after{background-color:#fbfbfb;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(23,93,220,0.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right .75rem center/8px 10px;background-color:#fbfbfb;border:1px solid #ced4da;border-radius:.25rem;appearance:none}.custom-select:focus{border-color:#81a9f2;outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fbfbfb}.custom-select[multiple],.custom-select[size]:not([size=\"1\"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.15rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus ~ .custom-file-label{border-color:#81a9f2;box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.custom-file-input:disabled ~ .custom-file-label{background-color:#e0e0e0}.custom-file-input:lang(en) ~ .custom-file-label::after{content:\"Browse\"}.custom-file-input ~ .custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fbfbfb;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:\"Browse\";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:calc(1rem + .4rem);padding:0;background-color:transparent;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(23,93,220,0.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(23,93,220,0.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(23,93,220,0.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#175DDC;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#afc8f7}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#175DDC;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#afc8f7}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#175DDC;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#afc8f7}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:hover,.nav-link:focus{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#175DDC}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:.75rem 1rem}.navbar>.container,.navbar>.container-fluid{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:0;padding-bottom:0;margin-right:1rem;font-size:2.1875rem;line-height:inherit;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.15rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:hover,.navbar-toggler:focus{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:\"\";background:no-repeat center center;background-size:100% 100%}@media (max-width: 0.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 1px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width: 1.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 2px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width: 2.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 3px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width: 3.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 4px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,0.9)}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:rgba(0,0,0,0.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,0.5)}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:rgba(0,0,0,0.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,0.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .nav-link.active{color:rgba(0,0,0,0.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,0.5);border-color:rgba(0,0,0,0.1)}.navbar-light .navbar-toggler-icon{background-image:url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0,0,0,0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\")}.navbar-light .navbar-text{color:rgba(0,0,0,0.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,0.9)}.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:rgba(0,0,0,0.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,0.7)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,0.9)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,0.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,0.7);border-color:rgba(255,255,255,0.1)}.navbar-dark .navbar-toggler-icon{background-image:url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255,255,255,0.7)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\")}.navbar-dark .navbar-text{color:rgba(255,255,255,0.7)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,0.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.6rem}.card-subtitle{margin-top:-.3rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.6rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,0.03);border-bottom:1px solid rgba(0,0,0,0.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.6rem 1.25rem;background-color:rgba(0,0,0,0.03);border-top:1px solid rgba(0,0,0,0.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.6rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:flex;flex-direction:column}.card-deck .card{margin-bottom:10px}@media (min-width: 1px){.card-deck{flex-flow:row wrap;margin-right:-10px;margin-left:-10px}.card-deck .card{display:flex;flex:1 0 0%;flex-direction:column;margin-right:10px;margin-bottom:0;margin-left:10px}}.card-group{display:flex;flex-direction:column}.card-group>.card{margin-bottom:10px}@media (min-width: 1px){.card-group{flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.6rem}@media (min-width: 1px){.card-columns{column-count:3;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:\"/\"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#175DDC;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#104097;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#175DDC;border-color:#175DDC}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.15rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.badge{transition:none}}a.badge:hover,a.badge:focus{text-decoration:none}.badge:empty{display:none}.btn .badge,.swal2-popup .swal2-actions button .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#175DDC}a.badge-primary:hover,a.badge-primary:focus{color:#fff;background-color:#1249ae}a.badge-primary:focus,a.badge-primary.focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,0.5)}.badge-secondary{color:#212529;background-color:#ced4da}a.badge-secondary:hover,a.badge-secondary:focus{color:#212529;background-color:#b1bbc4}a.badge-secondary:focus,a.badge-secondary.focus{outline:0;box-shadow:0 0 0 .2rem rgba(206,212,218,0.5)}.badge-success{color:#fff;background-color:#00a65a}a.badge-success:hover,a.badge-success:focus{color:#fff;background-color:#00733e}a.badge-success:focus,a.badge-success.focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,166,90,0.5)}.badge-info{color:#fff;background-color:#555}a.badge-info:hover,a.badge-info:focus{color:#fff;background-color:#3c3c3c}a.badge-info:focus,a.badge-info.focus{outline:0;box-shadow:0 0 0 .2rem rgba(85,85,85,0.5)}.badge-warning{color:#fff;background-color:#bf7e16}a.badge-warning:hover,a.badge-warning:focus{color:#fff;background-color:#916011}a.badge-warning:focus,a.badge-warning.focus{outline:0;box-shadow:0 0 0 .2rem rgba(191,126,22,0.5)}.badge-danger{color:#fff;background-color:#dd4b39}a.badge-danger:hover,a.badge-danger:focus{color:#fff;background-color:#c23321}a.badge-danger:focus,a.badge-danger.focus{outline:0;box-shadow:0 0 0 .2rem rgba(221,75,57,0.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:hover,a.badge-light:focus{color:#212529;background-color:#dae0e5}a.badge-light:focus,a.badge-light.focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:hover,a.badge-dark:focus{color:#fff;background-color:#1d2124}a.badge-dark:focus,a.badge-dark.focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.badge-primary-accent{color:#fff;background-color:#1252A3}a.badge-primary-accent:hover,a.badge-primary-accent:focus{color:#fff;background-color:#0d3b75}a.badge-primary-accent:focus,a.badge-primary-accent.focus{outline:0;box-shadow:0 0 0 .2rem rgba(18,82,163,0.5)}.badge-secondary-alt{color:#fff;background-color:#1A3B66}a.badge-secondary-alt:hover,a.badge-secondary-alt:focus{color:#fff;background-color:#10233d}a.badge-secondary-alt:focus,a.badge-secondary-alt.focus{outline:0;box-shadow:0 0 0 .2rem rgba(26,59,102,0.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width: 1px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#0c3072;background-color:#d1dff8;border-color:#bed2f5}.alert-primary hr{border-top-color:#a8c3f2}.alert-primary .alert-link{color:#071d44}.alert-secondary{color:#6b6e71;background-color:#f5f6f8;border-color:#f1f3f5}.alert-secondary hr{border-top-color:#e2e6ea}.alert-secondary .alert-link{color:#525557}.alert-success{color:#00562f;background-color:#ccedde;border-color:#b8e6d1}.alert-success hr{border-top-color:#a5dfc5}.alert-success .alert-link{color:#002313}.alert-info{color:#2c2c2c;background-color:#ddd;border-color:#cfcfcf}.alert-info hr{border-top-color:#c2c2c2}.alert-info .alert-link{color:#131313}.alert-warning{color:#63420b;background-color:#f2e5d0;border-color:#eddbbe}.alert-warning hr{border-top-color:#e7d0aa}.alert-warning .alert-link{color:#352306}.alert-danger{color:#73271e;background-color:#f8dbd7;border-color:#f5cdc8}.alert-danger hr{border-top-color:#f1b9b2}.alert-danger .alert-link{color:#4b1913}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}.alert-primary-accent{color:#092b55;background-color:#d0dced;border-color:#bdcfe5}.alert-primary-accent hr{border-top-color:#abc2de}.alert-primary-accent .alert-link{color:#041427}.alert-secondary-alt{color:#0e1f35;background-color:#d1d8e0;border-color:#bfc8d4}.alert-secondary-alt hr{border-top-color:#b0bbca}.alert-secondary-alt .alert-link{color:#03070d}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#175DDC;transition:width 0.6s ease}@media (prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:1rem 1rem}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#333;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.6rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,0.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#333;background-color:#fff;border-color:rgba(0,0,0,0.125)}.list-group-horizontal{flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}@media (min-width: 1px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width: 2px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width: 3px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width: 4px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#0c3072;background-color:#bed2f5}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#0c3072;background-color:#a8c3f2}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#0c3072;border-color:#0c3072}.list-group-item-secondary{color:#6b6e71;background-color:#f1f3f5}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#6b6e71;background-color:#e2e6ea}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#6b6e71;border-color:#6b6e71}.list-group-item-success{color:#00562f;background-color:#b8e6d1}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#00562f;background-color:#a5dfc5}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#00562f;border-color:#00562f}.list-group-item-info{color:#2c2c2c;background-color:#cfcfcf}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#2c2c2c;background-color:#c2c2c2}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#2c2c2c;border-color:#2c2c2c}.list-group-item-warning{color:#63420b;background-color:#eddbbe}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#63420b;background-color:#e7d0aa}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#63420b;border-color:#63420b}.list-group-item-danger{color:#73271e;background-color:#f5cdc8}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#73271e;background-color:#f1b9b2}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#73271e;border-color:#73271e}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.list-group-item-primary-accent{color:#092b55;background-color:#bdcfe5}.list-group-item-primary-accent.list-group-item-action:hover,.list-group-item-primary-accent.list-group-item-action:focus{color:#092b55;background-color:#abc2de}.list-group-item-primary-accent.list-group-item-action.active{color:#fff;background-color:#092b55;border-color:#092b55}.list-group-item-secondary-alt{color:#0e1f35;background-color:#bfc8d4}.list-group-item-secondary-alt.list-group-item-action:hover,.list-group-item-secondary-alt.list-group-item-action:focus{color:#0e1f35;background-color:#b0bbca}.list-group-item-secondary-alt.list-group-item-action.active{color:#fff;background-color:#0e1f35;border-color:#0e1f35}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):hover,.close:not(:disabled):not(.disabled):focus{opacity:.75}button.close{padding:0;background-color:transparent;border:0;appearance:none}a.close.disabled{pointer-events:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform 0.3s ease-out;transform:translate(0, -50px)}@media (prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-header,.modal-dialog-scrollable .modal-footer{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:\"\"}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.3}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;align-items:center;justify-content:flex-end;padding:1rem;border-top:1px solid #dee2e6;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 1px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width: 3px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width: 4px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:\"Open Sans\",\"Helvetica Neue\",Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:\"\";border-color:transparent;border-style:solid}.bs-tooltip-top,.bs-tooltip-auto[x-placement^=\"top\"]{padding:.4rem 0}.bs-tooltip-top .arrow,.bs-tooltip-auto[x-placement^=\"top\"] .arrow{bottom:0}.bs-tooltip-top .arrow::before,.bs-tooltip-auto[x-placement^=\"top\"] .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-right,.bs-tooltip-auto[x-placement^=\"right\"]{padding:0 .4rem}.bs-tooltip-right .arrow,.bs-tooltip-auto[x-placement^=\"right\"] .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-right .arrow::before,.bs-tooltip-auto[x-placement^=\"right\"] .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-bottom,.bs-tooltip-auto[x-placement^=\"bottom\"]{padding:.4rem 0}.bs-tooltip-bottom .arrow,.bs-tooltip-auto[x-placement^=\"bottom\"] .arrow{top:0}.bs-tooltip-bottom .arrow::before,.bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-left,.bs-tooltip-auto[x-placement^=\"left\"]{padding:0 .4rem}.bs-tooltip-left .arrow,.bs-tooltip-auto[x-placement^=\"left\"] .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-left .arrow::before,.bs-tooltip-auto[x-placement^=\"left\"] .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:\"Open Sans\",\"Helvetica Neue\",Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::before,.popover .arrow::after{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid}.bs-popover-top,.bs-popover-auto[x-placement^=\"top\"]{margin-bottom:.5rem}.bs-popover-top>.arrow,.bs-popover-auto[x-placement^=\"top\"]>.arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-top>.arrow::before,.bs-popover-auto[x-placement^=\"top\"]>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,0.25)}.bs-popover-top>.arrow::after,.bs-popover-auto[x-placement^=\"top\"]>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-right,.bs-popover-auto[x-placement^=\"right\"]{margin-left:.5rem}.bs-popover-right>.arrow,.bs-popover-auto[x-placement^=\"right\"]>.arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-right>.arrow::before,.bs-popover-auto[x-placement^=\"right\"]>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,0.25)}.bs-popover-right>.arrow::after,.bs-popover-auto[x-placement^=\"right\"]>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-bottom,.bs-popover-auto[x-placement^=\"bottom\"]{margin-top:.5rem}.bs-popover-bottom>.arrow,.bs-popover-auto[x-placement^=\"bottom\"]>.arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-bottom>.arrow::before,.bs-popover-auto[x-placement^=\"bottom\"]>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,0.25)}.bs-popover-bottom>.arrow::after,.bs-popover-auto[x-placement^=\"bottom\"]>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-bottom .popover-header::before,.bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\"\";border-bottom:1px solid #f7f7f7}.bs-popover-left,.bs-popover-auto[x-placement^=\"left\"]{margin-right:.5rem}.bs-popover-left>.arrow,.bs-popover-auto[x-placement^=\"left\"]>.arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-left>.arrow::before,.bs-popover-auto[x-placement^=\"left\"]>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,0.25)}.bs-popover-left>.arrow::after,.bs-popover-auto[x-placement^=\"left\"]>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#333}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:\"\"}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-left),.active.carousel-item-right{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-right),.active.carousel-item-left{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:0s .6s opacity}@media (prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity 0.15s ease}@media (prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50% / 100% 100%}.carousel-control-prev-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e\")}.carousel-control-next-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e\")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity 0.6s ease}@media (prefers-reduced-motion: reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.bg-primary{background-color:#175DDC !important}a.bg-primary:hover,a.bg-primary:focus,button.bg-primary:hover,button.bg-primary:focus{background-color:#1249ae !important}.bg-secondary{background-color:#ced4da !important}a.bg-secondary:hover,a.bg-secondary:focus,button.bg-secondary:hover,button.bg-secondary:focus{background-color:#b1bbc4 !important}.bg-success{background-color:#00a65a !important}a.bg-success:hover,a.bg-success:focus,button.bg-success:hover,button.bg-success:focus{background-color:#00733e !important}.bg-info{background-color:#555 !important}a.bg-info:hover,a.bg-info:focus,button.bg-info:hover,button.bg-info:focus{background-color:#3c3c3c !important}.bg-warning{background-color:#bf7e16 !important}a.bg-warning:hover,a.bg-warning:focus,button.bg-warning:hover,button.bg-warning:focus{background-color:#916011 !important}.bg-danger{background-color:#dd4b39 !important}a.bg-danger:hover,a.bg-danger:focus,button.bg-danger:hover,button.bg-danger:focus{background-color:#c23321 !important}.bg-light{background-color:#f8f9fa !important}a.bg-light:hover,a.bg-light:focus,button.bg-light:hover,button.bg-light:focus{background-color:#dae0e5 !important}.bg-dark{background-color:#343a40 !important}a.bg-dark:hover,a.bg-dark:focus,button.bg-dark:hover,button.bg-dark:focus{background-color:#1d2124 !important}.bg-primary-accent{background-color:#1252A3 !important}a.bg-primary-accent:hover,a.bg-primary-accent:focus,button.bg-primary-accent:hover,button.bg-primary-accent:focus{background-color:#0d3b75 !important}.bg-secondary-alt{background-color:#1A3B66 !important}a.bg-secondary-alt:hover,a.bg-secondary-alt:focus,button.bg-secondary-alt:hover,button.bg-secondary-alt:focus{background-color:#10233d !important}.bg-white{background-color:#fff !important}.bg-transparent{background-color:transparent !important}.border{border:1px solid #dee2e6 !important}.border-top{border-top:1px solid #dee2e6 !important}.border-right{border-right:1px solid #dee2e6 !important}.border-bottom{border-bottom:1px solid #dee2e6 !important}.border-left{border-left:1px solid #dee2e6 !important}.border-0{border:0 !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.border-primary{border-color:#175DDC !important}.border-secondary{border-color:#ced4da !important}.border-success{border-color:#00a65a !important}.border-info{border-color:#555 !important}.border-warning{border-color:#bf7e16 !important}.border-danger{border-color:#dd4b39 !important}.border-light{border-color:#f8f9fa !important}.border-dark{border-color:#343a40 !important}.border-primary-accent{border-color:#1252A3 !important}.border-secondary-alt{border-color:#1A3B66 !important}.border-white{border-color:#fff !important}.rounded-sm{border-radius:.2rem !important}.rounded,.table.table-list td.table-list-icon img,app-avatar img{border-radius:.25rem !important}.rounded-top{border-top-left-radius:.25rem !important;border-top-right-radius:.25rem !important}.rounded-right{border-top-right-radius:.25rem !important;border-bottom-right-radius:.25rem !important}.rounded-bottom{border-bottom-right-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-left{border-top-left-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-lg{border-radius:.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-0{border-radius:0 !important}.clearfix::after{display:block;clear:both;content:\"\"}.d-none{display:none !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}@media (min-width: 1px){.d-sm-none{display:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}}@media (min-width: 2px){.d-md-none{display:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}}@media (min-width: 3px){.d-lg-none{display:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}}@media (min-width: 4px){.d-xl-none{display:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}}@media print{.d-print-none{display:none !important}.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:\"\"}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.85714%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-fill{flex:1 1 auto !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}@media (min-width: 1px){.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}}@media (min-width: 2px){.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}}@media (min-width: 3px){.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}}@media (min-width: 4px){.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}}.float-left{float:left !important}.float-right{float:right !important}.float-none{float:none !important}@media (min-width: 1px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media (min-width: 2px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media (min-width: 3px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media (min-width: 4px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports (position: sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only,.table.table-list tr:not(:hover) td.table-list-options>.dropdown:not(.show) button:not(:focus):not(:active),.table.table-list tr:not(:hover) td.table-list-options>button:not(:focus):not(:active){position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important}.shadow{box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important}.shadow-none{box-shadow:none !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mw-100{max-width:100% !important}.mh-100{max-height:100% !important}.min-vw-100{min-width:100vw !important}.min-vh-100{min-height:100vh !important}.vw-100{width:100vw !important}.vh-100{height:100vh !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:\"\";background-color:rgba(0,0,0,0)}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:.25rem !important}.mt-1,.my-1{margin-top:.25rem !important}.mr-1,.mx-1{margin-right:.25rem !important}.mb-1,.my-1{margin-bottom:.25rem !important}.ml-1,.mx-1{margin-left:.25rem !important}.m-2{margin:.5rem !important}.mt-2,.form-check-block .form-check-label>span,.my-2{margin-top:.5rem !important}.mr-2,.mx-2{margin-right:.5rem !important}.mb-2,.my-2{margin-bottom:.5rem !important}.ml-2,.mx-2{margin-left:.5rem !important}.m-3{margin:1rem !important}.mt-3,.form-check-block+.form-check-block:not(.mt-2),.my-3{margin-top:1rem !important}.mr-3,.mx-3{margin-right:1rem !important}.mb-3,.my-3{margin-bottom:1rem !important}.ml-3,.mx-3{margin-left:1rem !important}.m-4{margin:1.5rem !important}.mt-4,.my-4{margin-top:1.5rem !important}.mr-4,.mx-4{margin-right:1.5rem !important}.mb-4,.card-body-header,.my-4{margin-bottom:1.5rem !important}.ml-4,.mx-4{margin-left:1.5rem !important}.m-5{margin:3rem !important}.mt-5,.my-5{margin-top:3rem !important}.mr-5,.mx-5{margin-right:3rem !important}.mb-5,.my-5{margin-bottom:3rem !important}.ml-5,.mx-5{margin-left:3rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:.25rem !important}.pt-1,.py-1{padding-top:.25rem !important}.pr-1,.px-1{padding-right:.25rem !important}.pb-1,.py-1{padding-bottom:.25rem !important}.pl-1,.px-1{padding-left:.25rem !important}.p-2{padding:.5rem !important}.pt-2,.py-2{padding-top:.5rem !important}.pr-2,.px-2{padding-right:.5rem !important}.pb-2,.py-2{padding-bottom:.5rem !important}.pl-2,.px-2{padding-left:.5rem !important}.p-3{padding:1rem !important}.pt-3,.py-3{padding-top:1rem !important}.pr-3,.px-3{padding-right:1rem !important}.pb-3,.py-3{padding-bottom:1rem !important}.pl-3,.px-3{padding-left:1rem !important}.p-4{padding:1.5rem !important}.pt-4,.py-4{padding-top:1.5rem !important}.pr-4,.px-4{padding-right:1.5rem !important}.pb-4,.py-4{padding-bottom:1.5rem !important}.pl-4,.px-4{padding-left:1.5rem !important}.p-5{padding:3rem !important}.pt-5,.py-5{padding-top:3rem !important}.pr-5,.px-5{padding-right:3rem !important}.pb-5,.py-5{padding-bottom:3rem !important}.pl-5,.px-5{padding-left:3rem !important}.m-n1{margin:-.25rem !important}.mt-n1,.my-n1{margin-top:-.25rem !important}.mr-n1,.mx-n1{margin-right:-.25rem !important}.mb-n1,.my-n1{margin-bottom:-.25rem !important}.ml-n1,.mx-n1{margin-left:-.25rem !important}.m-n2{margin:-.5rem !important}.mt-n2,.my-n2{margin-top:-.5rem !important}.mr-n2,.mx-n2{margin-right:-.5rem !important}.mb-n2,.my-n2{margin-bottom:-.5rem !important}.ml-n2,.mx-n2{margin-left:-.5rem !important}.m-n3{margin:-1rem !important}.mt-n3,.my-n3{margin-top:-1rem !important}.mr-n3,.mx-n3{margin-right:-1rem !important}.mb-n3,.my-n3{margin-bottom:-1rem !important}.ml-n3,.mx-n3{margin-left:-1rem !important}.m-n4{margin:-1.5rem !important}.mt-n4,.my-n4{margin-top:-1.5rem !important}.mr-n4,.mx-n4{margin-right:-1.5rem !important}.mb-n4,.my-n4{margin-bottom:-1.5rem !important}.ml-n4,.mx-n4{margin-left:-1.5rem !important}.m-n5{margin:-3rem !important}.mt-n5,.my-n5{margin-top:-3rem !important}.mr-n5,.mx-n5{margin-right:-3rem !important}.mb-n5,.my-n5{margin-bottom:-3rem !important}.ml-n5,.mx-n5{margin-left:-3rem !important}.m-auto{margin:auto !important}.mt-auto,.my-auto{margin-top:auto !important}.mr-auto,.mx-auto{margin-right:auto !important}.mb-auto,.my-auto{margin-bottom:auto !important}.ml-auto,.mx-auto{margin-left:auto !important}@media (min-width: 1px){.m-sm-0{margin:0 !important}.mt-sm-0,.my-sm-0{margin-top:0 !important}.mr-sm-0,.mx-sm-0{margin-right:0 !important}.mb-sm-0,.my-sm-0{margin-bottom:0 !important}.ml-sm-0,.mx-sm-0{margin-left:0 !important}.m-sm-1{margin:.25rem !important}.mt-sm-1,.my-sm-1{margin-top:.25rem !important}.mr-sm-1,.mx-sm-1{margin-right:.25rem !important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem !important}.ml-sm-1,.mx-sm-1{margin-left:.25rem !important}.m-sm-2{margin:.5rem !important}.mt-sm-2,.my-sm-2{margin-top:.5rem !important}.mr-sm-2,.mx-sm-2{margin-right:.5rem !important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem !important}.ml-sm-2,.mx-sm-2{margin-left:.5rem !important}.m-sm-3{margin:1rem !important}.mt-sm-3,.my-sm-3{margin-top:1rem !important}.mr-sm-3,.mx-sm-3{margin-right:1rem !important}.mb-sm-3,.my-sm-3{margin-bottom:1rem !important}.ml-sm-3,.mx-sm-3{margin-left:1rem !important}.m-sm-4{margin:1.5rem !important}.mt-sm-4,.my-sm-4{margin-top:1.5rem !important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem !important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem !important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem !important}.m-sm-5{margin:3rem !important}.mt-sm-5,.my-sm-5{margin-top:3rem !important}.mr-sm-5,.mx-sm-5{margin-right:3rem !important}.mb-sm-5,.my-sm-5{margin-bottom:3rem !important}.ml-sm-5,.mx-sm-5{margin-left:3rem !important}.p-sm-0{padding:0 !important}.pt-sm-0,.py-sm-0{padding-top:0 !important}.pr-sm-0,.px-sm-0{padding-right:0 !important}.pb-sm-0,.py-sm-0{padding-bottom:0 !important}.pl-sm-0,.px-sm-0{padding-left:0 !important}.p-sm-1{padding:.25rem !important}.pt-sm-1,.py-sm-1{padding-top:.25rem !important}.pr-sm-1,.px-sm-1{padding-right:.25rem !important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem !important}.pl-sm-1,.px-sm-1{padding-left:.25rem !important}.p-sm-2{padding:.5rem !important}.pt-sm-2,.py-sm-2{padding-top:.5rem !important}.pr-sm-2,.px-sm-2{padding-right:.5rem !important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem !important}.pl-sm-2,.px-sm-2{padding-left:.5rem !important}.p-sm-3{padding:1rem !important}.pt-sm-3,.py-sm-3{padding-top:1rem !important}.pr-sm-3,.px-sm-3{padding-right:1rem !important}.pb-sm-3,.py-sm-3{padding-bottom:1rem !important}.pl-sm-3,.px-sm-3{padding-left:1rem !important}.p-sm-4{padding:1.5rem !important}.pt-sm-4,.py-sm-4{padding-top:1.5rem !important}.pr-sm-4,.px-sm-4{padding-right:1.5rem !important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem !important}.pl-sm-4,.px-sm-4{padding-left:1.5rem !important}.p-sm-5{padding:3rem !important}.pt-sm-5,.py-sm-5{padding-top:3rem !important}.pr-sm-5,.px-sm-5{padding-right:3rem !important}.pb-sm-5,.py-sm-5{padding-bottom:3rem !important}.pl-sm-5,.px-sm-5{padding-left:3rem !important}.m-sm-n1{margin:-.25rem !important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem !important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem !important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem !important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem !important}.m-sm-n2{margin:-.5rem !important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem !important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem !important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem !important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem !important}.m-sm-n3{margin:-1rem !important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem !important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem !important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem !important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem !important}.m-sm-n4{margin:-1.5rem !important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem !important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem !important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem !important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem !important}.m-sm-n5{margin:-3rem !important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem !important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem !important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem !important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem !important}.m-sm-auto{margin:auto !important}.mt-sm-auto,.my-sm-auto{margin-top:auto !important}.mr-sm-auto,.mx-sm-auto{margin-right:auto !important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto !important}.ml-sm-auto,.mx-sm-auto{margin-left:auto !important}}@media (min-width: 2px){.m-md-0{margin:0 !important}.mt-md-0,.my-md-0{margin-top:0 !important}.mr-md-0,.mx-md-0{margin-right:0 !important}.mb-md-0,.my-md-0{margin-bottom:0 !important}.ml-md-0,.mx-md-0{margin-left:0 !important}.m-md-1{margin:.25rem !important}.mt-md-1,.my-md-1{margin-top:.25rem !important}.mr-md-1,.mx-md-1{margin-right:.25rem !important}.mb-md-1,.my-md-1{margin-bottom:.25rem !important}.ml-md-1,.mx-md-1{margin-left:.25rem !important}.m-md-2{margin:.5rem !important}.mt-md-2,.my-md-2{margin-top:.5rem !important}.mr-md-2,.mx-md-2{margin-right:.5rem !important}.mb-md-2,.my-md-2{margin-bottom:.5rem !important}.ml-md-2,.mx-md-2{margin-left:.5rem !important}.m-md-3{margin:1rem !important}.mt-md-3,.my-md-3{margin-top:1rem !important}.mr-md-3,.mx-md-3{margin-right:1rem !important}.mb-md-3,.my-md-3{margin-bottom:1rem !important}.ml-md-3,.mx-md-3{margin-left:1rem !important}.m-md-4{margin:1.5rem !important}.mt-md-4,.my-md-4{margin-top:1.5rem !important}.mr-md-4,.mx-md-4{margin-right:1.5rem !important}.mb-md-4,.my-md-4{margin-bottom:1.5rem !important}.ml-md-4,.mx-md-4{margin-left:1.5rem !important}.m-md-5{margin:3rem !important}.mt-md-5,.my-md-5{margin-top:3rem !important}.mr-md-5,.mx-md-5{margin-right:3rem !important}.mb-md-5,.my-md-5{margin-bottom:3rem !important}.ml-md-5,.mx-md-5{margin-left:3rem !important}.p-md-0{padding:0 !important}.pt-md-0,.py-md-0{padding-top:0 !important}.pr-md-0,.px-md-0{padding-right:0 !important}.pb-md-0,.py-md-0{padding-bottom:0 !important}.pl-md-0,.px-md-0{padding-left:0 !important}.p-md-1{padding:.25rem !important}.pt-md-1,.py-md-1{padding-top:.25rem !important}.pr-md-1,.px-md-1{padding-right:.25rem !important}.pb-md-1,.py-md-1{padding-bottom:.25rem !important}.pl-md-1,.px-md-1{padding-left:.25rem !important}.p-md-2{padding:.5rem !important}.pt-md-2,.py-md-2{padding-top:.5rem !important}.pr-md-2,.px-md-2{padding-right:.5rem !important}.pb-md-2,.py-md-2{padding-bottom:.5rem !important}.pl-md-2,.px-md-2{padding-left:.5rem !important}.p-md-3{padding:1rem !important}.pt-md-3,.py-md-3{padding-top:1rem !important}.pr-md-3,.px-md-3{padding-right:1rem !important}.pb-md-3,.py-md-3{padding-bottom:1rem !important}.pl-md-3,.px-md-3{padding-left:1rem !important}.p-md-4{padding:1.5rem !important}.pt-md-4,.py-md-4{padding-top:1.5rem !important}.pr-md-4,.px-md-4{padding-right:1.5rem !important}.pb-md-4,.py-md-4{padding-bottom:1.5rem !important}.pl-md-4,.px-md-4{padding-left:1.5rem !important}.p-md-5{padding:3rem !important}.pt-md-5,.py-md-5{padding-top:3rem !important}.pr-md-5,.px-md-5{padding-right:3rem !important}.pb-md-5,.py-md-5{padding-bottom:3rem !important}.pl-md-5,.px-md-5{padding-left:3rem !important}.m-md-n1{margin:-.25rem !important}.mt-md-n1,.my-md-n1{margin-top:-.25rem !important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem !important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem !important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem !important}.m-md-n2{margin:-.5rem !important}.mt-md-n2,.my-md-n2{margin-top:-.5rem !important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem !important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem !important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem !important}.m-md-n3{margin:-1rem !important}.mt-md-n3,.my-md-n3{margin-top:-1rem !important}.mr-md-n3,.mx-md-n3{margin-right:-1rem !important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem !important}.ml-md-n3,.mx-md-n3{margin-left:-1rem !important}.m-md-n4{margin:-1.5rem !important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem !important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem !important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem !important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem !important}.m-md-n5{margin:-3rem !important}.mt-md-n5,.my-md-n5{margin-top:-3rem !important}.mr-md-n5,.mx-md-n5{margin-right:-3rem !important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem !important}.ml-md-n5,.mx-md-n5{margin-left:-3rem !important}.m-md-auto{margin:auto !important}.mt-md-auto,.my-md-auto{margin-top:auto !important}.mr-md-auto,.mx-md-auto{margin-right:auto !important}.mb-md-auto,.my-md-auto{margin-bottom:auto !important}.ml-md-auto,.mx-md-auto{margin-left:auto !important}}@media (min-width: 3px){.m-lg-0{margin:0 !important}.mt-lg-0,.my-lg-0{margin-top:0 !important}.mr-lg-0,.mx-lg-0{margin-right:0 !important}.mb-lg-0,.my-lg-0{margin-bottom:0 !important}.ml-lg-0,.mx-lg-0{margin-left:0 !important}.m-lg-1{margin:.25rem !important}.mt-lg-1,.my-lg-1{margin-top:.25rem !important}.mr-lg-1,.mx-lg-1{margin-right:.25rem !important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem !important}.ml-lg-1,.mx-lg-1{margin-left:.25rem !important}.m-lg-2{margin:.5rem !important}.mt-lg-2,.my-lg-2{margin-top:.5rem !important}.mr-lg-2,.mx-lg-2{margin-right:.5rem !important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem !important}.ml-lg-2,.mx-lg-2{margin-left:.5rem !important}.m-lg-3{margin:1rem !important}.mt-lg-3,.my-lg-3{margin-top:1rem !important}.mr-lg-3,.mx-lg-3{margin-right:1rem !important}.mb-lg-3,.my-lg-3{margin-bottom:1rem !important}.ml-lg-3,.mx-lg-3{margin-left:1rem !important}.m-lg-4{margin:1.5rem !important}.mt-lg-4,.my-lg-4{margin-top:1.5rem !important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem !important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem !important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem !important}.m-lg-5{margin:3rem !important}.mt-lg-5,.my-lg-5{margin-top:3rem !important}.mr-lg-5,.mx-lg-5{margin-right:3rem !important}.mb-lg-5,.my-lg-5{margin-bottom:3rem !important}.ml-lg-5,.mx-lg-5{margin-left:3rem !important}.p-lg-0{padding:0 !important}.pt-lg-0,.py-lg-0{padding-top:0 !important}.pr-lg-0,.px-lg-0{padding-right:0 !important}.pb-lg-0,.py-lg-0{padding-bottom:0 !important}.pl-lg-0,.px-lg-0{padding-left:0 !important}.p-lg-1{padding:.25rem !important}.pt-lg-1,.py-lg-1{padding-top:.25rem !important}.pr-lg-1,.px-lg-1{padding-right:.25rem !important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem !important}.pl-lg-1,.px-lg-1{padding-left:.25rem !important}.p-lg-2{padding:.5rem !important}.pt-lg-2,.py-lg-2{padding-top:.5rem !important}.pr-lg-2,.px-lg-2{padding-right:.5rem !important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem !important}.pl-lg-2,.px-lg-2{padding-left:.5rem !important}.p-lg-3{padding:1rem !important}.pt-lg-3,.py-lg-3{padding-top:1rem !important}.pr-lg-3,.px-lg-3{padding-right:1rem !important}.pb-lg-3,.py-lg-3{padding-bottom:1rem !important}.pl-lg-3,.px-lg-3{padding-left:1rem !important}.p-lg-4{padding:1.5rem !important}.pt-lg-4,.py-lg-4{padding-top:1.5rem !important}.pr-lg-4,.px-lg-4{padding-right:1.5rem !important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem !important}.pl-lg-4,.px-lg-4{padding-left:1.5rem !important}.p-lg-5{padding:3rem !important}.pt-lg-5,.py-lg-5{padding-top:3rem !important}.pr-lg-5,.px-lg-5{padding-right:3rem !important}.pb-lg-5,.py-lg-5{padding-bottom:3rem !important}.pl-lg-5,.px-lg-5{padding-left:3rem !important}.m-lg-n1{margin:-.25rem !important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem !important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem !important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem !important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem !important}.m-lg-n2{margin:-.5rem !important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem !important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem !important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem !important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem !important}.m-lg-n3{margin:-1rem !important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem !important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem !important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem !important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem !important}.m-lg-n4{margin:-1.5rem !important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem !important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem !important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem !important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem !important}.m-lg-n5{margin:-3rem !important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem !important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem !important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem !important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem !important}.m-lg-auto{margin:auto !important}.mt-lg-auto,.my-lg-auto{margin-top:auto !important}.mr-lg-auto,.mx-lg-auto{margin-right:auto !important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto !important}.ml-lg-auto,.mx-lg-auto{margin-left:auto !important}}@media (min-width: 4px){.m-xl-0{margin:0 !important}.mt-xl-0,.my-xl-0{margin-top:0 !important}.mr-xl-0,.mx-xl-0{margin-right:0 !important}.mb-xl-0,.my-xl-0{margin-bottom:0 !important}.ml-xl-0,.mx-xl-0{margin-left:0 !important}.m-xl-1{margin:.25rem !important}.mt-xl-1,.my-xl-1{margin-top:.25rem !important}.mr-xl-1,.mx-xl-1{margin-right:.25rem !important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem !important}.ml-xl-1,.mx-xl-1{margin-left:.25rem !important}.m-xl-2{margin:.5rem !important}.mt-xl-2,.my-xl-2{margin-top:.5rem !important}.mr-xl-2,.mx-xl-2{margin-right:.5rem !important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem !important}.ml-xl-2,.mx-xl-2{margin-left:.5rem !important}.m-xl-3{margin:1rem !important}.mt-xl-3,.my-xl-3{margin-top:1rem !important}.mr-xl-3,.mx-xl-3{margin-right:1rem !important}.mb-xl-3,.my-xl-3{margin-bottom:1rem !important}.ml-xl-3,.mx-xl-3{margin-left:1rem !important}.m-xl-4{margin:1.5rem !important}.mt-xl-4,.my-xl-4{margin-top:1.5rem !important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem !important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem !important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem !important}.m-xl-5{margin:3rem !important}.mt-xl-5,.my-xl-5{margin-top:3rem !important}.mr-xl-5,.mx-xl-5{margin-right:3rem !important}.mb-xl-5,.my-xl-5{margin-bottom:3rem !important}.ml-xl-5,.mx-xl-5{margin-left:3rem !important}.p-xl-0{padding:0 !important}.pt-xl-0,.py-xl-0{padding-top:0 !important}.pr-xl-0,.px-xl-0{padding-right:0 !important}.pb-xl-0,.py-xl-0{padding-bottom:0 !important}.pl-xl-0,.px-xl-0{padding-left:0 !important}.p-xl-1{padding:.25rem !important}.pt-xl-1,.py-xl-1{padding-top:.25rem !important}.pr-xl-1,.px-xl-1{padding-right:.25rem !important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem !important}.pl-xl-1,.px-xl-1{padding-left:.25rem !important}.p-xl-2{padding:.5rem !important}.pt-xl-2,.py-xl-2{padding-top:.5rem !important}.pr-xl-2,.px-xl-2{padding-right:.5rem !important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem !important}.pl-xl-2,.px-xl-2{padding-left:.5rem !important}.p-xl-3{padding:1rem !important}.pt-xl-3,.py-xl-3{padding-top:1rem !important}.pr-xl-3,.px-xl-3{padding-right:1rem !important}.pb-xl-3,.py-xl-3{padding-bottom:1rem !important}.pl-xl-3,.px-xl-3{padding-left:1rem !important}.p-xl-4{padding:1.5rem !important}.pt-xl-4,.py-xl-4{padding-top:1.5rem !important}.pr-xl-4,.px-xl-4{padding-right:1.5rem !important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem !important}.pl-xl-4,.px-xl-4{padding-left:1.5rem !important}.p-xl-5{padding:3rem !important}.pt-xl-5,.py-xl-5{padding-top:3rem !important}.pr-xl-5,.px-xl-5{padding-right:3rem !important}.pb-xl-5,.py-xl-5{padding-bottom:3rem !important}.pl-xl-5,.px-xl-5{padding-left:3rem !important}.m-xl-n1{margin:-.25rem !important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem !important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem !important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem !important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem !important}.m-xl-n2{margin:-.5rem !important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem !important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem !important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem !important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem !important}.m-xl-n3{margin:-1rem !important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem !important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem !important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem !important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem !important}.m-xl-n4{margin:-1.5rem !important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem !important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem !important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem !important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem !important}.m-xl-n5{margin:-3rem !important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem !important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem !important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem !important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem !important}.m-xl-auto{margin:auto !important}.mt-xl-auto,.my-xl-auto{margin-top:auto !important}.mr-xl-auto,.mx-xl-auto{margin-right:auto !important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto !important}.ml-xl-auto,.mx-xl-auto{margin-left:auto !important}}.text-monospace,.totp .totp-code{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace !important}.text-justify{text-align:justify !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}@media (min-width: 1px){.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 2px){.text-md-left{text-align:left !important}.text-md-right{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 3px){.text-lg-left{text-align:left !important}.text-lg-right{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 4px){.text-xl-left{text-align:left !important}.text-xl-right{text-align:right !important}.text-xl-center{text-align:center !important}}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.font-weight-light{font-weight:300 !important}.font-weight-lighter{font-weight:lighter !important}.font-weight-normal{font-weight:400 !important}.font-weight-bold{font-weight:700 !important}.font-weight-bolder{font-weight:bolder !important}.font-italic{font-style:italic !important}.text-white{color:#fff !important}.text-primary{color:#175DDC !important}a.text-primary:hover,a.text-primary:focus{color:#104097 !important}.text-secondary{color:#ced4da !important}a.text-secondary:hover,a.text-secondary:focus{color:#a2aeb9 !important}.text-success{color:#00a65a !important}a.text-success:hover,a.text-success:focus{color:#005a31 !important}.text-info{color:#555 !important}a.text-info:hover,a.text-info:focus{color:#2f2f2f !important}.text-warning{color:#bf7e16 !important}a.text-warning:hover,a.text-warning:focus{color:#7a510e !important}.text-danger{color:#dd4b39 !important}a.text-danger:hover,a.text-danger:focus{color:#ac2d1e !important}.text-light{color:#f8f9fa !important}a.text-light:hover,a.text-light:focus{color:#cbd3da !important}.text-dark{color:#343a40 !important}a.text-dark:hover,a.text-dark:focus{color:#121416 !important}.text-primary-accent{color:#1252A3 !important}a.text-primary-accent:hover,a.text-primary-accent:focus{color:#0a2f5e !important}.text-secondary-alt{color:#1A3B66 !important}a.text-secondary-alt:hover,a.text-secondary-alt:focus{color:#0a1829 !important}.text-body{color:#333 !important}.text-muted,.card-header small,.modal-header small{color:#6c757d !important}.text-black-50{color:rgba(0,0,0,0.5) !important}.text-white-50{color:rgba(255,255,255,0.5) !important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none !important}.text-break{word-break:break-word !important;overflow-wrap:break-word !important}.text-reset{color:inherit !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media print{*,*::before,*::after{text-shadow:none !important;box-shadow:none !important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:\" (\" attr(title) \")\"}pre{white-space:pre-wrap !important}pre,blockquote{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:3px !important}.container{min-width:3px !important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #dee2e6 !important}.table-dark{color:inherit}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}/*!\n * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */@font-face{font-family:'FontAwesome';src:url(../fonts/fontawesome-webfont.eot);src:url(../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0) format(\"embedded-opentype\"),url(../fonts/fontawesome-webfont.woff2) format(\"woff2\"),url(../fonts/fontawesome-webfont.woff) format(\"woff\"),url(../fonts/fontawesome-webfont.ttf) format(\"truetype\"),url(../fonts/fontawesome-webfont.svg#fontawesomeregular) format(\"svg\");font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:\"\\F000\"}.fa-music:before{content:\"\\F001\"}.fa-search:before{content:\"\\F002\"}.fa-envelope-o:before{content:\"\\F003\"}.fa-heart:before{content:\"\\F004\"}.fa-star:before{content:\"\\F005\"}.fa-star-o:before{content:\"\\F006\"}.fa-user:before{content:\"\\F007\"}.fa-film:before{content:\"\\F008\"}.fa-th-large:before{content:\"\\F009\"}.fa-th:before{content:\"\\F00A\"}.fa-th-list:before{content:\"\\F00B\"}.fa-check:before{content:\"\\F00C\"}.fa-remove:before,.fa-close:before,.fa-times:before{content:\"\\F00D\"}.fa-search-plus:before{content:\"\\F00E\"}.fa-search-minus:before{content:\"\\F010\"}.fa-power-off:before{content:\"\\F011\"}.fa-signal:before{content:\"\\F012\"}.fa-gear:before,.fa-cog:before{content:\"\\F013\"}.fa-trash-o:before{content:\"\\F014\"}.fa-home:before{content:\"\\F015\"}.fa-file-o:before{content:\"\\F016\"}.fa-clock-o:before{content:\"\\F017\"}.fa-road:before{content:\"\\F018\"}.fa-download:before{content:\"\\F019\"}.fa-arrow-circle-o-down:before{content:\"\\F01A\"}.fa-arrow-circle-o-up:before{content:\"\\F01B\"}.fa-inbox:before{content:\"\\F01C\"}.fa-play-circle-o:before{content:\"\\F01D\"}.fa-rotate-right:before,.fa-repeat:before{content:\"\\F01E\"}.fa-refresh:before{content:\"\\F021\"}.fa-list-alt:before{content:\"\\F022\"}.fa-lock:before{content:\"\\F023\"}.fa-flag:before{content:\"\\F024\"}.fa-headphones:before{content:\"\\F025\"}.fa-volume-off:before{content:\"\\F026\"}.fa-volume-down:before{content:\"\\F027\"}.fa-volume-up:before{content:\"\\F028\"}.fa-qrcode:before{content:\"\\F029\"}.fa-barcode:before{content:\"\\F02A\"}.fa-tag:before{content:\"\\F02B\"}.fa-tags:before{content:\"\\F02C\"}.fa-book:before{content:\"\\F02D\"}.fa-bookmark:before{content:\"\\F02E\"}.fa-print:before{content:\"\\F02F\"}.fa-camera:before{content:\"\\F030\"}.fa-font:before{content:\"\\F031\"}.fa-bold:before{content:\"\\F032\"}.fa-italic:before{content:\"\\F033\"}.fa-text-height:before{content:\"\\F034\"}.fa-text-width:before{content:\"\\F035\"}.fa-align-left:before{content:\"\\F036\"}.fa-align-center:before{content:\"\\F037\"}.fa-align-right:before{content:\"\\F038\"}.fa-align-justify:before{content:\"\\F039\"}.fa-list:before{content:\"\\F03A\"}.fa-dedent:before,.fa-outdent:before{content:\"\\F03B\"}.fa-indent:before{content:\"\\F03C\"}.fa-video-camera:before{content:\"\\F03D\"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:\"\\F03E\"}.fa-pencil:before{content:\"\\F040\"}.fa-map-marker:before{content:\"\\F041\"}.fa-adjust:before{content:\"\\F042\"}.fa-tint:before{content:\"\\F043\"}.fa-edit:before,.fa-pencil-square-o:before{content:\"\\F044\"}.fa-share-square-o:before{content:\"\\F045\"}.fa-check-square-o:before{content:\"\\F046\"}.fa-arrows:before{content:\"\\F047\"}.fa-step-backward:before{content:\"\\F048\"}.fa-fast-backward:before{content:\"\\F049\"}.fa-backward:before{content:\"\\F04A\"}.fa-play:before{content:\"\\F04B\"}.fa-pause:before{content:\"\\F04C\"}.fa-stop:before{content:\"\\F04D\"}.fa-forward:before{content:\"\\F04E\"}.fa-fast-forward:before{content:\"\\F050\"}.fa-step-forward:before{content:\"\\F051\"}.fa-eject:before{content:\"\\F052\"}.fa-chevron-left:before{content:\"\\F053\"}.fa-chevron-right:before{content:\"\\F054\"}.fa-plus-circle:before{content:\"\\F055\"}.fa-minus-circle:before{content:\"\\F056\"}.fa-times-circle:before{content:\"\\F057\"}.fa-check-circle:before{content:\"\\F058\"}.fa-question-circle:before{content:\"\\F059\"}.fa-info-circle:before{content:\"\\F05A\"}.fa-crosshairs:before{content:\"\\F05B\"}.fa-times-circle-o:before{content:\"\\F05C\"}.fa-check-circle-o:before{content:\"\\F05D\"}.fa-ban:before{content:\"\\F05E\"}.fa-arrow-left:before{content:\"\\F060\"}.fa-arrow-right:before{content:\"\\F061\"}.fa-arrow-up:before{content:\"\\F062\"}.fa-arrow-down:before{content:\"\\F063\"}.fa-mail-forward:before,.fa-share:before{content:\"\\F064\"}.fa-expand:before{content:\"\\F065\"}.fa-compress:before{content:\"\\F066\"}.fa-plus:before{content:\"\\F067\"}.fa-minus:before{content:\"\\F068\"}.fa-asterisk:before{content:\"\\F069\"}.fa-exclamation-circle:before{content:\"\\F06A\"}.fa-gift:before{content:\"\\F06B\"}.fa-leaf:before{content:\"\\F06C\"}.fa-fire:before{content:\"\\F06D\"}.fa-eye:before{content:\"\\F06E\"}.fa-eye-slash:before{content:\"\\F070\"}.fa-warning:before,.fa-exclamation-triangle:before{content:\"\\F071\"}.fa-plane:before{content:\"\\F072\"}.fa-calendar:before{content:\"\\F073\"}.fa-random:before{content:\"\\F074\"}.fa-comment:before{content:\"\\F075\"}.fa-magnet:before{content:\"\\F076\"}.fa-chevron-up:before{content:\"\\F077\"}.fa-chevron-down:before{content:\"\\F078\"}.fa-retweet:before{content:\"\\F079\"}.fa-shopping-cart:before{content:\"\\F07A\"}.fa-folder:before{content:\"\\F07B\"}.fa-folder-open:before{content:\"\\F07C\"}.fa-arrows-v:before{content:\"\\F07D\"}.fa-arrows-h:before{content:\"\\F07E\"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:\"\\F080\"}.fa-twitter-square:before{content:\"\\F081\"}.fa-facebook-square:before{content:\"\\F082\"}.fa-camera-retro:before{content:\"\\F083\"}.fa-key:before{content:\"\\F084\"}.fa-gears:before,.fa-cogs:before{content:\"\\F085\"}.fa-comments:before{content:\"\\F086\"}.fa-thumbs-o-up:before{content:\"\\F087\"}.fa-thumbs-o-down:before{content:\"\\F088\"}.fa-star-half:before{content:\"\\F089\"}.fa-heart-o:before{content:\"\\F08A\"}.fa-sign-out:before{content:\"\\F08B\"}.fa-linkedin-square:before{content:\"\\F08C\"}.fa-thumb-tack:before{content:\"\\F08D\"}.fa-external-link:before{content:\"\\F08E\"}.fa-sign-in:before{content:\"\\F090\"}.fa-trophy:before{content:\"\\F091\"}.fa-github-square:before{content:\"\\F092\"}.fa-upload:before{content:\"\\F093\"}.fa-lemon-o:before{content:\"\\F094\"}.fa-phone:before{content:\"\\F095\"}.fa-square-o:before{content:\"\\F096\"}.fa-bookmark-o:before{content:\"\\F097\"}.fa-phone-square:before{content:\"\\F098\"}.fa-twitter:before{content:\"\\F099\"}.fa-facebook-f:before,.fa-facebook:before{content:\"\\F09A\"}.fa-github:before{content:\"\\F09B\"}.fa-unlock:before{content:\"\\F09C\"}.fa-credit-card:before{content:\"\\F09D\"}.fa-feed:before,.fa-rss:before{content:\"\\F09E\"}.fa-hdd-o:before{content:\"\\F0A0\"}.fa-bullhorn:before{content:\"\\F0A1\"}.fa-bell:before{content:\"\\F0F3\"}.fa-certificate:before{content:\"\\F0A3\"}.fa-hand-o-right:before{content:\"\\F0A4\"}.fa-hand-o-left:before{content:\"\\F0A5\"}.fa-hand-o-up:before{content:\"\\F0A6\"}.fa-hand-o-down:before{content:\"\\F0A7\"}.fa-arrow-circle-left:before{content:\"\\F0A8\"}.fa-arrow-circle-right:before{content:\"\\F0A9\"}.fa-arrow-circle-up:before{content:\"\\F0AA\"}.fa-arrow-circle-down:before{content:\"\\F0AB\"}.fa-globe:before{content:\"\\F0AC\"}.fa-wrench:before{content:\"\\F0AD\"}.fa-tasks:before{content:\"\\F0AE\"}.fa-filter:before{content:\"\\F0B0\"}.fa-briefcase:before{content:\"\\F0B1\"}.fa-arrows-alt:before{content:\"\\F0B2\"}.fa-group:before,.fa-users:before{content:\"\\F0C0\"}.fa-chain:before,.fa-link:before{content:\"\\F0C1\"}.fa-cloud:before{content:\"\\F0C2\"}.fa-flask:before{content:\"\\F0C3\"}.fa-cut:before,.fa-scissors:before{content:\"\\F0C4\"}.fa-copy:before,.fa-files-o:before{content:\"\\F0C5\"}.fa-paperclip:before{content:\"\\F0C6\"}.fa-save:before,.fa-floppy-o:before{content:\"\\F0C7\"}.fa-square:before{content:\"\\F0C8\"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:\"\\F0C9\"}.fa-list-ul:before{content:\"\\F0CA\"}.fa-list-ol:before{content:\"\\F0CB\"}.fa-strikethrough:before{content:\"\\F0CC\"}.fa-underline:before{content:\"\\F0CD\"}.fa-table:before{content:\"\\F0CE\"}.fa-magic:before{content:\"\\F0D0\"}.fa-truck:before{content:\"\\F0D1\"}.fa-pinterest:before{content:\"\\F0D2\"}.fa-pinterest-square:before{content:\"\\F0D3\"}.fa-google-plus-square:before{content:\"\\F0D4\"}.fa-google-plus:before{content:\"\\F0D5\"}.fa-money:before{content:\"\\F0D6\"}.fa-caret-down:before{content:\"\\F0D7\"}.fa-caret-up:before{content:\"\\F0D8\"}.fa-caret-left:before{content:\"\\F0D9\"}.fa-caret-right:before{content:\"\\F0DA\"}.fa-columns:before{content:\"\\F0DB\"}.fa-unsorted:before,.fa-sort:before{content:\"\\F0DC\"}.fa-sort-down:before,.fa-sort-desc:before{content:\"\\F0DD\"}.fa-sort-up:before,.fa-sort-asc:before{content:\"\\F0DE\"}.fa-envelope:before{content:\"\\F0E0\"}.fa-linkedin:before{content:\"\\F0E1\"}.fa-rotate-left:before,.fa-undo:before{content:\"\\F0E2\"}.fa-legal:before,.fa-gavel:before{content:\"\\F0E3\"}.fa-dashboard:before,.fa-tachometer:before{content:\"\\F0E4\"}.fa-comment-o:before{content:\"\\F0E5\"}.fa-comments-o:before{content:\"\\F0E6\"}.fa-flash:before,.fa-bolt:before{content:\"\\F0E7\"}.fa-sitemap:before{content:\"\\F0E8\"}.fa-umbrella:before{content:\"\\F0E9\"}.fa-paste:before,.fa-clipboard:before{content:\"\\F0EA\"}.fa-lightbulb-o:before{content:\"\\F0EB\"}.fa-exchange:before{content:\"\\F0EC\"}.fa-cloud-download:before{content:\"\\F0ED\"}.fa-cloud-upload:before{content:\"\\F0EE\"}.fa-user-md:before{content:\"\\F0F0\"}.fa-stethoscope:before{content:\"\\F0F1\"}.fa-suitcase:before{content:\"\\F0F2\"}.fa-bell-o:before{content:\"\\F0A2\"}.fa-coffee:before{content:\"\\F0F4\"}.fa-cutlery:before{content:\"\\F0F5\"}.fa-file-text-o:before{content:\"\\F0F6\"}.fa-building-o:before{content:\"\\F0F7\"}.fa-hospital-o:before{content:\"\\F0F8\"}.fa-ambulance:before{content:\"\\F0F9\"}.fa-medkit:before{content:\"\\F0FA\"}.fa-fighter-jet:before{content:\"\\F0FB\"}.fa-beer:before{content:\"\\F0FC\"}.fa-h-square:before{content:\"\\F0FD\"}.fa-plus-square:before{content:\"\\F0FE\"}.fa-angle-double-left:before{content:\"\\F100\"}.fa-angle-double-right:before{content:\"\\F101\"}.fa-angle-double-up:before{content:\"\\F102\"}.fa-angle-double-down:before{content:\"\\F103\"}.fa-angle-left:before{content:\"\\F104\"}.fa-angle-right:before{content:\"\\F105\"}.fa-angle-up:before{content:\"\\F106\"}.fa-angle-down:before{content:\"\\F107\"}.fa-desktop:before{content:\"\\F108\"}.fa-laptop:before{content:\"\\F109\"}.fa-tablet:before{content:\"\\F10A\"}.fa-mobile-phone:before,.fa-mobile:before{content:\"\\F10B\"}.fa-circle-o:before{content:\"\\F10C\"}.fa-quote-left:before{content:\"\\F10D\"}.fa-quote-right:before{content:\"\\F10E\"}.fa-spinner:before{content:\"\\F110\"}.fa-circle:before{content:\"\\F111\"}.fa-mail-reply:before,.fa-reply:before{content:\"\\F112\"}.fa-github-alt:before{content:\"\\F113\"}.fa-folder-o:before{content:\"\\F114\"}.fa-folder-open-o:before{content:\"\\F115\"}.fa-smile-o:before{content:\"\\F118\"}.fa-frown-o:before{content:\"\\F119\"}.fa-meh-o:before{content:\"\\F11A\"}.fa-gamepad:before{content:\"\\F11B\"}.fa-keyboard-o:before{content:\"\\F11C\"}.fa-flag-o:before{content:\"\\F11D\"}.fa-flag-checkered:before{content:\"\\F11E\"}.fa-terminal:before{content:\"\\F120\"}.fa-code:before{content:\"\\F121\"}.fa-mail-reply-all:before,.fa-reply-all:before{content:\"\\F122\"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:\"\\F123\"}.fa-location-arrow:before{content:\"\\F124\"}.fa-crop:before{content:\"\\F125\"}.fa-code-fork:before{content:\"\\F126\"}.fa-unlink:before,.fa-chain-broken:before{content:\"\\F127\"}.fa-question:before{content:\"\\F128\"}.fa-info:before{content:\"\\F129\"}.fa-exclamation:before{content:\"\\F12A\"}.fa-superscript:before{content:\"\\F12B\"}.fa-subscript:before{content:\"\\F12C\"}.fa-eraser:before{content:\"\\F12D\"}.fa-puzzle-piece:before{content:\"\\F12E\"}.fa-microphone:before{content:\"\\F130\"}.fa-microphone-slash:before{content:\"\\F131\"}.fa-shield:before{content:\"\\F132\"}.fa-calendar-o:before{content:\"\\F133\"}.fa-fire-extinguisher:before{content:\"\\F134\"}.fa-rocket:before{content:\"\\F135\"}.fa-maxcdn:before{content:\"\\F136\"}.fa-chevron-circle-left:before{content:\"\\F137\"}.fa-chevron-circle-right:before{content:\"\\F138\"}.fa-chevron-circle-up:before{content:\"\\F139\"}.fa-chevron-circle-down:before{content:\"\\F13A\"}.fa-html5:before{content:\"\\F13B\"}.fa-css3:before{content:\"\\F13C\"}.fa-anchor:before{content:\"\\F13D\"}.fa-unlock-alt:before{content:\"\\F13E\"}.fa-bullseye:before{content:\"\\F140\"}.fa-ellipsis-h:before{content:\"\\F141\"}.fa-ellipsis-v:before{content:\"\\F142\"}.fa-rss-square:before{content:\"\\F143\"}.fa-play-circle:before{content:\"\\F144\"}.fa-ticket:before{content:\"\\F145\"}.fa-minus-square:before{content:\"\\F146\"}.fa-minus-square-o:before{content:\"\\F147\"}.fa-level-up:before{content:\"\\F148\"}.fa-level-down:before{content:\"\\F149\"}.fa-check-square:before{content:\"\\F14A\"}.fa-pencil-square:before{content:\"\\F14B\"}.fa-external-link-square:before{content:\"\\F14C\"}.fa-share-square:before{content:\"\\F14D\"}.fa-compass:before{content:\"\\F14E\"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:\"\\F150\"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:\"\\F151\"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:\"\\F152\"}.fa-euro:before,.fa-eur:before{content:\"\\F153\"}.fa-gbp:before{content:\"\\F154\"}.fa-dollar:before,.fa-usd:before{content:\"\\F155\"}.fa-rupee:before,.fa-inr:before{content:\"\\F156\"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:\"\\F157\"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:\"\\F158\"}.fa-won:before,.fa-krw:before{content:\"\\F159\"}.fa-bitcoin:before,.fa-btc:before{content:\"\\F15A\"}.fa-file:before{content:\"\\F15B\"}.fa-file-text:before{content:\"\\F15C\"}.fa-sort-alpha-asc:before{content:\"\\F15D\"}.fa-sort-alpha-desc:before{content:\"\\F15E\"}.fa-sort-amount-asc:before{content:\"\\F160\"}.fa-sort-amount-desc:before{content:\"\\F161\"}.fa-sort-numeric-asc:before{content:\"\\F162\"}.fa-sort-numeric-desc:before{content:\"\\F163\"}.fa-thumbs-up:before{content:\"\\F164\"}.fa-thumbs-down:before{content:\"\\F165\"}.fa-youtube-square:before{content:\"\\F166\"}.fa-youtube:before{content:\"\\F167\"}.fa-xing:before{content:\"\\F168\"}.fa-xing-square:before{content:\"\\F169\"}.fa-youtube-play:before{content:\"\\F16A\"}.fa-dropbox:before{content:\"\\F16B\"}.fa-stack-overflow:before{content:\"\\F16C\"}.fa-instagram:before{content:\"\\F16D\"}.fa-flickr:before{content:\"\\F16E\"}.fa-adn:before{content:\"\\F170\"}.fa-bitbucket:before{content:\"\\F171\"}.fa-bitbucket-square:before{content:\"\\F172\"}.fa-tumblr:before{content:\"\\F173\"}.fa-tumblr-square:before{content:\"\\F174\"}.fa-long-arrow-down:before{content:\"\\F175\"}.fa-long-arrow-up:before{content:\"\\F176\"}.fa-long-arrow-left:before{content:\"\\F177\"}.fa-long-arrow-right:before{content:\"\\F178\"}.fa-apple:before{content:\"\\F179\"}.fa-windows:before{content:\"\\F17A\"}.fa-android:before{content:\"\\F17B\"}.fa-linux:before{content:\"\\F17C\"}.fa-dribbble:before{content:\"\\F17D\"}.fa-skype:before{content:\"\\F17E\"}.fa-foursquare:before{content:\"\\F180\"}.fa-trello:before{content:\"\\F181\"}.fa-female:before{content:\"\\F182\"}.fa-male:before{content:\"\\F183\"}.fa-gittip:before,.fa-gratipay:before{content:\"\\F184\"}.fa-sun-o:before{content:\"\\F185\"}.fa-moon-o:before{content:\"\\F186\"}.fa-archive:before{content:\"\\F187\"}.fa-bug:before{content:\"\\F188\"}.fa-vk:before{content:\"\\F189\"}.fa-weibo:before{content:\"\\F18A\"}.fa-renren:before{content:\"\\F18B\"}.fa-pagelines:before{content:\"\\F18C\"}.fa-stack-exchange:before{content:\"\\F18D\"}.fa-arrow-circle-o-right:before{content:\"\\F18E\"}.fa-arrow-circle-o-left:before{content:\"\\F190\"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:\"\\F191\"}.fa-dot-circle-o:before{content:\"\\F192\"}.fa-wheelchair:before{content:\"\\F193\"}.fa-vimeo-square:before{content:\"\\F194\"}.fa-turkish-lira:before,.fa-try:before{content:\"\\F195\"}.fa-plus-square-o:before{content:\"\\F196\"}.fa-space-shuttle:before{content:\"\\F197\"}.fa-slack:before{content:\"\\F198\"}.fa-envelope-square:before{content:\"\\F199\"}.fa-wordpress:before{content:\"\\F19A\"}.fa-openid:before{content:\"\\F19B\"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:\"\\F19C\"}.fa-mortar-board:before,.fa-graduation-cap:before{content:\"\\F19D\"}.fa-yahoo:before{content:\"\\F19E\"}.fa-google:before{content:\"\\F1A0\"}.fa-reddit:before{content:\"\\F1A1\"}.fa-reddit-square:before{content:\"\\F1A2\"}.fa-stumbleupon-circle:before{content:\"\\F1A3\"}.fa-stumbleupon:before{content:\"\\F1A4\"}.fa-delicious:before{content:\"\\F1A5\"}.fa-digg:before{content:\"\\F1A6\"}.fa-pied-piper-pp:before{content:\"\\F1A7\"}.fa-pied-piper-alt:before{content:\"\\F1A8\"}.fa-drupal:before{content:\"\\F1A9\"}.fa-joomla:before{content:\"\\F1AA\"}.fa-language:before{content:\"\\F1AB\"}.fa-fax:before{content:\"\\F1AC\"}.fa-building:before{content:\"\\F1AD\"}.fa-child:before{content:\"\\F1AE\"}.fa-paw:before{content:\"\\F1B0\"}.fa-spoon:before{content:\"\\F1B1\"}.fa-cube:before{content:\"\\F1B2\"}.fa-cubes:before{content:\"\\F1B3\"}.fa-behance:before{content:\"\\F1B4\"}.fa-behance-square:before{content:\"\\F1B5\"}.fa-steam:before{content:\"\\F1B6\"}.fa-steam-square:before{content:\"\\F1B7\"}.fa-recycle:before{content:\"\\F1B8\"}.fa-automobile:before,.fa-car:before{content:\"\\F1B9\"}.fa-cab:before,.fa-taxi:before{content:\"\\F1BA\"}.fa-tree:before{content:\"\\F1BB\"}.fa-spotify:before{content:\"\\F1BC\"}.fa-deviantart:before{content:\"\\F1BD\"}.fa-soundcloud:before{content:\"\\F1BE\"}.fa-database:before{content:\"\\F1C0\"}.fa-file-pdf-o:before{content:\"\\F1C1\"}.fa-file-word-o:before{content:\"\\F1C2\"}.fa-file-excel-o:before{content:\"\\F1C3\"}.fa-file-powerpoint-o:before{content:\"\\F1C4\"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:\"\\F1C5\"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:\"\\F1C6\"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:\"\\F1C7\"}.fa-file-movie-o:before,.fa-file-video-o:before{content:\"\\F1C8\"}.fa-file-code-o:before{content:\"\\F1C9\"}.fa-vine:before{content:\"\\F1CA\"}.fa-codepen:before{content:\"\\F1CB\"}.fa-jsfiddle:before{content:\"\\F1CC\"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:\"\\F1CD\"}.fa-circle-o-notch:before{content:\"\\F1CE\"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:\"\\F1D0\"}.fa-ge:before,.fa-empire:before{content:\"\\F1D1\"}.fa-git-square:before{content:\"\\F1D2\"}.fa-git:before{content:\"\\F1D3\"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:\"\\F1D4\"}.fa-tencent-weibo:before{content:\"\\F1D5\"}.fa-qq:before{content:\"\\F1D6\"}.fa-wechat:before,.fa-weixin:before{content:\"\\F1D7\"}.fa-send:before,.fa-paper-plane:before{content:\"\\F1D8\"}.fa-send-o:before,.fa-paper-plane-o:before{content:\"\\F1D9\"}.fa-history:before{content:\"\\F1DA\"}.fa-circle-thin:before{content:\"\\F1DB\"}.fa-header:before{content:\"\\F1DC\"}.fa-paragraph:before{content:\"\\F1DD\"}.fa-sliders:before{content:\"\\F1DE\"}.fa-share-alt:before{content:\"\\F1E0\"}.fa-share-alt-square:before{content:\"\\F1E1\"}.fa-bomb:before{content:\"\\F1E2\"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:\"\\F1E3\"}.fa-tty:before{content:\"\\F1E4\"}.fa-binoculars:before{content:\"\\F1E5\"}.fa-plug:before{content:\"\\F1E6\"}.fa-slideshare:before{content:\"\\F1E7\"}.fa-twitch:before{content:\"\\F1E8\"}.fa-yelp:before{content:\"\\F1E9\"}.fa-newspaper-o:before{content:\"\\F1EA\"}.fa-wifi:before{content:\"\\F1EB\"}.fa-calculator:before{content:\"\\F1EC\"}.fa-paypal:before{content:\"\\F1ED\"}.fa-google-wallet:before{content:\"\\F1EE\"}.fa-cc-visa:before{content:\"\\F1F0\"}.fa-cc-mastercard:before{content:\"\\F1F1\"}.fa-cc-discover:before{content:\"\\F1F2\"}.fa-cc-amex:before{content:\"\\F1F3\"}.fa-cc-paypal:before{content:\"\\F1F4\"}.fa-cc-stripe:before{content:\"\\F1F5\"}.fa-bell-slash:before{content:\"\\F1F6\"}.fa-bell-slash-o:before{content:\"\\F1F7\"}.fa-trash:before{content:\"\\F1F8\"}.fa-copyright:before{content:\"\\F1F9\"}.fa-at:before{content:\"\\F1FA\"}.fa-eyedropper:before{content:\"\\F1FB\"}.fa-paint-brush:before{content:\"\\F1FC\"}.fa-birthday-cake:before{content:\"\\F1FD\"}.fa-area-chart:before{content:\"\\F1FE\"}.fa-pie-chart:before{content:\"\\F200\"}.fa-line-chart:before{content:\"\\F201\"}.fa-lastfm:before{content:\"\\F202\"}.fa-lastfm-square:before{content:\"\\F203\"}.fa-toggle-off:before{content:\"\\F204\"}.fa-toggle-on:before{content:\"\\F205\"}.fa-bicycle:before{content:\"\\F206\"}.fa-bus:before{content:\"\\F207\"}.fa-ioxhost:before{content:\"\\F208\"}.fa-angellist:before{content:\"\\F209\"}.fa-cc:before{content:\"\\F20A\"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:\"\\F20B\"}.fa-meanpath:before{content:\"\\F20C\"}.fa-buysellads:before{content:\"\\F20D\"}.fa-connectdevelop:before{content:\"\\F20E\"}.fa-dashcube:before{content:\"\\F210\"}.fa-forumbee:before{content:\"\\F211\"}.fa-leanpub:before{content:\"\\F212\"}.fa-sellsy:before{content:\"\\F213\"}.fa-shirtsinbulk:before{content:\"\\F214\"}.fa-simplybuilt:before{content:\"\\F215\"}.fa-skyatlas:before{content:\"\\F216\"}.fa-cart-plus:before{content:\"\\F217\"}.fa-cart-arrow-down:before{content:\"\\F218\"}.fa-diamond:before{content:\"\\F219\"}.fa-ship:before{content:\"\\F21A\"}.fa-user-secret:before{content:\"\\F21B\"}.fa-motorcycle:before{content:\"\\F21C\"}.fa-street-view:before{content:\"\\F21D\"}.fa-heartbeat:before{content:\"\\F21E\"}.fa-venus:before{content:\"\\F221\"}.fa-mars:before{content:\"\\F222\"}.fa-mercury:before{content:\"\\F223\"}.fa-intersex:before,.fa-transgender:before{content:\"\\F224\"}.fa-transgender-alt:before{content:\"\\F225\"}.fa-venus-double:before{content:\"\\F226\"}.fa-mars-double:before{content:\"\\F227\"}.fa-venus-mars:before{content:\"\\F228\"}.fa-mars-stroke:before{content:\"\\F229\"}.fa-mars-stroke-v:before{content:\"\\F22A\"}.fa-mars-stroke-h:before{content:\"\\F22B\"}.fa-neuter:before{content:\"\\F22C\"}.fa-genderless:before{content:\"\\F22D\"}.fa-facebook-official:before{content:\"\\F230\"}.fa-pinterest-p:before{content:\"\\F231\"}.fa-whatsapp:before{content:\"\\F232\"}.fa-server:before{content:\"\\F233\"}.fa-user-plus:before{content:\"\\F234\"}.fa-user-times:before{content:\"\\F235\"}.fa-hotel:before,.fa-bed:before{content:\"\\F236\"}.fa-viacoin:before{content:\"\\F237\"}.fa-train:before{content:\"\\F238\"}.fa-subway:before{content:\"\\F239\"}.fa-medium:before{content:\"\\F23A\"}.fa-yc:before,.fa-y-combinator:before{content:\"\\F23B\"}.fa-optin-monster:before{content:\"\\F23C\"}.fa-opencart:before{content:\"\\F23D\"}.fa-expeditedssl:before{content:\"\\F23E\"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:\"\\F240\"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:\"\\F241\"}.fa-battery-2:before,.fa-battery-half:before{content:\"\\F242\"}.fa-battery-1:before,.fa-battery-quarter:before{content:\"\\F243\"}.fa-battery-0:before,.fa-battery-empty:before{content:\"\\F244\"}.fa-mouse-pointer:before{content:\"\\F245\"}.fa-i-cursor:before{content:\"\\F246\"}.fa-object-group:before{content:\"\\F247\"}.fa-object-ungroup:before{content:\"\\F248\"}.fa-sticky-note:before{content:\"\\F249\"}.fa-sticky-note-o:before{content:\"\\F24A\"}.fa-cc-jcb:before{content:\"\\F24B\"}.fa-cc-diners-club:before{content:\"\\F24C\"}.fa-clone:before{content:\"\\F24D\"}.fa-balance-scale:before{content:\"\\F24E\"}.fa-hourglass-o:before{content:\"\\F250\"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:\"\\F251\"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:\"\\F252\"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:\"\\F253\"}.fa-hourglass:before{content:\"\\F254\"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:\"\\F255\"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:\"\\F256\"}.fa-hand-scissors-o:before{content:\"\\F257\"}.fa-hand-lizard-o:before{content:\"\\F258\"}.fa-hand-spock-o:before{content:\"\\F259\"}.fa-hand-pointer-o:before{content:\"\\F25A\"}.fa-hand-peace-o:before{content:\"\\F25B\"}.fa-trademark:before{content:\"\\F25C\"}.fa-registered:before{content:\"\\F25D\"}.fa-creative-commons:before{content:\"\\F25E\"}.fa-gg:before{content:\"\\F260\"}.fa-gg-circle:before{content:\"\\F261\"}.fa-tripadvisor:before{content:\"\\F262\"}.fa-odnoklassniki:before{content:\"\\F263\"}.fa-odnoklassniki-square:before{content:\"\\F264\"}.fa-get-pocket:before{content:\"\\F265\"}.fa-wikipedia-w:before{content:\"\\F266\"}.fa-safari:before{content:\"\\F267\"}.fa-chrome:before{content:\"\\F268\"}.fa-firefox:before{content:\"\\F269\"}.fa-opera:before{content:\"\\F26A\"}.fa-internet-explorer:before{content:\"\\F26B\"}.fa-tv:before,.fa-television:before{content:\"\\F26C\"}.fa-contao:before{content:\"\\F26D\"}.fa-500px:before{content:\"\\F26E\"}.fa-amazon:before{content:\"\\F270\"}.fa-calendar-plus-o:before{content:\"\\F271\"}.fa-calendar-minus-o:before{content:\"\\F272\"}.fa-calendar-times-o:before{content:\"\\F273\"}.fa-calendar-check-o:before{content:\"\\F274\"}.fa-industry:before{content:\"\\F275\"}.fa-map-pin:before{content:\"\\F276\"}.fa-map-signs:before{content:\"\\F277\"}.fa-map-o:before{content:\"\\F278\"}.fa-map:before{content:\"\\F279\"}.fa-commenting:before{content:\"\\F27A\"}.fa-commenting-o:before{content:\"\\F27B\"}.fa-houzz:before{content:\"\\F27C\"}.fa-vimeo:before{content:\"\\F27D\"}.fa-black-tie:before{content:\"\\F27E\"}.fa-fonticons:before{content:\"\\F280\"}.fa-reddit-alien:before{content:\"\\F281\"}.fa-edge:before{content:\"\\F282\"}.fa-credit-card-alt:before{content:\"\\F283\"}.fa-codiepie:before{content:\"\\F284\"}.fa-modx:before{content:\"\\F285\"}.fa-fort-awesome:before{content:\"\\F286\"}.fa-usb:before{content:\"\\F287\"}.fa-product-hunt:before{content:\"\\F288\"}.fa-mixcloud:before{content:\"\\F289\"}.fa-scribd:before{content:\"\\F28A\"}.fa-pause-circle:before{content:\"\\F28B\"}.fa-pause-circle-o:before{content:\"\\F28C\"}.fa-stop-circle:before{content:\"\\F28D\"}.fa-stop-circle-o:before{content:\"\\F28E\"}.fa-shopping-bag:before{content:\"\\F290\"}.fa-shopping-basket:before{content:\"\\F291\"}.fa-hashtag:before{content:\"\\F292\"}.fa-bluetooth:before{content:\"\\F293\"}.fa-bluetooth-b:before{content:\"\\F294\"}.fa-percent:before{content:\"\\F295\"}.fa-gitlab:before{content:\"\\F296\"}.fa-wpbeginner:before{content:\"\\F297\"}.fa-wpforms:before{content:\"\\F298\"}.fa-envira:before{content:\"\\F299\"}.fa-universal-access:before{content:\"\\F29A\"}.fa-wheelchair-alt:before{content:\"\\F29B\"}.fa-question-circle-o:before{content:\"\\F29C\"}.fa-blind:before{content:\"\\F29D\"}.fa-audio-description:before{content:\"\\F29E\"}.fa-volume-control-phone:before{content:\"\\F2A0\"}.fa-braille:before{content:\"\\F2A1\"}.fa-assistive-listening-systems:before{content:\"\\F2A2\"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:\"\\F2A3\"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:\"\\F2A4\"}.fa-glide:before{content:\"\\F2A5\"}.fa-glide-g:before{content:\"\\F2A6\"}.fa-signing:before,.fa-sign-language:before{content:\"\\F2A7\"}.fa-low-vision:before{content:\"\\F2A8\"}.fa-viadeo:before{content:\"\\F2A9\"}.fa-viadeo-square:before{content:\"\\F2AA\"}.fa-snapchat:before{content:\"\\F2AB\"}.fa-snapchat-ghost:before{content:\"\\F2AC\"}.fa-snapchat-square:before{content:\"\\F2AD\"}.fa-pied-piper:before{content:\"\\F2AE\"}.fa-first-order:before{content:\"\\F2B0\"}.fa-yoast:before{content:\"\\F2B1\"}.fa-themeisle:before{content:\"\\F2B2\"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:\"\\F2B3\"}.fa-fa:before,.fa-font-awesome:before{content:\"\\F2B4\"}.fa-handshake-o:before{content:\"\\F2B5\"}.fa-envelope-open:before{content:\"\\F2B6\"}.fa-envelope-open-o:before{content:\"\\F2B7\"}.fa-linode:before{content:\"\\F2B8\"}.fa-address-book:before{content:\"\\F2B9\"}.fa-address-book-o:before{content:\"\\F2BA\"}.fa-vcard:before,.fa-address-card:before{content:\"\\F2BB\"}.fa-vcard-o:before,.fa-address-card-o:before{content:\"\\F2BC\"}.fa-user-circle:before{content:\"\\F2BD\"}.fa-user-circle-o:before{content:\"\\F2BE\"}.fa-user-o:before{content:\"\\F2C0\"}.fa-id-badge:before{content:\"\\F2C1\"}.fa-drivers-license:before,.fa-id-card:before{content:\"\\F2C2\"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:\"\\F2C3\"}.fa-quora:before{content:\"\\F2C4\"}.fa-free-code-camp:before{content:\"\\F2C5\"}.fa-telegram:before{content:\"\\F2C6\"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:\"\\F2C7\"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:\"\\F2C8\"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:\"\\F2C9\"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:\"\\F2CA\"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:\"\\F2CB\"}.fa-shower:before{content:\"\\F2CC\"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:\"\\F2CD\"}.fa-podcast:before{content:\"\\F2CE\"}.fa-window-maximize:before{content:\"\\F2D0\"}.fa-window-minimize:before{content:\"\\F2D1\"}.fa-window-restore:before{content:\"\\F2D2\"}.fa-times-rectangle:before,.fa-window-close:before{content:\"\\F2D3\"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:\"\\F2D4\"}.fa-bandcamp:before{content:\"\\F2D5\"}.fa-grav:before{content:\"\\F2D6\"}.fa-etsy:before{content:\"\\F2D7\"}.fa-imdb:before{content:\"\\F2D8\"}.fa-ravelry:before{content:\"\\F2D9\"}.fa-eercast:before{content:\"\\F2DA\"}.fa-microchip:before{content:\"\\F2DB\"}.fa-snowflake-o:before{content:\"\\F2DC\"}.fa-superpowers:before{content:\"\\F2DD\"}.fa-wpexplorer:before{content:\"\\F2DE\"}.fa-meetup:before{content:\"\\F2E0\"}.sr-only,.table.table-list tr:not(:hover) td.table-list-options>.dropdown:not(.show) button:not(:focus):not(:active),.table.table-list tr:not(:hover) td.table-list-options>button:not(:focus):not(:active){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.toaster-icon{position:absolute;left:0.0em;top:0.0em;font-weight:normal;color:#ffffff}.toast-title{font-weight:bold}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#ffffff}.toast-message a:hover{color:#cccccc;text-decoration:none}.toast-close-button{position:relative;right:-0.3em;top:-0.3em;float:right;font-size:20px;font-weight:bold;color:#ffffff;-webkit-text-shadow:0 1px 0 #ffffff;text-shadow:0 1px 0 #ffffff;opacity:0.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80);z-index:999}.toast-close-button:hover,.toast-close-button:focus{color:#000000;text-decoration:none;cursor:pointer;opacity:0.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}button.toast-close-button{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.toast-content{display:inline-block;width:95%}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-center{top:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-center{bottom:12px}.toast-bottom-left{bottom:12px;left:12px}.toast-center{top:45%}#toast-container{position:fixed;z-index:999999;pointer-events:auto}#toast-container.toast-center,#toast-container.toast-top-center,#toast-container.toast-bottom-center{width:100%;pointer-events:none;left:0;right:0}#toast-container.toast-center>div,#toast-container.toast-top-center>div,#toast-container.toast-bottom-center>div{margin:6px auto;pointer-events:auto}#toast-container.toast-center>button,#toast-container.toast-top-center>button,#toast-container.toast-bottom-center>button{pointer-events:auto}#toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;-moz-border-radius:3px 3px 3px 3px;-webkit-border-radius:3px 3px 3px 3px;border-radius:3px 3px 3px 3px;background-position:15px center;background-repeat:no-repeat;-moz-box-shadow:0 0 12px #999999;-webkit-box-shadow:0 0 12px #999999;box-shadow:0 0 12px #999999;color:#ffffff;opacity:0.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80)}#toast-container>:hover{-moz-box-shadow:0 0 12px #000000;-webkit-box-shadow:0 0 12px #000000;box-shadow:0 0 12px #000000;opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100);cursor:pointer}.icon-success{width:35px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:100% 50%;background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==\") !important}.icon-error{width:35px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:100% 50%;background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=\") !important}.icon-info{width:35px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:100% 50%;background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=\") !important}.icon-wait{width:35px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:100% 50%;background-image:url(\"data:image/gif;base64,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\") !important}.icon-warning{width:35px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:100% 50%;background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=\") !important}#toast-container.toast-top-full-width>div,#toast-container.toast-bottom-full-width>div{width:96%;margin:auto}.toast{position:relative;background-color:#030303}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-wait{background-color:#2f96b4}.toast-warning{background-color:#f89406}@media all and (max-width: 240px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container .toast-close-button{right:-0.1em;top:-0.2em}.toast-content{width:94%}}@media all and (min-width: 241px) and (max-width: 480px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container .toast-close-button{right:-0.1em;top:-0.2em}.toast-content{width:94%}}@media all and (min-width: 481px) and (max-width: 768px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}}.swal2-popup.swal2-toast{flex-direction:row;align-items:center;width:auto;padding:.625em;overflow-y:hidden;background:#fff;box-shadow:0 0 0.625em #d9d9d9}.swal2-popup.swal2-toast .swal2-header{flex-direction:row;padding:0}.swal2-popup.swal2-toast .swal2-title{flex-grow:1;justify-content:flex-start;margin:0 0.6em;font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:0.5em 0 0;padding:0.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{position:static;width:.8em;height:.8em;line-height:.8}.swal2-popup.swal2-toast .swal2-content{justify-content:flex-start;padding:0;font-size:1em}.swal2-popup.swal2-toast .swal2-icon{width:2em;min-width:2em;height:2em;margin:0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}@media all and (-ms-high-contrast: none), (-ms-high-contrast: active){.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{font-size:.25em}}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^='swal2-x-mark-line']{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^='swal2-x-mark-line'][class$='left']{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^='swal2-x-mark-line'][class$='right']{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{flex-basis:auto !important;width:auto;height:auto;margin:0 .3125em;padding:0}.swal2-popup.swal2-toast .swal2-styled{margin:.125em .3125em;padding:.3125em .625em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(100,150,200,0.5)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^='swal2-success-circular-line']{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^='swal2-success-circular-line'][class$='left']{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^='swal2-success-circular-line'][class$='right']{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^='swal2-success-line']{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^='swal2-success-line'][class$='tip']{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^='swal2-success-line'][class$='long']{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{animation:swal2-toast-show 0.5s}.swal2-popup.swal2-toast.swal2-hide{animation:swal2-toast-hide 0.1s forwards}.swal2-container{display:flex;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;flex-direction:row;align-items:center;justify-content:center;padding:.625em;overflow-x:hidden;transition:background-color 0.1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,0.4)}.swal2-container.swal2-backdrop-hide{background:transparent !important}.swal2-container.swal2-top{align-items:flex-start}.swal2-container.swal2-top-start,.swal2-container.swal2-top-left{align-items:flex-start;justify-content:flex-start}.swal2-container.swal2-top-end,.swal2-container.swal2-top-right{align-items:flex-start;justify-content:flex-end}.swal2-container.swal2-center{align-items:center}.swal2-container.swal2-center-start,.swal2-container.swal2-center-left{align-items:center;justify-content:flex-start}.swal2-container.swal2-center-end,.swal2-container.swal2-center-right{align-items:center;justify-content:flex-end}.swal2-container.swal2-bottom{align-items:flex-end}.swal2-container.swal2-bottom-start,.swal2-container.swal2-bottom-left{align-items:flex-end;justify-content:flex-start}.swal2-container.swal2-bottom-end,.swal2-container.swal2-bottom-right{align-items:flex-end;justify-content:flex-end}.swal2-container.swal2-bottom>:first-child,.swal2-container.swal2-bottom-start>:first-child,.swal2-container.swal2-bottom-left>:first-child,.swal2-container.swal2-bottom-end>:first-child,.swal2-container.swal2-bottom-right>:first-child{margin-top:auto}.swal2-container.swal2-grow-fullscreen>.swal2-modal{display:flex !important;flex:1;align-self:stretch;justify-content:center}.swal2-container.swal2-grow-row>.swal2-modal{display:flex !important;flex:1;align-content:center;justify-content:center}.swal2-container.swal2-grow-column{flex:1;flex-direction:column}.swal2-container.swal2-grow-column.swal2-top,.swal2-container.swal2-grow-column.swal2-center,.swal2-container.swal2-grow-column.swal2-bottom{align-items:center}.swal2-container.swal2-grow-column.swal2-top-start,.swal2-container.swal2-grow-column.swal2-center-start,.swal2-container.swal2-grow-column.swal2-bottom-start,.swal2-container.swal2-grow-column.swal2-top-left,.swal2-container.swal2-grow-column.swal2-center-left,.swal2-container.swal2-grow-column.swal2-bottom-left{align-items:flex-start}.swal2-container.swal2-grow-column.swal2-top-end,.swal2-container.swal2-grow-column.swal2-center-end,.swal2-container.swal2-grow-column.swal2-bottom-end,.swal2-container.swal2-grow-column.swal2-top-right,.swal2-container.swal2-grow-column.swal2-center-right,.swal2-container.swal2-grow-column.swal2-bottom-right{align-items:flex-end}.swal2-container.swal2-grow-column>.swal2-modal{display:flex !important;flex:1;align-content:center;justify-content:center}.swal2-container.swal2-no-transition{transition:none !important}.swal2-container:not(.swal2-top):not(.swal2-top-start):not(.swal2-top-end):not(.swal2-top-left):not(.swal2-top-right):not(.swal2-center-start):not(.swal2-center-end):not(.swal2-center-left):not(.swal2-center-right):not(.swal2-bottom):not(.swal2-bottom-start):not(.swal2-bottom-end):not(.swal2-bottom-left):not(.swal2-bottom-right):not(.swal2-grow-fullscreen)>.swal2-modal{margin:auto}@media all and (-ms-high-contrast: none), (-ms-high-contrast: active){.swal2-container .swal2-modal{margin:0 !important}}.swal2-popup{display:none;position:relative;box-sizing:border-box;flex-direction:column;justify-content:center;width:32em;max-width:100%;padding:1.25em;border:none;border-radius:5px;background:#fff;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:none}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-header{display:flex;flex-direction:column;align-items:center;padding:0 1.8em}.swal2-title{position:relative;max-width:100%;margin:0 0 0.4em;padding:0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:100%;margin:1.25em auto 0;padding:0 1.6em}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,0.1), rgba(0,0,0,0.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,0.2), rgba(0,0,0,0.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:0.625em 1.1em;box-shadow:none;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#2778c4;color:#fff;font-size:1.0625em}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#d14529;color:#fff;font-size:1.0625em}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#757575;color:#fff;font-size:1.0625em}.swal2-styled:focus{outline:none;box-shadow:0 0 0 3px rgba(100,150,200,0.5)}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1.25em 0 0;padding:1em 0 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;height:.25em;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,0.2)}.swal2-image{max-width:100%;margin:1.25em auto}.swal2-close{position:absolute;z-index:2;top:0;right:0;align-items:center;justify-content:center;width:1.2em;height:1.2em;padding:0;overflow:hidden;transition:color 0.1s ease-out;border:none;border-radius:5px;background:rgba(0,0,0,0);color:#ccc;font-family:serif;font-size:2.5em;line-height:1.2;cursor:pointer}.swal2-close:hover{transform:none;background:rgba(0,0,0,0);color:#f27474}.swal2-close:focus{outline:none;box-shadow:inset 0 0 0 3px rgba(100,150,200,0.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-content{z-index:1;justify-content:center;margin:0;padding:0 1.6em;color:#545454;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;word-wrap:break-word}.swal2-input,.swal2-file,.swal2-textarea,.swal2-select,.swal2-radio,.swal2-checkbox{margin:1em auto}.swal2-input,.swal2-file,.swal2-textarea{box-sizing:border-box;width:100%;transition:border-color 0.3s,box-shadow 0.3s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,0.06);color:inherit;font-size:1.125em}.swal2-input.swal2-inputerror,.swal2-file.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}.swal2-input:focus,.swal2-file:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:none;box-shadow:0 0 0 3px rgba(100,150,200,0.5)}.swal2-input::placeholder,.swal2-file::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em auto;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 0.75em}.swal2-input[type='number']{max-width:10em}.swal2-file{background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-radio,.swal2-checkbox{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-radio label,.swal2-checkbox label{margin:0 .6em;font-size:1.125em}.swal2-radio input,.swal2-checkbox input{margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto}.swal2-validation-message{display:none;align-items:center;justify-content:center;margin:0 -2.7em;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:'!';display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:1.25em auto 1.875em;border:0.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^='swal2-x-mark-line']{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^='swal2-x-mark-line'][class$='left']{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^='swal2-x-mark-line'][class$='right']{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^='swal2-success-circular-line']{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^='swal2-success-circular-line'][class$='left']{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^='swal2-success-circular-line'][class$='right']{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:0.25em solid rgba(165,220,134,0.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^='swal2-success-line']{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^='swal2-success-line'][class$='tip']{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^='swal2-success-line'][class$='long']{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:0 0 1.25em;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^='swal2']{-webkit-tap-highlight-color:transparent}.swal2-show{animation:swal2-show 0.3s}.swal2-hide{animation:swal2-hide 0.15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{right:auto;left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@supports (-ms-accelerator: true){.swal2-range input{width:100% !important}.swal2-range output{display:none}}@media all and (-ms-high-contrast: none), (-ms-high-contrast: active){.swal2-range input{width:100% !important}.swal2-range output{display:none}}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-show{0%{transform:scale(0.7)}45%{transform:scale(1.05)}80%{transform:scale(0.95)}100%{transform:scale(1)}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(0.5);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{top:auto;right:auto;bottom:auto;left:auto;max-width:calc(100% - .625em * 2);background-color:transparent !important}body.swal2-no-backdrop .swal2-container>.swal2-modal{box-shadow:0 0 10px rgba(0,0,0,0.4)}body.swal2-no-backdrop .swal2-container.swal2-top{top:0;left:50%;transform:translateX(-50%)}body.swal2-no-backdrop .swal2-container.swal2-top-start,body.swal2-no-backdrop .swal2-container.swal2-top-left{top:0;left:0}body.swal2-no-backdrop .swal2-container.swal2-top-end,body.swal2-no-backdrop .swal2-container.swal2-top-right{top:0;right:0}body.swal2-no-backdrop .swal2-container.swal2-center{top:50%;left:50%;transform:translate(-50%, -50%)}body.swal2-no-backdrop .swal2-container.swal2-center-start,body.swal2-no-backdrop .swal2-container.swal2-center-left{top:50%;left:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-container.swal2-center-end,body.swal2-no-backdrop .swal2-container.swal2-center-right{top:50%;right:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-container.swal2-bottom{bottom:0;left:50%;transform:translateX(-50%)}body.swal2-no-backdrop .swal2-container.swal2-bottom-start,body.swal2-no-backdrop .swal2-container.swal2-bottom-left{bottom:0;left:0}body.swal2-no-backdrop .swal2-container.swal2-bottom-end,body.swal2-no-backdrop .swal2-container.swal2-bottom-right{right:0;bottom:0}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden='true']{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static !important}}body.swal2-toast-shown .swal2-container{background-color:transparent}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}body.swal2-toast-column .swal2-toast{flex-direction:column;align-items:stretch}body.swal2-toast-column .swal2-toast .swal2-actions{flex:1;align-self:stretch;height:2.2em;margin-top:.3125em}body.swal2-toast-column .swal2-toast .swal2-loading{justify-content:center}body.swal2-toast-column .swal2-toast .swal2-input{height:2em;margin:.3125em auto;font-size:1em}body.swal2-toast-column .swal2-toast .swal2-validation-message{font-size:1em}#toast-container.toast-top-right{top:76px}#toast-container .toast-close-button{right:-0.15em}#toast-container .toast{opacity:1 !important;background-image:none !important;border-radius:.25rem;box-shadow:0 0 8px rgba(0,0,0,0.35);display:flex;align-items:center}#toast-container .toast:hover{box-shadow:0 0 10px rgba(0,0,0,0.6)}#toast-container .toast:before{font-family:FontAwesome;font-size:25px;line-height:20px;float:left;color:#ffffff;padding-right:10px;margin:auto 0 auto -36px}#toast-container .toast .toaster-icon{display:none}#toast-container .toast .toast-message p{margin-bottom:0.5rem}#toast-container .toast .toast-message p:last-child{margin-bottom:0}#toast-container .toast.toast-danger,#toast-container .toast.toast-error{background-image:none !important;background-color:#dd4b39}#toast-container .toast.toast-danger:before,#toast-container .toast.toast-error:before{content:\"\\F0E7\";margin-left:-30px}#toast-container .toast.toast-warning{background-image:none !important;background-color:#bf7e16}#toast-container .toast.toast-warning:before{content:\"\\F071\"}#toast-container .toast.toast-info{background-image:none !important;background-color:#555}#toast-container .toast.toast-info:before{content:\"\\F05A\"}#toast-container .toast.toast-success{background-image:none !important;background-color:#00a65a}#toast-container .toast.toast-success:before{content:\"\\F00C\"}.swal2-container{background-color:rgba(0,0,0,0.3)}.swal2-popup{padding:15px 0 0;background-color:#fff;color:#333;border:1px solid #9a9a9a;border-radius:.3rem;width:34em}.swal2-popup .swal2-header{padding:0 15px}.swal2-popup .swal2-icon{margin:0 auto;width:auto;height:auto;border:none}.swal2-popup .swal2-content{padding-bottom:15px;font-size:1rem;border-bottom:1px solid #dee2e6}.swal2-popup i.swal-custom-icon{display:block;margin:0 auto;font-size:35px}.swal2-popup .swal2-title{padding:10px 0 15px;margin:0;font-size:1.15rem;color:#333}.swal2-popup .swal2-content{font-size:1rem;color:#333;padding:0 15px 15px}.swal2-popup .swal2-actions{padding:15px;margin:0;background-color:#fbfbfb;border-radius:.3rem;display:flex;flex-direction:row;justify-content:flex-start;font-size:1rem}.swal2-popup .swal2-actions button{margin-right:10px}.swal2-popup .swal2-actions button.swal2-confirm{font-weight:bold}.swal2-popup .swal2-actions button.swal2-cancel{background-color:#ffffff}date-input-polyfill[data-open=\"true\"]{z-index:10000 !important}html{font-size:14px}body{min-width:1010px}body.layout_frontend{background-color:#ecf0f5}body.full-width:not(.layout_frontend) .container{min-width:980px;width:90%}.page-header,.secondary-header{border-bottom:1px solid #dee2e6;padding-bottom:0.6rem;margin-bottom:0.5rem}.page-header h1,.page-header h2,.page-header h3,.page-header h4,.secondary-header h1,.secondary-header h2,.secondary-header h3,.secondary-header h4{margin:0}h1 small,h2 small,h3 small,h4 small,h5 small{font-size:80%}input:required,select:required,textarea:required{box-shadow:none}.secondary-header,.spaced-header{margin-top:4rem}.navbar{padding-left:0;padding-right:0}.navbar .dropdown-menu{min-width:200px;max-width:300px}.navbar .dropdown-menu .dropdown-item-text{line-height:1.3}.navbar .dropdown-menu .dropdown-item-text span,.navbar .dropdown-menu .dropdown-item-text small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.navbar .nav-link{font-weight:600}.navbar-brand{margin-top:-20px;margin-bottom:-20px}.dropdown-menu button{cursor:pointer}.container{width:980px;max-width:none !important;margin:0 auto;padding:0}.page-content{margin-top:20px}.footer{margin-top:40px;padding:40px 0 40px 0;border-top:1px solid #dee2e6}.list-group-item.active{border-left:3px solid #175DDC;font-weight:bold;padding-left:calc(1.25rem - 3px)}.card-header,.modal-header{font-weight:bold;text-transform:uppercase}.card-header small,.modal-header small{font-weight:normal;text-transform:none}.card-body-header{font-size:1.15rem}.card ul.fa-ul.card-ul{margin-left:1.9em}.card ul.fa-ul.card-ul li{word-break:break-all}.card ul.fa-ul.card-ul .fa-li{top:4px}.card ul.fa-ul.card-ul.carets{margin-left:1.1em}.card ul.fa-ul.card-ul.carets .fa-li{left:-17px;width:1.1em}.card ul.fa-ul.card-ul ul.carets{margin-left:0.85em}.card-org-plans h2{font-size:1.15rem}.modal-dialog{width:500px}.modal-sm{width:300px}.modal-lg{width:800px}.modal-body h3,.modal-body .section-header>*{font-weight:normal;text-transform:uppercase;color:#6c757d}.modal .list-group-flush :first-child{border-top:none}.modal .list-group-flush :last-child{border-bottom:none}.modal-footer{justify-content:flex-start;background-color:#fbfbfb;border-radius:.3rem}label:not(.form-check-label):not(.btn),label.bold{font-weight:600}input[type=\"search\"]::-webkit-search-cancel-button{-webkit-appearance:searchfield-cancel-button}.btn[class*=\"btn-outline-\"]:not(:hover),.swal2-popup .swal2-actions button[class*=\"btn-outline-\"]:not(:hover){border-color:#ced4da;background-color:#fbfbfb}.btn-link:focus,.btn-link.focus{outline-color:-webkit-focus-ring-color;outline-offset:1px;outline-style:auto;outline-width:1px}.btn-outline-secondary,.swal2-popup .swal2-actions button.swal2-cancel{color:#6c757d}.btn-outline-secondary:hover:not(:disabled),.swal2-popup .swal2-actions button.swal2-cancel:hover:not(:disabled){color:#333}.btn-outline-secondary:disabled,.swal2-popup .swal2-actions button.swal2-cancel:disabled{opacity:1}.btn-outline-secondary:focus,.swal2-popup .swal2-actions button.swal2-cancel:focus,.btn-outline-secondary.focus,.swal2-popup .swal2-actions button.focus.swal2-cancel{box-shadow:0 0 0 .2rem rgba(58,117,225,0.5)}.btn-submit{position:relative}.btn-submit .fa-spinner{position:absolute;display:none;align-items:center;justify-content:center;bottom:0;top:0;left:0;right:0}.btn-submit:disabled:not(.manual) .fa-spinner,.btn-submit.loading .fa-spinner{display:flex}.btn-submit:disabled:not(.manual) span,.btn-submit.loading span{visibility:hidden}.list-group-item:focus,.list-group-item.focus{z-index:100}.fa-icon-above-input{height:1.5em}.table.table-list thead th{border-top:none}.table.table-list tr:first-child td{border:none}.table.table-list td{vertical-align:middle}.table.table-list td.reduced-lh{line-height:1}.table.table-list td.reduced-lh small{font-size:80%}.table.table-list td small,.table.table-list td>.fa,.table.table-list td .icon{color:#6c757d}.table.table-list td.wrap{word-break:break-all}.table.table-list td.table-list-options{width:76px;max-width:76px;text-align:right;height:50px}.table.table-list td.table-list-options.wider{width:100px;max-width:100px}.table.table-list td.table-list-options .btn,.table.table-list td.table-list-options .swal2-popup .swal2-actions button,.swal2-popup .swal2-actions .table.table-list td.table-list-options button{line-height:1;transition:initial}.table.table-list td.table-list-options .dropdown-menu{line-height:1.5}.table.table-list td.table-list-icon{width:45px;max-width:45px;text-align:center}.table.table-list td.table-list-icon img{max-height:24px}.table.table-list td.table-list-checkbox{width:35px;max-width:35px}.table.table-list td.table-list-strike{color:#6c757d;text-decoration:line-through}.text-lg{font-size:1.15rem}.text-strike{text-decoration:line-through}.font-weight-semibold{font-weight:600}.password-wrapper{word-break:break-all;white-space:pre-wrap;min-width:0}.password-row{min-width:0}.password-number{color:#007fde}.password-special{color:#c40800}app-vault-groupings .card #search,app-org-vault-groupings .card #search,.groupings .card #search{margin-bottom:1rem}app-vault-groupings .card h3,app-org-vault-groupings .card h3,.groupings .card h3{font-weight:normal;text-transform:uppercase;color:#6c757d}app-vault-groupings .card ul:last-child,app-org-vault-groupings .card ul:last-child,.groupings .card ul:last-child{margin-bottom:0}app-vault-groupings .card .card-body a,app-org-vault-groupings .card .card-body a,.groupings .card .card-body a{color:#333}app-vault-groupings .card .card-body a:hover.text-muted,app-org-vault-groupings .card .card-body a:hover.text-muted,.groupings .card .card-body a:hover.text-muted{color:#333 !important}app-vault-groupings .card .show-active,app-org-vault-groupings .card .show-active,.groupings .card .show-active{display:none}app-vault-groupings .card li>.fa,app-vault-groupings .card li>div>.fa,app-org-vault-groupings .card li>.fa,app-org-vault-groupings .card li>div>.fa,.groupings .card li>.fa,.groupings .card li>div>.fa{cursor:pointer}app-vault-groupings .card li.active>.show-active,app-vault-groupings .card li.active>div .show-active,app-org-vault-groupings .card li.active>.show-active,app-org-vault-groupings .card li.active>div .show-active,.groupings .card li.active>.show-active,.groupings .card li.active>div .show-active{display:inline}app-vault-groupings .card li.active>a:first-of-type,app-vault-groupings .card li.active>div a:first-of-type,app-org-vault-groupings .card li.active>a:first-of-type,app-org-vault-groupings .card li.active>div a:first-of-type,.groupings .card li.active>a:first-of-type,.groupings .card li.active>div a:first-of-type{font-weight:bold;color:#175DDC}app-vault-groupings .card li.active>.fa,app-vault-groupings .card li.active>div>.fa,app-org-vault-groupings .card li.active>.fa,app-org-vault-groupings .card li.active>div>.fa,.groupings .card li.active>.fa,.groupings .card li.active>div>.fa{color:#175DDC}app-password-generator #lengthRange{width:100%}app-password-generator .card-password .card-body{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;text-align:center;font-size:1.15rem;font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}app-password-generator-history .list-group-item{line-height:1}app-password-generator-history .list-group-item .password{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}app-import textarea{height:150px}app-user-billing .progress{height:20px}app-user-billing .progress .progress-bar{min-width:50px}#duo-frame{background:url(../images/loading.svg) 0 0 no-repeat;height:330px}#duo-frame iframe{width:100%;height:100%;border:none}#web-authn-frame{background:url(../images/loading.svg) 0 0 no-repeat;height:290px}#web-authn-frame iframe{width:100%;height:100%;border:none}#bt-dropin-container{background:url(../images/loading.svg) 0 0 no-repeat;min-height:50px}.braintree-placeholder,.braintree-sheet__header{display:none}.braintree-sheet__content--button{text-align:left;padding:0;min-height:0}.braintree-sheet__container{margin-bottom:0}.braintree-sheet{border:none}.totp .totp-code{font-size:1.2rem}.totp .totp-countdown{margin:3px 3px 0 0;display:block;user-select:none}.totp .totp-countdown .totp-sec{font-size:0.85em;position:absolute;line-height:32px;width:32px;text-align:center}.totp .totp-countdown svg{width:32px;height:32px;transform:rotate(-90deg)}.totp .totp-countdown .totp-circle{fill:none;stroke:#175DDC}.totp .totp-countdown .totp-circle.inner{stroke-width:3;stroke-dasharray:78.6;stroke-dashoffset:0}.totp .totp-countdown .totp-circle.outer{stroke-width:2;stroke-dasharray:88;stroke-dashoffset:0}.totp>.align-items-center{margin-bottom:-5px}.totp.low .totp-sec,.totp.low .totp-code{color:#dd4b39}.totp.low .totp-circle{stroke:#dd4b39}.callout{padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid rgba(0,0,0,0.125);border-left-width:5px;border-radius:calc(.25rem - 1px);background-color:#fafafa}.callout .callout-heading{margin-top:0}.callout h3.callout-heading{font-weight:bold;text-transform:uppercase}.callout.callout-primary{border-left-color:#175DDC}.callout.callout-primary .callout-heading{color:#175DDC}.callout.callout-info{border-left-color:#343a40}.callout.callout-info .callout-heading{color:#343a40}.callout.callout-danger{border-left-color:#dd4b39}.callout.callout-danger .callout-heading{color:#dd4b39}.callout.callout-success{border-left-color:#00a65a}.callout.callout-success .callout-heading{color:#00a65a}.callout.callout-warning{border-left-color:#bf7e16}.callout.callout-warning .callout-heading{color:#bf7e16}.list-group-2fa .logo-2fa{min-width:100px}.form-check-block .form-check-label{font-weight:600}.form-check-block .form-check-label>small{display:block;color:#6c757d;font-weight:normal}.form-check-block .form-check-label>span{display:block;font-weight:normal}.form-inline input[type='datetime-local']{width:200px}.form-control.stripe-form-control{padding-top:0.55rem}.form-control.stripe-form-control.is-focused{color:#495057;background-color:#fff;border-color:#81a9f2;outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,0.25)}.form-control.stripe-form-control.is-focused.is-invalid{box-shadow:0 0 0 .2rem rgba(221,75,57,0.25)}.form-control.stripe-form-control.is-invalid{border-color:#dd4b39}.org-nav{background-color:#fbfbfb;border-bottom:1px solid #dee2e6;height:100px;min-height:100px}.org-nav .container{height:100%}.org-nav .nav-tabs{border-bottom:none}.org-nav .nav-tabs a{color:#333}.org-nav .nav-tabs a:not(.active){border-color:transparent}.org-nav .nav-tabs a.active{border-top:3px solid #175DDC;font-weight:bold;padding-top:calc(.5rem - 2px)}.org-nav .nav-tabs a.disabled{color:#b4b4b4}.org-nav .org-name{line-height:1}.org-nav .org-name span{font-size:1.15rem;display:block}img.logo{width:284px;height:43px;margin:0 auto;display:block}.min-height-fix{min-height:1px}.overflow-hidden{overflow:hidden}.cdk-drag-preview{z-index:1070 !important;opacity:0.8;background-color:#fff;border-radius:.25rem}.cursor-move{cursor:move !important}.layout.enterprise2 header{color:#ced4da;background-color:#175DDC}.layout.enterprise2 header:before{content:\"\";position:absolute;z-index:-1;width:100%;height:340px;left:0;transform:skewY(-3deg);background:#175DDC}.layout.enterprise2 header img.logo{margin:12px 0 0;width:284px;max-width:284px;height:auto}.layout.enterprise2 h2{color:#ffffff;font-size:1.8rem;margin:100px 0 150px 0}.layout.enterprise2 p{margin:20px 0 40px 0;font-size:1.4rem}.layout.enterprise2 p:before{content:\"/\";padding-right:12px}.layout.enterprise2 p:not(.highlight):before{color:#1252A3}.layout.enterprise2 p b:after{content:\"\\27F6\";font-size:2rem;padding-left:6px}.layout.enterprise2 blockquote{margin:20px 0 0 0;font-size:1.4rem;padding-right:40px}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/connectors/sso.6edbb1cdf4d2e063961a.js.map b/connectors/sso.6edbb1cdf4d2e063961a.js.map deleted file mode 100644 index 0890dca4..00000000 --- a/connectors/sso.6edbb1cdf4d2e063961a.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/connectors/sso.ts","webpack:///./src/connectors/common.ts"],"names":["enumerable","get","getter","value","key","bind","module","Object","prototype","hasOwnProperty","call","object","property","document","addEventListener","event","code","getQsParam","state","includes","window","postMessage","command","handOffMessage","cookie","split","pop","shift","getElementById","innerHTML","initiateBrowserSso","location","href","origin","returnUri","s","regexString","results","RegExp","exec","extractFromRegex","name","url","replace","decodeURIComponent"],"mappings":"aACA,SAGA,cAGA,QACA,oBAGA,YACA,IACA,KACA,YAUA,OANA,mCAGA,OAGA,UAKA,MAGA,MAGA,oBACA,UACA,2BAA2CA,YAAY,EAAMC,IAAKC,KAKlE,gBACA,gDACA,4CAAyDC,MAAO,WAEhE,sCAAkDA,OAAO,KAQzD,kBAEA,GADA,cACA,aACA,qDACA,0BAGA,GAFA,OACA,mCAA0CH,YAAY,EAAMG,MAAOA,IACnE,2DAAiH,OAAOA,EAAMC,IAAQC,KAAK,KAAMD,IACjJ,UAIA,gBACA,sBACA,WAA4B,OAAOE,EAAgB,SACnD,WAAkC,OAAOA,GAEzC,OADA,aACA,GAIA,kBAAuD,OAAOC,OAAOC,UAAUC,eAAeC,KAAKC,EAAQC,IAG3G,OAIA,Y,qFClFA,aAGA,EAAQ,MAERC,SAASC,iBAAiB,oBAAoB,SAAAC,GAC1C,IAAMC,EAAO,EAAAC,WAAW,QAClBC,EAAQ,EAAAD,WAAW,SAEzB,GAAa,MAATC,GAAiBA,EAAMC,SAAS,sBAcxC,SAA4BH,EAAcE,GACtCE,OAAOC,YAAY,CAAEC,QAAS,aAAcN,KAAMA,EAAME,MAAOA,GAAS,KACxE,IAAMK,GAAkB,KAAOV,SAASW,QAAQC,MAAM,wBAAwBC,MAAMD,MAAM,KAAKE,QAC/Fd,SAASW,OAAS,+CAClBX,SAASe,eAAe,WAAWC,UAC/B,MAAMN,EAAc,OAlBpBO,CAAmBd,EAAME,OACtB,CACHE,OAAOW,SAASC,KAAOZ,OAAOW,SAASE,OAAS,eAAiBjB,EAAO,UAAYE,EAEpF,IAAMgB,EAiBd,SAA0BC,EAAWC,GACjC,IACMC,EADQ,IAAIC,OAAOF,GACHG,KAAKJ,GAE3B,IAAKE,EACD,OAAO,KAGX,OAAOA,EAAQ,GAzBOG,CAAiBtB,EAAO,8BAEtCE,OAAOW,SAASC,KADhBE,EACuBd,OAAOW,SAASE,OAAS,KAAKC,EAE9Bd,OAAOW,SAASE,OAAS,eAAiBjB,EAAO,UAAYE,O,yGClBhG,sBAA2BuB,GACvB,IAAMC,EAAMtB,OAAOW,SAASC,KAC5BS,EAAOA,EAAKE,QAAQ,UAAW,QAC/B,IACMN,EADQ,IAAIC,OAAO,OAASG,EAAO,qBACnBF,KAAKG,GAE3B,OAAKL,EAGAA,EAAQ,GAINO,mBAAmBP,EAAQ,GAAGM,QAAQ,MAAO,MAHzC,GAHA","file":"connectors/sso.6edbb1cdf4d2e063961a.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1100);\n","import { getQsParam } from './common';\n\n// tslint:disable-next-line\nrequire('./sso.scss');\n\ndocument.addEventListener('DOMContentLoaded', event => {\n const code = getQsParam('code');\n const state = getQsParam('state');\n\n if (state != null && state.includes(':clientId=browser')) {\n initiateBrowserSso(code, state);\n } else {\n window.location.href = window.location.origin + '/#/sso?code=' + code + '&state=' + state;\n // Match any characters between \"_returnUri='\" and the next \"'\"\n const returnUri = extractFromRegex(state, '(?<=_returnUri=\\')(.*)(?=\\')');\n if (returnUri) {\n window.location.href = window.location.origin + `/#${returnUri}`;\n } else {\n window.location.href = window.location.origin + '/#/sso?code=' + code + '&state=' + state;\n }\n }\n});\n\nfunction initiateBrowserSso(code: string, state: string) {\n window.postMessage({ command: 'authResult', code: code, state: state }, '*');\n const handOffMessage = ('; ' + document.cookie).split('; ssoHandOffMessage=').pop().split(';').shift();\n document.cookie = 'ssoHandOffMessage=;SameSite=strict;max-age=0';\n document.getElementById('content').innerHTML =\n `

${handOffMessage}

`;\n}\n\nfunction extractFromRegex(s: string, regexString: string) {\n const regex = new RegExp(regexString);\n const results = regex.exec(s);\n\n if (!results) {\n return null;\n }\n\n return results[0];\n}\n","export function getQsParam(name: string) {\n const url = window.location.href;\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\n const regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)');\n const results = regex.exec(url);\n\n if (!results) {\n return null;\n }\n if (!results[2]) {\n return '';\n }\n\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/connectors/sso.d875a1005df5117243c1.css b/connectors/sso.d875a1005df5117243c1.css new file mode 100644 index 00000000..57d934db --- /dev/null +++ b/connectors/sso.d875a1005df5117243c1.css @@ -0,0 +1,97 @@ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 300; + font-display: auto; + src: url(../fonts/Open_Sans-italic-300.woff) format('woff'); + unicode-range: U+0-10FFFF; +} + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + font-display: auto; + src: url(../fonts/Open_Sans-italic-400.woff) format('woff'); + unicode-range: U+0-10FFFF; +} + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + font-display: auto; + src: url(../fonts/Open_Sans-italic-600.woff) format('woff'); + unicode-range: U+0-10FFFF; +} + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + font-display: auto; + src: url(../fonts/Open_Sans-italic-700.woff) format('woff'); + unicode-range: U+0-10FFFF; +} + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 800; + font-display: auto; + src: url(../fonts/Open_Sans-italic-800.woff) format('woff'); + unicode-range: U+0-10FFFF; +} + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + font-display: auto; + src: url(../fonts/Open_Sans-normal-300.woff) format('woff'); + unicode-range: U+0-10FFFF; +} + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + font-display: auto; + src: url(../fonts/Open_Sans-normal-400.woff) format('woff'); + unicode-range: U+0-10FFFF; +} + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + font-display: auto; + src: url(../fonts/Open_Sans-normal-600.woff) format('woff'); + unicode-range: U+0-10FFFF; +} + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + font-display: auto; + src: url(../fonts/Open_Sans-normal-700.woff) format('woff'); + unicode-range: U+0-10FFFF; +} + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + font-display: auto; + src: url(../fonts/Open_Sans-normal-800.woff) format('woff'); + unicode-range: U+0-10FFFF; +} + + +:root{--blue: #007bff;--indigo: #6610f2;--purple: #6f42c1;--pink: #e83e8c;--red: #dc3545;--orange: #fd7e14;--yellow: #ffc107;--green: #28a745;--teal: #20c997;--cyan: #17a2b8;--white: #fff;--gray: #6c757d;--gray-dark: #343a40;--primary: #175DDC;--secondary: #ced4da;--success: #00a65a;--info: #555555;--warning: #bf7e16;--danger: #dd4b39;--light: #f8f9fa;--dark: #343a40;--primary-accent: #1252A3;--secondary-alt: #1A3B66;--breakpoint-xs: 0;--breakpoint-sm: 1px;--breakpoint-md: 2px;--breakpoint-lg: 3px;--breakpoint-xl: 4px;--font-family-sans-serif: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}*,*::before,*::after{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#333;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0 !important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:#175ddc;text-decoration:none;background-color:transparent}a:hover{color:#104097;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{padding:0;border-style:none}input[type=radio],input[type=checkbox]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none !important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1{font-size:1.7rem}h2,.h2{font-size:1.3rem}h3,.h3{font-size:1rem}h4,.h4{font-size:1rem}h5,.h5{font-size:1rem}h6,.h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:normal}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}small,.small{font-size:90%;font-weight:400}mark,.mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:90%;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid,.table.table-list td.table-list-icon img{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:100%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:100%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:100%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-xl,.container-lg,.container-md,.container-sm{width:100%;padding-right:10px;padding-left:10px;margin-right:auto;margin-left:auto}@media(min-width: 1px){.container-sm,.container{max-width:540px}}@media(min-width: 2px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 3px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 4px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}.row{display:flex;flex-wrap:wrap;margin-right:-10px;margin-left:-10px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col-xl,.col-xl-auto,.col-xl-12,.col-xl-11,.col-xl-10,.col-xl-9,.col-xl-8,.col-xl-7,.col-xl-6,.col-xl-5,.col-xl-4,.col-xl-3,.col-xl-2,.col-xl-1,.col-lg,.col-lg-auto,.col-lg-12,.col-lg-11,.col-lg-10,.col-lg-9,.col-lg-8,.col-lg-7,.col-lg-6,.col-lg-5,.col-lg-4,.col-lg-3,.col-lg-2,.col-lg-1,.col-md,.col-md-auto,.col-md-12,.col-md-11,.col-md-10,.col-md-9,.col-md-8,.col-md-7,.col-md-6,.col-md-5,.col-md-4,.col-md-3,.col-md-2,.col-md-1,.col-sm,.col-sm-auto,.col-sm-12,.col-sm-11,.col-sm-10,.col-sm-9,.col-sm-8,.col-sm-7,.col-sm-6,.col-sm-5,.col-sm-4,.col-sm-3,.col-sm-2,.col-sm-1,.col,.col-auto,.col-12,.col-11,.col-10,.col-9,.col-8,.col-7,.col-6,.col-5,.col-4,.col-3,.col-2,.col-1{position:relative;width:100%;padding-right:10px;padding-left:10px}.col{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media(min-width: 1px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media(min-width: 2px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media(min-width: 3px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media(min-width: 4px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.table{width:100%;margin-bottom:1rem;color:#333}.table th,.table td{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm th,.table-sm td{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered th,.table-bordered td{border:1px solid #dee2e6}.table-bordered thead th,.table-bordered thead td{border-bottom-width:2px}.table-borderless th,.table-borderless td,.table-borderless thead th,.table-borderless tbody+tbody{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.02)}.table-hover tbody tr:hover{color:#333;background-color:rgba(0,0,0,.03)}.table-primary,.table-primary>th,.table-primary>td{background-color:#bed2f5}.table-primary th,.table-primary td,.table-primary thead th,.table-primary tbody+tbody{border-color:#86abed}.table-hover .table-primary:hover{background-color:#a8c3f2}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#a8c3f2}.table-secondary,.table-secondary>th,.table-secondary>td{background-color:#f1f3f5}.table-secondary th,.table-secondary td,.table-secondary thead th,.table-secondary tbody+tbody{border-color:#e6e9ec}.table-hover .table-secondary:hover{background-color:#e2e6ea}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#e2e6ea}.table-success,.table-success>th,.table-success>td{background-color:#b8e6d1}.table-success th,.table-success td,.table-success thead th,.table-success tbody+tbody{border-color:#7ad1a9}.table-hover .table-success:hover{background-color:#a5dfc5}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#a5dfc5}.table-info,.table-info>th,.table-info>td{background-color:#cfcfcf}.table-info th,.table-info td,.table-info thead th,.table-info tbody+tbody{border-color:#a7a7a7}.table-hover .table-info:hover{background-color:#c2c2c2}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#c2c2c2}.table-warning,.table-warning>th,.table-warning>td{background-color:#eddbbe}.table-warning th,.table-warning td,.table-warning thead th,.table-warning tbody+tbody{border-color:#debc86}.table-hover .table-warning:hover{background-color:#e7d0aa}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#e7d0aa}.table-danger,.table-danger>th,.table-danger>td{background-color:#f5cdc8}.table-danger th,.table-danger td,.table-danger thead th,.table-danger tbody+tbody{border-color:#eda198}.table-hover .table-danger:hover{background-color:#f1b9b2}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b9b2}.table-light,.table-light>th,.table-light>td{background-color:#fdfdfe}.table-light th,.table-light td,.table-light thead th,.table-light tbody+tbody{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>th,.table-dark>td{background-color:#c6c8ca}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-primary-accent,.table-primary-accent>th,.table-primary-accent>td{background-color:#bdcfe5}.table-primary-accent th,.table-primary-accent td,.table-primary-accent thead th,.table-primary-accent tbody+tbody{border-color:#84a5cf}.table-hover .table-primary-accent:hover{background-color:#abc2de}.table-hover .table-primary-accent:hover>td,.table-hover .table-primary-accent:hover>th{background-color:#abc2de}.table-secondary-alt,.table-secondary-alt>th,.table-secondary-alt>td{background-color:#bfc8d4}.table-secondary-alt th,.table-secondary-alt td,.table-secondary-alt thead th,.table-secondary-alt tbody+tbody{border-color:#8899af}.table-hover .table-secondary-alt:hover{background-color:#b0bbca}.table-hover .table-secondary-alt:hover>td,.table-hover .table-secondary-alt:hover>th{background-color:#b0bbca}.table-active,.table-active>th,.table-active>td{background-color:rgba(0,0,0,.03)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.03)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.03)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark th,.table-dark td,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media(max-width: 0.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media(max-width: 1.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media(max-width: 2.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media(max-width: 3.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + 0.75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fbfbfb;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#81a9f2;outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,.25)}.form-control::placeholder{color:#b4b4b4;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e0e0e0;opacity:1}input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fbfbfb}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.15rem;line-height:1.5}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#333;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + 0.5rem + 2px);padding:.25rem .5rem;font-size:0.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.15rem;line-height:1.5;border-radius:.3rem}select.form-control[size],select.form-control[multiple]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:90%;color:#00a65a}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;line-height:1.5;color:#fff;background-color:rgba(0,166,90,.9);border-radius:.25rem}.form-row>.col>.valid-tooltip,.form-row>[class*=col-]>.valid-tooltip{left:5px}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#00a65a;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2300a65a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#00a65a;box-shadow:0 0 0 .2rem rgba(0,166,90,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .custom-select:valid,.custom-select.is-valid{border-color:#00a65a;padding-right:calc(0.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fbfbfb url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2300a65a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat}.was-validated .custom-select:valid:focus,.custom-select.is-valid:focus{border-color:#00a65a;box-shadow:0 0 0 .2rem rgba(0,166,90,.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#00a65a}.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip,.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip{display:block}.was-validated .custom-control-input:valid~.custom-control-label,.custom-control-input.is-valid~.custom-control-label{color:#00a65a}.was-validated .custom-control-input:valid~.custom-control-label::before,.custom-control-input.is-valid~.custom-control-label::before{border-color:#00a65a}.was-validated .custom-control-input:valid:checked~.custom-control-label::before,.custom-control-input.is-valid:checked~.custom-control-label::before{border-color:#00d976;background-color:#00d976}.was-validated .custom-control-input:valid:focus~.custom-control-label::before,.custom-control-input.is-valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,166,90,.25)}.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before,.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before{border-color:#00a65a}.was-validated .custom-file-input:valid~.custom-file-label,.custom-file-input.is-valid~.custom-file-label{border-color:#00a65a}.was-validated .custom-file-input:valid:focus~.custom-file-label,.custom-file-input.is-valid:focus~.custom-file-label{border-color:#00a65a;box-shadow:0 0 0 .2rem rgba(0,166,90,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:90%;color:#dd4b39}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;line-height:1.5;color:#fff;background-color:rgba(221,75,57,.9);border-radius:.25rem}.form-row>.col>.invalid-tooltip,.form-row>[class*=col-]>.invalid-tooltip{left:5px}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#dd4b39;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dd4b39' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dd4b39' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dd4b39;box-shadow:0 0 0 .2rem rgba(221,75,57,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .custom-select:invalid,.custom-select.is-invalid{border-color:#dd4b39;padding-right:calc(0.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fbfbfb url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dd4b39' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dd4b39' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat}.was-validated .custom-select:invalid:focus,.custom-select.is-invalid:focus{border-color:#dd4b39;box-shadow:0 0 0 .2rem rgba(221,75,57,.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#dd4b39}.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip,.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip{display:block}.was-validated .custom-control-input:invalid~.custom-control-label,.custom-control-input.is-invalid~.custom-control-label{color:#dd4b39}.was-validated .custom-control-input:invalid~.custom-control-label::before,.custom-control-input.is-invalid~.custom-control-label::before{border-color:#dd4b39}.was-validated .custom-control-input:invalid:checked~.custom-control-label::before,.custom-control-input.is-invalid:checked~.custom-control-label::before{border-color:#e47365;background-color:#e47365}.was-validated .custom-control-input:invalid:focus~.custom-control-label::before,.custom-control-input.is-invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(221,75,57,.25)}.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before,.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dd4b39}.was-validated .custom-file-input:invalid~.custom-file-label,.custom-file-input.is-invalid~.custom-file-label{border-color:#dd4b39}.was-validated .custom-file-input:invalid:focus~.custom-file-label,.custom-file-input.is-invalid:focus~.custom-file-label{border-color:#dd4b39;box-shadow:0 0 0 .2rem rgba(221,75,57,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media(min-width: 1px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group,.form-inline .custom-select{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn,.swal2-popup .swal2-actions button{display:inline-block;font-weight:600;color:#333;text-align:center;vertical-align:middle;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.btn,.swal2-popup .swal2-actions button{transition:none}}.btn:hover,.swal2-popup .swal2-actions button:hover{color:#333;text-decoration:none}.btn:focus,.swal2-popup .swal2-actions button:focus,.btn.focus,.swal2-popup .swal2-actions button.focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,.25)}.btn.disabled,.swal2-popup .swal2-actions button.disabled,.btn:disabled,.swal2-popup .swal2-actions button:disabled{opacity:.65}.btn:not(:disabled):not(.disabled),.swal2-popup .swal2-actions button:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary,.swal2-popup .swal2-actions button.swal2-confirm{color:#fff;background-color:#175ddc;border-color:#175ddc}.btn-primary:hover,.swal2-popup .swal2-actions button.swal2-confirm:hover{color:#fff;background-color:#134eb9;border-color:#1249ae}.btn-primary:focus,.swal2-popup .swal2-actions button.swal2-confirm:focus,.btn-primary.focus,.swal2-popup .swal2-actions button.focus.swal2-confirm{color:#fff;background-color:#134eb9;border-color:#1249ae;box-shadow:0 0 0 .2rem rgba(58,117,225,.5)}.btn-primary.disabled,.swal2-popup .swal2-actions button.disabled.swal2-confirm,.btn-primary:disabled,.swal2-popup .swal2-actions button.swal2-confirm:disabled{color:#fff;background-color:#175ddc;border-color:#175ddc}.btn-primary:not(:disabled):not(.disabled):active,.swal2-popup .swal2-actions button.swal2-confirm:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.swal2-popup .swal2-actions button.swal2-confirm:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle,.swal2-popup .swal2-actions .show>button.dropdown-toggle.swal2-confirm{color:#fff;background-color:#1249ae;border-color:#1145a2}.btn-primary:not(:disabled):not(.disabled):active:focus,.swal2-popup .swal2-actions button.swal2-confirm:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.swal2-popup .swal2-actions button.swal2-confirm:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus,.swal2-popup .swal2-actions .show>button.dropdown-toggle.swal2-confirm:focus{box-shadow:0 0 0 .2rem rgba(58,117,225,.5)}.btn-secondary{color:#212529;background-color:#ced4da;border-color:#ced4da}.btn-secondary:hover{color:#212529;background-color:#b8c1ca;border-color:#b1bbc4}.btn-secondary:focus,.btn-secondary.focus{color:#212529;background-color:#b8c1ca;border-color:#b1bbc4;box-shadow:0 0 0 .2rem rgba(180,186,191,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#212529;background-color:#ced4da;border-color:#ced4da}.btn-secondary:not(:disabled):not(.disabled):active,.btn-secondary:not(:disabled):not(.disabled).active,.show>.btn-secondary.dropdown-toggle{color:#212529;background-color:#b1bbc4;border-color:#aab4bf}.btn-secondary:not(:disabled):not(.disabled):active:focus,.btn-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(180,186,191,.5)}.btn-success{color:#fff;background-color:#00a65a;border-color:#00a65a}.btn-success:hover{color:#fff;background-color:#008045;border-color:#00733e}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#008045;border-color:#00733e;box-shadow:0 0 0 .2rem rgba(38,179,115,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#00a65a;border-color:#00a65a}.btn-success:not(:disabled):not(.disabled):active,.btn-success:not(:disabled):not(.disabled).active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#00733e;border-color:#006637}.btn-success:not(:disabled):not(.disabled):active:focus,.btn-success:not(:disabled):not(.disabled).active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,179,115,.5)}.btn-info{color:#fff;background-color:#555;border-color:#555}.btn-info:hover{color:#fff;background-color:#424242;border-color:#3c3c3c}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#424242;border-color:#3c3c3c;box-shadow:0 0 0 .2rem rgba(111,111,111,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#555;border-color:#555}.btn-info:not(:disabled):not(.disabled):active,.btn-info:not(:disabled):not(.disabled).active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#3c3c3c;border-color:#353535}.btn-info:not(:disabled):not(.disabled):active:focus,.btn-info:not(:disabled):not(.disabled).active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(111,111,111,.5)}.btn-warning{color:#fff;background-color:#bf7e16;border-color:#bf7e16}.btn-warning:hover{color:#fff;background-color:#9d6712;border-color:#916011}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#9d6712;border-color:#916011;box-shadow:0 0 0 .2rem rgba(201,145,57,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#fff;background-color:#bf7e16;border-color:#bf7e16}.btn-warning:not(:disabled):not(.disabled):active,.btn-warning:not(:disabled):not(.disabled).active,.show>.btn-warning.dropdown-toggle{color:#fff;background-color:#916011;border-color:#86580f}.btn-warning:not(:disabled):not(.disabled):active:focus,.btn-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(201,145,57,.5)}.btn-danger{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.btn-danger:hover{color:#fff;background-color:#cd3623;border-color:#c23321}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#cd3623;border-color:#c23321;box-shadow:0 0 0 .2rem rgba(226,102,87,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.btn-danger:not(:disabled):not(.disabled):active,.btn-danger:not(:disabled):not(.disabled).active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#c23321;border-color:#b7301f}.btn-danger:not(:disabled):not(.disabled):active:focus,.btn-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(226,102,87,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light:focus,.btn-light.focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled):active,.btn-light:not(:disabled):not(.disabled).active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled):active:focus,.btn-light:not(:disabled):not(.disabled).active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark:focus,.btn-dark.focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled):active,.btn-dark:not(:disabled):not(.disabled).active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled):active:focus,.btn-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-primary-accent{color:#fff;background-color:#1252a3;border-color:#1252a3}.btn-primary-accent:hover{color:#fff;background-color:#0e4181;border-color:#0d3b75}.btn-primary-accent:focus,.btn-primary-accent.focus{color:#fff;background-color:#0e4181;border-color:#0d3b75;box-shadow:0 0 0 .2rem rgba(54,108,177,.5)}.btn-primary-accent.disabled,.btn-primary-accent:disabled{color:#fff;background-color:#1252a3;border-color:#1252a3}.btn-primary-accent:not(:disabled):not(.disabled):active,.btn-primary-accent:not(:disabled):not(.disabled).active,.show>.btn-primary-accent.dropdown-toggle{color:#fff;background-color:#0d3b75;border-color:#0c356a}.btn-primary-accent:not(:disabled):not(.disabled):active:focus,.btn-primary-accent:not(:disabled):not(.disabled).active:focus,.show>.btn-primary-accent.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(54,108,177,.5)}.btn-secondary-alt{color:#fff;background-color:#1a3b66;border-color:#1a3b66}.btn-secondary-alt:hover{color:#fff;background-color:#122948;border-color:#10233d}.btn-secondary-alt:focus,.btn-secondary-alt.focus{color:#fff;background-color:#122948;border-color:#10233d;box-shadow:0 0 0 .2rem rgba(60,88,125,.5)}.btn-secondary-alt.disabled,.btn-secondary-alt:disabled{color:#fff;background-color:#1a3b66;border-color:#1a3b66}.btn-secondary-alt:not(:disabled):not(.disabled):active,.btn-secondary-alt:not(:disabled):not(.disabled).active,.show>.btn-secondary-alt.dropdown-toggle{color:#fff;background-color:#10233d;border-color:#0d1e33}.btn-secondary-alt:not(:disabled):not(.disabled):active:focus,.btn-secondary-alt:not(:disabled):not(.disabled).active:focus,.show>.btn-secondary-alt.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(60,88,125,.5)}.btn-outline-primary{color:#175ddc;border-color:#175ddc}.btn-outline-primary:hover{color:#fff;background-color:#175ddc;border-color:#175ddc}.btn-outline-primary:focus,.btn-outline-primary.focus{box-shadow:0 0 0 .2rem rgba(23,93,220,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#175ddc;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled):active,.btn-outline-primary:not(:disabled):not(.disabled).active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#175ddc;border-color:#175ddc}.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,93,220,.5)}.btn-outline-secondary,.swal2-popup .swal2-actions button.swal2-cancel{color:#ced4da;border-color:#ced4da}.btn-outline-secondary:hover,.swal2-popup .swal2-actions button.swal2-cancel:hover{color:#212529;background-color:#ced4da;border-color:#ced4da}.btn-outline-secondary:focus,.swal2-popup .swal2-actions button.swal2-cancel:focus,.btn-outline-secondary.focus,.swal2-popup .swal2-actions button.focus.swal2-cancel{box-shadow:0 0 0 .2rem rgba(206,212,218,.5)}.btn-outline-secondary.disabled,.swal2-popup .swal2-actions button.disabled.swal2-cancel,.btn-outline-secondary:disabled,.swal2-popup .swal2-actions button.swal2-cancel:disabled{color:#ced4da;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled):active,.swal2-popup .swal2-actions button.swal2-cancel:not(:disabled):not(.disabled):active,.btn-outline-secondary:not(:disabled):not(.disabled).active,.swal2-popup .swal2-actions button.swal2-cancel:not(:disabled):not(.disabled).active,.show>.btn-outline-secondary.dropdown-toggle,.swal2-popup .swal2-actions .show>button.dropdown-toggle.swal2-cancel{color:#212529;background-color:#ced4da;border-color:#ced4da}.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.swal2-popup .swal2-actions button.swal2-cancel:not(:disabled):not(.disabled):active:focus,.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.swal2-popup .swal2-actions button.swal2-cancel:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus,.swal2-popup .swal2-actions .show>button.dropdown-toggle.swal2-cancel:focus{box-shadow:0 0 0 .2rem rgba(206,212,218,.5)}.btn-outline-success{color:#00a65a;border-color:#00a65a}.btn-outline-success:hover{color:#fff;background-color:#00a65a;border-color:#00a65a}.btn-outline-success:focus,.btn-outline-success.focus{box-shadow:0 0 0 .2rem rgba(0,166,90,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#00a65a;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled):active,.btn-outline-success:not(:disabled):not(.disabled).active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#00a65a;border-color:#00a65a}.btn-outline-success:not(:disabled):not(.disabled):active:focus,.btn-outline-success:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,166,90,.5)}.btn-outline-info{color:#555;border-color:#555}.btn-outline-info:hover{color:#fff;background-color:#555;border-color:#555}.btn-outline-info:focus,.btn-outline-info.focus{box-shadow:0 0 0 .2rem rgba(85,85,85,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#555;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled):active,.btn-outline-info:not(:disabled):not(.disabled).active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#555;border-color:#555}.btn-outline-info:not(:disabled):not(.disabled):active:focus,.btn-outline-info:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(85,85,85,.5)}.btn-outline-warning{color:#bf7e16;border-color:#bf7e16}.btn-outline-warning:hover{color:#fff;background-color:#bf7e16;border-color:#bf7e16}.btn-outline-warning:focus,.btn-outline-warning.focus{box-shadow:0 0 0 .2rem rgba(191,126,22,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#bf7e16;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled):active,.btn-outline-warning:not(:disabled):not(.disabled).active,.show>.btn-outline-warning.dropdown-toggle{color:#fff;background-color:#bf7e16;border-color:#bf7e16}.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(191,126,22,.5)}.btn-outline-danger{color:#dd4b39;border-color:#dd4b39}.btn-outline-danger:hover{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.btn-outline-danger:focus,.btn-outline-danger.focus{box-shadow:0 0 0 .2rem rgba(221,75,57,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dd4b39;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled):active,.btn-outline-danger:not(:disabled):not(.disabled).active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(221,75,57,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:focus,.btn-outline-light.focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled):active,.btn-outline-light:not(:disabled):not(.disabled).active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled):active:focus,.btn-outline-light:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:focus,.btn-outline-dark.focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled):active,.btn-outline-dark:not(:disabled):not(.disabled).active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary-accent{color:#1252a3;border-color:#1252a3}.btn-outline-primary-accent:hover{color:#fff;background-color:#1252a3;border-color:#1252a3}.btn-outline-primary-accent:focus,.btn-outline-primary-accent.focus{box-shadow:0 0 0 .2rem rgba(18,82,163,.5)}.btn-outline-primary-accent.disabled,.btn-outline-primary-accent:disabled{color:#1252a3;background-color:transparent}.btn-outline-primary-accent:not(:disabled):not(.disabled):active,.btn-outline-primary-accent:not(:disabled):not(.disabled).active,.show>.btn-outline-primary-accent.dropdown-toggle{color:#fff;background-color:#1252a3;border-color:#1252a3}.btn-outline-primary-accent:not(:disabled):not(.disabled):active:focus,.btn-outline-primary-accent:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-primary-accent.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(18,82,163,.5)}.btn-outline-secondary-alt{color:#1a3b66;border-color:#1a3b66}.btn-outline-secondary-alt:hover{color:#fff;background-color:#1a3b66;border-color:#1a3b66}.btn-outline-secondary-alt:focus,.btn-outline-secondary-alt.focus{box-shadow:0 0 0 .2rem rgba(26,59,102,.5)}.btn-outline-secondary-alt.disabled,.btn-outline-secondary-alt:disabled{color:#1a3b66;background-color:transparent}.btn-outline-secondary-alt:not(:disabled):not(.disabled):active,.btn-outline-secondary-alt:not(:disabled):not(.disabled).active,.show>.btn-outline-secondary-alt.dropdown-toggle{color:#fff;background-color:#1a3b66;border-color:#1a3b66}.btn-outline-secondary-alt:not(:disabled):not(.disabled):active:focus,.btn-outline-secondary-alt:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-secondary-alt.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(26,59,102,.5)}.btn-link{font-weight:400;color:#175ddc;text-decoration:none}.btn-link:hover{color:#104097;text-decoration:underline}.btn-link:focus,.btn-link.focus{text-decoration:underline}.btn-link:disabled,.btn-link.disabled{color:#6c757d;pointer-events:none}.btn-lg,.btn-group-lg>.btn,.swal2-popup .swal2-actions .btn-group-lg>button{padding:.5rem 1rem;font-size:1.15rem;line-height:1.5;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn,.swal2-popup .swal2-actions .btn-group-sm>button{padding:.25rem .5rem;font-size:0.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.dropup,.dropright,.dropdown,.dropleft{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#333;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media(min-width: 1px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media(min-width: 2px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media(min-width: 3px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media(min-width: 4px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=top],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#333;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:hover,.dropdown-item:focus{color:#16181b;text-decoration:none;background-color:rgba(0,0,0,.06)}.dropdown-item.active,.dropdown-item:active{color:#333;text-decoration:none;background-color:rgba(0,0,0,.1)}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:0.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#333}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.swal2-popup .swal2-actions .btn-group>button,.btn-group-vertical>.btn,.swal2-popup .swal2-actions .btn-group-vertical>button{position:relative;flex:1 1 auto}.btn-group>.btn:hover,.swal2-popup .swal2-actions .btn-group>button:hover,.btn-group-vertical>.btn:hover,.swal2-popup .swal2-actions .btn-group-vertical>button:hover{z-index:1}.btn-group>.btn:focus,.swal2-popup .swal2-actions .btn-group>button:focus,.btn-group>.btn:active,.swal2-popup .swal2-actions .btn-group>button:active,.btn-group>.btn.active,.swal2-popup .swal2-actions .btn-group>button.active,.btn-group-vertical>.btn:focus,.swal2-popup .swal2-actions .btn-group-vertical>button:focus,.btn-group-vertical>.btn:active,.swal2-popup .swal2-actions .btn-group-vertical>button:active,.btn-group-vertical>.btn.active,.swal2-popup .swal2-actions .btn-group-vertical>button.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.swal2-popup .swal2-actions .btn-group>button:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-left:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.swal2-popup .swal2-actions .btn-group>button:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn,.swal2-popup .swal2-actions .btn-group>.btn-group:not(:last-child)>button{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:not(:first-child),.swal2-popup .swal2-actions .btn-group>button:not(:first-child),.btn-group>.btn-group:not(:first-child)>.btn,.swal2-popup .swal2-actions .btn-group>.btn-group:not(:first-child)>button{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split,.swal2-popup .swal2-actions .btn-group-sm>button+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split,.swal2-popup .swal2-actions .btn-group-lg>button+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.swal2-popup .swal2-actions .btn-group-vertical>button,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.swal2-popup .swal2-actions .btn-group-vertical>button:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.swal2-popup .swal2-actions .btn-group-vertical>button:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn,.swal2-popup .swal2-actions .btn-group-vertical>.btn-group:not(:last-child)>button{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:not(:first-child),.swal2-popup .swal2-actions .btn-group-vertical>button:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child)>.btn,.swal2-popup .swal2-actions .btn-group-vertical>.btn-group:not(:first-child)>button{border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.swal2-popup .swal2-actions .btn-group-toggle>button,.btn-group-toggle>.btn-group>.btn,.swal2-popup .swal2-actions .btn-group-toggle>.btn-group>button{margin-bottom:0}.btn-group-toggle>.btn input[type=radio],.swal2-popup .swal2-actions .btn-group-toggle>button input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.swal2-popup .swal2-actions .btn-group-toggle>button input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-control-plaintext,.input-group>.custom-select,.input-group>.custom-file{position:relative;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.form-control+.form-control,.input-group>.form-control+.custom-select,.input-group>.form-control+.custom-file,.input-group>.form-control-plaintext+.form-control,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.custom-file,.input-group>.custom-select+.form-control,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.custom-file,.input-group>.custom-file+.form-control,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.custom-file{margin-left:-1px}.input-group>.form-control:focus,.input-group>.custom-select:focus,.input-group>.custom-file .custom-file-input:focus~.custom-file-label{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.form-control:not(:first-child),.input-group>.custom-select:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group:not(.has-validation)>.form-control:not(:last-child),.input-group:not(.has-validation)>.custom-select:not(:last-child),.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.form-control:nth-last-child(n+3),.input-group.has-validation>.custom-select:nth-last-child(n+3),.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-prepend,.input-group-append{display:flex}.input-group-prepend .btn,.input-group-prepend .swal2-popup .swal2-actions button,.swal2-popup .swal2-actions .input-group-prepend button,.input-group-append .btn,.input-group-append .swal2-popup .swal2-actions button,.swal2-popup .swal2-actions .input-group-append button{position:relative;z-index:2}.input-group-prepend .btn:focus,.input-group-prepend .swal2-popup .swal2-actions button:focus,.swal2-popup .swal2-actions .input-group-prepend button:focus,.input-group-append .btn:focus,.input-group-append .swal2-popup .swal2-actions button:focus,.swal2-popup .swal2-actions .input-group-append button:focus{z-index:3}.input-group-prepend .btn+.btn,.input-group-prepend .swal2-popup .swal2-actions button+.btn,.swal2-popup .swal2-actions .input-group-prepend button+.btn,.input-group-prepend .swal2-popup .swal2-actions .btn+button,.swal2-popup .swal2-actions .input-group-prepend .btn+button,.input-group-prepend .swal2-popup .swal2-actions button+button,.swal2-popup .swal2-actions .input-group-prepend button+button,.input-group-prepend .btn+.input-group-text,.input-group-prepend .swal2-popup .swal2-actions button+.input-group-text,.swal2-popup .swal2-actions .input-group-prepend button+.input-group-text,.input-group-prepend .input-group-text+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .swal2-popup .swal2-actions .input-group-text+button,.swal2-popup .swal2-actions .input-group-prepend .input-group-text+button,.input-group-append .btn+.btn,.input-group-append .swal2-popup .swal2-actions button+.btn,.swal2-popup .swal2-actions .input-group-append button+.btn,.input-group-append .swal2-popup .swal2-actions .btn+button,.swal2-popup .swal2-actions .input-group-append .btn+button,.input-group-append .swal2-popup .swal2-actions button+button,.swal2-popup .swal2-actions .input-group-append button+button,.input-group-append .btn+.input-group-text,.input-group-append .swal2-popup .swal2-actions button+.input-group-text,.swal2-popup .swal2-actions .input-group-append button+.input-group-text,.input-group-append .input-group-text+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .swal2-popup .swal2-actions .input-group-text+button,.swal2-popup .swal2-actions .input-group-append .input-group-text+button{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=radio],.input-group-text input[type=checkbox]{margin-top:0}.input-group-lg>.form-control:not(textarea),.input-group-lg>.custom-select{height:calc(1.5em + 1rem + 2px)}.input-group-lg>.form-control,.input-group-lg>.custom-select,.input-group-lg>.input-group-prepend>.input-group-text,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.swal2-popup .swal2-actions .input-group-lg>.input-group-prepend>button,.input-group-lg>.input-group-append>.btn,.swal2-popup .swal2-actions .input-group-lg>.input-group-append>button{padding:.5rem 1rem;font-size:1.15rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.form-control:not(textarea),.input-group-sm>.custom-select{height:calc(1.5em + 0.5rem + 2px)}.input-group-sm>.form-control,.input-group-sm>.custom-select,.input-group-sm>.input-group-prepend>.input-group-text,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.swal2-popup .swal2-actions .input-group-sm>.input-group-prepend>button,.input-group-sm>.input-group-append>.btn,.swal2-popup .swal2-actions .input-group-sm>.input-group-append>button{padding:.25rem .5rem;font-size:0.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-prepend>.btn,.swal2-popup .swal2-actions .input-group>.input-group-prepend>button,.input-group>.input-group-prepend>.input-group-text,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.btn,.swal2-popup .swal2-actions .input-group:not(.has-validation)>.input-group-append:not(:last-child)>button,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.input-group-text,.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.btn,.swal2-popup .swal2-actions .input-group.has-validation>.input-group-append:nth-last-child(n+3)>button,.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.swal2-popup .swal2-actions .input-group>.input-group-append:last-child>button:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.swal2-popup .swal2-actions .input-group>.input-group-append>button,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:not(:first-child)>.btn,.swal2-popup .swal2-actions .input-group>.input-group-prepend:not(:first-child)>button,.input-group>.input-group-prepend:not(:first-child)>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.swal2-popup .swal2-actions .input-group>.input-group-prepend:first-child>button:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem;color-adjust:exact}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#175ddc;background-color:#175ddc}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(23,93,220,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#81a9f2}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#afc8f7;border-color:#afc8f7}.custom-control-input[disabled]~.custom-control-label,.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input[disabled]~.custom-control-label::before,.custom-control-input:disabled~.custom-control-label::before{background-color:#e0e0e0}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fbfbfb;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:50%/50% 50% no-repeat}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#175ddc;background-color:#175ddc}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(23,93,220,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(23,93,220,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(23,93,220,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(0.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fbfbfb;transform:translateX(0.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(23,93,220,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + 0.75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fbfbfb url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat;border:1px solid #ced4da;border-radius:.25rem;appearance:none}.custom-select:focus{border-color:#81a9f2;outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fbfbfb}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + 0.5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.15rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + 0.75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + 0.75rem + 2px);margin:0;overflow:hidden;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#81a9f2;box-shadow:0 0 0 .2rem rgba(23,93,220,.25)}.custom-file-input[disabled]~.custom-file-label,.custom-file-input:disabled~.custom-file-label{background-color:#e0e0e0}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + 0.75rem + 2px);padding:.375rem .75rem;overflow:hidden;font-weight:400;line-height:1.5;color:#495057;background-color:#fbfbfb;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + 0.75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(23,93,220,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(23,93,220,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(23,93,220,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;background-color:#175ddc;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media(prefers-reduced-motion: reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#afc8f7}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#175ddc;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media(prefers-reduced-motion: reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#afc8f7}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#175ddc;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media(prefers-reduced-motion: reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#afc8f7}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:hover,.nav-link:focus{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#175ddc}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:.75rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-sm,.navbar .container-md,.navbar .container-lg,.navbar .container-xl{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:0;padding-bottom:0;margin-right:1rem;font-size:2.1875rem;line-height:inherit;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.15rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:hover,.navbar-toggler:focus{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:50%/100% 100% no-repeat}.navbar-nav-scroll{max-height:75vh;overflow-y:auto}@media(max-width: 0.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media(min-width: 1px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media(max-width: 1.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-md,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media(min-width: 2px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-md,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media(max-width: 2.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media(min-width: 3px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media(max-width: 3.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media(min-width: 4px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-sm,.navbar-expand>.container-md,.navbar-expand>.container-lg,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.8rem;padding-left:.8rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-sm,.navbar-expand>.container-md,.navbar-expand>.container-lg,.navbar-expand>.container-xl{flex-wrap:nowrap}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .nav-link.active{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.7)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,.9)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.7);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.7%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.7)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(0.25rem - 1px);border-bottom-left-radius:calc(0.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.6rem}.card-subtitle{margin-top:-0.3rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.6rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.card-footer{padding:.6rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.card-header-tabs{margin-right:-0.625rem;margin-bottom:-0.6rem;margin-left:-0.625rem;border-bottom:0}.card-header-pills{margin-right:-0.625rem;margin-left:-0.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(0.25rem - 1px)}.card-img,.card-img-top,.card-img-bottom{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(0.25rem - 1px);border-bottom-left-radius:calc(0.25rem - 1px)}.card-deck .card{margin-bottom:10px}@media(min-width: 1px){.card-deck{display:flex;flex-flow:row wrap;margin-right:-10px;margin-left:-10px}.card-deck .card{flex:1 0 0%;margin-right:10px;margin-bottom:0;margin-left:10px}}.card-group>.card{margin-bottom:10px}@media(min-width: 1px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.6rem}@media(min-width: 1px){.card-columns{column-count:3;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#175ddc;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#104097;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#175ddc;border-color:#175ddc}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.15rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:0.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.badge{transition:none}}a.badge:hover,a.badge:focus{text-decoration:none}.badge:empty{display:none}.btn .badge,.swal2-popup .swal2-actions button .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#175ddc}a.badge-primary:hover,a.badge-primary:focus{color:#fff;background-color:#1249ae}a.badge-primary:focus,a.badge-primary.focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,.5)}.badge-secondary{color:#212529;background-color:#ced4da}a.badge-secondary:hover,a.badge-secondary:focus{color:#212529;background-color:#b1bbc4}a.badge-secondary:focus,a.badge-secondary.focus{outline:0;box-shadow:0 0 0 .2rem rgba(206,212,218,.5)}.badge-success{color:#fff;background-color:#00a65a}a.badge-success:hover,a.badge-success:focus{color:#fff;background-color:#00733e}a.badge-success:focus,a.badge-success.focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,166,90,.5)}.badge-info{color:#fff;background-color:#555}a.badge-info:hover,a.badge-info:focus{color:#fff;background-color:#3c3c3c}a.badge-info:focus,a.badge-info.focus{outline:0;box-shadow:0 0 0 .2rem rgba(85,85,85,.5)}.badge-warning{color:#fff;background-color:#bf7e16}a.badge-warning:hover,a.badge-warning:focus{color:#fff;background-color:#916011}a.badge-warning:focus,a.badge-warning.focus{outline:0;box-shadow:0 0 0 .2rem rgba(191,126,22,.5)}.badge-danger{color:#fff;background-color:#dd4b39}a.badge-danger:hover,a.badge-danger:focus{color:#fff;background-color:#c23321}a.badge-danger:focus,a.badge-danger.focus{outline:0;box-shadow:0 0 0 .2rem rgba(221,75,57,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:hover,a.badge-light:focus{color:#212529;background-color:#dae0e5}a.badge-light:focus,a.badge-light.focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:hover,a.badge-dark:focus{color:#fff;background-color:#1d2124}a.badge-dark:focus,a.badge-dark.focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.badge-primary-accent{color:#fff;background-color:#1252a3}a.badge-primary-accent:hover,a.badge-primary-accent:focus{color:#fff;background-color:#0d3b75}a.badge-primary-accent:focus,a.badge-primary-accent.focus{outline:0;box-shadow:0 0 0 .2rem rgba(18,82,163,.5)}.badge-secondary-alt{color:#fff;background-color:#1a3b66}a.badge-secondary-alt:hover,a.badge-secondary-alt:focus{color:#fff;background-color:#10233d}a.badge-secondary-alt:focus,a.badge-secondary-alt.focus{outline:0;box-shadow:0 0 0 .2rem rgba(26,59,102,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media(min-width: 1px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#0c3072;background-color:#d1dff8;border-color:#bed2f5}.alert-primary hr{border-top-color:#a8c3f2}.alert-primary .alert-link{color:#071d44}.alert-secondary{color:#6b6e71;background-color:#f5f6f8;border-color:#f1f3f5}.alert-secondary hr{border-top-color:#e2e6ea}.alert-secondary .alert-link{color:#525557}.alert-success{color:#00562f;background-color:#ccedde;border-color:#b8e6d1}.alert-success hr{border-top-color:#a5dfc5}.alert-success .alert-link{color:#002313}.alert-info{color:#2c2c2c;background-color:#ddd;border-color:#cfcfcf}.alert-info hr{border-top-color:#c2c2c2}.alert-info .alert-link{color:#131313}.alert-warning{color:#63420b;background-color:#f2e5d0;border-color:#eddbbe}.alert-warning hr{border-top-color:#e7d0aa}.alert-warning .alert-link{color:#352306}.alert-danger{color:#73271e;background-color:#f8dbd7;border-color:#f5cdc8}.alert-danger hr{border-top-color:#f1b9b2}.alert-danger .alert-link{color:#4b1913}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}.alert-primary-accent{color:#092b55;background-color:#d0dced;border-color:#bdcfe5}.alert-primary-accent hr{border-top-color:#abc2de}.alert-primary-accent .alert-link{color:#041427}.alert-secondary-alt{color:#0e1f35;background-color:#d1d8e0;border-color:#bfc8d4}.alert-secondary-alt hr{border-top-color:#b0bbca}.alert-secondary-alt .alert-link{color:#03070d}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;line-height:0;font-size:0.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#175ddc;transition:width .6s ease}@media(prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-size:1rem 1rem}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media(prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#333;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.6rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#333;background-color:#fff;border-color:rgba(0,0,0,.125)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media(min-width: 1px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 2px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 3px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 4px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#0c3072;background-color:#bed2f5}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#0c3072;background-color:#a8c3f2}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#0c3072;border-color:#0c3072}.list-group-item-secondary{color:#6b6e71;background-color:#f1f3f5}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#6b6e71;background-color:#e2e6ea}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#6b6e71;border-color:#6b6e71}.list-group-item-success{color:#00562f;background-color:#b8e6d1}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#00562f;background-color:#a5dfc5}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#00562f;border-color:#00562f}.list-group-item-info{color:#2c2c2c;background-color:#cfcfcf}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#2c2c2c;background-color:#c2c2c2}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#2c2c2c;border-color:#2c2c2c}.list-group-item-warning{color:#63420b;background-color:#eddbbe}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#63420b;background-color:#e7d0aa}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#63420b;border-color:#63420b}.list-group-item-danger{color:#73271e;background-color:#f5cdc8}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#73271e;background-color:#f1b9b2}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#73271e;border-color:#73271e}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.list-group-item-primary-accent{color:#092b55;background-color:#bdcfe5}.list-group-item-primary-accent.list-group-item-action:hover,.list-group-item-primary-accent.list-group-item-action:focus{color:#092b55;background-color:#abc2de}.list-group-item-primary-accent.list-group-item-action.active{color:#fff;background-color:#092b55;border-color:#092b55}.list-group-item-secondary-alt{color:#0e1f35;background-color:#bfc8d4}.list-group-item-secondary-alt.list-group-item-action:hover,.list-group-item-secondary-alt.list-group-item-action:focus{color:#0e1f35;background-color:#b0bbca}.list-group-item-secondary-alt.list-group-item-action.active{color:#fff;background-color:#0e1f35;border-color:#0e1f35}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):hover,.close:not(:disabled):not(.disabled):focus{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0, -50px)}@media(prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-header,.modal-dialog-scrollable .modal-footer{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.3}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(0.3rem - 1px);border-top-right-radius:calc(0.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(0.3rem - 1px);border-bottom-left-radius:calc(0.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media(min-width: 1px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:min-content}.modal-sm{max-width:300px}}@media(min-width: 3px){.modal-lg,.modal-xl{max-width:800px}}@media(min-width: 4px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:0.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top,.bs-tooltip-auto[x-placement^=top]{padding:.4rem 0}.bs-tooltip-top .arrow,.bs-tooltip-auto[x-placement^=top] .arrow{bottom:0}.bs-tooltip-top .arrow::before,.bs-tooltip-auto[x-placement^=top] .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-right,.bs-tooltip-auto[x-placement^=right]{padding:0 .4rem}.bs-tooltip-right .arrow,.bs-tooltip-auto[x-placement^=right] .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-right .arrow::before,.bs-tooltip-auto[x-placement^=right] .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-bottom,.bs-tooltip-auto[x-placement^=bottom]{padding:.4rem 0}.bs-tooltip-bottom .arrow,.bs-tooltip-auto[x-placement^=bottom] .arrow{top:0}.bs-tooltip-bottom .arrow::before,.bs-tooltip-auto[x-placement^=bottom] .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-left,.bs-tooltip-auto[x-placement^=left]{padding:0 .4rem}.bs-tooltip-left .arrow,.bs-tooltip-auto[x-placement^=left] .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-left .arrow::before,.bs-tooltip-auto[x-placement^=left] .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:0.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::before,.popover .arrow::after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-top,.bs-popover-auto[x-placement^=top]{margin-bottom:.5rem}.bs-popover-top>.arrow,.bs-popover-auto[x-placement^=top]>.arrow{bottom:calc(-0.5rem - 1px)}.bs-popover-top>.arrow::before,.bs-popover-auto[x-placement^=top]>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-top>.arrow::after,.bs-popover-auto[x-placement^=top]>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-right,.bs-popover-auto[x-placement^=right]{margin-left:.5rem}.bs-popover-right>.arrow,.bs-popover-auto[x-placement^=right]>.arrow{left:calc(-0.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-right>.arrow::before,.bs-popover-auto[x-placement^=right]>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-right>.arrow::after,.bs-popover-auto[x-placement^=right]>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-bottom,.bs-popover-auto[x-placement^=bottom]{margin-top:.5rem}.bs-popover-bottom>.arrow,.bs-popover-auto[x-placement^=bottom]>.arrow{top:calc(-0.5rem - 1px)}.bs-popover-bottom>.arrow::before,.bs-popover-auto[x-placement^=bottom]>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-bottom>.arrow::after,.bs-popover-auto[x-placement^=bottom]>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-bottom .popover-header::before,.bs-popover-auto[x-placement^=bottom] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-0.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-left,.bs-popover-auto[x-placement^=left]{margin-right:.5rem}.bs-popover-left>.arrow,.bs-popover-auto[x-placement^=left]>.arrow{right:calc(-0.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-left>.arrow::before,.bs-popover-auto[x-placement^=left]>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-left>.arrow::after,.bs-popover-auto[x-placement^=left]>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(0.3rem - 1px);border-top-right-radius:calc(0.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#333}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media(prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-left),.active.carousel-item-right{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-right),.active.carousel-item-left{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media(prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media(prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:20px;height:20px;background:50%/100% 100% no-repeat}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media(prefers-reduced-motion: reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{animation-duration:1.5s}}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.bg-primary{background-color:#175ddc !important}a.bg-primary:hover,a.bg-primary:focus,button.bg-primary:hover,button.bg-primary:focus{background-color:#1249ae !important}.bg-secondary{background-color:#ced4da !important}a.bg-secondary:hover,a.bg-secondary:focus,button.bg-secondary:hover,button.bg-secondary:focus{background-color:#b1bbc4 !important}.bg-success{background-color:#00a65a !important}a.bg-success:hover,a.bg-success:focus,button.bg-success:hover,button.bg-success:focus{background-color:#00733e !important}.bg-info{background-color:#555 !important}a.bg-info:hover,a.bg-info:focus,button.bg-info:hover,button.bg-info:focus{background-color:#3c3c3c !important}.bg-warning{background-color:#bf7e16 !important}a.bg-warning:hover,a.bg-warning:focus,button.bg-warning:hover,button.bg-warning:focus{background-color:#916011 !important}.bg-danger{background-color:#dd4b39 !important}a.bg-danger:hover,a.bg-danger:focus,button.bg-danger:hover,button.bg-danger:focus{background-color:#c23321 !important}.bg-light{background-color:#f8f9fa !important}a.bg-light:hover,a.bg-light:focus,button.bg-light:hover,button.bg-light:focus{background-color:#dae0e5 !important}.bg-dark{background-color:#343a40 !important}a.bg-dark:hover,a.bg-dark:focus,button.bg-dark:hover,button.bg-dark:focus{background-color:#1d2124 !important}.bg-primary-accent{background-color:#1252a3 !important}a.bg-primary-accent:hover,a.bg-primary-accent:focus,button.bg-primary-accent:hover,button.bg-primary-accent:focus{background-color:#0d3b75 !important}.bg-secondary-alt{background-color:#1a3b66 !important}a.bg-secondary-alt:hover,a.bg-secondary-alt:focus,button.bg-secondary-alt:hover,button.bg-secondary-alt:focus{background-color:#10233d !important}.bg-white{background-color:#fff !important}.bg-transparent{background-color:transparent !important}.border{border:1px solid #dee2e6 !important}.border-top{border-top:1px solid #dee2e6 !important}.border-right{border-right:1px solid #dee2e6 !important}.border-bottom{border-bottom:1px solid #dee2e6 !important}.border-left{border-left:1px solid #dee2e6 !important}.border-0{border:0 !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.border-primary{border-color:#175ddc !important}.border-secondary{border-color:#ced4da !important}.border-success{border-color:#00a65a !important}.border-info{border-color:#555 !important}.border-warning{border-color:#bf7e16 !important}.border-danger{border-color:#dd4b39 !important}.border-light{border-color:#f8f9fa !important}.border-dark{border-color:#343a40 !important}.border-primary-accent{border-color:#1252a3 !important}.border-secondary-alt{border-color:#1a3b66 !important}.border-white{border-color:#fff !important}.rounded-sm{border-radius:.2rem !important}.rounded,app-avatar img,.table.table-list td.table-list-icon img{border-radius:.25rem !important}.rounded-top{border-top-left-radius:.25rem !important;border-top-right-radius:.25rem !important}.rounded-right{border-top-right-radius:.25rem !important;border-bottom-right-radius:.25rem !important}.rounded-bottom{border-bottom-right-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-left{border-top-left-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-lg{border-radius:.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-0{border-radius:0 !important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}@media(min-width: 1px){.d-sm-none{display:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}}@media(min-width: 2px){.d-md-none{display:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}}@media(min-width: 3px){.d-lg-none{display:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}}@media(min-width: 4px){.d-xl-none{display:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}}@media print{.d-print-none{display:none !important}.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.8571428571%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-fill{flex:1 1 auto !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}@media(min-width: 1px){.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}}@media(min-width: 2px){.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}}@media(min-width: 3px){.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}}@media(min-width: 4px){.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}}.float-left{float:left !important}.float-right{float:right !important}.float-none{float:none !important}@media(min-width: 1px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media(min-width: 2px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media(min-width: 3px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media(min-width: 4px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports(position: sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only,.table.table-list tr:not(:hover) td.table-list-options>.dropdown:not(.show) button:not(:focus):not(:active),.table.table-list tr:not(:hover) td.table-list-options>button:not(:focus):not(:active){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175) !important}.shadow-none{box-shadow:none !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mw-100{max-width:100% !important}.mh-100{max-height:100% !important}.min-vw-100{min-width:100vw !important}.min-vh-100{min-height:100vh !important}.vw-100{width:100vw !important}.vh-100{height:100vh !important}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:.25rem !important}.mt-1,.my-1{margin-top:.25rem !important}.mr-1,.mx-1{margin-right:.25rem !important}.mb-1,.my-1{margin-bottom:.25rem !important}.ml-1,.mx-1{margin-left:.25rem !important}.m-2{margin:.5rem !important}.mt-2,.form-check-block .form-check-label>span,.my-2{margin-top:.5rem !important}.mr-2,.mx-2{margin-right:.5rem !important}.mb-2,.my-2{margin-bottom:.5rem !important}.ml-2,.mx-2{margin-left:.5rem !important}.m-3{margin:1rem !important}.mt-3,.form-check-block+.form-check-block:not(.mt-2),.my-3{margin-top:1rem !important}.mr-3,.mx-3{margin-right:1rem !important}.mb-3,.my-3{margin-bottom:1rem !important}.ml-3,.mx-3{margin-left:1rem !important}.m-4{margin:1.5rem !important}.mt-4,.my-4{margin-top:1.5rem !important}.mr-4,.mx-4{margin-right:1.5rem !important}.mb-4,.card-body-header,.my-4{margin-bottom:1.5rem !important}.ml-4,.mx-4{margin-left:1.5rem !important}.m-5{margin:3rem !important}.mt-5,.my-5{margin-top:3rem !important}.mr-5,.mx-5{margin-right:3rem !important}.mb-5,.my-5{margin-bottom:3rem !important}.ml-5,.mx-5{margin-left:3rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:.25rem !important}.pt-1,.py-1{padding-top:.25rem !important}.pr-1,.px-1{padding-right:.25rem !important}.pb-1,.py-1{padding-bottom:.25rem !important}.pl-1,.px-1{padding-left:.25rem !important}.p-2{padding:.5rem !important}.pt-2,.py-2{padding-top:.5rem !important}.pr-2,.px-2{padding-right:.5rem !important}.pb-2,.py-2{padding-bottom:.5rem !important}.pl-2,.px-2{padding-left:.5rem !important}.p-3{padding:1rem !important}.pt-3,.py-3{padding-top:1rem !important}.pr-3,.px-3{padding-right:1rem !important}.pb-3,.py-3{padding-bottom:1rem !important}.pl-3,.px-3{padding-left:1rem !important}.p-4{padding:1.5rem !important}.pt-4,.py-4{padding-top:1.5rem !important}.pr-4,.px-4{padding-right:1.5rem !important}.pb-4,.py-4{padding-bottom:1.5rem !important}.pl-4,.px-4{padding-left:1.5rem !important}.p-5{padding:3rem !important}.pt-5,.py-5{padding-top:3rem !important}.pr-5,.px-5{padding-right:3rem !important}.pb-5,.py-5{padding-bottom:3rem !important}.pl-5,.px-5{padding-left:3rem !important}.m-n1{margin:-0.25rem !important}.mt-n1,.my-n1{margin-top:-0.25rem !important}.mr-n1,.mx-n1{margin-right:-0.25rem !important}.mb-n1,.my-n1{margin-bottom:-0.25rem !important}.ml-n1,.mx-n1{margin-left:-0.25rem !important}.m-n2{margin:-0.5rem !important}.mt-n2,.my-n2{margin-top:-0.5rem !important}.mr-n2,.mx-n2{margin-right:-0.5rem !important}.mb-n2,.my-n2{margin-bottom:-0.5rem !important}.ml-n2,.mx-n2{margin-left:-0.5rem !important}.m-n3{margin:-1rem !important}.mt-n3,.my-n3{margin-top:-1rem !important}.mr-n3,.mx-n3{margin-right:-1rem !important}.mb-n3,.my-n3{margin-bottom:-1rem !important}.ml-n3,.mx-n3{margin-left:-1rem !important}.m-n4{margin:-1.5rem !important}.mt-n4,.my-n4{margin-top:-1.5rem !important}.mr-n4,.mx-n4{margin-right:-1.5rem !important}.mb-n4,.my-n4{margin-bottom:-1.5rem !important}.ml-n4,.mx-n4{margin-left:-1.5rem !important}.m-n5{margin:-3rem !important}.mt-n5,.my-n5{margin-top:-3rem !important}.mr-n5,.mx-n5{margin-right:-3rem !important}.mb-n5,.my-n5{margin-bottom:-3rem !important}.ml-n5,.mx-n5{margin-left:-3rem !important}.m-auto{margin:auto !important}.mt-auto,.my-auto{margin-top:auto !important}.mr-auto,.mx-auto{margin-right:auto !important}.mb-auto,.my-auto{margin-bottom:auto !important}.ml-auto,.mx-auto{margin-left:auto !important}@media(min-width: 1px){.m-sm-0{margin:0 !important}.mt-sm-0,.my-sm-0{margin-top:0 !important}.mr-sm-0,.mx-sm-0{margin-right:0 !important}.mb-sm-0,.my-sm-0{margin-bottom:0 !important}.ml-sm-0,.mx-sm-0{margin-left:0 !important}.m-sm-1{margin:.25rem !important}.mt-sm-1,.my-sm-1{margin-top:.25rem !important}.mr-sm-1,.mx-sm-1{margin-right:.25rem !important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem !important}.ml-sm-1,.mx-sm-1{margin-left:.25rem !important}.m-sm-2{margin:.5rem !important}.mt-sm-2,.my-sm-2{margin-top:.5rem !important}.mr-sm-2,.mx-sm-2{margin-right:.5rem !important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem !important}.ml-sm-2,.mx-sm-2{margin-left:.5rem !important}.m-sm-3{margin:1rem !important}.mt-sm-3,.my-sm-3{margin-top:1rem !important}.mr-sm-3,.mx-sm-3{margin-right:1rem !important}.mb-sm-3,.my-sm-3{margin-bottom:1rem !important}.ml-sm-3,.mx-sm-3{margin-left:1rem !important}.m-sm-4{margin:1.5rem !important}.mt-sm-4,.my-sm-4{margin-top:1.5rem !important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem !important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem !important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem !important}.m-sm-5{margin:3rem !important}.mt-sm-5,.my-sm-5{margin-top:3rem !important}.mr-sm-5,.mx-sm-5{margin-right:3rem !important}.mb-sm-5,.my-sm-5{margin-bottom:3rem !important}.ml-sm-5,.mx-sm-5{margin-left:3rem !important}.p-sm-0{padding:0 !important}.pt-sm-0,.py-sm-0{padding-top:0 !important}.pr-sm-0,.px-sm-0{padding-right:0 !important}.pb-sm-0,.py-sm-0{padding-bottom:0 !important}.pl-sm-0,.px-sm-0{padding-left:0 !important}.p-sm-1{padding:.25rem !important}.pt-sm-1,.py-sm-1{padding-top:.25rem !important}.pr-sm-1,.px-sm-1{padding-right:.25rem !important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem !important}.pl-sm-1,.px-sm-1{padding-left:.25rem !important}.p-sm-2{padding:.5rem !important}.pt-sm-2,.py-sm-2{padding-top:.5rem !important}.pr-sm-2,.px-sm-2{padding-right:.5rem !important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem !important}.pl-sm-2,.px-sm-2{padding-left:.5rem !important}.p-sm-3{padding:1rem !important}.pt-sm-3,.py-sm-3{padding-top:1rem !important}.pr-sm-3,.px-sm-3{padding-right:1rem !important}.pb-sm-3,.py-sm-3{padding-bottom:1rem !important}.pl-sm-3,.px-sm-3{padding-left:1rem !important}.p-sm-4{padding:1.5rem !important}.pt-sm-4,.py-sm-4{padding-top:1.5rem !important}.pr-sm-4,.px-sm-4{padding-right:1.5rem !important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem !important}.pl-sm-4,.px-sm-4{padding-left:1.5rem !important}.p-sm-5{padding:3rem !important}.pt-sm-5,.py-sm-5{padding-top:3rem !important}.pr-sm-5,.px-sm-5{padding-right:3rem !important}.pb-sm-5,.py-sm-5{padding-bottom:3rem !important}.pl-sm-5,.px-sm-5{padding-left:3rem !important}.m-sm-n1{margin:-0.25rem !important}.mt-sm-n1,.my-sm-n1{margin-top:-0.25rem !important}.mr-sm-n1,.mx-sm-n1{margin-right:-0.25rem !important}.mb-sm-n1,.my-sm-n1{margin-bottom:-0.25rem !important}.ml-sm-n1,.mx-sm-n1{margin-left:-0.25rem !important}.m-sm-n2{margin:-0.5rem !important}.mt-sm-n2,.my-sm-n2{margin-top:-0.5rem !important}.mr-sm-n2,.mx-sm-n2{margin-right:-0.5rem !important}.mb-sm-n2,.my-sm-n2{margin-bottom:-0.5rem !important}.ml-sm-n2,.mx-sm-n2{margin-left:-0.5rem !important}.m-sm-n3{margin:-1rem !important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem !important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem !important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem !important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem !important}.m-sm-n4{margin:-1.5rem !important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem !important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem !important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem !important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem !important}.m-sm-n5{margin:-3rem !important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem !important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem !important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem !important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem !important}.m-sm-auto{margin:auto !important}.mt-sm-auto,.my-sm-auto{margin-top:auto !important}.mr-sm-auto,.mx-sm-auto{margin-right:auto !important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto !important}.ml-sm-auto,.mx-sm-auto{margin-left:auto !important}}@media(min-width: 2px){.m-md-0{margin:0 !important}.mt-md-0,.my-md-0{margin-top:0 !important}.mr-md-0,.mx-md-0{margin-right:0 !important}.mb-md-0,.my-md-0{margin-bottom:0 !important}.ml-md-0,.mx-md-0{margin-left:0 !important}.m-md-1{margin:.25rem !important}.mt-md-1,.my-md-1{margin-top:.25rem !important}.mr-md-1,.mx-md-1{margin-right:.25rem !important}.mb-md-1,.my-md-1{margin-bottom:.25rem !important}.ml-md-1,.mx-md-1{margin-left:.25rem !important}.m-md-2{margin:.5rem !important}.mt-md-2,.my-md-2{margin-top:.5rem !important}.mr-md-2,.mx-md-2{margin-right:.5rem !important}.mb-md-2,.my-md-2{margin-bottom:.5rem !important}.ml-md-2,.mx-md-2{margin-left:.5rem !important}.m-md-3{margin:1rem !important}.mt-md-3,.my-md-3{margin-top:1rem !important}.mr-md-3,.mx-md-3{margin-right:1rem !important}.mb-md-3,.my-md-3{margin-bottom:1rem !important}.ml-md-3,.mx-md-3{margin-left:1rem !important}.m-md-4{margin:1.5rem !important}.mt-md-4,.my-md-4{margin-top:1.5rem !important}.mr-md-4,.mx-md-4{margin-right:1.5rem !important}.mb-md-4,.my-md-4{margin-bottom:1.5rem !important}.ml-md-4,.mx-md-4{margin-left:1.5rem !important}.m-md-5{margin:3rem !important}.mt-md-5,.my-md-5{margin-top:3rem !important}.mr-md-5,.mx-md-5{margin-right:3rem !important}.mb-md-5,.my-md-5{margin-bottom:3rem !important}.ml-md-5,.mx-md-5{margin-left:3rem !important}.p-md-0{padding:0 !important}.pt-md-0,.py-md-0{padding-top:0 !important}.pr-md-0,.px-md-0{padding-right:0 !important}.pb-md-0,.py-md-0{padding-bottom:0 !important}.pl-md-0,.px-md-0{padding-left:0 !important}.p-md-1{padding:.25rem !important}.pt-md-1,.py-md-1{padding-top:.25rem !important}.pr-md-1,.px-md-1{padding-right:.25rem !important}.pb-md-1,.py-md-1{padding-bottom:.25rem !important}.pl-md-1,.px-md-1{padding-left:.25rem !important}.p-md-2{padding:.5rem !important}.pt-md-2,.py-md-2{padding-top:.5rem !important}.pr-md-2,.px-md-2{padding-right:.5rem !important}.pb-md-2,.py-md-2{padding-bottom:.5rem !important}.pl-md-2,.px-md-2{padding-left:.5rem !important}.p-md-3{padding:1rem !important}.pt-md-3,.py-md-3{padding-top:1rem !important}.pr-md-3,.px-md-3{padding-right:1rem !important}.pb-md-3,.py-md-3{padding-bottom:1rem !important}.pl-md-3,.px-md-3{padding-left:1rem !important}.p-md-4{padding:1.5rem !important}.pt-md-4,.py-md-4{padding-top:1.5rem !important}.pr-md-4,.px-md-4{padding-right:1.5rem !important}.pb-md-4,.py-md-4{padding-bottom:1.5rem !important}.pl-md-4,.px-md-4{padding-left:1.5rem !important}.p-md-5{padding:3rem !important}.pt-md-5,.py-md-5{padding-top:3rem !important}.pr-md-5,.px-md-5{padding-right:3rem !important}.pb-md-5,.py-md-5{padding-bottom:3rem !important}.pl-md-5,.px-md-5{padding-left:3rem !important}.m-md-n1{margin:-0.25rem !important}.mt-md-n1,.my-md-n1{margin-top:-0.25rem !important}.mr-md-n1,.mx-md-n1{margin-right:-0.25rem !important}.mb-md-n1,.my-md-n1{margin-bottom:-0.25rem !important}.ml-md-n1,.mx-md-n1{margin-left:-0.25rem !important}.m-md-n2{margin:-0.5rem !important}.mt-md-n2,.my-md-n2{margin-top:-0.5rem !important}.mr-md-n2,.mx-md-n2{margin-right:-0.5rem !important}.mb-md-n2,.my-md-n2{margin-bottom:-0.5rem !important}.ml-md-n2,.mx-md-n2{margin-left:-0.5rem !important}.m-md-n3{margin:-1rem !important}.mt-md-n3,.my-md-n3{margin-top:-1rem !important}.mr-md-n3,.mx-md-n3{margin-right:-1rem !important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem !important}.ml-md-n3,.mx-md-n3{margin-left:-1rem !important}.m-md-n4{margin:-1.5rem !important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem !important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem !important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem !important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem !important}.m-md-n5{margin:-3rem !important}.mt-md-n5,.my-md-n5{margin-top:-3rem !important}.mr-md-n5,.mx-md-n5{margin-right:-3rem !important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem !important}.ml-md-n5,.mx-md-n5{margin-left:-3rem !important}.m-md-auto{margin:auto !important}.mt-md-auto,.my-md-auto{margin-top:auto !important}.mr-md-auto,.mx-md-auto{margin-right:auto !important}.mb-md-auto,.my-md-auto{margin-bottom:auto !important}.ml-md-auto,.mx-md-auto{margin-left:auto !important}}@media(min-width: 3px){.m-lg-0{margin:0 !important}.mt-lg-0,.my-lg-0{margin-top:0 !important}.mr-lg-0,.mx-lg-0{margin-right:0 !important}.mb-lg-0,.my-lg-0{margin-bottom:0 !important}.ml-lg-0,.mx-lg-0{margin-left:0 !important}.m-lg-1{margin:.25rem !important}.mt-lg-1,.my-lg-1{margin-top:.25rem !important}.mr-lg-1,.mx-lg-1{margin-right:.25rem !important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem !important}.ml-lg-1,.mx-lg-1{margin-left:.25rem !important}.m-lg-2{margin:.5rem !important}.mt-lg-2,.my-lg-2{margin-top:.5rem !important}.mr-lg-2,.mx-lg-2{margin-right:.5rem !important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem !important}.ml-lg-2,.mx-lg-2{margin-left:.5rem !important}.m-lg-3{margin:1rem !important}.mt-lg-3,.my-lg-3{margin-top:1rem !important}.mr-lg-3,.mx-lg-3{margin-right:1rem !important}.mb-lg-3,.my-lg-3{margin-bottom:1rem !important}.ml-lg-3,.mx-lg-3{margin-left:1rem !important}.m-lg-4{margin:1.5rem !important}.mt-lg-4,.my-lg-4{margin-top:1.5rem !important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem !important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem !important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem !important}.m-lg-5{margin:3rem !important}.mt-lg-5,.my-lg-5{margin-top:3rem !important}.mr-lg-5,.mx-lg-5{margin-right:3rem !important}.mb-lg-5,.my-lg-5{margin-bottom:3rem !important}.ml-lg-5,.mx-lg-5{margin-left:3rem !important}.p-lg-0{padding:0 !important}.pt-lg-0,.py-lg-0{padding-top:0 !important}.pr-lg-0,.px-lg-0{padding-right:0 !important}.pb-lg-0,.py-lg-0{padding-bottom:0 !important}.pl-lg-0,.px-lg-0{padding-left:0 !important}.p-lg-1{padding:.25rem !important}.pt-lg-1,.py-lg-1{padding-top:.25rem !important}.pr-lg-1,.px-lg-1{padding-right:.25rem !important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem !important}.pl-lg-1,.px-lg-1{padding-left:.25rem !important}.p-lg-2{padding:.5rem !important}.pt-lg-2,.py-lg-2{padding-top:.5rem !important}.pr-lg-2,.px-lg-2{padding-right:.5rem !important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem !important}.pl-lg-2,.px-lg-2{padding-left:.5rem !important}.p-lg-3{padding:1rem !important}.pt-lg-3,.py-lg-3{padding-top:1rem !important}.pr-lg-3,.px-lg-3{padding-right:1rem !important}.pb-lg-3,.py-lg-3{padding-bottom:1rem !important}.pl-lg-3,.px-lg-3{padding-left:1rem !important}.p-lg-4{padding:1.5rem !important}.pt-lg-4,.py-lg-4{padding-top:1.5rem !important}.pr-lg-4,.px-lg-4{padding-right:1.5rem !important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem !important}.pl-lg-4,.px-lg-4{padding-left:1.5rem !important}.p-lg-5{padding:3rem !important}.pt-lg-5,.py-lg-5{padding-top:3rem !important}.pr-lg-5,.px-lg-5{padding-right:3rem !important}.pb-lg-5,.py-lg-5{padding-bottom:3rem !important}.pl-lg-5,.px-lg-5{padding-left:3rem !important}.m-lg-n1{margin:-0.25rem !important}.mt-lg-n1,.my-lg-n1{margin-top:-0.25rem !important}.mr-lg-n1,.mx-lg-n1{margin-right:-0.25rem !important}.mb-lg-n1,.my-lg-n1{margin-bottom:-0.25rem !important}.ml-lg-n1,.mx-lg-n1{margin-left:-0.25rem !important}.m-lg-n2{margin:-0.5rem !important}.mt-lg-n2,.my-lg-n2{margin-top:-0.5rem !important}.mr-lg-n2,.mx-lg-n2{margin-right:-0.5rem !important}.mb-lg-n2,.my-lg-n2{margin-bottom:-0.5rem !important}.ml-lg-n2,.mx-lg-n2{margin-left:-0.5rem !important}.m-lg-n3{margin:-1rem !important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem !important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem !important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem !important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem !important}.m-lg-n4{margin:-1.5rem !important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem !important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem !important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem !important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem !important}.m-lg-n5{margin:-3rem !important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem !important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem !important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem !important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem !important}.m-lg-auto{margin:auto !important}.mt-lg-auto,.my-lg-auto{margin-top:auto !important}.mr-lg-auto,.mx-lg-auto{margin-right:auto !important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto !important}.ml-lg-auto,.mx-lg-auto{margin-left:auto !important}}@media(min-width: 4px){.m-xl-0{margin:0 !important}.mt-xl-0,.my-xl-0{margin-top:0 !important}.mr-xl-0,.mx-xl-0{margin-right:0 !important}.mb-xl-0,.my-xl-0{margin-bottom:0 !important}.ml-xl-0,.mx-xl-0{margin-left:0 !important}.m-xl-1{margin:.25rem !important}.mt-xl-1,.my-xl-1{margin-top:.25rem !important}.mr-xl-1,.mx-xl-1{margin-right:.25rem !important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem !important}.ml-xl-1,.mx-xl-1{margin-left:.25rem !important}.m-xl-2{margin:.5rem !important}.mt-xl-2,.my-xl-2{margin-top:.5rem !important}.mr-xl-2,.mx-xl-2{margin-right:.5rem !important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem !important}.ml-xl-2,.mx-xl-2{margin-left:.5rem !important}.m-xl-3{margin:1rem !important}.mt-xl-3,.my-xl-3{margin-top:1rem !important}.mr-xl-3,.mx-xl-3{margin-right:1rem !important}.mb-xl-3,.my-xl-3{margin-bottom:1rem !important}.ml-xl-3,.mx-xl-3{margin-left:1rem !important}.m-xl-4{margin:1.5rem !important}.mt-xl-4,.my-xl-4{margin-top:1.5rem !important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem !important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem !important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem !important}.m-xl-5{margin:3rem !important}.mt-xl-5,.my-xl-5{margin-top:3rem !important}.mr-xl-5,.mx-xl-5{margin-right:3rem !important}.mb-xl-5,.my-xl-5{margin-bottom:3rem !important}.ml-xl-5,.mx-xl-5{margin-left:3rem !important}.p-xl-0{padding:0 !important}.pt-xl-0,.py-xl-0{padding-top:0 !important}.pr-xl-0,.px-xl-0{padding-right:0 !important}.pb-xl-0,.py-xl-0{padding-bottom:0 !important}.pl-xl-0,.px-xl-0{padding-left:0 !important}.p-xl-1{padding:.25rem !important}.pt-xl-1,.py-xl-1{padding-top:.25rem !important}.pr-xl-1,.px-xl-1{padding-right:.25rem !important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem !important}.pl-xl-1,.px-xl-1{padding-left:.25rem !important}.p-xl-2{padding:.5rem !important}.pt-xl-2,.py-xl-2{padding-top:.5rem !important}.pr-xl-2,.px-xl-2{padding-right:.5rem !important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem !important}.pl-xl-2,.px-xl-2{padding-left:.5rem !important}.p-xl-3{padding:1rem !important}.pt-xl-3,.py-xl-3{padding-top:1rem !important}.pr-xl-3,.px-xl-3{padding-right:1rem !important}.pb-xl-3,.py-xl-3{padding-bottom:1rem !important}.pl-xl-3,.px-xl-3{padding-left:1rem !important}.p-xl-4{padding:1.5rem !important}.pt-xl-4,.py-xl-4{padding-top:1.5rem !important}.pr-xl-4,.px-xl-4{padding-right:1.5rem !important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem !important}.pl-xl-4,.px-xl-4{padding-left:1.5rem !important}.p-xl-5{padding:3rem !important}.pt-xl-5,.py-xl-5{padding-top:3rem !important}.pr-xl-5,.px-xl-5{padding-right:3rem !important}.pb-xl-5,.py-xl-5{padding-bottom:3rem !important}.pl-xl-5,.px-xl-5{padding-left:3rem !important}.m-xl-n1{margin:-0.25rem !important}.mt-xl-n1,.my-xl-n1{margin-top:-0.25rem !important}.mr-xl-n1,.mx-xl-n1{margin-right:-0.25rem !important}.mb-xl-n1,.my-xl-n1{margin-bottom:-0.25rem !important}.ml-xl-n1,.mx-xl-n1{margin-left:-0.25rem !important}.m-xl-n2{margin:-0.5rem !important}.mt-xl-n2,.my-xl-n2{margin-top:-0.5rem !important}.mr-xl-n2,.mx-xl-n2{margin-right:-0.5rem !important}.mb-xl-n2,.my-xl-n2{margin-bottom:-0.5rem !important}.ml-xl-n2,.mx-xl-n2{margin-left:-0.5rem !important}.m-xl-n3{margin:-1rem !important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem !important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem !important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem !important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem !important}.m-xl-n4{margin:-1.5rem !important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem !important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem !important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem !important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem !important}.m-xl-n5{margin:-3rem !important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem !important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem !important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem !important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem !important}.m-xl-auto{margin:auto !important}.mt-xl-auto,.my-xl-auto{margin-top:auto !important}.mr-xl-auto,.mx-xl-auto{margin-right:auto !important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto !important}.ml-xl-auto,.mx-xl-auto{margin-left:auto !important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace,.totp .totp-code{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace !important}.text-justify{text-align:justify !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}@media(min-width: 1px){.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}.text-sm-center{text-align:center !important}}@media(min-width: 2px){.text-md-left{text-align:left !important}.text-md-right{text-align:right !important}.text-md-center{text-align:center !important}}@media(min-width: 3px){.text-lg-left{text-align:left !important}.text-lg-right{text-align:right !important}.text-lg-center{text-align:center !important}}@media(min-width: 4px){.text-xl-left{text-align:left !important}.text-xl-right{text-align:right !important}.text-xl-center{text-align:center !important}}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.font-weight-light{font-weight:300 !important}.font-weight-lighter{font-weight:lighter !important}.font-weight-normal{font-weight:400 !important}.font-weight-bold{font-weight:700 !important}.font-weight-bolder{font-weight:bolder !important}.font-italic{font-style:italic !important}.text-white{color:#fff !important}.text-primary{color:#175ddc !important}a.text-primary:hover,a.text-primary:focus{color:#104097 !important}.text-secondary{color:#ced4da !important}a.text-secondary:hover,a.text-secondary:focus{color:#a2aeb9 !important}.text-success{color:#00a65a !important}a.text-success:hover,a.text-success:focus{color:#005a31 !important}.text-info{color:#555 !important}a.text-info:hover,a.text-info:focus{color:#2f2f2f !important}.text-warning{color:#bf7e16 !important}a.text-warning:hover,a.text-warning:focus{color:#7a510e !important}.text-danger{color:#dd4b39 !important}a.text-danger:hover,a.text-danger:focus{color:#ac2d1e !important}.text-light{color:#f8f9fa !important}a.text-light:hover,a.text-light:focus{color:#cbd3da !important}.text-dark{color:#343a40 !important}a.text-dark:hover,a.text-dark:focus{color:#121416 !important}.text-primary-accent{color:#1252a3 !important}a.text-primary-accent:hover,a.text-primary-accent:focus{color:#0a2f5e !important}.text-secondary-alt{color:#1a3b66 !important}a.text-secondary-alt:hover,a.text-secondary-alt:focus{color:#0a1829 !important}.text-body{color:#333 !important}.text-muted,.card-header small,.modal-header small{color:#6c757d !important}.text-black-50{color:rgba(0,0,0,.5) !important}.text-white-50{color:rgba(255,255,255,.5) !important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none !important}.text-break{word-break:break-word !important;word-wrap:break-word !important}.text-reset{color:inherit !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media print{*,*::before,*::after{text-shadow:none !important;box-shadow:none !important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap !important}pre,blockquote{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:3px !important}.container{min-width:3px !important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #dee2e6 !important}.table-dark{color:inherit}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}/*! + * 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:"FontAwesome";src:url(../fonts/fontawesome-webfont.eot);src:url(../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0) format("embedded-opentype"),url(../fonts/fontawesome-webfont.woff2) format("woff2"),url(../fonts/fontawesome-webfont.woff) format("woff"),url(../fonts/fontawesome-webfont.ttf) format("truetype"),url(../fonts/fontawesome-webfont.svg#fontawesomeregular) format("svg");font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857em;text-align:center}.fa-ul{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.fa-li.fa-lg{left:-1.8571428571em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-tv:before,.fa-television:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:""}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-signing:before,.fa-sign-language:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-vcard:before,.fa-address-card:before{content:""}.fa-vcard-o:before,.fa-address-card-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only,.table.table-list tr:not(:hover) td.table-list-options>.dropdown:not(.show) button:not(:focus):not(:active),.table.table-list tr:not(:hover) td.table-list-options>button:not(:focus):not(:active){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.toast{display:flex;flex-direction:row;align-content:center;justify-content:center;position:relative;background-color:#030303}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-wait{background-color:#2f96b4}.toast-warning{background-color:#f89406}.icon-success{background-repeat:no-repeat;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important}.icon-error{background-repeat:no-repeat;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important}.icon-info{background-repeat:no-repeat;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=") !important}.icon-wait{background-repeat:no-repeat;background-image:url("data:image/gif;base64,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") !important}.icon-warning{background-repeat:no-repeat;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important}.toaster-icon{font-weight:normal;color:#fff}.toast-content{flex-grow:1;padding:15px 15px 15px 50px}.toast-title{font-weight:bold}.toast-message{word-wrap:break-word}.toast-message a,.toast-message label{color:#fff}.toast-message a:hover{color:#ccc;text-decoration:none}.toast-close-button,button.toast-close-button{align-self:flex-start;padding:3px;font-size:23px;line-height:90%;font-weight:bold;color:#fff;text-shadow:0 1px 0 #fff;opacity:.7;z-index:999;cursor:pointer;background:transparent;border:0}.toast-close-button:hover,.toast-close-button:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;border:none}.toast-close-button span{display:flex;flex-direction:column;align-items:flex-start}.toast-progress-bar{position:absolute;left:0;bottom:0;height:4px;background-color:#000;opacity:.4}.toast-container{position:fixed;z-index:999999;pointer-events:auto}.toast-container.toast-center,.toast-container.toast-top-center,.toast-container.toast-bottom-center{width:100%;pointer-events:none;left:0;right:0}.toast-container.toast-center>div,.toast-container.toast-top-center>div,.toast-container.toast-bottom-center>div{margin:6px auto;pointer-events:auto}.toast-container.toast-center>button,.toast-container.toast-top-center>button,.toast-container.toast-bottom-center>button{pointer-events:auto}.toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.toast-container>div{margin:0 0 6px;width:300px;border-radius:3px 3px 3px 3px;background-position:15px center;background-repeat:no-repeat;box-shadow:0 0 12px #999;color:#fff;opacity:.8}.toast-container>:hover{box-shadow:0 0 12px #000;opacity:1;cursor:pointer}.toast-container.toast-top-full-width>div,.toast-container.toast-bottom-full-width>div{width:96%;margin:auto}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-center{top:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-center{bottom:12px}.toast-bottom-left{bottom:12px;left:12px}.toast-center{top:45%}.swal2-popup.swal2-toast{flex-direction:column;align-items:stretch;width:auto;padding:1.25em;overflow-y:hidden;background:#fff;box-shadow:0 0 .625em #d9d9d9}.swal2-popup.swal2-toast .swal2-header{flex-direction:row;padding:0}.swal2-popup.swal2-toast .swal2-title{flex-grow:1;justify-content:flex-start;margin:0 .625em;font-size:1em}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.3125em auto;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{position:static;width:.8em;height:.8em;line-height:.8}.swal2-popup.swal2-toast .swal2-content{justify-content:flex-start;margin:0 .625em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container{padding:.625em 0 0}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-icon{width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}@media all and (-ms-high-contrast: none),(-ms-high-contrast: active){.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{font-size:.25em}}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{flex:1;flex-basis:auto !important;align-self:stretch;width:auto;height:2.2em;height:auto;margin:0 .3125em;margin-top:.3125em;padding:0}.swal2-popup.swal2-toast .swal2-styled{margin:.125em .3125em;padding:.3125em .625em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(100,150,200,.5)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.8em;left:-0.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{animation:swal2-toast-hide .1s forwards}.swal2-container{display:flex;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;flex-direction:row;align-items:center;justify-content:center;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:transparent !important}.swal2-container.swal2-top{align-items:flex-start}.swal2-container.swal2-top-start,.swal2-container.swal2-top-left{align-items:flex-start;justify-content:flex-start}.swal2-container.swal2-top-end,.swal2-container.swal2-top-right{align-items:flex-start;justify-content:flex-end}.swal2-container.swal2-center{align-items:center}.swal2-container.swal2-center-start,.swal2-container.swal2-center-left{align-items:center;justify-content:flex-start}.swal2-container.swal2-center-end,.swal2-container.swal2-center-right{align-items:center;justify-content:flex-end}.swal2-container.swal2-bottom{align-items:flex-end}.swal2-container.swal2-bottom-start,.swal2-container.swal2-bottom-left{align-items:flex-end;justify-content:flex-start}.swal2-container.swal2-bottom-end,.swal2-container.swal2-bottom-right{align-items:flex-end;justify-content:flex-end}.swal2-container.swal2-bottom>:first-child,.swal2-container.swal2-bottom-start>:first-child,.swal2-container.swal2-bottom-left>:first-child,.swal2-container.swal2-bottom-end>:first-child,.swal2-container.swal2-bottom-right>:first-child{margin-top:auto}.swal2-container.swal2-grow-fullscreen>.swal2-modal{display:flex !important;flex:1;align-self:stretch;justify-content:center}.swal2-container.swal2-grow-row>.swal2-modal{display:flex !important;flex:1;align-content:center;justify-content:center}.swal2-container.swal2-grow-column{flex:1;flex-direction:column}.swal2-container.swal2-grow-column.swal2-top,.swal2-container.swal2-grow-column.swal2-center,.swal2-container.swal2-grow-column.swal2-bottom{align-items:center}.swal2-container.swal2-grow-column.swal2-top-start,.swal2-container.swal2-grow-column.swal2-center-start,.swal2-container.swal2-grow-column.swal2-bottom-start,.swal2-container.swal2-grow-column.swal2-top-left,.swal2-container.swal2-grow-column.swal2-center-left,.swal2-container.swal2-grow-column.swal2-bottom-left{align-items:flex-start}.swal2-container.swal2-grow-column.swal2-top-end,.swal2-container.swal2-grow-column.swal2-center-end,.swal2-container.swal2-grow-column.swal2-bottom-end,.swal2-container.swal2-grow-column.swal2-top-right,.swal2-container.swal2-grow-column.swal2-center-right,.swal2-container.swal2-grow-column.swal2-bottom-right{align-items:flex-end}.swal2-container.swal2-grow-column>.swal2-modal{display:flex !important;flex:1;align-content:center;justify-content:center}.swal2-container.swal2-no-transition{transition:none !important}.swal2-container:not(.swal2-top):not(.swal2-top-start):not(.swal2-top-end):not(.swal2-top-left):not(.swal2-top-right):not(.swal2-center-start):not(.swal2-center-end):not(.swal2-center-left):not(.swal2-center-right):not(.swal2-bottom):not(.swal2-bottom-start):not(.swal2-bottom-end):not(.swal2-bottom-left):not(.swal2-bottom-right):not(.swal2-grow-fullscreen)>.swal2-modal{margin:auto}@media all and (-ms-high-contrast: none),(-ms-high-contrast: active){.swal2-container .swal2-modal{margin:0 !important}}.swal2-popup{display:none;position:relative;box-sizing:border-box;flex-direction:column;justify-content:center;width:32em;max-width:100%;padding:1.25em;border:none;border-radius:5px;background:#fff;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:none}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-header{display:flex;flex-direction:column;align-items:center;padding:0 1.8em}.swal2-title{position:relative;max-width:100%;margin:0 0 .4em;padding:0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:100%;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:.625em 1.1em;box-shadow:none;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#2778c4;color:#fff;font-size:1em}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#d14529;color:#fff;font-size:1em}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#757575;color:#fff;font-size:1em}.swal2-styled:focus{outline:none;box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1.25em 0 0;padding:1em 0 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;height:.25em;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:1.25em auto}.swal2-close{position:absolute;z-index:2;top:0;right:0;align-items:center;justify-content:center;width:1.2em;height:1.2em;padding:0;overflow:hidden;transition:color .1s ease-out;border:none;border-radius:5px;background:transparent;color:#ccc;font-family:serif;font-size:2.5em;line-height:1.2;cursor:pointer}.swal2-close:hover{transform:none;background:transparent;color:#f27474}.swal2-close:focus{outline:none;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-content{z-index:1;justify-content:center;margin:0;padding:0 1.6em;color:#545454;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;word-wrap:break-word}.swal2-input,.swal2-file,.swal2-textarea,.swal2-select,.swal2-radio,.swal2-checkbox{margin:1em auto}.swal2-input,.swal2-file,.swal2-textarea{box-sizing:border-box;width:100%;transition:border-color .3s,box-shadow .3s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06);color:inherit;font-size:1.125em}.swal2-input.swal2-inputerror,.swal2-file.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}.swal2-input:focus,.swal2-file:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:none;box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-input::placeholder,.swal2-file::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em auto;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-input[type=number]{max-width:10em}.swal2-file{background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-radio,.swal2-checkbox{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-radio label,.swal2-checkbox label{margin:0 .6em;font-size:1.125em}.swal2-radio input,.swal2-checkbox input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto}.swal2-validation-message{align-items:center;justify-content:center;margin:0 -2.7em;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:"!";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:1.25em auto 1.875em;border:0.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-0.25em;left:-0.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:0 0 1.25em;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{animation:swal2-show .3s}.swal2-hide{animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{right:auto;left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@supports(-ms-accelerator: true){.swal2-range input{width:100% !important}.swal2-range output{display:none}}@media all and (-ms-high-contrast: none),(-ms-high-contrast: active){.swal2-range input{width:100% !important}.swal2-range output{display:none}}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-0.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-show{0%{transform:scale(0.7)}45%{transform:scale(1.05)}80%{transform:scale(0.95)}100%{transform:scale(1)}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(0.5);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-0.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-0.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{top:auto;right:auto;bottom:auto;left:auto;max-width:calc(100% - 0.625em * 2);background-color:transparent !important}body.swal2-no-backdrop .swal2-container>.swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}body.swal2-no-backdrop .swal2-container.swal2-top{top:0;left:50%;transform:translateX(-50%)}body.swal2-no-backdrop .swal2-container.swal2-top-start,body.swal2-no-backdrop .swal2-container.swal2-top-left{top:0;left:0}body.swal2-no-backdrop .swal2-container.swal2-top-end,body.swal2-no-backdrop .swal2-container.swal2-top-right{top:0;right:0}body.swal2-no-backdrop .swal2-container.swal2-center{top:50%;left:50%;transform:translate(-50%, -50%)}body.swal2-no-backdrop .swal2-container.swal2-center-start,body.swal2-no-backdrop .swal2-container.swal2-center-left{top:50%;left:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-container.swal2-center-end,body.swal2-no-backdrop .swal2-container.swal2-center-right{top:50%;right:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-container.swal2-bottom{bottom:0;left:50%;transform:translateX(-50%)}body.swal2-no-backdrop .swal2-container.swal2-bottom-start,body.swal2-no-backdrop .swal2-container.swal2-bottom-left{bottom:0;left:0}body.swal2-no-backdrop .swal2-container.swal2-bottom-end,body.swal2-no-backdrop .swal2-container.swal2-bottom-right{right:0;bottom:0}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static !important}}body.swal2-toast-shown .swal2-container{background-color:transparent}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}.toast-container.toast-top-right{top:76px}.toast-container .toast-close-button{margin-right:4px;font-size:18px}.toast-container .toast{opacity:1 !important;background-image:none !important;border-radius:.25rem;box-shadow:0 0 8px rgba(0,0,0,.35);display:flex;align-items:center}.toast-container .toast:hover{box-shadow:0 0 10px rgba(0,0,0,.6)}.toast-container .toast:before{font-family:FontAwesome;font-size:25px;line-height:20px;float:left;color:#fff;margin:auto 0 auto 15px}.toast-container .toast .toast-content{padding:15px}.toast-container .toast .toaster-icon{display:none}.toast-container .toast .toast-message p{margin-bottom:.5rem}.toast-container .toast .toast-message p:last-child{margin-bottom:0}.toast-container .toast.toast-danger,.toast-container .toast.toast-error{background-image:none !important;background-color:#dd4b39}.toast-container .toast.toast-danger:before,.toast-container .toast.toast-error:before{content:""}.toast-container .toast.toast-warning{background-image:none !important;background-color:#bf7e16}.toast-container .toast.toast-warning:before{content:""}.toast-container .toast.toast-info{background-image:none !important;background-color:#555}.toast-container .toast.toast-info:before{content:""}.toast-container .toast.toast-success{background-image:none !important;background-color:#00a65a}.toast-container .toast.toast-success:before{content:""}.swal2-container{background-color:rgba(0,0,0,.3)}.swal2-popup{padding:15px 0 0;background-color:#fff;color:#333;border:1px solid #9a9a9a;border-radius:.3rem;width:34em}.swal2-popup .swal2-header{padding:0 15px}.swal2-popup .swal2-icon{margin:0 auto;width:auto;height:auto;border:none}.swal2-popup .swal2-content{padding-bottom:15px;font-size:1rem;border-bottom:1px solid #dee2e6}.swal2-popup i.swal-custom-icon{display:block;margin:0 auto;font-size:35px}.swal2-popup .swal2-title{padding:10px 0 15px;margin:0;font-size:1.15rem;color:#333}.swal2-popup .swal2-content{font-size:1rem;color:#333;padding:0 15px 15px}.swal2-popup .swal2-actions{padding:15px;margin:0;background-color:#fbfbfb;border-radius:.3rem;display:flex;flex-direction:row;justify-content:flex-start;font-size:1rem}.swal2-popup .swal2-actions button{margin-right:10px}.swal2-popup .swal2-actions button.swal2-confirm{font-weight:bold}.swal2-popup .swal2-actions button.swal2-cancel{background-color:#fff}.swal2-popup .swal2-validation-message{margin:0 -15px}date-input-polyfill[data-open=true]{z-index:10000 !important}html{font-size:14px}body{min-width:1010px}body.layout_frontend{background-color:#ecf0f5}body.full-width:not(.layout_frontend) .container{min-width:980px;width:90%}.page-header,.secondary-header{border-bottom:1px solid #dee2e6;padding-bottom:.6rem;margin-bottom:.5rem}.page-header h1,.page-header h2,.page-header h3,.page-header h4,.secondary-header h1,.secondary-header h2,.secondary-header h3,.secondary-header h4{margin:0}h1 small,h2 small,h3 small,h4 small,h5 small{font-size:80%}input:required,select:required,textarea:required{box-shadow:none}.secondary-header,.spaced-header{margin-top:4rem}.navbar{padding-left:0;padding-right:0}.navbar .dropdown-menu{min-width:200px;max-width:300px}.navbar .dropdown-menu .dropdown-item-text{line-height:1.3}.navbar .dropdown-menu .dropdown-item-text span,.navbar .dropdown-menu .dropdown-item-text small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.navbar .nav-link{font-weight:600}.navbar-brand{margin-top:-20px;margin-bottom:-20px}.dropdown-menu button{cursor:pointer}.container{width:980px;max-width:none !important;margin:0 auto;padding:0}.page-content{margin-top:20px}.footer{margin-top:40px;padding:40px 0 40px 0;border-top:1px solid #dee2e6}.list-group-item.active{border-left:3px solid #175ddc;font-weight:bold;padding-left:calc(1.25rem - 3px)}.card-header,.modal-header{font-weight:bold;text-transform:uppercase}.card-header small,.modal-header small{font-weight:normal;text-transform:none}.card-body-header{font-size:1.15rem}.card ul.fa-ul.card-ul{margin-left:1.9em}.card ul.fa-ul.card-ul li{word-break:break-all}.card ul.fa-ul.card-ul .fa-li{top:4px}.card ul.fa-ul.card-ul.carets{margin-left:1.1em}.card ul.fa-ul.card-ul.carets .fa-li{left:-17px;width:1.1em}.card ul.fa-ul.card-ul ul.carets{margin-left:.85em}.card-org-plans h2{font-size:1.15rem}.modal-dialog{width:500px}.modal-sm{width:300px}.modal-lg{width:800px}.modal-body h3,.modal-body .section-header>*{font-weight:normal;text-transform:uppercase;color:#6c757d}.modal .list-group-flush :first-child{border-top:none}.modal .list-group-flush :last-child{border-bottom:none}.modal-footer{justify-content:flex-start;background-color:#fbfbfb;border-radius:.3rem}label:not(.form-check-label):not(.btn),label.bold{font-weight:600}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:searchfield-cancel-button}.btn[class*=btn-outline-]:not(:hover),.swal2-popup .swal2-actions button[class*=btn-outline-]:not(:hover){border-color:#ced4da;background-color:#fbfbfb}.btn-link:focus,.btn-link.focus{outline-color:-webkit-focus-ring-color;outline-offset:1px;outline-style:auto;outline-width:1px}.btn-outline-secondary,.swal2-popup .swal2-actions button.swal2-cancel{color:#6c757d}.btn-outline-secondary:hover:not(:disabled),.swal2-popup .swal2-actions button.swal2-cancel:hover:not(:disabled){color:#333}.btn-outline-secondary:disabled,.swal2-popup .swal2-actions button.swal2-cancel:disabled{opacity:1}.btn-outline-secondary:focus,.swal2-popup .swal2-actions button.swal2-cancel:focus,.btn-outline-secondary.focus,.swal2-popup .swal2-actions button.focus.swal2-cancel{box-shadow:0 0 0 .2rem rgba(58,117,225,.5)}.btn-submit{position:relative}.btn-submit .fa-spinner{position:absolute;display:none;align-items:center;justify-content:center;bottom:0;top:0;left:0;right:0}.btn-submit:disabled:not(.manual) .fa-spinner,.btn-submit.loading .fa-spinner{display:flex}.btn-submit:disabled:not(.manual) span,.btn-submit.loading span{visibility:hidden}.list-group-item:focus,.list-group-item.focus{z-index:100}.fa-icon-above-input{height:1.5em}.table.table-list thead th{border-top:none}.table.table-list tr:first-child td{border:none}.table.table-list td{vertical-align:middle}.table.table-list td.reduced-lh{line-height:1}.table.table-list td.reduced-lh small{font-size:80%}.table.table-list td small,.table.table-list td>.fa,.table.table-list td .icon{color:#6c757d}.table.table-list td.wrap{word-break:break-all}.table.table-list td.table-list-options{width:76px;max-width:76px;text-align:right;height:50px}.table.table-list td.table-list-options.wider{width:100px;max-width:100px}.table.table-list td.table-list-options .btn,.table.table-list td.table-list-options .swal2-popup .swal2-actions button,.swal2-popup .swal2-actions .table.table-list td.table-list-options button{line-height:1;transition:initial}.table.table-list td.table-list-options .dropdown-menu{line-height:1.5}.table.table-list td.table-list-icon{width:45px;max-width:45px;text-align:center}.table.table-list td.table-list-icon img{max-height:24px}.table.table-list td.table-list-checkbox{width:35px;max-width:35px}.table.table-list td.table-list-strike{color:#6c757d;text-decoration:line-through}.text-lg{font-size:1.15rem}.text-strike{text-decoration:line-through}.font-weight-semibold{font-weight:600}.password-wrapper{word-break:break-all;white-space:pre-wrap;min-width:0}.password-row{min-width:0}.password-number{color:#007fde}.password-special{color:#c40800}app-vault-groupings .card #search,app-org-vault-groupings .card #search,.groupings .card #search{margin-bottom:1rem}app-vault-groupings .card h3,app-org-vault-groupings .card h3,.groupings .card h3{font-weight:normal;text-transform:uppercase;color:#6c757d}app-vault-groupings .card ul:last-child,app-org-vault-groupings .card ul:last-child,.groupings .card ul:last-child{margin-bottom:0}app-vault-groupings .card .card-body a,app-org-vault-groupings .card .card-body a,.groupings .card .card-body a{color:#333}app-vault-groupings .card .card-body a:hover.text-muted,app-org-vault-groupings .card .card-body a:hover.text-muted,.groupings .card .card-body a:hover.text-muted{color:#333 !important}app-vault-groupings .card .show-active,app-org-vault-groupings .card .show-active,.groupings .card .show-active{display:none}app-vault-groupings .card li>.fa,app-vault-groupings .card li>div>.fa,app-org-vault-groupings .card li>.fa,app-org-vault-groupings .card li>div>.fa,.groupings .card li>.fa,.groupings .card li>div>.fa{cursor:pointer}app-vault-groupings .card li.active>.show-active,app-vault-groupings .card li.active>div .show-active,app-org-vault-groupings .card li.active>.show-active,app-org-vault-groupings .card li.active>div .show-active,.groupings .card li.active>.show-active,.groupings .card li.active>div .show-active{display:inline}app-vault-groupings .card li.active>a:first-of-type,app-vault-groupings .card li.active>div a:first-of-type,app-org-vault-groupings .card li.active>a:first-of-type,app-org-vault-groupings .card li.active>div a:first-of-type,.groupings .card li.active>a:first-of-type,.groupings .card li.active>div a:first-of-type{font-weight:bold;color:#175ddc}app-vault-groupings .card li.active>.fa,app-vault-groupings .card li.active>div>.fa,app-org-vault-groupings .card li.active>.fa,app-org-vault-groupings .card li.active>div>.fa,.groupings .card li.active>.fa,.groupings .card li.active>div>.fa{color:#175ddc}app-password-generator #lengthRange{width:100%}app-password-generator .card-password .card-body{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;text-align:center;font-size:1.15rem;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}app-password-generator-history .list-group-item{line-height:1}app-password-generator-history .list-group-item .password{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}app-import textarea{height:150px}app-user-billing .progress{height:20px}app-user-billing .progress .progress-bar{min-width:50px}#duo-frame{background:url(../images/loading.svg) 0 0 no-repeat;height:330px}#duo-frame iframe{width:100%;height:100%;border:none}#web-authn-frame{background:url(../images/loading.svg) 0 0 no-repeat;height:290px}#web-authn-frame iframe{width:100%;height:100%;border:none}#bt-dropin-container{background:url(../images/loading.svg) 0 0 no-repeat;min-height:50px}.braintree-placeholder,.braintree-sheet__header{display:none}.braintree-sheet__content--button{text-align:left;padding:0;min-height:0}.braintree-sheet__container{margin-bottom:0}.braintree-sheet{border:none}.totp .totp-code{font-size:1.2rem}.totp .totp-countdown{margin:3px 3px 0 0;display:block;user-select:none}.totp .totp-countdown .totp-sec{font-size:.85em;position:absolute;line-height:32px;width:32px;text-align:center}.totp .totp-countdown svg{width:32px;height:32px;transform:rotate(-90deg)}.totp .totp-countdown .totp-circle{fill:none;stroke:#175ddc}.totp .totp-countdown .totp-circle.inner{stroke-width:3;stroke-dasharray:78.6;stroke-dashoffset:0}.totp .totp-countdown .totp-circle.outer{stroke-width:2;stroke-dasharray:88;stroke-dashoffset:0}.totp>.align-items-center{margin-bottom:-5px}.totp.low .totp-sec,.totp.low .totp-code{color:#dd4b39}.totp.low .totp-circle{stroke:#dd4b39}.callout{padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid rgba(0,0,0,.125);border-left-width:5px;border-radius:calc(0.25rem - 1px);background-color:#fafafa}.callout .callout-heading{margin-top:0}.callout h3.callout-heading{font-weight:bold;text-transform:uppercase}.callout.callout-primary{border-left-color:#175ddc}.callout.callout-primary .callout-heading{color:#175ddc}.callout.callout-info{border-left-color:#343a40}.callout.callout-info .callout-heading{color:#343a40}.callout.callout-danger{border-left-color:#dd4b39}.callout.callout-danger .callout-heading{color:#dd4b39}.callout.callout-success{border-left-color:#00a65a}.callout.callout-success .callout-heading{color:#00a65a}.callout.callout-warning{border-left-color:#bf7e16}.callout.callout-warning .callout-heading{color:#bf7e16}.list-group-2fa .logo-2fa{min-width:100px}.form-check-block .form-check-label{font-weight:600}.form-check-block .form-check-label>small{display:block;color:#6c757d;font-weight:normal}.form-check-block .form-check-label>span{display:block;font-weight:normal}.form-inline input[type=datetime-local]{width:200px}.form-control.stripe-form-control{padding-top:.55rem}.form-control.stripe-form-control.is-focused{color:#495057;background-color:#fff;border-color:#81a9f2;outline:0;box-shadow:0 0 0 .2rem rgba(23,93,220,.25)}.form-control.stripe-form-control.is-focused.is-invalid{box-shadow:0 0 0 .2rem rgba(221,75,57,.25)}.form-control.stripe-form-control.is-invalid{border-color:#dd4b39}.org-nav{background-color:#fbfbfb;border-bottom:1px solid #dee2e6;height:100px;min-height:100px}.org-nav .container{height:100%}.org-nav .nav-tabs{border-bottom:none}.org-nav .nav-tabs a{color:#333}.org-nav .nav-tabs a:not(.active){border-color:transparent}.org-nav .nav-tabs a.active{border-top:3px solid #175ddc;font-weight:bold;padding-top:calc(0.5rem - 2px)}.org-nav .nav-tabs a.disabled{color:#b4b4b4}.org-nav .org-name{line-height:1}.org-nav .org-name span{font-size:1.15rem;display:block}img.logo{width:284px;height:43px;margin:0 auto;display:block}.min-height-fix{min-height:1px}.overflow-hidden{overflow:hidden}.cdk-drag-preview{z-index:1070 !important;opacity:.8;background-color:#fff;border-radius:.25rem}.cursor-move{cursor:move !important}.layout.enterprise2 header{color:#ced4da;background-color:#175ddc}.layout.enterprise2 header:before{content:"";position:absolute;z-index:-1;width:100%;height:340px;left:0;transform:skewY(-3deg);background:#175ddc}.layout.enterprise2 header img.logo{margin:12px 0 0;width:284px;max-width:284px;height:auto}.layout.enterprise2 h2{color:#fff;font-size:1.8rem;margin:100px 0 150px 0}.layout.enterprise2 p{margin:20px 0 40px 0;font-size:1.4rem}.layout.enterprise2 p:before{content:"/";padding-right:12px}.layout.enterprise2 p:not(.highlight):before{color:#1252a3}.layout.enterprise2 p b:after{content:"⟶";font-size:2rem;padding-left:6px}.layout.enterprise2 blockquote{margin:20px 0 0 0;font-size:1.4rem;padding-right:40px} + +/*# sourceMappingURL=sso.d875a1005df5117243c1.css.map*/ \ No newline at end of file diff --git a/connectors/sso.d875a1005df5117243c1.css.map b/connectors/sso.d875a1005df5117243c1.css.map new file mode 100644 index 00000000..f24679a1 --- /dev/null +++ b/connectors/sso.d875a1005df5117243c1.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/css/webfonts.css","webpack:///./src/scss/styles.scss","webpack:///./node_modules/bootstrap/scss/_root.scss","webpack:///./node_modules/bootstrap/scss/_reboot.scss","webpack:///./node_modules/bootstrap/scss/vendor/_rfs.scss","webpack:///./node_modules/bootstrap/scss/_variables.scss","webpack:///./node_modules/bootstrap/scss/mixins/_hover.scss","webpack:///./node_modules/bootstrap/scss/_type.scss","webpack:///./node_modules/bootstrap/scss/mixins/_lists.scss","webpack:///./node_modules/bootstrap/scss/_images.scss","webpack:///./node_modules/bootstrap/scss/mixins/_image.scss","webpack:///./node_modules/bootstrap/scss/mixins/_border-radius.scss","webpack:///./node_modules/bootstrap/scss/_code.scss","webpack:///./node_modules/bootstrap/scss/_grid.scss","webpack:///./node_modules/bootstrap/scss/mixins/_grid.scss","webpack:///./node_modules/bootstrap/scss/mixins/_breakpoints.scss","webpack:///./node_modules/bootstrap/scss/mixins/_grid-framework.scss","webpack:///./node_modules/bootstrap/scss/_tables.scss","webpack:///./node_modules/bootstrap/scss/mixins/_table-row.scss","webpack:///./node_modules/bootstrap/scss/_forms.scss","webpack:///./node_modules/bootstrap/scss/mixins/_transition.scss","webpack:///./node_modules/bootstrap/scss/mixins/_forms.scss","webpack:///./node_modules/bootstrap/scss/_buttons.scss","webpack:///./node_modules/bootstrap/scss/mixins/_buttons.scss","webpack:///./node_modules/bootstrap/scss/_transitions.scss","webpack:///./node_modules/bootstrap/scss/_dropdown.scss","webpack:///./node_modules/bootstrap/scss/mixins/_caret.scss","webpack:///./node_modules/bootstrap/scss/mixins/_nav-divider.scss","webpack:///./node_modules/bootstrap/scss/_button-group.scss","webpack:///./node_modules/bootstrap/scss/_input-group.scss","webpack:///./node_modules/bootstrap/scss/_custom-forms.scss","webpack:///./node_modules/bootstrap/scss/_nav.scss","webpack:///./node_modules/bootstrap/scss/_navbar.scss","webpack:///./node_modules/bootstrap/scss/_card.scss","webpack:///./node_modules/bootstrap/scss/_breadcrumb.scss","webpack:///./node_modules/bootstrap/scss/_pagination.scss","webpack:///./node_modules/bootstrap/scss/mixins/_pagination.scss","webpack:///./node_modules/bootstrap/scss/_badge.scss","webpack:///./node_modules/bootstrap/scss/mixins/_badge.scss","webpack:///./node_modules/bootstrap/scss/_jumbotron.scss","webpack:///./node_modules/bootstrap/scss/_alert.scss","webpack:///./node_modules/bootstrap/scss/mixins/_alert.scss","webpack:///./node_modules/bootstrap/scss/_progress.scss","webpack:///./node_modules/bootstrap/scss/mixins/_gradients.scss","webpack:///./node_modules/bootstrap/scss/_media.scss","webpack:///./node_modules/bootstrap/scss/_list-group.scss","webpack:///./node_modules/bootstrap/scss/mixins/_list-group.scss","webpack:///./node_modules/bootstrap/scss/_close.scss","webpack:///./node_modules/bootstrap/scss/_modal.scss","webpack:///./node_modules/bootstrap/scss/_tooltip.scss","webpack:///./node_modules/bootstrap/scss/mixins/_reset-text.scss","webpack:///./node_modules/bootstrap/scss/_popover.scss","webpack:///./node_modules/bootstrap/scss/_carousel.scss","webpack:///./node_modules/bootstrap/scss/mixins/_clearfix.scss","webpack:///./node_modules/bootstrap/scss/_spinners.scss","webpack:///./node_modules/bootstrap/scss/utilities/_align.scss","webpack:///./node_modules/bootstrap/scss/mixins/_background-variant.scss","webpack:///./node_modules/bootstrap/scss/utilities/_background.scss","webpack:///./node_modules/bootstrap/scss/utilities/_borders.scss","webpack:///./node_modules/bootstrap/scss/utilities/_display.scss","webpack:///./node_modules/bootstrap/scss/utilities/_embed.scss","webpack:///./node_modules/bootstrap/scss/utilities/_flex.scss","webpack:///./node_modules/bootstrap/scss/utilities/_float.scss","webpack:///./node_modules/bootstrap/scss/utilities/_interactions.scss","webpack:///./node_modules/bootstrap/scss/utilities/_position.scss","webpack:///./node_modules/bootstrap/scss/utilities/_screenreaders.scss","webpack:///./node_modules/bootstrap/scss/mixins/_screen-reader.scss","webpack:///./node_modules/bootstrap/scss/utilities/_shadows.scss","webpack:///./node_modules/bootstrap/scss/utilities/_sizing.scss","webpack:///./node_modules/bootstrap/scss/utilities/_spacing.scss","webpack:///./node_modules/bootstrap/scss/utilities/_stretched-link.scss","webpack:///./node_modules/bootstrap/scss/utilities/_text.scss","webpack:///./node_modules/bootstrap/scss/mixins/_text-truncate.scss","webpack:///./node_modules/bootstrap/scss/mixins/_text-emphasis.scss","webpack:///./node_modules/bootstrap/scss/mixins/_text-hide.scss","webpack:///./node_modules/bootstrap/scss/utilities/_visibility.scss","webpack:///./node_modules/bootstrap/scss/_print.scss","webpack:///./node_modules/font-awesome/scss/font-awesome.scss","webpack:///./node_modules/font-awesome/scss/_path.scss","webpack:///./node_modules/font-awesome/scss/_core.scss","webpack:///./node_modules/font-awesome/scss/_larger.scss","webpack:///./node_modules/font-awesome/scss/_fixed-width.scss","webpack:///./node_modules/font-awesome/scss/_list.scss","webpack:///./node_modules/font-awesome/scss/_variables.scss","webpack:///./node_modules/font-awesome/scss/_bordered-pulled.scss","webpack:///./node_modules/font-awesome/scss/_animated.scss","webpack:///./node_modules/font-awesome/scss/_rotated-flipped.scss","webpack:///./node_modules/font-awesome/scss/_mixins.scss","webpack:///./node_modules/font-awesome/scss/_stacked.scss","webpack:///./node_modules/font-awesome/scss/_icons.scss","webpack:///./node_modules/font-awesome/scss/_screen-reader.scss","webpack:///./node_modules/angular2-toaster/toaster.scss","webpack:///./node_modules/sweetalert2/src/scss/_toasts.scss","webpack:///./node_modules/sweetalert2/src/variables.scss","webpack:///./node_modules/sweetalert2/src/scss/_mixins.scss","webpack:///./node_modules/sweetalert2/src/scss/_core.scss","webpack:///./node_modules/sweetalert2/src/scss/_polyfills.scss","webpack:///./node_modules/sweetalert2/src/scss/_toasts-animations.scss","webpack:///./node_modules/sweetalert2/src/scss/_animations.scss","webpack:///./node_modules/sweetalert2/src/scss/_body.scss","webpack:///./node_modules/sweetalert2/src/scss/_toasts-body.scss","webpack:///./src/scss/plugins.scss","webpack:///./src/scss/register-layout.scss"],"names":[],"mappings":"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,eFhBV,eEgBU,0BFhBV,eEgBU,0BFhBV,SGnDF,UACE,mBZkIO,WJtHI,qBgBPX,cZoV4B,mBYjV1B,6BACA,iBAGF,qBACE,gCACA,oBAGF,4BACE,2BAUF,aZ8T4B,iBYnT9B,wBACE,uCAEA,wBAEE,mDAIA,uBAEE,oGAMJ,QAIE,0CASF,gChBdgB,6BKhDhB,ULKW,iCA4CI,oDiBvDb,wBD8FiC,wFCvF/B,oBDuF2E,mCXxF/E,wBYaqB,2EAMf,wBANe,0DAnBnB,wBD8FiC,gGCvF/B,oBDuF2E,qCXxF/E,wBYaqB,+EAMf,wBANe,oDAnBnB,wBD8FiC,wFCvF/B,oBDuF2E,mCXxF/E,wBYaqB,2EAMf,wBANe,2CAnBnB,wBD8FiC,4ECvF/B,oBDuF2E,gCXxF/E,wBYaqB,qEAMf,wBANe,oDAnBnB,wBD8FiC,wFCvF/B,oBDuF2E,mCXxF/E,wBYaqB,2EAMf,wBANe,iDAnBnB,wBD8FiC,oFCvF/B,oBDuF2E,kCXxF/E,wBYaqB,yEAMf,wBANe,8CAnBnB,wBD8FiC,gFCvF/B,oBDuF2E,iCXxF/E,wBYaqB,uEAMf,wBANe,2CAnBnB,wBD8FiC,4ECvF/B,oBDuF2E,gCXxF/E,wBYaqB,qEAMf,wBANe,yEAnBnB,wBD8FiC,oHCvF/B,oBDuF2E,0CXxF/E,wBYaqB,yFAMf,wBANe,sEAnBnB,wBD8FiC,gHCvF/B,oBDuF2E,yCXxF/E,wBYaqB,uFAMf,wBANe,iDAnBnB,gCjBuDa,kCKjDf,gCYaqB,yEAMf,gCANe,uBDwFnB,UZ1GO,yBAQA,qBAqWmB,wBY3P1B,aZ3GO,yBALA,qBACA,aYuHX,UZ1HW,yBAQA,oDYsHT,oBZ+O4B,4BYzO5B,QACE,qDAIA,sCZiO0B,wCCrW5B,UDLS,wCA4WmB,2BU1S1B,qBEiGA,aAEI,WACA,gBACA,iCACA,sCAGA,QACE,4BF1GN,qBEiGA,aAEI,WACA,gBACA,iCACA,sCAGA,QACE,4BF1GN,qBEiGA,aAEI,WACA,gBACA,iCACA,sCAGA,QACE,4BF1GN,qBEiGA,aAEI,WACA,gBACA,iCACA,sCAGA,QACE,oBATN,aAEI,WACA,gBACA,iCACA,mCAGA,QACE,eE7KV,aACE,WACA,mCd2esC,uBczetC,ef+EiB,gBCsMW,gBAKA,cAtRnB,yBJyCA,4BkBtCT,yBACA,0FAMA,wCCJI,cDdN,eCeQ,4BDMN,4BACE,SACA,8BAIF,iBACE,0BACA,qBEtBF,aACE,sBpB0Ca,qBI6auB,UgBpdpC,2ChByX0B,4BchW5B,alBgBwB,UkBbtB,gDAQF,wBlBIkB,8IkBQlB,eACE,sCAKF,adzDS,yBJyCA,wCkB4BX,aAEE,WACA,iBAUF,gCACE,oCACA,gBACA,kBf3BE,gBC4N0B,oBc5L9B,8BACE,kCACA,kBfjBiB,gBCgJW,oBc1H9B,+BACE,mCACA,mBfxBiB,gBCiJW,yBc9G9B,aACE,WACA,kBACA,gBACA,efvCiB,gBC2MW,WJnRjB,6BkBmHX,yBACA,mBACA,iFAEA,eAEE,eACA,kBAYJ,iCd6VwC,qBc3VtC,mBfhEiB,gBCiJW,oBMxN1B,kBQ6IJ,+BdsVwC,mBcpVtC,kBfxEiB,gBCgJW,oBMvN1B,yDQuJF,WAEE,uBAIJ,WACE,aAQF,kBd2UwC,YcvUxC,aACE,kBd4TsC,WcnTxC,YACE,eACA,kBACA,iBACA,wCAEA,iBAEE,iBACA,aASJ,iBACE,cACA,qBdiSsC,mBc7RxC,iBACE,iBd6RsC,qBc3RtC,4FAGA,advNS,mBc6NX,eACE,oBAGF,mBACE,mBACA,eACA,oBd8QsC,sCc1QtC,eACE,aACA,sBdyQoC,ccvQpC,iBE7MF,YACE,WACA,kBhB2coC,cDjbpC,ce8LqC,gBElNvC,iBACE,SACA,OACA,UACA,aACA,eACA,qBACA,iBACA,mBjB6Be,gBC2MW,WgBrO1B,mCACA,qBV9CA,sEUmDA,QAEE,+HAKF,aAEE,2DA9CF,oBFsOqC,oCdyOD,iRgBvZhC,4BACA,2DACA,gEACA,uEAGF,oBFwKmC,0CEtKjC,2EAhEJ,mChB+coC,kFgBrYhC,6DA1EJ,oBFsOqC,uCdqUG,wjBgBtdpC,yEAGF,oBF8ImC,0CE5IjC,uGAOF,aFqImC,mMEjInC,aAEE,uHAOF,aFwHmC,uIErHjC,oBFqHiC,uJE/GjC,oBACE,yBACqB,mJAKvB,yCACE,+KAGF,oBATuB,2GAmBzB,oBAnByB,uHAwBvB,oBAxBuB,0CA0BrB,mBAvIR,YACE,WACA,kBhB2coC,cDjbpC,ce8LqC,kBElNvC,iBACE,SACA,OACA,UACA,aACA,eACA,qBACA,iBACA,mBjB6Be,gBC2MW,WgBrO1B,oCACA,qBV9CA,0EUmDA,QAEE,+IAKF,aAEE,+DA9CF,oBFsOqC,oCdyOD,4UgBvZhC,4BACA,2DACA,gEACA,2EAGF,oBFwKmC,2CEtKjC,+EAhEJ,mChB+coC,kFgBrYhC,iEA1EJ,oBFsOqC,uCdqUG,mnBgBtdpC,6EAGF,oBF8ImC,2CE5IjC,2GAOF,aFqImC,mNEjInC,aAEE,2HAOF,aFwHmC,2IErHjC,oBFqHiC,2JE/GjC,oBACE,yBACqB,uJAKvB,0CACE,mLAGF,oBATuB,+GAmBzB,oBAnByB,2HAwBvB,oBAxBuB,2CA0BrB,cF+FV,YACE,mBACA,mBACA,0BAKA,UACE,wBJ/NA,mBIoOA,YACE,mBACA,uBACA,gBACA,0BAIF,YACE,cACA,mBACA,mBACA,gBACA,4BAIF,oBACE,WACA,sBACA,sCAIF,oBACE,uDAGF,UAEE,0BAKF,YACE,mBACA,uBACA,WACA,eACA,gCAEF,iBACE,cACA,aACA,oBdgLkC,cc9KlC,8BAGF,kBACE,uBACA,oCAEF,eACE,0CGjVN,oBACE,gBrByDgB,WA/CL,kBqBNX,sBAGA,iBACA,6BACA,6BACA,uBCuFA,enBfiB,gBC2MW,qBMlR1B,8HWCF,wCFCI,wCEdN,eFeQ,sDdTN,ULKW,qBqBMT,yGAGF,SAEE,2CjB8W0B,qHiBzW5B,WjBmZ4B,qGiB7Y5B,cACE,wCAcJ,mBAEE,+DASA,UC3DA,yBlBsEa,gGChEb,mCiBP6D,qBAA0C,qJAYvG,UAEE,yBAd2D,qBAA0C,2CAqBnG,iKAKJ,UAEE,yBlB2CW,gZkBlCb,UAGE,yBAxC+I,qBAA0C,+ZA+CzL,0CAKI,gBDQN,aC3DA,yBlBsEa,2CChEb,sCiBP6D,qBAA0C,2CAYvG,aAEE,yBAd2D,qBAA0C,4CAqBnG,iDAKJ,aAEE,yBlB2CW,mKkBlCb,aAGE,yBAxC+I,qBAA0C,gKA+CzL,2CAKI,cDQN,UC3DA,yBlBsEa,yCChEb,mCiBP6D,qBAA0C,uCAYvG,UAEE,yBAd2D,qBAA0C,2CAqBnG,6CAKJ,UAEE,yBlB2CW,6JkBlCb,UAGE,yBAxC+I,qBAA0C,0JA+CzL,0CAKI,WDQN,UC3DA,sBlBsEa,mCChEb,mCiBP6D,qBAA0C,iCAYvG,UAEE,yBAd2D,qBAA0C,4CAqBnG,uCAKJ,UAEE,sBlB2CW,iJkBlCb,UAGE,yBAxC+I,qBAA0C,iJA+CzL,2CAKI,cDQN,UC3DA,yBlBsEa,yCChEb,mCiBP6D,qBAA0C,uCAYvG,UAEE,yBAd2D,qBAA0C,2CAqBnG,6CAKJ,UAEE,yBlB2CW,6JkBlCb,UAGE,yBAxC+I,qBAA0C,0JA+CzL,0CAKI,aDQN,UC3DA,yBlBsEa,wCChEb,mCiBP6D,qBAA0C,qCAYvG,UAEE,yBAd2D,qBAA0C,2CAqBnG,2CAKJ,UAEE,yBlB2CW,0JkBlCb,UAGE,yBAxC+I,qBAA0C,uJA+CzL,0CAKI,YDQN,aC3DA,yBlBsEa,uCChEb,sCiBP6D,qBAA0C,mCAYvG,aAEE,yBAd2D,qBAA0C,4CAqBnG,yCAKJ,aAEE,yBlB2CW,uJkBlCb,aAGE,yBAxC+I,qBAA0C,oJA+CzL,2CAKI,WDQN,UC3DA,yBlBsEa,sCChEb,mCiBP6D,qBAA0C,iCAYvG,UAEE,yBAd2D,qBAA0C,yCAqBnG,uCAKJ,UAEE,yBlB2CW,oJkBlCb,UAGE,yBAxC+I,qBAA0C,iJA+CzL,wCAKI,qBDQN,UC3DA,yBlBsEa,gDChEb,mCiBP6D,qBAA0C,qDAYvG,UAEE,yBAd2D,qBAA0C,2CAqBnG,2DAKJ,UAEE,yBlB2CW,kLkBlCb,UAGE,yBAxC+I,qBAA0C,+KA+CzL,0CAKI,oBDQN,UC3DA,yBlBsEa,+CChEb,mCiBP6D,qBAA0C,mDAYvG,UAEE,yBAd2D,qBAA0C,0CAqBnG,yDAKJ,UAEE,yBlB2CW,+KkBlCb,UAGE,yBAxC+I,qBAA0C,4KA+CzL,yCAKI,sBDcN,ajBKa,iDChEb,UiBmDkD,yBlBarC,4EkBHb,yCAEE,6DAGF,alBFa,6BkBKX,gKAGF,UAGE,yBlBXW,uMkBeX,yCAKI,wEDzBN,ajBKa,yGChEb,aiBmDkD,yBlBarC,4LkBHb,2CAEE,mLAGF,alBFa,6BkBKX,sZAGF,aAGE,yBlBXW,+ckBeX,2CAKI,sBDzBN,ajBKa,iDChEb,UiBmDkD,yBlBarC,4EkBHb,wCAEE,6DAGF,alBFa,6BkBKX,gKAGF,UAGE,yBlBXW,uMkBeX,wCAKI,mBDzBN,UjBKa,2CChEb,UiBmDkD,sBlBarC,mEkBHb,wCAEE,uDAGF,UlBFa,6BkBKX,uJAGF,UAGE,sBlBXW,2LkBeX,wCAKI,sBDzBN,ajBKa,iDChEb,UiBmDkD,yBlBarC,4EkBHb,0CAEE,6DAGF,alBFa,6BkBKX,gKAGF,UAGE,yBlBXW,uMkBeX,0CAKI,qBDzBN,ajBKa,gDChEb,UiBmDkD,yBlBarC,0EkBHb,yCAEE,2DAGF,alBFa,6BkBKX,6JAGF,UAGE,yBlBXW,oMkBeX,yCAKI,oBDzBN,ajBKa,+CChEb,aiBmDkD,yBlBarC,wEkBHb,2CAEE,yDAGF,alBFa,6BkBKX,0JAGF,aAGE,yBlBXW,iMkBeX,2CAKI,mBDzBN,ajBKa,8CChEb,UiBmDkD,yBlBarC,sEkBHb,wCAEE,uDAGF,alBFa,6BkBKX,uJAGF,UAGE,yBlBXW,8LkBeX,wCAKI,6BDzBN,ajBKa,wDChEb,UiBmDkD,yBlBarC,0FkBHb,yCAEE,2EAGF,alBFa,6BkBKX,qLAGF,UAGE,yBlBXW,4NkBeX,yCAKI,4BDzBN,ajBKa,uDChEb,UiBmDkD,yBlBarC,wFkBHb,yCAEE,yEAGF,alBFa,6BkBKX,kLAGF,UAGE,yBlBXW,yNkBeX,yCAKI,WDdR,ejB6M8B,cAhHY,qBACA,iBCpKxC,aDqKwC,0BACA,iCiBtFxC,yBjBsFwC,uCiBjFxC,ajBpFS,oBiBuFP,6EAWJ,kBCPE,kBnBfiB,gBCgJW,oBMvN1B,6EWiGJ,oBCXE,mBnBfiB,gBCiJW,oBMxN1B,YW0GJ,aACE,WACA,uBAGA,gBjBwT4B,uFiB/S5B,UACE,OE3IJ,8BACE,wCJmBI,MIpBN,eJqBQ,mBIlBN,SACE,sBAKF,YACE,aAIJ,iBACE,SACA,gBACA,4BACA,wCJEI,YINN,eJOQ,yCKpBR,iBAIE,kBAGF,kBACE,yBCoBE,oBACE,mBrBgOwB,sBADA,WqB5NxB,sBAhCJ,oCACA,gBACA,mCACA,+BAqDE,aACE,gBD1CN,iBACE,SACA,OACA,apBypBkC,aoBvpBlC,WACA,gBpBiuBkC,gBoB/tBlC,mBACA,erBgEiB,WHxEN,gBwBWX,gBACA,sBpBtBS,4BoBwBT,iCACA,qBddE,qBcuBA,UACE,OACA,sBAGF,OACE,UACA,wBVYF,uBUnBA,UACE,OACA,yBAGF,OACE,UACA,yBVYF,uBUnBA,UACE,OACA,yBAGF,OACE,UACA,yBVYF,uBUnBA,UACE,OACA,yBAGF,OACE,UACA,yBVYF,uBUnBA,UACE,OACA,yBAGF,OACE,UACA,yBAQJ,QACE,YACA,aACA,sBpB+rBgC,iCqB7tBhC,oBACE,mBrBgOwB,sBADA,WqB5NxB,aAzBJ,oCACA,yBACA,mCACA,uCA8CE,aACE,2BDWJ,KACE,WACA,UACA,aACA,oBpBirBgC,oCqB7tBhC,oBACE,mBrBgOwB,sBADA,WqB5NxB,kCAlBJ,eACA,qCACA,uBACA,0CAuCE,aACE,oCDqBF,gBACE,0BAMJ,KACE,WACA,UACA,aACA,qBpBgqBgC,mCqB7tBhC,oBACE,mBrBgOwB,sBADA,WqB5NxB,mCAWA,YACE,oCAGF,oBACE,oBrB6MsB,sBADA,WqBzMtB,kCA9BN,wBACA,qCACA,yCAiCE,aACE,oCDsCF,gBACE,2IAQJ,UAIE,YACA,mBAKJ,QE9GE,eACA,gBACA,6BACA,gBFkHF,aACE,WACA,oBACA,WACA,gBpBiK4B,WJ9QjB,mBwBgHX,mBAEA,6BACA,SACA,2CnBrHA,aDuvBkC,qBoBlnBhC,iCxB1GqB,6CwB8GvB,UxBxIW,qBwB2IT,gCxB/GsB,iDwBmHxB,apBpJS,oBoBuJP,6BACA,qBAQJ,aACE,kBAIF,aACE,mBpBimBkC,gBoB/lBlC,mBrB3FiB,cC5ER,mBoB0KT,qBAIF,aACE,oBACA,WxB5KW,gC2Bdb,iBAEE,oBACA,sBACA,+IAEA,iBACE,cACA,uKtBCF,SsBII,2fAEF,SAGE,cAMN,YACE,eACA,2BACA,2BAEA,UACE,2IAMF,gBAEE,mQAIF,yBjBXE,6BACA,2NiBeF,wBjBFE,4BACA,wBiBmBJ,sBACE,sBACA,8GAEA,aAGE,0CAGF,cACE,kJAIJ,qBACE,qBACA,kJAGF,oBACE,oBACA,qBAoBF,qBACE,uBACA,uBACA,gHAEA,UAEE,sKAGF,eAEE,uSAIF,4BjBrFE,4BACA,+PiByFF,wBjBxGE,0BACA,+KiB2HF,eAEE,kVAEA,iBAEE,sBACA,oBACA,cCzJN,iBACE,aACA,eACA,oBACA,WACA,uHAEA,iBAIE,cACA,SACA,YACA,gBACA,2gBAEA,gBAGE,0IAKJ,SAGE,oDAIF,SACE,4FAKA,wBlBIA,4BACA,uCkBCA,mBACA,8HAEA,wBlBLA,4BACA,8NkBSA,yBlBxBA,6BACA,qNkB+BA,yBlBhCA,6BACA,0CkB8CJ,YAEE,kRAKA,iBACE,UACA,sTAEA,SACE,uoDAIJ,gBAIE,sBAIJ,sCACA,mCAQA,YACE,mBACA,uBACA,gBACA,ezB7BiB,gBCsMW,gBAKA,cAtRnB,kBwB6GT,mBACA,yBxBnHS,yBwBqHT,qBlB5GE,4EkBgHF,YAEE,4EAUJ,+BxBuWwC,6YwBlWxC,kBAME,kBzBhEiB,gBCgJW,oBMvN1B,4EkB6IJ,iCxBqVwC,6YwBhVxC,oBAME,mBzBjFiB,gBCiJW,oBMxN1B,+DkB8JJ,qBAEE,m9BAWF,yBlB3JI,6BACA,8mBkBqKJ,wBlBxJI,4BACA,iBmBxCJ,iBACE,UACA,cACA,kBACA,oBACA,mBACA,wBAGF,mBACE,kBzByfsC,uByBrfxC,iBACE,OACA,WACA,WzBqfsC,eyBnftC,UACA,6DAEA,UzBxBS,qBAmPmB,oFyBpN5B,0CzBoW4B,yEyB3V5B,oBzBsbsC,2EyBlbtC,UzB5CS,yBA+hBqC,iIyBze5C,azBhDO,4HyBmDL,wB7BPc,uB6BkBpB,iBACE,gBACA,mBAEA,+BAIA,iBACE,WACA,aACA,cACA,WzBwboC,gCyBrbpC,WACA,yB7BpCO,yB6BsCP,8BAKF,iBACE,WACA,aACA,cACA,WzByaoC,uByBtapC,iCACA,gDAUF,oBnBlGE,6EmBuGA,iOACE,oFAKF,oBzB2H0B,4GyBtH1B,8KACE,uFAKF,mCzBoZ4C,6FyBjZ5C,mCzBiZ4C,6CyBtY9C,iBzB2Z8C,0EyBrZ5C,6KACE,oFAKF,mCzB0X4C,gByB/WhD,oBACE,8CAGE,aACE,czBkY0C,mByBhY1C,oBzBiY0C,6CyB5X5C,uBACE,0BACA,uBzB2X0C,iDA5iBrC,oBA2iBqC,kIyBpX1C,wCV/KA,4CUuKF,eVtKI,4EUmLJ,wB7BjJO,8B6BmJL,qFAKF,mCzB+U4C,gByBlUhD,oBACE,WACA,mCzBqRsC,uCyBnRtC,e1BvIiB,gBCsMW,gBAKA,cAtRnB,sByBwNT,yOACA,yBACA,qBnBtNE,gBmByNF,sBAEA,oBzBwPsC,UyBtPpC,2CzBuWgC,iCyB/VhC,azBzOO,yBJyCA,+D6B2MT,WAEE,qBzB+H0B,sByB7H1B,yBAGF,azB5PS,yBAJA,4ByBsQT,YACE,+BAIF,iBACE,0BACA,mBAIJ,iCzB0NwC,mBAxGV,yCACA,mBDpTX,mB0ByMnB,+BzBmNwC,kBApGV,uCACA,kBDzTX,c0BsNnB,iBACE,qBACA,WACA,mCzBiMsC,gByB/LtC,oBAGF,iBACE,UACA,WACA,mCzByLsC,SyBvLtC,gBACA,UACA,6CAEA,oBzBqKsC,2CA3FV,gGyBpE5B,wB7B7QkB,uD6BmRhB,gBzB2Te,2DyBtTjB,yBACE,oBAIJ,iBACE,MACA,QACA,OACA,UACA,mCzBwJsC,uByBtJtC,gBACA,gBzB/D4B,gBAKA,cAtRnB,yBJyCA,yB6B6ST,qBnBlVE,2BmBsVF,iBACE,MACA,QACA,SACA,UACA,cACA,6BzBiIoC,uByB/HpC,gBzB5E0B,cAtRnB,iByBqWP,yBzB1WO,oByB4WP,gCnBnWA,emB8WJ,UACE,cACA,UACA,6BACA,gBACA,qBAEA,SACE,2CAIA,yDzBmOyC,uCyBlOzC,yDzBkOyC,gCyBjOzC,yDzBiOyC,iCyB9N3C,QACE,qCAGF,UzBoN2C,gCyBjNzC,yBzB9J0B,SAkXe,mBM1lBzC,uGmB2YA,gBACA,wCV1YE,oCUiYJ,eVhYM,6CU2YJ,wBzBiNyC,8CyB5M3C,UzB6LkC,aACA,kByB3LhC,ezB4LgC,yBA1lBzB,yByBi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BxBNA,kCACA,8BwBUF,SACE,W9BvCO,yBAmPmB,qD8BtM5B,a9BvCS,oB8ByCP,YAEA,sB9BjDO,qBAGA,2B+BPT,qBACE,kBhCqFe,gBCgJW,kD+B9NxB,4BzBqCF,gCACA,iDyBjCE,6BzBkBF,iCACA,2ByBhCF,oBACE,mBhCqFe,gBCiJW,kD+B/NxB,4BzBqCF,gCACA,iDyBjCE,6BzBkBF,iCACA,Q0B9BJ,oBACE,mBACA,cjCiEE,gBCwN0B,cgCtR5B,kBACA,mBACA,wBACA,qB1BKE,8H0BHF,wCjBKI,OiBfN,ejBgBQ,8BdLN,oB+BGI,cAKJ,YACE,uDAKJ,iBACE,SACA,aAOF,kBhCg4BoC,sCMr5BhC,gB0BgCF,UCjDA,yBjC2Ea,6CC5Db,UgCVI,yBACA,6CAGF,SAEE,0CACA,kBDqCJ,aCjDA,yBjC2Ea,iDC5Db,agCVI,yBACA,iDAGF,SAEE,4CACA,gBDqCJ,UCjDA,yBjC2Ea,6CC5Db,UgCVI,yBACA,6CAGF,SAEE,yCACA,aDqCJ,UCjDA,sBjC2Ea,uCC5Db,UgCVI,yBACA,uCAGF,SAEE,yCACA,gBDqCJ,UCjDA,yBjC2Ea,6CC5Db,UgCVI,yBACA,6CAGF,SAEE,2CACA,eDqCJ,UCjDA,yBjC2Ea,2CC5Db,UgCVI,yBACA,2CAGF,SAEE,0CACA,cDqCJ,aCjDA,yBjC2Ea,yCC5Db,agCVI,yBACA,yCAGF,SAEE,4CACA,aDqCJ,UCjDA,yBjC2Ea,uCC5Db,UgCVI,yBACA,uCAGF,SAEE,yCACA,uBDqCJ,UCjDA,yBjC2Ea,2DC5Db,UgCVI,yBACA,2DAGF,SAEE,0CACA,sBDqCJ,UCjDA,yBjC2Ea,yDC5Db,UgCVI,yBACA,yDAGF,SAEE,0CACA,YCbN,iBACE,mBlCwzBkC,yBAhzBzB,oBMSP,wBI0CA,WwB5DJ,iBAQI,mBAIJ,eACE,eACA,gB5BIE,Q6BdJ,iBACE,uBACA,mBnCw9BkC,6BmCt9BlC,qB7BUE,gB6BLJ,aAEE,aAIF,enC6Q8B,oBmCpQ9B,kBACE,2BAGA,iBACE,MACA,QACA,UACA,uBACA,cACA,gBAUF,aACqH,yBAA5F,qBAA4C,mBC5CrE,wBACE,4BAGF,aACE,kBDsCF,aACqH,yBAA5F,qBAA4C,qBC5CrE,wBACE,8BAGF,aACE,gBDsCF,aACqH,yBAA5F,qBAA4C,mBC5CrE,wBACE,4BAGF,aACE,aDsCF,aACqH,sBAA5F,qBAA4C,gBC5CrE,wBACE,yBAGF,aACE,gBDsCF,aACqH,yBAA5F,qBAA4C,mBC5CrE,wBACE,4BAGF,aACE,eDsCF,aACqH,yBAA5F,qBAA4C,kBC5CrE,wBACE,2BAGF,aACE,cDsCF,aACqH,yBAA5F,qBAA4C,iBC5CrE,wBACE,0BAGF,aACE,aDsCF,aACqH,yBAA5F,qBAA4C,gBC5CrE,wBACE,yBAGF,aACE,uBDsCF,aACqH,yBAA5F,qBAA4C,0BC5CrE,wBACE,mCAGF,aACE,sBDsCF,aACqH,yBAA5F,qBAA4C,yBC5CrE,wBACE,kCAGF,aACE,iCCRF,KACE,8BACA,mCAIJ,YACE,YrCi+BkC,gBqC/9BlC,cACA,kBtC6EiB,yBChFR,qBMSP,e+BCJ,YACE,sBACA,uBACA,gBACA,WrChBS,kBqCkBT,mBACA,yBrCs9BkC,0BqCp9BlC,wCtBRI,csBDN,etBEQ,wBsBUR,oMCYE,0BDVA,wBAIA,iDACE,wCAGE,uBAJJ,cAKM,SE1CR,YACE,uBACA,aAGF,MACE,aCFF,YACE,sBACA,eAGA,gBACA,qBlCQE,yBkCEJ,UACE,cxCPS,mBwCST,6DvCPA,SuCWE,cxCbO,qBwCeP,yBxCrBO,gCwCyBT,U5ChBW,yBIRF,kBwCmCX,iBACE,cACA,sBACA,sBxCxCS,kCwC4CT,8BAEA,8BlC1BE,gCACA,6BkC6BF,kClChBE,kCACA,qDkCmBF,axChDS,oBwCmDP,sBxCzDO,yBwC8DT,SACE,W5CrDS,sBAsBU,8BACU,mC4CoC/B,kBACE,0CAEA,eACE,qBxC4JwB,wBwC7I1B,kBACE,qDAGE,gClC1BJ,0BAZA,oDkC2CI,8BlC3CJ,4BAYA,gDkCoCI,YACE,0DAGF,oBxC2HsB,oBwCzHpB,iEAEA,gBACE,sBxCsHkB,wBUhL1B,0B8BmCA,kBACE,wDAGE,gClC1BJ,0BAZA,uDkC2CI,8BlC3CJ,4BAYA,mDkCoCI,YACE,6DAGF,oBxC2HsB,oBwCzHpB,oEAEA,gBACE,sBxCsHkB,yBUhL1B,0B8BmCA,kBACE,wDAGE,gClC1BJ,0BAZA,uDkC2CI,8BlC3CJ,4BAYA,mDkCoCI,YACE,6DAGF,oBxC2HsB,oBwCzHpB,oEAEA,gBACE,sBxCsHkB,yBUhL1B,0B8BmCA,kBACE,wDAGE,gClC1BJ,0BAZA,uDkC2CI,8BlC3CJ,4BAYA,mDkCoCI,YACE,6DAGF,oBxC2HsB,oBwCzHpB,oEAEA,gBACE,sBxCsHkB,yBUhL1B,0B8BmCA,kBACE,wDAGE,gClC1BJ,0BAZA,uDkC2CI,8BlC3CJ,4BAYA,mDkCoCI,YACE,6DAGF,oBxC2HsB,oBwCzHpB,oEAEA,gBACE,sBxCsHkB,oBwCvG9B,elCnHI,oCkCsHF,oBACE,+CAEA,qBACE,0BCzIJ,aDqJwE,yBAA/B,6GvCxIzC,auCwIwE,yBC9IlE,wDAGF,UzCNK,yBwCiJ+D,iDCrJxE,aDqJwE,yBAA/B,iHvCxIzC,auCwIwE,yBC9IlE,0DAGF,UzCNK,yBwCiJ+D,+CCrJxE,aDqJwE,yBAA/B,6GvCxIzC,auCwIwE,yBC9IlE,wDAGF,UzCNK,yBwCiJ+D,4CCrJxE,aDqJwE,yBAA/B,uGvCxIzC,auCwIwE,yBC9IlE,qDAGF,UzCNK,yBwCiJ+D,+CCrJxE,aDqJwE,yBAA/B,6GvCxIzC,auCwIwE,yBC9IlE,wDAGF,UzCNK,yBwCiJ+D,8CCrJxE,aDqJwE,yBAA/B,2GvCxIzC,auCwIwE,yBC9IlE,uDAGF,UzCNK,yBwCiJ+D,6CCrJxE,aDqJwE,yBAA/B,yGvCxIzC,auCwIwE,yBC9IlE,sDAGF,UzCNK,yBwCiJ+D,4CCrJxE,aDqJwE,yBAA/B,uGvCxIzC,auCwIwE,yBC9IlE,qDAGF,UzCNK,yBwCiJ+D,sDCrJxE,aDqJwE,yBAA/B,2HvCxIzC,auCwIwE,yBC9IlE,+DAGF,UzCNK,yBwCiJ+D,qDCrJxE,aDqJwE,yBAA/B,yHvCxIzC,auCwIwE,yBC9IlE,8DAGF,UzCNK,yBwCiJ+D,6BExJ1E,WACE,iB3CwFiB,gBCuMW,c0C5R5B,W1CaS,yBA2kCyB,W0CrlClC,czCKA,UDKS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CA,yDACA,wDACA,mDAEA,kCACA,wCACA,2CACA,0CACA,yCAGE,+BACE,mBADF,+BACE,iBADF,+BACE,cADF,4BACE,iBADF,+BACE,gBADF,+BACE,eADF,+BACE,cADF,+BACE,wBADF,+BACE,uBADF,+BACE,eAIJ,4BACE,aAOF,8BACE,kEAGF,+BACE,cAGF,wCACE,0CACA,gBAGF,yCACE,6CACA,iBAGF,4CACE,4CACA,eAGF,wCACE,4CACA,aAGF,8BACE,iBAGF,4BACE,eAGF,8BACE,YAGF,0BACE,kBLxEA,aACE,WACA,WACA,SMOE,2W5CiDF,W4CjDE,oY5CiDF,W4CjDE,oY5CiDF,W4CjDE,oY5CiDF,W4CjDE,0XAUN,cAEI,uZCrBJ,iBACE,cACA,WACA,UACA,gBACA,2BAEA,aACE,WACA,4IAGF,iBAKE,MACA,SACA,OACA,WACA,YACA,SACA,iCASA,0BACE,iCADF,kBACE,gCADF,eACE,gCADF,gBACE,WCzBF,2CACA,mDACA,2DACA,oDAEA,uCACA,+CACA,6CACA,sCACA,oCACA,sCACA,wCACA,gDAEA,2DACA,4DACA,2DACA,iEACA,2DAEA,mDACA,oDACA,oDACA,qDACA,oDAEA,uDACA,wDACA,uDACA,6DACA,6DACA,kDAEA,6CACA,iDACA,kDACA,kDACA,mDACA,qD9CYA,a8ClDA,8CACA,sDACA,8DACA,uDAEA,0CACA,kDACA,gDACA,yCACA,uCACA,yCACA,2CACA,mDAEA,8DACA,+DACA,8DACA,oEACA,8DAEA,sDACA,uDACA,uDACA,wDACA,uDAEA,0DACA,2DACA,0DACA,gEACA,gEACA,qDAEA,gDACA,oDACA,qDACA,qDACA,sDACA,sD9CYA,a8ClDA,8CACA,sDACA,8DACA,uDAEA,0CACA,kDACA,gDACA,yCACA,uCACA,yCACA,2CACA,mDAEA,8DACA,+DACA,8DACA,oEACA,8DAEA,sDACA,uDACA,uDACA,wDACA,uDAEA,0DACA,2DACA,0DACA,gEACA,gEACA,qDAEA,gDACA,oDACA,qDACA,qDACA,sDACA,sD9CYA,a8ClDA,8CACA,sDAC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B,iCNsOoB,CMrOpB,4BNuWe,CMtWf,2BNknBc,CMjnBd,6BNsnBgB,CMrnBhB,2BNytBc,CMxtBd,2BNmRc,CMlRd,+BNupBkB,CMtpBlB,yBNqpBY,CMppBZ,8BNspBiB,CMrpBjB,4BNyIe,CMxIf,oDAEkC,WNqqBnB,CMpqBf,kCN8iBqB,CM7iBrB,mCN4iBsB,CM3iBtB,gCN4fmB,CM3fnB,6BNikBgB,CMhkBhB,+BACgC,WNgKnB,CM/Jb,8BN+qBiB,CM9qBjB,2BNwVc,CMvVd,6BNuPgB,CMtPhB,8BNgJiB,CM/IjB,2BNmhBc,CMlhBd,+BNgMkB,CM/LlB,0CNY6B,CMX7B,wCNc2B,CMb3B,4BNqWe,CMpWf,oCNweuB,CMvevB,0CACmC,WNsgBnB,CMrgBhB,8BNggBiB,CM/fjB,+BNwYkB,CMvYlB,2BN2Yc,CM1Yd,2BN4Pc,CM3Pd,iCNoUoB,CMnUpB,iCNitBoB,CMhtBpB,kCN+sBqB,CM9sBrB,gCNgtBmB,CM/sBnB,6BNyegB,CMxehB,8BNwBiB,CMvBjB,0BNymBa,CMxmBb,2BNymBc,CMxmBd,2BNyDc,CMxDd,+BNyDkB,CMxDlB,4BN+de,CM9df,6BN2EgB,CM1EhB,2BN0Pc,CMzPd,2BNiDc,CMhDd,6BN0VgB,CMzVhB,kCNwmBqB,CMvmBrB,iCNwmBoB,CMvmBpB,iCNpCoB,CMqCpB,mCNvCsB,CMwCtB,kCNrCqB,CMsCrB,oCNxCuB,CMyCvB,2BN+Wc,CM9Wd,qCACoC,WN2anB,CM1ajB,6BNsUgB,CMrUhB,mCNkrBsB,CMjrBtB,uDAEsC,WN0bnB,CMzbnB,6BNkbgB,CMjbhB,iCNwXoB,CMvXpB,6BNtDgB,CMuDhB,2BNmnBc,CMlnBd,2CAC4C,WN+anB,CM9azB,qCN8fwB,CM7fxB,qCN+EwB,CM9ExB,6BNzBgB,CM0BhB,oCNmjBuB,CMljBvB,oCNqLuB,CMpLvB,+BNlBkB,CMmBlB,2BNsbc,CMrbd,4BNgae,CM/Zf,2BNmjBc,CMljBd,8BN+NiB,CM9NjB,mCNgLsB,CM/KtB,mCN4iBsB,CM3iBtB,4BN+Ie,CM9If,mCNyEsB,CMxEtB,oCNyEuB,CMxEvB,kCNkbqB,CMjbrB,mCNuXsB,CMtXtB,mCN2lBsB,CM1lBtB,mCN2DsB,CM1DtB,sCNybyB,CMxbzB,kCN0SqB,CMzSrB,iCN0GoB,CMzGpB,qCNulBwB,CMtlBxB,qCNuDwB,CMtDxB,0BNnCa,CMoCb,iCNnDoB,CMoDpB,kCNnDqB,CMoDrB,+BNnDkB,CMoDlB,iCNvDoB,CMwDpB,yCACkC,WN4dnB,CM3df,6BN8IgB,CM7IhB,+BNsFkB,CMrFlB,2BN+Zc,CM9Zd,4BNoWe,CMnWf,+BNpDkB,CMqDlB,yCNuI4B,CMtI5B,2BNkNc,CMjNd,2BN0Sc,CMzSd,2BN6Kc,CM5Kd,0BNyIa,CMxIb,gCNyImB,CMxInB,mDACiD,WNiInB,CMhI9B,4BN+Ye,CM9Yf,gCACA,6BNoagB,CMnahB,8BNgEiB,CM/DjB,6BN6TgB,CM5ThB,iCNuCoB,CMtCpB,mCNmCsB,CMlCtB,8BN+aiB,CM9ajB,oCNkduB,CMjdvB,6BN0KgB,CMzKhB,kCN2KqB,CM1KrB,+BN3EkB,CM4ElB,+BN7EkB,CM8ElB,4CACsC,WNlEnB,CMmEnB,qCN+kBwB,CM9kBxB,sCN4HyB,CM3HzB,mCNTsB,CMUtB,0BN2Qa,CM1Qb,iCACiC,WN6CnB,CM5Cd,+BNkDkB,CMjDlB,kCNsiBqB,CMriBrB,oCNoiBuB,CMniBvB,gCN2emB,CM1enB,8BN8NiB,CM7NjB,+BNockB,CMnclB,sCNuRyB,CMtRzB,iCN6hBoB,CM5hBpB,oCNsGuB,CMrGvB,8BN8biB,CM7bjB,6BNqjBgB,CMpjBhB,oCNgLuB,CM/KvB,6BNukBgB,CMtkBhB,8BNqQiB,CMpQjB,4BNiWe,CMhWf,+BN2dkB,CM1dlB,iCNjDoB,CMkDpB,mCN+VsB,CM9VtB,8BNsjBiB,CMrjBjB,0CACqC,WNgGnB,CM/FlB,6BNoKgB,CMnKhB,6BN0jBgB,CMzjBhB,kCNoCqB,CMnCrB,+BACgC,WN+YnB,CM9Yb,4BNoMe,CMnMf,+BNrDkB,CMsDlB,2BNhFc,CMiFd,kCNrBqB,CMsBrB,mCNoLsB,CMnLtB,kCNkLqB,CMjLrB,gCNmLmB,CMlLnB,kCN+KqB,CM9KrB,wCNrI2B,CMsI3B,yCNjI4B,CMkI5B,sCNjIyB,CMkIzB,wCNzI2B,CM0I3B,4BN2Je,CM1Jf,6BN6lBgB,CM5lBhB,4BNqee,CMpef,6BNyGgB,CMxGhB,gCNzEmB,CM0EnB,iCNlIoB,CMmIpB,kCACkC,WNijBnB,CMhjBf,iCACiC,WN4OnB,CM3Od,4BNde,CMef,4BN0Ge,CMzGf,mCACqC,WN6XnB,CM5XlB,mCACoC,WN2FnB,CM1FjB,gCN6SmB,CM5SnB,oCACqC,WNqGnB,CMpGlB,6BNgbgB,CM/ahB,sDAEiC,WNlInB,CMmId,8BNsOiB,CMrOjB,8BNoOiB,CMnOjB,oCN+buB,CM9bvB,gCN2gBmB,CM1gBnB,4BNuce,CMtcf,4BNyOe,CMxOf,4BN6fe,CM5ff,gCNmTmB,CMlTnB,uCNoT0B,CMnT1B,yCNgI4B,CM/H5B,kCN4HqB,CM3HrB,4BNqQe,CMpQf,iCNpFoB,CMqFpB,+BN9EkB,CM+ElB,iCNrFoB,CMsFpB,kCNrFqB,CMsFrB,8BNhCiB,CMiCjB,oCACiC,WN0YnB,CMzYd,0CACsC,WN8YnB,CM7YnB,uCACqC,WN2YnB,CM1YlB,+BNUkB,CMTlB,+BNuMkB,CMtMlB,uCACiC,WNqfnB,CMpfd,kCACkC,WNoFnB,CMnFf,2CACuC,WN+anB,CM9apB,gCN7CmB,CM8CnB,iCN1CoB,CM2CpB,iCACiC,WNpInB,CMqId,8BN6WiB,CM5WjB,+BNyekB,CMxelB,sCACsC,WNrEnB,CMsEnB,kCNqLqB,CMpLrB,+BNGkB,CMFlB,qCNnEwB,CMoExB,mCNnEsB,CMoEtB,8BNifiB,CMhfjB,kCN8YqB,CM7YrB,+BNyZkB,CMxZlB,6BN9JgB,CM+JhB,6BNlEgB,CMmEhB,8BN1CiB,CM2CjB,kCN8BqB,CM7BrB,iCN1IoB,CM2IpB,iCNsHoB,CMrHpB,gCNrOmB,CMsOnB,6BN4MgB,CM3MhB,kCNUqB,CMTrB,2BN3Kc,CM4Kd,+BNuFkB,CMtFlB,kCN2QqB,CM1QrB,wCNrO2B,CMsO3B,yCNrO4B,CMsO5B,sCNrOyB,CMsOzB,wCNzO2B,CM0O3B,iCNrOoB,CMsOpB,kCNrOqB,CMsOrB,+BNrOkB,CMsOlB,iCNzOoB,CM0OpB,8BNpDiB,CMqDjB,6BN4IgB,CM3IhB,6BNwYgB,CMvYhB,0CACmC,WNuMnB,CMtMhB,+BNzGkB,CM0GlB,iCNyQoB,CMxQpB,kCNyQqB,CMxQrB,8BN+ViB,CM9VjB,6BN9GgB,CM+GhB,uCACkC,WNoRnB,CMnRf,iCN+CoB,CM9CpB,+BNmBkB,CMlBlB,oCNoBuB,CMnBvB,8BNqUiB,CMpUjB,8BN2BiB,CM1BjB,4BNgLe,CM/Kf,8BN2BiB,CM1BjB,iCNuHoB,CMtHpB,6BNMgB,CMLhB,qCNIwB,CMHxB,+BN6XkB,CM5XlB,2BNhHc,CMiHd,+CACsC,WNuQnB,CMtQnB,4EAEwC,WNsVnB,CMrVrB,qCNwIwB,CMvIxB,2BNhGc,CMiGd,gCNvHmB,CMwHnB,0CACyC,WNtJnB,CMuJtB,+BNyOkB,CMxOlB,2BN0Fc,CMzFd,kCN1DqB,CM2DrB,kCNkWqB,CMjWrB,gCN4VmB,CM3VnB,6BNlEgB,CMmEhB,mCNgOsB,CM/NtB,iCN2JoB,CM1JpB,uCN2J0B,CM1J1B,6BNsRgB,CMrRhB,iCN5LoB,CM6LpB,wCNxB2B,CMyB3B,6BNuPgB,CMtPhB,6BN6IgB,CM5IhB,0CN9J6B,CM+J7B,2CN9J8B,CM+J9B,wCN9J2B,CM+J3B,0CNlK6B,CMmK7B,4BN8De,CM7Df,2BNrHc,CMsHd,6BNvSgB,CMwShB,iCN2ZoB,CM1ZpB,+BNhNkB,CMiNlB,iCN7FoB,CM8FpB,iCN7FoB,CM8FpB,iCN+OoB,CM9OpB,kCNiMqB,CMhMrB,6BN6WgB,CM5WhB,mCN0IsB,CMzItB,qCN0IwB,CMzIxB,+BNqFkB,CMpFlB,iCNmFoB,CMlFpB,mCNnLsB,CMoLtB,oCN0KuB,CMzKvB,2CNpF8B,CMqF9B,mCNwPsB,CMvPtB,8BNjJiB,CMkJjB,sDACgD,WN/MnB,CMgN7B,kDAC8C,WN9MnB,CM+M3B,wDACiD,WNjNnB,CMkN9B,+BACgC,WNvGnB,CMwGb,0BNhCa,CMiCb,iCACgC,WNqYnB,CMpYb,gCACgC,WN4CnB,CM3Cb,4DAGgC,WNgDnB,CM/Cb,kDAEgC,WNiNnB,CMhNb,8BACgC,WN+CnB,CM9Cb,kCACgC,WN3PnB,CM4Pb,2BNhGc,CMiGd,gCNpFmB,CMqFnB,qCN0PwB,CMzPxB,sCN0PyB,CMzPzB,sCN0PyB,CMzPzB,uCN0P0B,CMzP1B,uCN6P0B,CM5P1B,wCN6P2B,CM5P3B,gCNkUmB,CMjUnB,kCN8TqB,CM7TrB,qCNyawB,CMxaxB,8BNsaiB,CMrajB,2BN2Zc,CM1Zd,kCN2ZqB,CM1ZrB,mCNoasB,CMnatB,8BNxJiB,CMyJjB,qCN8PwB,CM7PxB,gCNgBmB,CMfnB,6BNpFgB,CMqFhB,0BN3Wa,CM4Wb,gCN/RmB,CMgSnB,uCN/R0B,CMgS1B,6BN+UgB,CM9UhB,oCN+UuB,CM9UvB,sCNgDyB,CM/CzB,oCNkDuB,CMjDvB,sCN+CyB,CM9CzB,uCN+C0B,CM9C1B,4BNjWe,CMkWf,8BNmYiB,CMlYjB,8BN7WiB,CM8WjB,4BNkCe,CMjCf,+BN5KkB,CM6KlB,4BNgNe,CM/Mf,iCNxFoB,CMyFpB,6BN4TgB,CM3ThB,6BNtIgB,CMuIhB,2BN6Cc,CM5Cd,sCACqC,WN5DnB,CM6DlB,4BN8Pe,CM7Pf,6BNuEgB,CMtEhB,8BN9WiB,CM+WjB,0BNtSa,CMuSb,yBNiWY,CMhWZ,4BNuWe,CMtWf,6BN+IgB,CM9IhB,gCNkFmB,CMjFnB,qCN6NwB,CM5NxB,2CN/W8B,CMgX9B,0CNjX6B,CMkX7B,sDACgD,WNzRnB,CM0R7B,mCNnMsB,CMoMtB,iCNiWoB,CMhWpB,mCNoVsB,CMnVtB,uCACgC,WN0SnB,CMzSb,oCN0GuB,CMzGvB,oCN4MuB,CM3MvB,4BNsLe,CMrLf,sCNzLyB,CM0LzB,gCNoWmB,CMnWnB,6BN8DgB,CM7DhB,6DAEuC,WN8SnB,CM7SpB,kDAC2C,WN1FnB,CM2FxB,4BNsWe,CMrWf,6BNlGgB,CMmGhB,6BNgHgB,CM/GhB,oCNiHuB,CMhHvB,yCNyN4B,CMxN5B,kCNuNqB,CMtNrB,gCN/NmB,CMgOnB,2BN5Nc,CM6Nd,oCN2EuB,CM1EvB,qCNyEwB,CMxExB,6BNvNgB,CMwNhB,6BNzCgB,CM0ChB,+BNpCkB,CMqClB,0BNtLa,CMuLb,+BN7UkB,CM8UlB,4BN1Re,CM2Rf,0BNsDa,CMrDb,4BNmLe,CMlLf,2BNrPc,CMsPd,4BNrPe,CMsPf,8BN7WiB,CM8WjB,qCN7WwB,CM8WxB,4BN0Le,CMzLf,mCN0LsB,CMzLtB,8BNyFiB,CMxFjB,qCACgC,WNzUnB,CM0Ub,+BACiC,WN+MnB,CM9Md,2BN4Pc,CM3Pd,8BNuKiB,CMtKjB,iCNtPoB,CMuPpB,iCNiKoB,CMhKpB,+BN9PkB,CM+PlB,iCN/LoB,CMgMpB,kCNxLqB,CMyLrB,mCNrMsB,CMsMtB,wCN/L2B,CMgM3B,0EAEyC,WNxMnB,CMyMtB,gDAC2C,WN9MnB,CM+MxB,gDACyC,WN/MnB,CMgNtB,gDACyC,WNpMnB,CMqMtB,kCNjNqB,CMkNrB,2BNuRc,CMtRd,8BN5SiB,CM6SjB,+BN9EkB,CM+ElB,wGAIsC,WNnEnB,CMoEnB,qCN/TwB,CMgUxB,qDAEkC,WNqDnB,CMpDf,gCACmC,WNnQnB,CMoQhB,iCNzKoB,CM0KpB,0BN3Ka,CM4Kb,2EAEwC,WNxJnB,CMyJrB,oCN2KuB,CM1KvB,yBNiCY,CMhCZ,oCACmC,WN0QnB,CMzQhB,uCACwC,WNVnB,CMWrB,2CAC0C,WNXnB,CMYvB,8BN1IiB,CM2IjB,kCNlVqB,CMmVrB,6BNjJgB,CMkJhB,gCNbmB,CMcnB,8BN+FiB,CM9FjB,gCNuEmB,CMtEnB,uCNuE0B,CMtE1B,2BNzZc,CM0Zd,6CACqC,WN5MnB,CM6MlB,0BN0Ma,CMzMb,iCNxaoB,CMyapB,2BNIc,CMHd,iCNuFoB,CMtFpB,6BN2MgB,CM1MhB,2BN+Qc,CM9Qd,kCNzCqB,CM0CrB,2BNwPc,CMvPd,iCNrZoB,CMsZpB,6BNvBgB,CMwBhB,oCN3LuB,CM4LvB,8BN5XiB,CM6XjB,oCNhYuB,CMiYvB,kCNnYqB,CMoYrB,8BNtYiB,CMuYjB,gCNlYmB,CMmYnB,gCNlYmB,CMmYnB,iCN3boB,CM4bpB,mCN3bsB,CM4btB,4BN+Ke,CM9Kf,gCNnVmB,CMoVnB,yBN9dY,CM+dZ,iCN5RoB,CM6RpB,kCN/CqB,CMgDrB,oCN9buB,CM+bvB,iCNtfoB,CMufpB,gCN/BmB,CMgCnB,iCNzHoB,CM0HpB,6BNvIgB,CMwIhB,oCNvIuB,CMwIvB,iCN4JoB,CM3JpB,gCN4JmB,CM3JnB,8BNxciB,CMycjB,0BNjba,CMkbb,8BNvJiB,CMwJjB,gCN3gBmB,CM4gBnB,yBN7ZY,CM8ZZ,mDAEgC,WNzKnB,CM0Kb,+BNpGkB,CMqGlB,iCNxboB,CMybpB,qCN5WwB,CM6WxB,+BN9VkB,CM+VlB,+BN9PkB,CM+PlB,8BNrJiB,CMsJjB,6BNegB,CMdhB,mCN2BsB,CM1BtB,kCNoCqB,CMnCrB,+BNqCkB,CMpClB,gCN5amB,CM6anB,sCN9ayB,CM+azB,8BN/ViB,CMgWjB,2BNoBc,CMnBd,kCN8KqB,CM7KrB,iCN/FoB,CMgGpB,kCN6EqB,CM5ErB,gCN9MmB,CM+MnB,4BN+Ke,CM9Kf,2BN7Hc,CM8Hd,8BNnHiB,CMoHjB,2CACwC,WNkInB,CMjIrB,sCNkIyB,CMjIzB,mCN0KsB,CMzKtB,kCNlIqB,CMmIrB,iCNyKoB,CMxKpB,kCNnIqB,CMoIrB,oCNlIuB,CMmIvB,oCNpIuB,CMqIvB,6BN1GgB,CM2GhB,iCN7QoB,CM8QpB,wCN1U2B,CM2U3B,kCNzEqB,CM0ErB,+BNkLkB,CMjLlB,6BNXgB,CMYhB,gCNuJmB,CMtJnB,iCNwJoB,CMvJpB,gCACgC,WN/fnB,CMggBb,8BN4JiB,CM3JjB,4BN8Ge,CM7Gf,6BNwDgB,CMvDhB,6BN9IgB,CM+IhB,sCACyC,WN0LnB,CMzLtB,oCNjHuB,CMkHvB,+BNrHkB,CMsHlB,mCNnWsB,CMoWtB,gEAEyC,WN/gBnB,CMghBtB,uDACmD,WN9gBnB,CM+gBhC,6CACyC,WNlhBnB,CMmhBtB,gDAC4C,WNnhBnB,CMohBzB,8CAC0C,WNxhBnB,CMyhBvB,oCN3IuB,CM4IvB,+BN3OkB,CM4OlB,mCNxIsB,CMyItB,qCNxIwB,CMyIxB,kCNwBqB,CMvBrB,oCNwBuB,CMvBvB,6BN/dgB,CMgehB,qCNlewB,CMmexB,4BNpce,CMqcf,oCNljBuB,CMmjBvB,kCNxPqB,CMyPrB,kDAC4C,WNzPnB,CM0PzB,iDAC2C,WN7PnB,CM8PxB,gDAC0C,WNhQnB,CMiQvB,gCNrQmB,CMsQnB,8CACwC,WNxRnB,CMyRrB,+CACyC,WN7RnB,CM8RtB,sCN1RyB,CM2RzB,oCNpSuB,CMqSvB,mCN3RsB,CM4RtB,qCN/RwB,CMgSxB,mCNjSsB,CMkStB,gCN+DmB,CM9DnB,iCN/FoB,CMgGpB,uCN/b0B,CMgc1B,yBNtUY,CMuUZ,gCNtUmB,CMuUnB,kCNkEqB,CMjErB,oCNrKuB,CMsKvB,2CNrK8B,CMsK9B,iCN5UoB,CM6UpB,kCNwHqB,CMvHrB,6BNnFgB,CMoFhB,6BNzegB,CM0ehB,8BN9WiB,CM+WjB,4BNxKe,CMyKf,wCNpQ2B,CMqQ3B,oCACuC,WNSnB,CMRpB,6BNjdgB,CMkdhB,4BNzoBe,CM0oBf,6BN/nBgB,CMgoBhB,sCN3hByB,CM4hBzB,uCN9hB0B,CM+hB1B,uCN5hB0B,CM6hB1B,uCNjiB0B,CMkiB1B,+BNpRkB,CMqRlB,8BN5NiB,CM6NjB,gCN5NmB,CM6NnB,4BN/Ne,CMgOf,0BNlOa,CMmOb,iCNpeoB,CMqepB,mCNpesB,CMqetB,4BNtSe,CMuSf,4BNiFe,CMhFf,gCNlkBmB,CMmkBnB,gCNrXmB,CMsXnB,mCNpIsB,CMqItB,2BNpcc,CMqcd,sCNheyB,CMiezB,+BNpfkB,CMqflB,2BNlNc,CMmNd,mCN1XsB,CM2XtB,0BNoDa,CMnDb,mCN3JsB,CM4JtB,+BNzNkB,CM0NlB,6BNlHgB,CMmHhB,mCN7LsB,CM8LtB,qCN7LwB,CM8LxB,kCN3CqB,CM4CrB,oCN3CuB,CM4CvB,mCNrGsB,CMsGtB,sCNrGyB,CMsGzB,8BN7UiB,CM8UjB,gCNnlBmB,CMolBnB,kCNnlBqB,CMolBrB,8BN/LiB,CMgMjB,6BNlXgB,CMmXhB,iCNkFoB,CMjFpB,8BNmFiB,CMlFjB,6BN9cgB,CM+chB,uCN2B0B,CM1B1B,qCNmEwB,CMlExB,wCNxK2B,CMyK3B,4BN9lBe,CM+lBf,wCNtoB2B,CMuoB3B,2CNqD8B,CMpD9B,8BNxlBiB,CMylBjB,kDN5oBqC,CM6oBrC,2EACgE,WN9qBnB,CM+qB7C,+DAEiC,WNvfnB,CMwfd,4BNhYe,CMiYf,8BNhYiB,CMiYjB,4CAC0C,WN1HnB,CM2HvB,iCNzRoB,CM0RpB,6BNiCgB,CMhChB,oCNiCuB,CMhCvB,+BNlHkB,CMmHlB,qCNlHwB,CMmHxB,sCNlHyB,CMmHzB,iCNrNoB,CMsNpB,kCNpbqB,CMqbrB,4BNmEe,CMlEf,gCNpDmB,CMqDnB,8DACiD,WNzYnB,CM0Y9B,sCACyC,WN7anB,CM8atB,kCNtXqB,CMuXrB,oCNlfuB,CMmfvB,sCNlfyB,CMmfzB,6BNtTgB,CMuThB,mCNptBsB,CMqtBtB,qCNptBwB,CMqtBxB,yCACyC,WNrtBnB,CMstBtB,6CAC2C,WNttBnB,CMutBxB,kCNJqB,CMKrB,oCNJuB,CMKvB,6BNHgB,CMIhB,+BN3WkB,CM4WlB,8CACoC,WN5WnB,CM6WjB,kDACsC,WN7WnB,CM8WnB,4BNtNe,CMuNf,qCN3bwB,CM4bxB,+BNtFkB,CMuFlB,4EAE6C,WNxEnB,CMyE1B,+DACuD,WNvEnB,CMwEpC,qDAC6C,WN3EnB,CM4E1B,wDACgD,WN5EnB,CM6E7B,sDAC8C,WNjFnB,CMkF3B,6BN3KgB,CM4KhB,kDAEiC,WNzrBnB,CM0rBd,8BNlPiB,CMmPjB,sCNKyB,CMJzB,sCNKyB,CMJzB,qCNKwB,CMJxB,mDACyC,WNDnB,CMEtB,uDAC2C,WNFnB,CMGxB,+BNxsBkB,CMysBlB,2BNpbc,CMqbd,2BN1hBc,CM2hBd,2BNxYc,CMyYd,8BN/OiB,CMgPjB,8BNziBiB,CM0iBjB,gCNjUmB,CMkUnB,kCN7KqB,CM8KrB,kCNhIqB,CMiIrB,iCNJoB,CMKpB,6BNxUgB,COzchB,4MH8BE,kBACA,UACA,WACA,UACA,YACA,gBACA,sBACA,SAUA,mDAEE,gBACA,WACA,YACA,SACA,iBACA,UInBJ,OACE,aACA,mBACA,qBACA,uBACA,kBACA,wBA1CgB,CA8ChB,eACE,wBArCa,CAoCf,aACE,wBArCa,CAoCf,YACE,wBArCa,CAoCf,YACE,wBArCa,CAoCf,eACE,wBArCa,CA0Cf,cACE,4BACA,sgBAFF,YACE,4BACA,kzBAFF,WACE,4BACA,0wBAFF,WACE,4BACA,00HAFF,cACE,4BACA,0uBAIJ,cACE,mBACA,UAr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D9B,UFrDoB,CEsDpB,oBFrDqB,CEsDrB,SFrDsB,CEyDlB,2DACE,WAGF,uDACE,yEAGF,wDACE,yEAMR,cACE,aACA,kBFpCyB,CEqCzB,sBFpC6B,CEqC7B,WFpCmB,CEqCnB,YFpCoB,CEqCpB,gBFpCoB,CEqCpB,6DFpCuB,CEqCvB,kBFpC0B,CEqC1B,kBFpC0B,CEqC1B,kBFpC2B,CEqC3B,oDFpC0B,CEuC5B,cACE,cF5DoB,CE6DpB,oBF5DqB,CE6DrB,eF5DwB,CE6DxB,eF5DyB,CE8DzB,8BACE,eAGF,4BAEE,QF9F0B,CE+F1B,mBF9FiC,CE+FjC,mBACA,wBF/FoC,CEgGpC,UF3QkB,CE4QlB,aF/F6B,CEkG/B,yBAEE,QFhGuB,CEiGvB,mBFhG8B,CEiG9B,mBACA,wBFjGiC,CEkGjC,UFrRkB,CEsRlB,aFjG0B,CEoG5B,2BAEE,QFlGyB,CEmGzB,mBFlGgC,CEmGhC,mBACA,wBFnGmC,CEoGnC,UF/RkB,CEgSlB,aFnG4B,CEsG9B,oBACE,YF9FyB,CEgGzB,yCF9F4B,CEiG9B,gCACE,SAIJ,cACE,uBACA,iBFrLoB,CEsLpB,eFrLqB,CEsLrB,0BACA,aFrLmB,CEsLnB,aFrLuB,CEwLzB,oCACE,kBACA,QACA,SACA,OACA,YF1LgC,CE2LhC,gBACA,8BFnToB,CEoTpB,6BFpToB,CEuTtB,0BACE,WACA,YFlMgC,CEmMhC,yBFlMoC,CEqMtC,aACE,eACA,kBF1RmB,CE6RrB,aACE,iBFnM4B,CEoM5B,UACA,KFpMuB,CEqMvB,OFrMuB,CEsMvB,kBF5M+B,CE6M/B,sBF5MmC,CE6MnC,WF5MyB,CE6MzB,YF5M0B,CE6M1B,UACA,gBACA,6BF3M8B,CE4M9B,WF3M0B,CE4M1B,iBF/UoB,CEiVpB,sBF3M8B,CE4M9B,UF3MyB,CE4MzB,iBF3M+B,CE4M/B,eF3M6B,CE4M7B,eFtN+B,CEuN/B,eAEA,mBACE,cF7MiC,CE8MjC,sBF5MkC,CE6MlC,aF5TU,CE+TZ,mBACE,YF9M+B,CE+M/B,+CF9MkC,CEiNpC,+BACE,SAIJ,eACE,UACA,sBF7T8B,CE8T9B,QF7TqB,CE8TrB,eF7TsB,CE8TtB,aF7ToB,CE8TpB,iBF7TwB,CE8TxB,kBF7T0B,CE8T1B,kBF7T0B,CE8T1B,iBF7TyB,CE8TzB,oBF7TwB,CEgU1B,oFAME,eFnUmB,CEsUrB,yCAGE,sBACA,UFzUkB,CE0UlB,0CFjUuB,CEkUvB,wBFxUmB,CEyUnB,qBFxU0B,CEyU1B,kBFtUuB,CEuUvB,0CFzUuB,CE0UvB,aFvUkB,CEwUlB,iBF1UsB,CE4UtB,4FACE,gCACA,sCAGF,2DACE,wBF5UuB,CE6UvB,YF5UwB,CE6UxB,yCF5U2B,CE+U7B,gFACE,WAIJ,aACE,eFpWmB,CEqWnB,eFxaoB,CE0apB,mBACE,UAGF,oBACE,UACA,aFpWgB,CEqWhB,gBACA,kBAGF,uCAEE,cFlXiB,CEmXjB,UACA,iBF/WoB,CEgXpB,mBFrXiB,CEyXrB,aACE,cF1XmB,CE2XnB,eF1XoB,CE4XpB,0BACE,eAIJ,YACE,kBF7XuB,CE8XvB,iBF/XsB,CEkYxB,gBACE,aFxXsB,CEyXtB,aFxXuB,CE2XzB,cACE,cACA,eACA,sBACA,kBF1YuB,CE2YvB,aF1YkB,CE2YlB,iBF7YsB,CEgZxB,6BAEE,mBACA,uBACA,eF9doB,CE+dpB,aFnZkB,CEqZlB,yCACE,cACA,iBFzZoB,CE4ZtB,yCACE,cACA,cAIJ,mBACE,aACA,sBFpZkC,CEqZlC,eFtZyB,CEyZ3B,0BACE,kBFtZqC,CEuZrC,sBFtZyC,CEuZzC,eFtZgC,CEuZhC,cFtZiC,CEuZjC,gBACA,kBFvZoC,CEwZpC,UFvZ+B,CEwZ/B,aFvZmC,CEwZnC,eFvZqC,CEyZrC,kCACE,YACA,qBACA,YACA,gBACA,aACA,gBAEA,kBACA,wBF5dU,CE6dV,UFvgBkB,CEwgBlB,gBACA,kBACA,kBAUJ,YACE,kBACA,uBACA,uBACA,SFvfgB,CEwfhB,UFxfgB,CEyfhB,0BFvfkB,CEyflB,gCACA,kBACA,iBFxfwB,CEyfxB,mBF3fuB,CE4fvB,eF/fgB,CEggBhB,eACA,iBAEA,gCACE,aACA,mBACA,gBFlgBmB,CEqgBrB,wBACE,oBFjgBU,CEkgBV,aFlgBU,CEogBV,sCACE,kBACA,YAOF,mDACE,cACA,kBACA,aACA,eACA,eACA,qBACA,wBFphBQ,CEshBR,gEACE,cACA,wBAGF,iEACE,UACA,yBAKJ,wCAEI,uCAEA,sDACE,yCAMR,0BACE,qBACA,aF9iBY,CEijBd,uBACE,qBACA,aFljBS,CEqjBX,2BACE,qBACA,aFtjBa,CEyjBf,0BACE,oBF/jBY,CEgkBZ,aFhkBY,CEkkBZ,+DAEE,kBACA,aACA,aACA,wBACA,kBAEA,4EACE,cACA,eACA,yBACA,+BACA,8BAOF,6EACE,cACA,aACA,yBACA,0BACA,8BAQJ,8CAEE,kBACA,UACA,YACA,aACA,uBACA,WACA,YACA,wCACA,kBAOF,6CAEE,kBACA,UACA,SACA,aACA,cACA,eACA,yBAOF,sDACE,cACA,kBACA,UACA,eACA,qBACA,wBFzoBU,CE2oBV,kEACE,YACA,aACA,eACA,wBAGF,mEACE,YACA,WACA,eACA,yBAWA,kEACE,8CAGF,mEACE,+CAGF,6EACE,2DAOV,sBACE,cFhnB+B,CEinB/B,kBFhnBiC,CEinBjC,cFhnB+B,CEinB/B,iBF/mB4B,CEgnB5B,SF/mB6B,CEgnB7B,kBFlnBgC,CEmnBhC,eFhnBiC,CEknBjC,yBACE,qBACA,kBAGF,2CACE,WACA,cACA,SFxnBwB,CEynBxB,UFxnByB,CEynBzB,iBFxnBgC,CEynBhC,kBFtnB2B,CEunB3B,UF9uBkB,CE+uBlB,eF5nByB,CE6nBzB,kBAEA,sEACE,kBF5nByB,CE8nBzB,2FACE,kBFjoByB,CEkoBzB,UFvvBc,CE0vBhB,gGACE,kBFtoByB,CE2oB/B,gDACE,WACA,cACA,WFlpB4B,CEmpB5B,YACA,cACA,kBF/oB2B,CEopB/B,eACE,wCAGF,YACE,wBFjwBqB,CEowBvB,YACE,kCFpwBqB,CEuwBvB,mBACE,gBAIF,yBACE,kBACA,YACA,WACA,YACA,gBAKA,wBACE,WACA,MF5pBqB,CE+pBvB,qCACE,QACA,UC5yBJ,iCAEI,mBACE,sBAGF,oBACE,cAMN,qEAGI,mBACE,sBAGF,oBACE,cCrBN,4BACE,GACE,6CAGF,IACE,uCAGF,IACE,6CAGF,KACE,uCAIJ,4BACE,KACE,wBACA,WAIJ,gDACE,GACE,YACA,aACA,QAGF,IACE,WACA,YACA,QAGF,IACE,WACA,aACA,cAGF,IACE,aACA,WACA,WAGF,KACE,YACA,aACA,aAIJ,iDACE,GACE,YACA,cACA,QAGF,IACE,WACA,cACA,QAGF,IACE,YACA,QACA,cAGF,KACE,YACA,cACA,eC7EJ,sBACE,GACE,qBAGF,IACE,sBAGF,IACE,sBAGF,KACE,oBAKJ,sBACE,GACE,mBACA,UAGF,KACE,qBACA,WAKJ,0CACE,GACE,aACA,aACA,QAGF,IACE,aACA,YACA,QAGF,IACE,aACA,cACA,cAGF,IACE,QACA,cACA,eAGF,KACE,aACA,aACA,gBAIJ,2CACE,GACE,YACA,cACA,QAGF,IACE,YACA,cACA,QAGF,IACE,aACA,QACA,eAGF,KACE,YACA,WACA,gBAIJ,8CACE,GACE,yBAGF,GACE,yBAGF,IACE,0BAGF,KACE,2BAKJ,sCACE,GACE,mBACA,qBACA,UAGF,IACE,mBACA,qBACA,UAGF,IACE,oBACA,sBAGF,KACE,aACA,mBACA,WAIJ,oCACE,GACE,0BACA,UAGF,KACE,wBACA,WAIJ,gCACE,GACE,uBAGF,KACE,0BJzIF,iEKbI,gBAIJ,uBACE,uBAIA,wCACE,SACA,WACA,YACA,UACA,mCACA,wCAEA,qDACE,mCAGF,kDACE,MACA,SACA,2BAGF,+GAEE,MACA,OAGF,8GAEE,MACA,QAGF,qDACE,QACA,SACA,gCAGF,qHAEE,QACA,OACA,2BAGF,oHAEE,QACA,QACA,2BAGF,qDACE,SACA,SACA,2BAGF,qHAEE,SACA,OAGF,oHAEE,QACA,SAKN,aLlEA,iEKqEM,6BAEA,oFACE,aAGF,kFACE,4BC5FN,wCACE,6BAEA,kDACE,MACA,WACA,YACA,SACA,2BAGF,8GAEE,MACA,QACA,YACA,UAGF,+GAEE,MACA,WACA,YACA,OAGF,qHAEE,QACA,WACA,YACA,OACA,2BAGF,qDACE,QACA,WACA,YACA,SACA,gCAGF,oHAEE,QACA,QAC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","file":"connectors/sso.d875a1005df5117243c1.css","sourcesContent":["@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: italic;\n\tfont-weight: 300;\n\tfont-display: auto;\n\tsrc: url(webfonts/Open_Sans-italic-300.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: italic;\n\tfont-weight: 400;\n\tfont-display: auto;\n\tsrc: url(webfonts/Open_Sans-italic-400.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: italic;\n\tfont-weight: 600;\n\tfont-display: auto;\n\tsrc: url(webfonts/Open_Sans-italic-600.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: italic;\n\tfont-weight: 700;\n\tfont-display: auto;\n\tsrc: url(webfonts/Open_Sans-italic-700.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: italic;\n\tfont-weight: 800;\n\tfont-display: auto;\n\tsrc: url(webfonts/Open_Sans-italic-800.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: normal;\n\tfont-weight: 300;\n\tfont-display: auto;\n\tsrc: url(webfonts/Open_Sans-normal-300.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: normal;\n\tfont-weight: 400;\n\tfont-display: auto;\n\tsrc: url(webfonts/Open_Sans-normal-400.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: normal;\n\tfont-weight: 600;\n\tfont-display: auto;\n\tsrc: url(webfonts/Open_Sans-normal-600.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: normal;\n\tfont-weight: 700;\n\tfont-display: auto;\n\tsrc: url(webfonts/Open_Sans-normal-700.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: normal;\n\tfont-weight: 800;\n\tfont-display: auto;\n\tsrc: url(webfonts/Open_Sans-normal-800.woff) format('woff');\n\tunicode-range: U+0-10FFFF;\n}\n\n","@import \"../css/webfonts.css\";\n\n$primary: #175DDC;\n$primary-accent: #1252A3;\n$secondary: #ced4da;\n$secondary-alt: #1A3B66;\n$success: #00a65a;\n$info: #555555;\n$warning: #bf7e16;\n$danger: #dd4b39;\n\n$theme-colors: ( \n \"primary-accent\": $primary-accent,\n \"secondary-alt\": $secondary-alt,\n);\n\n$body-bg: #ffffff;\n$body-color: #333333;\n\n$font-family-sans-serif: 'Open Sans','Helvetica Neue',Helvetica,\n Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';\n\n$h1-font-size: 1.7rem;\n$h2-font-size: 1.3rem;\n$h3-font-size: 1rem;\n$h4-font-size: 1rem;\n$h5-font-size: 1rem;\n$h6-font-size: 1rem;\n\n$small-font-size: 90%;\n$font-size-lg: 1.15rem;\n$code-font-size: 100%;\n\n$navbar-padding-y: .75rem;\n$grid-gutter-width: 20px;\n$card-spacer-y: .6rem;\n\n$list-group-item-padding-y: .6rem;\n$list-group-active-color: $body-color;\n$list-group-active-bg: #ffffff;\n$list-group-active-border-color: rgba(#000000, .125);\n\n$dropdown-link-color: $body-color;\n$dropdown-link-hover-bg: rgba(#000000, .06);\n$dropdown-link-active-color: $dropdown-link-color;\n$dropdown-link-active-bg: rgba(#000000, .1);\n$dropdown-item-padding-x: 1rem;\n\n$navbar-brand-font-size: 35px;\n$navbar-brand-height: 35px;\n$navbar-brand-padding-y: 0;\n$navbar-dark-color: rgba(#ffffff, .7);\n$navbar-dark-hover-color: rgba(#ffffff, .9);\n$navbar-nav-link-padding-x: 0.8rem;\n\n$input-bg: #fbfbfb;\n$input-focus-bg: #ffffff;\n$input-disabled-bg: #e0e0e0;\n$input-placeholder-color: #b4b4b4;\n\n$table-accent-bg: rgba(#000000, .02);\n$table-hover-bg: rgba(#000000, .03);\n\n$modal-backdrop-opacity: 0.3;\n$btn-font-weight: 600;\n$lead-font-weight: normal;\n\n$grid-breakpoints: (\n xs: 0,\n sm: 1px,\n md: 2px,\n lg: 3px,\n xl: 4px\n);\n\n//@import \"~bootstrap/scss/bootstrap\";\n@import \"~bootstrap/scss/_functions\";\n@import \"~bootstrap/scss/_variables\";\n@import \"~bootstrap/scss/_mixins\";\n@import \"~bootstrap/scss/_root\";\n@import \"~bootstrap/scss/_reboot\";\n@import \"~bootstrap/scss/_type\";\n@import \"~bootstrap/scss/_images\";\n@import \"~bootstrap/scss/_code\";\n@import \"~bootstrap/scss/_grid\";\n@import \"~bootstrap/scss/_tables\";\n@import \"~bootstrap/scss/_forms\";\n@import \"~bootstrap/scss/_buttons\";\n@import \"~bootstrap/scss/_transitions\";\n@import \"~bootstrap/scss/_dropdown\";\n@import \"~bootstrap/scss/_button-group\";\n@import \"~bootstrap/scss/_input-group\";\n@import \"~bootstrap/scss/_custom-forms\";\n@import \"~bootstrap/scss/_nav\";\n@import \"~bootstrap/scss/_navbar\";\n@import \"~bootstrap/scss/_card\";\n@import \"~bootstrap/scss/_breadcrumb\";\n@import \"~bootstrap/scss/_pagination\";\n@import \"~bootstrap/scss/_badge\";\n@import \"~bootstrap/scss/_jumbotron\";\n@import \"~bootstrap/scss/_alert\";\n@import \"~bootstrap/scss/_progress\";\n@import \"~bootstrap/scss/_media\";\n@import \"~bootstrap/scss/_list-group\";\n@import \"~bootstrap/scss/_close\";\n//@import \"~bootstrap/scss/_toasts\";\n@import \"~bootstrap/scss/_modal\";\n@import \"~bootstrap/scss/_tooltip\";\n@import \"~bootstrap/scss/_popover\";\n@import \"~bootstrap/scss/_carousel\";\n@import \"~bootstrap/scss/_spinners\";\n@import \"~bootstrap/scss/_utilities\";\n@import \"~bootstrap/scss/_print\";\n@import \"./plugins\";\n\nhtml {\n font-size: 14px;\n}\n\nbody {\n min-width: 1010px;\n\n &.layout_frontend {\n background-color: #ecf0f5;\n }\n\n &.full-width:not(.layout_frontend) {\n .container {\n min-width: 980px;\n width: 90%;\n }\n }\n}\n\n.page-header, .secondary-header {\n border-bottom: 1px solid $border-color;\n padding-bottom: 0.6rem;\n margin-bottom: 0.5rem;\n\n h1, h2, h3, h4 {\n margin: 0;\n }\n}\n\nh1, h2, h3, h4, h5 {\n small {\n font-size: 80%;\n }\n}\n\ninput, select, textarea {\n &:required {\n box-shadow: none;\n }\n}\n\n.secondary-header, .spaced-header {\n margin-top: 4rem;\n}\n\n.navbar {\n padding-left: 0;\n padding-right: 0;\n\n .dropdown-menu {\n min-width: 200px;\n max-width: 300px;\n\n .dropdown-item-text {\n line-height: 1.3;\n\n span, small {\n display: block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n }\n\n .nav-link {\n font-weight: 600;\n }\n}\n\n.navbar-brand {\n margin-top: -20px;\n margin-bottom: -20px;\n}\n\n.dropdown-menu {\n button {\n cursor: pointer;\n }\n}\n\n.container {\n width: 980px;\n max-width: none !important;\n margin: 0 auto;\n padding: 0;\n}\n\n.page-content {\n margin-top: 20px;\n}\n\n.footer {\n margin-top: 40px;\n padding: 40px 0 40px 0;\n border-top: 1px solid $border-color;\n}\n\n.list-group-item.active {\n border-left: 3px solid theme-color(\"primary\");\n font-weight: bold;\n padding-left: calc(#{$list-group-item-padding-x} - 3px);\n}\n\n.card-header, .modal-header {\n font-weight: bold;\n text-transform: uppercase;\n\n small {\n font-weight: normal;\n text-transform: none;\n @extend .text-muted;\n }\n}\n\n.card-body-header {\n font-size: $font-size-lg;\n @extend .mb-4\n}\n\n.card ul.fa-ul.card-ul {\n margin-left: 1.9em;\n\n li {\n word-break: break-all;\n }\n\n .fa-li {\n top: 4px;\n }\n\n &.carets {\n margin-left: 1.1em;\n\n .fa-li {\n left: -17px;\n width: 1.1em;\n }\n }\n\n ul {\n &.carets {\n margin-left: 0.85em;\n }\n }\n}\n\n.card-org-plans {\n h2 {\n font-size: $font-size-lg;\n }\n}\n\n.modal-dialog {\n width: $modal-md;\n}\n\n.modal-sm {\n width: $modal-sm;\n}\n\n.modal-lg { \n width: $modal-lg;\n}\n\n.modal-body {\n h3, .section-header > * {\n font-weight: normal;\n text-transform: uppercase;\n color: $text-muted;\n }\n}\n.modal .list-group-flush {\n :first-child {\n border-top: none;\n }\n :last-child {\n border-bottom: none;\n }\n}\n\n.modal-footer {\n justify-content: flex-start;\n background-color: $input-bg;\n @include border-radius($modal-content-border-radius);\n}\n\nlabel:not(.form-check-label):not(.btn), label.bold {\n font-weight: 600;\n}\n\ninput[type=\"search\"]::-webkit-search-cancel-button {\n -webkit-appearance: searchfield-cancel-button;\n}\n\n.btn[class*=\"btn-outline-\"] {\n &:not(:hover) {\n border-color: $secondary;\n background-color: #fbfbfb;\n }\n}\n\n.btn-link {\n &:focus,\n &.focus {\n outline-color: -webkit-focus-ring-color;\n outline-offset: 1px;\n outline-style: auto;\n outline-width: 1px;\n }\n}\n\n.btn-outline-secondary {\n color: $text-muted;\n\n &:hover:not(:disabled) {\n color: $body-color;\n }\n\n &:disabled {\n opacity: 1;\n }\n\n &:focus,\n &.focus {\n box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($primary), $primary, 15%), .5);\n }\n}\n\n.btn-submit {\n position: relative;\n\n .fa-spinner {\n position: absolute;\n display: none;\n align-items: center;\n justify-content: center;\n bottom: 0;\n top: 0;\n left: 0;\n right: 0;\n }\n\n &:disabled:not(.manual), &.loading {\n .fa-spinner {\n display: flex;\n }\n\n span {\n visibility: hidden;\n }\n }\n}\n\n.list-group-item {\n &:focus,\n &.focus {\n z-index: 100;\n }\n}\n\n.fa-icon-above-input {\n height: 1.5em;\n}\n\n.table.table-list {\n thead th {\n border-top: none;\n }\n\n tr:first-child {\n td {\n border: none;\n }\n }\n\n td {\n vertical-align: middle;\n \n &.reduced-lh {\n line-height: 1;\n small {\n font-size: 80%;\n }\n }\n\n small, > .fa, .icon {\n color: $text-muted;\n }\n }\n\n td.wrap {\n word-break: break-all;\n }\n\n td.table-list-options {\n width: 76px;\n max-width: 76px;\n text-align: right;\n height: 50px;\n\n &.wider {\n width: 100px;\n max-width: 100px;\n }\n\n .btn {\n line-height: 1;\n transition: initial;\n }\n\n .dropdown-menu {\n line-height: $line-height-base;\n }\n }\n\n tr:not(:hover) td.table-list-options {\n > .dropdown:not(.show) button:not(:focus):not(:active), > button:not(:focus):not(:active) {\n @extend .sr-only;\n }\n }\n\n td.table-list-icon {\n width: 45px;\n max-width: 45px;\n text-align: center;\n\n img {\n @extend .rounded;\n @extend .img-fluid;\n max-height: 24px;\n }\n }\n\n td.table-list-checkbox {\n width: 35px;\n max-width: 35px;\n }\n\n td.table-list-strike {\n color: $text-muted;\n text-decoration: line-through;\n }\n}\n\n.text-lg {\n font-size: $font-size-lg;\n}\n\n.text-strike {\n text-decoration: line-through;\n}\n\n.font-weight-semibold {\n font-weight: 600;\n}\n\n.password-wrapper {\n word-break: break-all;\n white-space: pre-wrap;\n min-width: 0;\n}\n\n.password-row {\n min-width: 0;\n}\n\n.password-number {\n color: #007fde;\n}\n\n.password-special {\n color: #c40800;\n}\n\napp-vault-groupings, app-org-vault-groupings, .groupings {\n .card {\n #search {\n margin-bottom: 1rem;\n }\n\n h3 {\n font-weight: normal;\n text-transform: uppercase;\n color: $text-muted;\n }\n\n ul:last-child {\n margin-bottom: 0;\n }\n\n .card-body a {\n color: $body-color;\n\n &:hover {\n &.text-muted {\n color: $body-color !important;\n }\n }\n }\n\n .show-active {\n display: none;\n }\n\n li {\n > .fa, > div > .fa {\n cursor: pointer;\n }\n }\n\n li.active {\n > .show-active, > div .show-active {\n display: inline;\n }\n }\n\n li.active {\n > a:first-of-type, > div a:first-of-type {\n font-weight: bold;\n color: theme-color(\"primary\");\n }\n\n > .fa, > div > .fa {\n color: theme-color(\"primary\");\n }\n }\n }\n}\n\napp-password-generator {\n #lengthRange {\n width: 100%;\n }\n\n .card-password {\n .card-body {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n text-align: center;\n font-size: $font-size-lg;\n font-family: $font-family-monospace;\n }\n }\n}\n\napp-password-generator-history {\n .list-group-item {\n line-height: 1;\n\n .password {\n font-family: $font-family-monospace;\n }\n }\n}\n\napp-import {\n textarea {\n height: 150px;\n }\n}\n\napp-avatar {\n img {\n @extend .rounded;\n }\n}\n\napp-user-billing {\n .progress {\n height: 20px;\n \n .progress-bar {\n min-width: 50px;\n }\n }\n}\n\n#duo-frame {\n background: url('../images/loading.svg') 0 0 no-repeat;\n height: 330px;\n\n iframe {\n width: 100%;\n height: 100%;\n border: none;\n }\n}\n\n#web-authn-frame {\n background: url('../images/loading.svg') 0 0 no-repeat;\n height: 290px;\n\n iframe {\n width: 100%;\n height: 100%;\n border: none;\n }\n}\n\n#bt-dropin-container {\n background: url('../images/loading.svg') 0 0 no-repeat;\n min-height: 50px;\n}\n\n.braintree-placeholder, .braintree-sheet__header {\n display: none;\n}\n\n.braintree-sheet__content--button {\n text-align: left;\n padding: 0;\n min-height: 0;\n}\n\n.braintree-sheet__container {\n margin-bottom: 0;\n}\n\n.braintree-sheet {\n border: none;\n}\n\n.totp {\n .totp-code {\n @extend .text-monospace;\n font-size: 1.2rem;\n }\n\n .totp-countdown {\n margin: 3px 3px 0 0;\n display: block;\n user-select: none;\n\n .totp-sec {\n font-size: 0.85em;\n position: absolute;\n line-height: 32px;\n width: 32px;\n text-align: center;\n }\n\n svg {\n width: 32px;\n height: 32px;\n transform: rotate(-90deg);\n }\n\n .totp-circle {\n fill: none;\n stroke: $primary;\n\n &.inner {\n stroke-width: 3;\n stroke-dasharray: 78.6;\n stroke-dashoffset: 0;\n }\n\n &.outer {\n stroke-width: 2;\n stroke-dasharray: 88;\n stroke-dashoffset: 0;\n }\n }\n }\n\n > .align-items-center {\n margin-bottom: -5px;\n }\n\n &.low {\n .totp-sec, .totp-code {\n color: $danger;\n }\n\n .totp-circle {\n stroke: $danger;\n }\n }\n}\n\n.callout {\n padding: $alert-padding-y $alert-padding-x;\n margin-bottom: $alert-margin-bottom;\n border: 1px solid $card-border-color;\n border-left-width: 5px;\n border-radius: $card-inner-border-radius;\n background-color: #fafafa;\n\n .callout-heading {\n margin-top: 0;\n }\n\n h3.callout-heading {\n font-weight: bold;\n text-transform: uppercase;\n }\n\n &.callout-primary {\n border-left-color: $primary;\n\n .callout-heading {\n color: $primary;\n }\n }\n\n &.callout-info {\n border-left-color: $gray-800;\n\n .callout-heading {\n color: $gray-800;\n }\n }\n\n &.callout-danger {\n border-left-color: $danger;\n\n .callout-heading {\n color: $danger;\n }\n }\n\n &.callout-success {\n border-left-color: $success;\n\n .callout-heading {\n color: $success;\n }\n }\n\n &.callout-warning {\n border-left-color: $warning;\n\n .callout-heading {\n color: $warning;\n }\n }\n}\n\n.list-group-2fa {\n .logo-2fa {\n min-width: 100px;\n }\n}\n\n.form-check-block {\n .form-check-label {\n font-weight: 600;\n\n > small {\n display: block;\n color: $text-muted;\n font-weight: normal;\n }\n\n > span {\n display: block;\n font-weight: normal;\n @extend .mt-2;\n }\n }\n}\n\n.form-check-block + .form-check-block {\n &:not(.mt-2) {\n @extend .mt-3;\n }\n}\n\n.form-inline {\n input[type='datetime-local'] {\n width: 200px;\n }\n}\n\n.form-control.stripe-form-control {\n padding-top: 0.55rem;\n\n &.is-focused {\n color: $input-focus-color;\n background-color: $input-focus-bg;\n border-color: $input-focus-border-color;\n outline: 0;\n box-shadow: $input-focus-box-shadow;\n \n &.is-invalid {\n box-shadow: 0 0 0 $input-focus-width rgba($form-feedback-invalid-color, .25);\n }\n }\n \n &.is-invalid {\n border-color: $form-feedback-invalid-color;\n }\n}\n\n.org-nav {\n background-color: $input-bg;\n border-bottom: 1px solid $border-color;\n height: 100px;\n min-height: 100px;\n\n .container {\n height: 100%;\n }\n\n .nav-tabs {\n border-bottom: none;\n\n a {\n color: $body-color;\n\n &:not(.active) {\n border-color: transparent;\n }\n\n &.active {\n border-top: 3px solid theme-color(\"primary\");\n font-weight: bold;\n padding-top: calc(#{$nav-link-padding-y} - 2px);\n }\n\n &.disabled {\n color: $input-placeholder-color;\n }\n }\n }\n\n .org-name {\n line-height: 1;\n span {\n font-size: $font-size-lg;\n display: block;\n }\n }\n}\n\nimg.logo {\n width: 284px;\n height: 43px;\n margin: 0 auto;\n display: block;\n}\n\n.min-height-fix {\n min-height: 1px;\n}\n\n.overflow-hidden {\n overflow: hidden;\n}\n\n.cdk-drag-preview {\n z-index: $zindex-tooltip !important;\n opacity: 0.8;\n background-color: $white;\n border-radius: $border-radius;\n}\n\n.cursor-move {\n cursor: move !important;\n}\n\n@import \"./register-layout\";\n",":root {\n // Custom variable values only support SassScript inside `#{}`.\n @each $color, $value in $colors {\n --#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$color}: #{$value};\n }\n\n @each $bp, $value in $grid-breakpoints {\n --breakpoint-#{$bp}: #{$value};\n }\n\n // Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --font-family-sans-serif: #{inspect($font-family-sans-serif)};\n --font-family-monospace: #{inspect($font-family-monospace)};\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Future-proof rule: in browsers that support :focus-visible, suppress the focus outline\n// on elements that programmatically receive focus but wouldn't normally show a visible\n// focus outline. In general, this would mean that the outline is only applied if the\n// interaction that led to the element receiving programmatic focus was a keyboard interaction,\n// or the browser has somehow determined that the user is primarily a keyboard user and/or\n// wants focus outlines to always be presented.\n//\n// See https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible\n// and https://developer.paciellogroup.com/blog/2018/03/focus-visible-and-backwards-compatibility/\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover() {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n\n @include hover() {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n // Disable auto-hiding scrollbar in IE & legacy Edge to avoid overlap,\n // making it impossible to interact with the content\n -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Set the cursor for non-`\n \n \n

\n
\n
\n
\n
\n \n \n \n
\n
{{payWithCard}}
\n
\n
\n
\n
\n
\n \n
\n
\n
\n \n
\n
\n\n
\n
\n \n
\n
\n \n\n
\n \n
\n
\n\n
\n \n
\n
\n
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n \n \n\n
\n
{{otherWaysToPay}}
\n
\n\n
\n {{chooseAnotherWayToPay}}\n
\n\n
\n"; -var svgHTML = "\n \n \n Visa\n \n \n \n \n\n \n MasterCard\n \n \n \n \n \n \n\n \n Union Pay\n \n \n \n \n \n \n \n \n \n \n\n \n American Express\n \n \n \n \n\n \n JCB\n \n \n \n \n \n\n \n Discover\n \n \n \n \n \n\n \n Diners Club\n \n \n \n \n \n\n \n Maestro\n \n \n \n \n \n \n\n \n PayPal Logo\n \n \n \n \n \n \n\n \n PayPal Credit Logo\n \n \n \n \n \n \n \n \n\n \n Generic Card\n \n \n \n \n \n \n \n\n \n CVV Back\n \n \n \n \n \n \n \n\n \n CVV Front\n \n \n \n \n \n \n \n \n\n \n Check\n \n \n\n \n X\n \n \n\n \n Lock Loader\n \n \n\n \n \n \n \n\n \n Apple Pay Logo\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n GooglePay_AcceptanceMark_RGB_60x24pt\n \n \n \n \n \n \n \n \n\n \n Venmo\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n\n"; - -var UPDATABLE_CONFIGURATION_OPTIONS = [ - paymentOptionIDs.paypal, - paymentOptionIDs.paypalCredit, - paymentOptionIDs.applePay, - paymentOptionIDs.googlePay, - 'threeDSecure' -]; -var UPDATABLE_CONFIGURATION_OPTIONS_THAT_REQUIRE_UNVAULTED_PAYMENT_METHODS_TO_BE_REMOVED = [ - paymentOptionIDs.paypal, - paymentOptionIDs.paypalCredit, - paymentOptionIDs.applePay, - paymentOptionIDs.googlePay -]; -var VERSION = "1.13.0"; - -/** - * @typedef {object} Dropin~cardPaymentMethodPayload - * @property {string} nonce The payment method nonce, used by your server to charge the card. - * @property {object} details Additional account details. - * @property {string} details.cardType Type of card, e.g. Visa, Mastercard. - * @property {string} details.lastTwo Last two digits of card number. - * @property {string} description A human-readable description. - * @property {string} type The payment method type, always `CreditCard` when the method requested is a card. - * @property {object} binData Information about the card based on the bin. Documented {@link Dropin~binData|here}. - * @property {?string} deviceData If data collector is configured, the device data property to be used when making a transaction. - * @property {?boolean} liablityShifted If 3D Secure is configured, whether or not liability did shift. - * @property {?boolean} liablityShiftPossible If 3D Secure is configured, whether or not liability shift is possible. - */ - -/** - * @typedef {object} Dropin~paypalPaymentMethodPayload - * @property {string} nonce The payment method nonce, used by your server to charge the PayPal account. - * @property {object} details Additional PayPal account details. See a full list of details in the [PayPal client reference](http://braintree.github.io/braintree-web/{@pkg bt-web-version}/PayPalCheckout.html#~tokenizePayload). - * @property {string} type The payment method type, always `PayPalAccount` when the method requested is a PayPal account. - * @property {?string} deviceData If data collector is configured, the device data property to be used when making a transaction. - */ - -/** - * @typedef {object} Dropin~applePayPaymentMethodPayload - * @property {string} nonce The payment method nonce, used by your server to charge the Apple Pay provided card. - * @property {string} details.cardType Type of card, ex: Visa, Mastercard. - * @property {string} details.cardHolderName The name of the card holder. - * @property {string} details.dpanLastTwo Last two digits of card number. - * @property {string} description A human-readable description. - * @property {string} type The payment method type, always `ApplePayCard` when the method requested is an Apple Pay provided card. - * @property {object} binData Information about the card based on the bin. Documented {@link Dropin~binData|here}. - * @property {?string} deviceData If data collector is configured, the device data property to be used when making a transaction. - */ - -/** - * @typedef {object} Dropin~venmoPaymentMethodPayload - * @property {string} nonce The payment method nonce, used by your server to charge the Venmo account. - * @property {string} details.username The Venmo username. - * @property {string} type The payment method type, always `VenmoAccount` when the method requested is a Venmo account. - * @property {?string} deviceData If data collector is configured, the device data property to be used when making a transaction. - */ - -/** - * @typedef {object} Dropin~googlePayPaymentMethodPayload - * @property {string} nonce The payment method nonce, used by your server to charge the Google Pay card. - * @property {string} details.cardType Type of card, ex: Visa, Mastercard. - * @property {string} details.lastFour The last 4 digits of the card. - * @property {string} details.lastTwo The last 2 digits of the card. - * @param {external:GooglePayPaymentData} details.rawPaymentData The raw response back from the Google Pay flow, which includes shipping address, phone and email if passed in as required parameters. - * @property {string} type The payment method type, always `AndroidPayCard` when the method requested is a Google Pay Card. - * @property {object} binData Information about the card based on the bin. Documented {@link Dropin~binData|here}. - * @property {?string} deviceData If data collector is configured, the device data property to be used when making a transaction. - */ - -/** - * @typedef {object} GooglePayPaymentData A [Google Pay Payment Data object](https://developers.google.com/pay/api/web/object-reference#PaymentData). - * @external GooglePayPaymentData - * @see {@link https://developers.google.com/pay/api/web/object-reference#PaymentData PaymentData} - */ - -/** - * @typedef {object} Dropin~binData Information about the card based on the bin. - * @property {string} commercial Possible values: 'Yes', 'No', 'Unknown'. - * @property {string} countryOfIssuance The country of issuance. - * @property {string} debit Possible values: 'Yes', 'No', 'Unknown'. - * @property {string} durbinRegulated Possible values: 'Yes', 'No', 'Unknown'. - * @property {string} healthcare Possible values: 'Yes', 'No', 'Unknown'. - * @property {string} issuingBank The issuing bank. - * @property {string} payroll Possible values: 'Yes', 'No', 'Unknown'. - * @property {string} prepaid Possible values: 'Yes', 'No', 'Unknown'. - * @property {string} productId The product id. - */ - -/** - * @name Dropin#on - * @function - * @param {string} event The name of the event to which you are subscribing. - * @param {function} handler A callback to handle the event. - * @description Subscribes a handler function to a named event. `event` should be one of the following: - * * [`paymentMethodRequestable`](#event:paymentMethodRequestable) - * * [`noPaymentMethodRequestable`](#event:noPaymentMethodRequestable) - * * [`paymentOptionSelected`](#event:paymentOptionSelected) - * @returns {void} - * @example - * Dynamically enable or disable your submit button based on whether or not the payment method is requestable - * var submitButton = document.querySelector('#submit-button'); - * - * braintree.dropin.create({ - * authorization: 'CLIENT_AUTHORIZATION', - * container: '#dropin-container' - * }, function (err, dropinInstance) { - * submitButton.addEventListener('click', function () { - * dropinInstance.requestPaymentMethod(function (err, payload) { - * // Send payload.nonce to your server. - * }); - * }); - * - * if (dropinInstance.isPaymentMethodRequestable()) { - * // This will be true if you generated the client token - * // with a customer ID and there is a saved payment method - * // available to tokenize with that customer. - * submitButton.removeAttribute('disabled'); - * } - * - * dropinInstance.on('paymentMethodRequestable', function (event) { - * console.log(event.type); // The type of Payment Method, e.g 'CreditCard', 'PayPalAccount'. - * console.log(event.paymentMethodIsSelected); // true if a customer has selected a payment method when paymentMethodRequestable fires - * - * submitButton.removeAttribute('disabled'); - * }); - * - * dropinInstance.on('noPaymentMethodRequestable', function () { - * submitButton.setAttribute('disabled', true); - * }); - * }); - * @example - * Automatically submit nonce to server as soon as it becomes available - * var submitButton = document.querySelector('#submit-button'); - * - * braintree.dropin.create({ - * authorization: 'CLIENT_AUTHORIZATION', - * container: '#dropin-container' - * }, function (err, dropinInstance) { - * function sendNonceToServer() { - * dropinInstance.requestPaymentMethod(function (err, payload) { - * if (err) { - * // handle errors - * } - * - * // send payload.nonce to your server - * }); - * } - * - * // allows us to still request the payment method manually, such as - * // when filling out a credit card form - * submitButton.addEventListener('click', sendNonceToServer); - * - * dropinInstance.on('paymentMethodRequestable', function (event) { - * // if the nonce is already available (via PayPal authentication - * // or by using a stored payment method), we can request the - * // nonce right away. Otherwise, we wait for the customer to - * // request the nonce by pressing the submit button once they - * // are finished entering their credit card details - * if (event.paymentMethodIsSelected) { - * sendNonceToServer(); - * } - * }); - * }); - */ - -/** - * This event is emitted when the payment method available in Drop-in changes. This includes when the state of Drop-in transitions from having no payment method available to having a payment method available and when the payment method available changes. This event is not fired if there is no payment method available on initialization. To check if there is a payment method requestable on initialization, use {@link Dropin#isPaymentMethodRequestable|`isPaymentMethodRequestable`}. - * @event Dropin#paymentMethodRequestable - * @type {Dropin~paymentMethodRequestablePayload} - */ - -/** - * @typedef {object} Dropin~paymentMethodRequestablePayload - * @description The event payload sent from {@link Dropin#on|`on`} with the {@link Dropin#event:paymentMethodRequestable|`paymentMethodRequestable`} event. - * @property {string} type The type of payment method that is requestable. Either `CreditCard` or `PayPalAccount`. - * @property {boolean} paymentMethodIsSelected A property to determine if a payment method is currently selected when the payment method becomes requestable. - * - * This will be `true` any time a payment method is visably selected in the Drop-in UI, such as when PayPal authentication completes or a stored payment method is selected. - * - * This will be `false` when {@link Dropin#requestPaymentMethod|`requestPaymentMethod`} can be called, but a payment method is not currently selected. For instance, when a card form has been filled in with valid values, but has not been submitted to be converted into a payment method nonce. - */ - -/** - * This event is emitted when there is no payment method available in Drop-in. This event is not fired if there is no payment method available on initialization. To check if there is a payment method requestable on initialization, use {@link Dropin#isPaymentMethodRequestable|`isPaymentMethodRequestable`}. No payload is available in the callback for this event. - * @event Dropin#noPaymentMethodRequestable - */ - -/** - * This event is emitted when the customer selects a new payment option type (e.g. PayPal, PayPal Credit, credit card). This event is not emitted when the user changes between existing saved payment methods. Only relevant when accepting multiple payment options. - * @event Dropin#paymentOptionSelected - * @type {Dropin~paymentOptionSelectedPayload} - */ - -/** - * @typedef {object} Dropin~paymentOptionSelectedPayload - * @description The event payload sent from {@link Dropin#on|`on`} with the {@link Dropin#event:paymentOptionSelected|`paymentOptionSelected`} event. - * @property {string} paymentOption The payment option view selected. Either `card`, `paypal`, or `paypalCredit`. - */ - -/** - * @class - * @param {object} options For create options, see {@link module:braintree-web-drop-in|dropin.create}. - * @description Do not use this constructor directly. Use {@link module:braintree-web-drop-in|dropin.create} instead. - * @classdesc This class represents a Drop-in component, that will create a pre-made UI for accepting cards and PayPal on your page. Instances of this class have methods for requesting a payment method and subscribing to events. For more information, see the [Drop-in guide](https://developers.braintreepayments.com/guides/drop-in/javascript/v3) in the Braintree Developer Docs. To be used in conjunction with the [Braintree Server SDKs](https://developers.braintreepayments.com/start/hello-server/). - */ -function Dropin(options) { - this._client = options.client; - this._componentID = uuid(); - this._dropinWrapper = document.createElement('div'); - this._dropinWrapper.id = 'braintree--dropin__' + this._componentID; - this._dropinWrapper.setAttribute('data-braintree-id', 'wrapper'); - this._dropinWrapper.style.display = 'none'; - this._dropinWrapper.className = 'braintree-loading'; - this._merchantConfiguration = options.merchantConfiguration; - - EventEmitter.call(this); -} - -Dropin.prototype = Object.create(EventEmitter.prototype, { - constructor: Dropin -}); - -Dropin.prototype._initialize = function (callback) { - var localizedStrings, localizedHTML; - var self = this; - var container = self._merchantConfiguration.container || self._merchantConfiguration.selector; - - self._injectStylesheet(); - - if (!container) { - analytics.sendEvent(self._client, 'configuration-error'); - callback(new DropinError('options.container is required.')); - - return; - } else if (self._merchantConfiguration.container && self._merchantConfiguration.selector) { - analytics.sendEvent(self._client, 'configuration-error'); - callback(new DropinError('Must only have one options.selector or options.container.')); - - return; - } - - if (typeof container === 'string') { - container = document.querySelector(container); - } - - if (!container || container.nodeType !== 1) { - analytics.sendEvent(self._client, 'configuration-error'); - callback(new DropinError('options.selector or options.container must reference a valid DOM node.')); - - return; - } - - if (container.innerHTML.trim()) { - analytics.sendEvent(self._client, 'configuration-error'); - callback(new DropinError('options.selector or options.container must reference an empty DOM node.')); - - return; - } - - // Backfill with `en` - self._strings = assign({}, translations.en); - if (self._merchantConfiguration.locale) { - localizedStrings = translations[self._merchantConfiguration.locale] || translations[self._merchantConfiguration.locale.split('_')[0]]; - // Fill `strings` with `localizedStrings` that may exist - self._strings = assign(self._strings, localizedStrings); - } - - if (!isUtf8()) { - // non-utf-8 encodings often don't support the bullet character - self._strings.endingIn = self._strings.endingIn.replace(/•/g, '*'); - } - - if (self._merchantConfiguration.translations) { - Object.keys(self._merchantConfiguration.translations).forEach(function (key) { - self._strings[key] = sanitizeHtml(self._merchantConfiguration.translations[key]); - }); - } - - localizedHTML = Object.keys(self._strings).reduce(function (result, stringKey) { - var stringValue = self._strings[stringKey]; - - return result.replace(RegExp('{{' + stringKey + '}}', 'g'), stringValue); - }, mainHTML); - - self._dropinWrapper.innerHTML = svgHTML + localizedHTML; - container.appendChild(self._dropinWrapper); - - self._model = new DropinModel({ - client: self._client, - componentID: self._componentID, - merchantConfiguration: self._merchantConfiguration - }); - - self._model.initialize().then(function () { - self._model.on('cancelInitialization', function (err) { - self._dropinWrapper.innerHTML = ''; - analytics.sendEvent(self._client, 'load-error'); - callback(err); - }); - - self._model.on('asyncDependenciesReady', function () { - if (self._model.dependencySuccessCount >= 1) { - analytics.sendEvent(self._client, 'appeared'); - self._disableErroredPaymentMethods(); - - self._handleAppSwitch(); - - callback(null, self); - } else { - self._model.cancelInitialization(new DropinError('All payment options failed to load.')); - } - }); - - self._model.on('paymentMethodRequestable', function (event) { - self._emit('paymentMethodRequestable', event); - }); - - self._model.on('noPaymentMethodRequestable', function () { - self._emit('noPaymentMethodRequestable'); - }); - - self._model.on('paymentOptionSelected', function (event) { - self._emit('paymentOptionSelected', event); - }); - - return self._setUpDependenciesAndViews(); - }).catch(function (err) { - self.teardown().then(function () { - callback(err); - }); - }); -}; - -/** - * Modify your configuration intially set in {@link module:braintree-web-drop-in|`dropin.create`}. - * - * If `updateConfiguration` is called after a user completes the PayPal authorization flow, any PayPal accounts not stored in the Vault record will be removed. - * @public - * @param {string} property The top-level property to update. Either `paypal`, `paypalCredit`, `applePay`, or `googlePay`. - * @param {string} key The key of the property to update, such as `amount` or `currency`. - * @param {any} value The value of the property to update. Must be the type of the property specified in {@link module:braintree-web-drop-in|`dropin.create`}. - * @returns {void} - * @example - * dropinInstance.updateConfiguration('paypal', 'amount', '10.00'); - */ -Dropin.prototype.updateConfiguration = function (property, key, value) { - var view; - - if (UPDATABLE_CONFIGURATION_OPTIONS.indexOf(property) === -1) { - return; - } - - if (property === 'threeDSecure') { - if (this._threeDSecure) { - this._threeDSecure.updateConfiguration(key, value); - } - - return; - } - - view = this._mainView.getView(property); - - if (!view) { - return; - } - - view.updateConfiguration(key, value); - - if (UPDATABLE_CONFIGURATION_OPTIONS_THAT_REQUIRE_UNVAULTED_PAYMENT_METHODS_TO_BE_REMOVED.indexOf(property) === -1) { - return; - } - - this._removeUnvaultedPaymentMethods(function (paymentMethod) { - return paymentMethod.type === constants.paymentMethodTypes[property]; - }); - this._navigateToInitialView(); -}; - -/** - * Removes the currently selected payment method and returns the customer to the payment options view. Does not remove vaulted payment methods. - * @public - * @returns {void} - * @example - * dropinInstance.requestPaymentMethod(function (requestPaymentMethodError, payload) { - * if (requestPaymentMethodError) { - * // handle errors - * return; - * } - * - * functionToSendNonceToServer(payload.nonce, function (transactionError, response) { - * if (transactionError) { - * // transaction sale with selected payment method failed - * // clear the selected payment method and add a message - * // to the checkout page about the failure - * dropinInstance.clearSelectedPaymentMethod(); - * divForErrorMessages.textContent = 'my error message about entering a different payment method.'; - * } else { - * // redirect to success page - * } - * }); - * }); - */ -Dropin.prototype.clearSelectedPaymentMethod = function () { - this._removeUnvaultedPaymentMethods(); - this._model.removeActivePaymentMethod(); - - if (this._model.getPaymentMethods().length === 0) { - this._navigateToInitialView(); - - return; - } - - this._mainView.showLoadingIndicator(); - - this._model.refreshPaymentMethods().then(function () { - this._navigateToInitialView(); - this._mainView.hideLoadingIndicator(); - }.bind(this)); -}; - -Dropin.prototype._setUpDataCollector = function () { - var self = this; - var config = assign({}, self._merchantConfiguration.dataCollector, {client: self._client}); - - this._model.asyncDependencyStarting(); - this._dataCollector = new DataCollector(config); - - this._dataCollector.initialize().then(function () { - self._model.asyncDependencyReady(); - }).catch(function (err) { - self._model.cancelInitialization(new DropinError({ - message: 'Data Collector failed to set up.', - braintreeWebError: err - })); - }); -}; - -Dropin.prototype._setUpThreeDSecure = function () { - var self = this; - var config = assign({}, this._merchantConfiguration.threeDSecure); - - this._model.asyncDependencyStarting(); - - this._threeDSecure = new ThreeDSecure(this._client, config, this._strings.cardVerification); - - this._threeDSecure.initialize().then(function () { - self._model.asyncDependencyReady(); - }).catch(function (err) { - self._model.cancelInitialization(new DropinError({ - message: '3D Secure failed to set up.', - braintreeWebError: err - })); - }); -}; - -Dropin.prototype._setUpDependenciesAndViews = function () { - if (this._merchantConfiguration.dataCollector) { - this._setUpDataCollector(); - } - - if (this._merchantConfiguration.threeDSecure) { - this._setUpThreeDSecure(); - } - - this._mainView = new MainView({ - client: this._client, - element: this._dropinWrapper, - model: this._model, - strings: this._strings - }); -}; - -Dropin.prototype._removeUnvaultedPaymentMethods = function (filter) { - filter = filter || function () { return true; }; - - this._model.getPaymentMethods().forEach(function (paymentMethod) { - if (filter(paymentMethod) && !paymentMethod.vaulted) { - this._model.removePaymentMethod(paymentMethod); - } - }.bind(this)); -}; - -Dropin.prototype._navigateToInitialView = function () { - var hasNoSavedPaymentMethods, hasOnlyOneSupportedPaymentOption; - var isOnMethodsView = this._mainView.primaryView.ID === paymentMethodsViewID; - - if (isOnMethodsView) { - hasNoSavedPaymentMethods = this._model.getPaymentMethods().length === 0; - - if (hasNoSavedPaymentMethods) { - hasOnlyOneSupportedPaymentOption = this._model.supportedPaymentOptions.length === 1; - - if (hasOnlyOneSupportedPaymentOption) { - this._mainView.setPrimaryView(this._model.supportedPaymentOptions[0]); - } else { - this._mainView.setPrimaryView(paymentOptionsViewID); - } - } - } -}; - -Dropin.prototype._supportsPaymentOption = function (paymentOption) { - return this._model.supportedPaymentOptions.indexOf(paymentOption) !== -1; -}; - -Dropin.prototype._disableErroredPaymentMethods = function () { - var paymentMethodOptionsElements; - var failedDependencies = Object.keys(this._model.failedDependencies); - - if (failedDependencies.length === 0) { - return; - } - - paymentMethodOptionsElements = this._mainView.getOptionsElements(); - - failedDependencies.forEach(function (paymentMethodId) { - var element = paymentMethodOptionsElements[paymentMethodId]; - var div = element.div; - var clickHandler = element.clickHandler; - var error = this._model.failedDependencies[paymentMethodId]; - var errorMessageDiv = div.querySelector('.braintree-option__disabled-message'); - - classlist.add(div, 'braintree-disabled'); - div.removeEventListener('click', clickHandler); - errorMessageDiv.innerHTML = constants.errors.DEVELOPER_MISCONFIGURATION_MESSAGE; - console.error(error); // eslint-disable-line no-console - }.bind(this)); -}; - -Dropin.prototype._handleAppSwitch = function () { - if (this._model.appSwitchError) { - this._mainView.setPrimaryView(this._model.appSwitchError.id); - this._model.reportError(this._model.appSwitchError.error); - } else if (this._model.appSwitchPayload) { - this._model.addPaymentMethod(this._model.appSwitchPayload); - } -}; - -/** - * Requests a payment method object which includes the payment method nonce used by by the [Braintree Server SDKs](https://developers.braintreepayments.com/start/hello-server/). - * - * If a payment method is not available, an error will appear in the UI. When a callback is used, an error will be passed to it. If no callback is used, the returned Promise will be rejected with an error. - * @public - * @param {callback} [callback] The first argument will be an error if no payment method is available and will otherwise be null. The second argument will be an object containing a payment method nonce; either a {@link Dropin~cardPaymentMethodPayload|cardPaymentMethodPayload}, a {@link Dropin~paypalPaymentMethodPayload|paypalPaymentMethodPayload}, a {@link Dropin~venmoPaymentMethodPayload|venmoPaymentMethodPayload}, a {@link Dropin~googlePayPaymentMethodPayload|googlePayPaymentMethodPayload} or an {@link Dropin~applePayPaymentMethodPayload|applePayPaymentMethodPayload}. If no callback is provided, `requestPaymentMethod` will return a promise. - * @returns {void|Promise} Returns a promise if no callback is provided. - * @example Requesting a payment method - * var form = document.querySelector('#my-form'); - * var hiddenNonceInput = document.querySelector('#my-nonce-input'); - * - * form.addEventListener('submit', function (event) { - * event.preventDefault(); - * - * dropinInstance.requestPaymentMethod(function (err, payload) { - * if (err) { - * // handle error - * return; - * } - * hiddenNonceInput.value = payload.nonce; - * form.submit(); - * }); - * }); - * @example Requesting a payment method with data collector - * var form = document.querySelector('#my-form'); - * var hiddenNonceInput = document.querySelector('#my-nonce-input'); - * var hiddenDeviceDataInput = document.querySelector('#my-device-data-input'); - * - * form.addEventListener('submit', function (event) { - * event.preventDefault(); - * - * dropinInstance.requestPaymentMethod(function (err, payload) { - * if (err) { - * // handle error - * return; - * } - * hiddenNonceInput.value = payload.nonce; - * hiddenDeviceDataInput.value = payload.deviceData; - * form.submit(); - * }); - * }); - * - * @example Requesting a payment method with 3D Secure - * var form = document.querySelector('#my-form'); - * var hiddenNonceInput = document.querySelector('#my-nonce-input'); - * - * form.addEventListener('submit', function (event) { - * event.preventDefault(); - * - * dropinInstance.requestPaymentMethod(function (err, payload) { - * if (err) { - * // Handle error - * return; - * } - * - * if (payload.liabilityShifted || payload.type !== 'CreditCard') { - * hiddenNonceInput.value = payload.nonce; - * form.submit(); - * } else { - * // Decide if you will force the user to enter a different payment method - * // if liablity was not shifted - * dropinInstance.clearSelectedPaymentMethod(); - * } - * }); - * }); - */ -Dropin.prototype.requestPaymentMethod = function () { - return this._mainView.requestPaymentMethod().then(function (payload) { - if (this._threeDSecure && payload.type === constants.paymentMethodTypes.card && payload.liabilityShifted == null) { - return this._threeDSecure.verify(payload.nonce).then(function (newPayload) { - payload.nonce = newPayload.nonce; - payload.liabilityShifted = newPayload.liabilityShifted; - payload.liabilityShiftPossible = newPayload.liabilityShiftPossible; - - return payload; - }); - } - - return payload; - }.bind(this)).then(function (payload) { - if (this._dataCollector) { - payload.deviceData = this._dataCollector.getDeviceData(); - } - - return payload; - }.bind(this)).then(function (payload) { - return formatPaymentMethodPayload(payload); - }); -}; - -Dropin.prototype._removeStylesheet = function () { - var stylesheet = document.getElementById(constants.STYLESHEET_ID); - - if (stylesheet) { - stylesheet.parentNode.removeChild(stylesheet); - } -}; - -Dropin.prototype._injectStylesheet = function () { - var stylesheetUrl, assetsUrl; - - if (document.getElementById(constants.STYLESHEET_ID)) { return; } - - assetsUrl = this._client.getConfiguration().gatewayConfiguration.assetsUrl; - stylesheetUrl = assetsUrl + '/web/dropin/' + VERSION + '/css/dropin.css'; - - assets.loadStylesheet({ - href: stylesheetUrl, - id: constants.STYLESHEET_ID - }); -}; - -/** - * Cleanly remove anything set up by {@link module:braintree-web-drop-in|dropin.create}. This may be be useful in a single-page app. - * @public - * @param {callback} [callback] Called on completion, containing an error if one occurred. No data is returned if teardown completes successfully. If no callback is provided, `teardown` will return a promise. - * @returns {void|Promise} Returns a promise if no callback is provided. - */ -Dropin.prototype.teardown = function () { - var teardownError; - var promise = Promise.resolve(); - var self = this; - - this._removeStylesheet(); - - if (this._mainView) { - promise.then(function () { - return self._mainView.teardown().catch(function (err) { - teardownError = err; - }); - }); - } - - if (this._dataCollector) { - promise.then(function () { - return this._dataCollector.teardown().catch(function (error) { - teardownError = new DropinError({ - message: 'Drop-in errored tearing down Data Collector.', - braintreeWebError: error - }); - }); - }.bind(this)); - } - - if (this._threeDSecure) { - promise.then(function () { - return this._threeDSecure.teardown().catch(function (error) { - teardownError = new DropinError({ - message: 'Drop-in errored tearing down 3D Secure.', - braintreeWebError: error - }); - }); - }.bind(this)); - } - - return promise.then(function () { - return self._removeDropinWrapper(); - }).then(function () { - if (teardownError) { - return Promise.reject(teardownError); - } - - return Promise.resolve(); - }); -}; - -/** - * Returns a boolean indicating if a payment method is available through {@link Dropin#requestPaymentMethod|requestPaymentMethod}. Particularly useful for detecting if using a client token with a customer ID to show vaulted payment methods. - * @public - * @returns {Boolean} True if a payment method is available, otherwise false. - */ -Dropin.prototype.isPaymentMethodRequestable = function () { - return this._model.isPaymentMethodRequestable(); -}; - -Dropin.prototype._removeDropinWrapper = function () { - this._dropinWrapper.parentNode.removeChild(this._dropinWrapper); - - return Promise.resolve(); -}; - -function formatPaymentMethodPayload(paymentMethod) { - var formattedPaymentMethod = { - nonce: paymentMethod.nonce, - details: paymentMethod.details, - type: paymentMethod.type - }; - - if (paymentMethod.vaulted != null) { - formattedPaymentMethod.vaulted = paymentMethod.vaulted; - } - - if (paymentMethod.type === constants.paymentMethodTypes.card) { - formattedPaymentMethod.description = paymentMethod.description; - } - - if (paymentMethod.type === constants.paymentMethodTypes.googlePay) { - formattedPaymentMethod.details.rawPaymentData = paymentMethod.rawPaymentData; - } - - if (typeof paymentMethod.liabilityShiftPossible === 'boolean') { - formattedPaymentMethod.liabilityShifted = paymentMethod.liabilityShifted; - formattedPaymentMethod.liabilityShiftPossible = paymentMethod.liabilityShiftPossible; - } - - if (paymentMethod.deviceData) { - formattedPaymentMethod.deviceData = paymentMethod.deviceData; - } - - if (paymentMethod.binData) { - formattedPaymentMethod.binData = paymentMethod.binData; - } - - return formattedPaymentMethod; -} - -module.exports = wrapPrototype(Dropin); - -},{"./constants":117,"./dropin-model":118,"./lib/analytics":122,"./lib/assets":123,"./lib/assign":124,"./lib/classlist":126,"./lib/data-collector":128,"./lib/dropin-error":129,"./lib/event-emitter":130,"./lib/is-utf-8":134,"./lib/promise":137,"./lib/sanitize-html":138,"./lib/three-d-secure":140,"./lib/uuid":142,"./translations":152,"./views/main-view":169,"./views/payment-methods-view":171,"./views/payment-options-view":172,"@braintree/wrap-promise":21}],120:[function(require,module,exports){ -'use strict'; -/** - * @module braintree-web-drop-in - * @description There are two ways to integrate Drop-in into your page: a script tag integration and a JavaScript integration using [`dropin.create`](#.create). - * - * The script tag integration is the fastest way to integrate. All you need to do is add the Drop-in script inside your form element where you want Drop-in to appear and include a `data-braintree-dropin-authorization` property with your [tokenization key](https://developers.braintreepayments.com/guides/authorization/tokenization-key/javascript/v3) or [client token](https://developers.braintreepayments.com/guides/authorization/client-token). - * - * When your form is submitted, Drop-in will intercept the form submission and attempt to tokenize the payment method. If the tokenization is successful, it will insert the payment method nonce into a hidden input with the name `payment_method_nonce` and then submit your form. If the tokenization is unsuccessful, a relevant error will be shown in the UI. - * - * If you have data collector enabled, the device data will be injected into a hidden input with the name `device_data` before form submission. - * - * Specify creation options as data attributes in your script tag, as shown in the examples below. The following configuration properties may be set: - * - * * `data-locale` - * * `data-card.cardholder-name.required` - * * `data-payment-option-priority` - * * `data-data-collector.kount` - * * `data-data-collector.paypal` - * * `data-paypal.amount` - * * `data-paypal.currency` - * * `data-paypal.flow` - * * `data-paypal-credit.amount` - * * `data-paypal-credit.currency` - * * `data-paypal-credit.flow` - * - * For more control and customization, use [`dropin.create` instead](#.create). - * - * See our [demo app](../../script-tag-integration.html) for an example of using our script tag integration. - * - * @example - * A full example accepting only cards - * - * - * - * - * Checkout - * - * - *
- * - * - *
- * - * - * - * @example - * A full example accepting cards, PayPal, and PayPal credit - * - * - * - * - * Checkout - * - * - *
- * - * - *
- * - * - * - * @example - * Specifying a locale and payment option priority - *
- * - * - *
- * - * @example - * Including an optional cardholder name field in card form - *
- * - * - *
- * - * @example - * Including a required cardholder name field in card form - *
- * - * - *
- */ - -var Dropin = require('./dropin'); -var client = require('braintree-web/client'); -var createFromScriptTag = require('./lib/create-from-script-tag'); -var constants = require('./constants'); -var analytics = require('./lib/analytics'); -var DropinError = require('./lib/dropin-error'); -var Promise = require('./lib/promise'); -var wrapPromise = require('@braintree/wrap-promise'); - -var VERSION = "1.13.0"; - -/** - * @typedef {object} cardCreateOptions The configuration options for cards. Internally, Drop-in uses [Hosted Fields](http://braintree.github.io/braintree-web/{@pkg bt-web-version}/module-braintree-web_hosted-fields.html) to render the card form. The `overrides.fields` and `overrides.styles` allow the Hosted Fields to be customized. - * - * @param {boolean|object} [cardholderName] Will enable a cardholder name field above the card number field. If set to an object, you can specify whether or not the field is required. If set to a `true`, it will default the field to being present, but not required. - * @param {boolean} [cardholderName.required=false] When true, the cardholder name field will be required to request the payment method nonce. - * @param {object} [overrides.fields] The Hosted Fields [`fields` options](http://braintree.github.io/braintree-web/{@pkg bt-web-version}/module-braintree-web_hosted-fields.html#~fieldOptions). Only `number`, `cvv`, `expirationDate` and `postalCode` can be configured. Each is a [Hosted Fields `field` object](http://braintree.github.io/braintree-web/{@pkg bt-web-version}/module-braintree-web_hosted-fields.html#~field). `selector` cannot be modified. - * @param {object} [overrides.styles] The Hosted Fields [`styles` options](http://braintree.github.io/braintree-web/{@pkg bt-web-version}/module-braintree-web_hosted-fields.html#~styleOptions). - * @param {boolean} [clearFieldsAfterTokenization=true] When false, the card form will not clear the card data when the customer returns to the card view after a succesful tokenization. - */ - -/** - * @typedef {object} dataCollectorOptions The configuration options for Data Collector. Requires [advanced fraud protection](https://developers.braintreepayments.com/guides/advanced-fraud-tools/client-side/javascript/v3) to be enabled in the Braintree gateway. Contact our [support team](https://developers.braintreepayments.com/forms/contact) to configure your Kount ID. The device data will be included on the {@link Dropin#requestPaymentMethod|requestPaymentMethod payload}. - * - * @param {boolean} [kount] If true, Kount fraud data collection is enabled. Required if `paypal` parameter is not used. - * @param {boolean} [paypal] If true, PayPal fraud data collection is enabled. Required if `kount` parameter is not used. - */ - -/** - * @typedef {object} threeDSecureOptions The configuration options for 3D Secure. Requires [3D Secure](https://developers.braintreepayments.com/guides/3d-secure/overview) to be enabled in the Braintree gateway. The liability shift information will be included on the {@link Dropin#requestPaymentMethod|requestPaymentMethod payload}. - * - * @param {string} amount The amount to verify with 3D Secure. - */ - -/** @typedef {object} paypalCreateOptions The configuration options for PayPal and PayPalCredit. For a full list of options see the [PayPal Checkout client reference options](http://braintree.github.io/braintree-web/{@pkg bt-web-version}/PayPalCheckout.html#createPayment). - * - * @param {string} flow Either `checkout` for a one-time [Checkout with PayPal](https://developers.braintreepayments.com/guides/paypal/checkout-with-paypal/javascript/v3) flow or `vault` for a [Vault flow](https://developers.braintreepayments.com/guides/paypal/vault/javascript/v3). Required when using PayPal or PayPal Credit. - * @param {string|number} [amount] The amount of the transaction. Required when using the Checkout flow. - * @param {string} [currency] The currency code of the amount, such as `USD`. Required when using the Checkout flow. - * @param {string} [buttonStyle] The style object to apply to the PayPal button. Button customization includes color, shape, size, and label. The options [found here](https://developer.paypal.com/docs/integration/direct/express-checkout/integration-jsv4/customize-button/#button-styles) are available. - * @param {boolean} [commit] The user action to show on the PayPal review page. If true, a `Pay Now` button will be shown. If false, a `Continue` button will be shown. - */ - -/** @typedef {object} applePayCreateOptions The configuration options for Apple Pay. - * - * @param {string} [buttonStyle=black] Configures the Apple Pay button style. Valid values are `black`, `white`, `white-outline`. - * @param {string} displayName The canonical name for your store. Use a non-localized name. This parameter should be a UTF-8 string that is a maximum of 128 characters. The system may display this name to the user. - * @param {external:ApplePayPaymentRequest} paymentRequest The payment request details to apply on top of those from Braintree. - */ - -/** @typedef {object} googlePayCreateOptions The configuration options for Google Pay. Additional options from the few listed here are available, many have default values applied based on the settings found in the Braintree Gateway. For more information, see [Google's Documentation](https://developers.google.com/pay/api/web/object-reference#request-objects). - * - * @param {string} merchantId The ID provided by Google for processing transactions in production. Not necessary for testing in sandbox. - * @param {external:GooglePayTransactionInfo} transactionInfo The transaction details necessary for processing the payment. - */ - -/** - * @typedef {object} ApplePayPaymentRequest An [Apple Pay Payment Request object](https://developer.apple.com/reference/applepayjs/1916082-applepay_js_data_types/paymentrequest). - * @external ApplePayPaymentRequest - * @see {@link https://developer.apple.com/reference/applepayjs/1916082-applepay_js_data_types/paymentrequest PaymentRequest} - */ - -/** - * @typedef {object} GooglePayTransactionInfo A [Google Pay TransactionInfo object](https://developers.google.com/pay/api/web/object-reference#TransactionInfo). - * @external GooglePayTransactionInfo - * @see {@link https://developers.google.com/pay/api/web/object-reference#TransactionInfo TransactionInfo} - */ - -/** @typedef {object|boolean} venmoCreateOptions The configuration options for Venmo. If `true` is passed instead of a configuration object, the default settings listed will be used. - * - * @param {boolean} [allowNewBrowserTab=true] If false, it restricts supported browsers to those that can app switch to the Venmo app without opening a new tab. - */ - -/** - * @static - * @function create - * @description This function is the entry point for `braintree.dropin`. It is used for creating {@link Dropin} instances. - * @param {object} options Object containing all {@link Dropin} options: - * @param {string} options.authorization A [tokenization key](https://developers.braintreepayments.com/guides/authorization/tokenization-key/javascript/v3) or a [client token](https://developers.braintreepayments.com/guides/authorization/client-token). If authorization is a client token created with a [customer ID](https://developers.braintreepayments.com/guides/drop-in/javascript/v3#customer-id), Drop-in will render saved payment methods and automatically store any newly-added payment methods in their Vault record. - * @param {string|HTMLElement} options.container A reference to an empty element, such as a `
`, where Drop-in will be included on your page or the selector for the empty element. e.g. `#dropin-container`. - * @param {string} options.selector Deprecated: Now an alias for `options.container`. - * @param {string} [options.locale=`en_US`] Use this option to change the language, links, and terminology used throughout Drop-in. Supported locales include: - * `da_DK`, - * `de_DE`, - * `en_AU`, - * `en_GB`, - * `en_US`, - * `es_ES`, - * `fr_CA`, - * `fr_FR`, - * `id_ID`, - * `it_IT`, - * `ja_JP`, - * `ko_KR`, - * `nl_NL`, - * `no_NO`, - * `pl_PL`, - * `pt_BR`, - * `pt_PT`, - * `ru_RU`, - * `sv_SE`, - * `th_TH`, - * `zh_CN`, - * `zh_HK`, - * `zh_TW`. - * - * @param {object} [options.translations] To use your own translations, pass an object with the strings you wish to replace. This object must use the same structure as the object used internally for supported translations, which can be found [here](https://github.com/braintree/braintree-web-drop-in/blob/master/src/translations/en_US.js). Any strings that are not included will be those from the provided `locale` or `en_US` if no `locale` is provided. See below for an example of creating Drop-in with custom translations. - * @param {array} [options.paymentOptionPriority] Use this option to indicate the order in which enabled payment options should appear when multiple payment options are enabled. By default, payment options will appear in this order: `['card', 'paypal', 'paypalCredit', 'venmo', 'applePay']`. Payment options omitted from this array will not be offered to the customer. - * - * @param {object} [options.card] The configuration options for cards. See [`cardCreateOptions`](#~cardCreateOptions) for all `card` options. If this option is omitted, cards will still appear as a payment option. To remove cards as a payment option, use `paymentOptionPriority`. - * @param {object} [options.paypal] The configuration options for PayPal. To include a PayPal option in your Drop-in integration, include the `paypal` parameter and [enable PayPal in the Braintree Control Panel](https://developers.braintreepayments.com/guides/paypal/testing-go-live/#go-live). To test in Sandbox, you will need to [link a PayPal sandbox test account to your Braintree sandbox account](https://developers.braintreepayments.com/guides/paypal/testing-go-live/#linked-paypal-testing). - * - * Some of the PayPal configuration options are listed [here](#~paypalCreateOptions), but for a full list see the [PayPal Checkout client reference options](http://braintree.github.io/braintree-web/{@pkg bt-web-version}/PayPalCheckout.html#createPayment). - * - * PayPal is not [supported in Internet Explorer versions lower than 11](https://developer.paypal.com/docs/checkout/reference/faq/#which-browsers-does-paypal-checkout-support). - * - * @param {object} [options.paypalCredit] The configuration options for PayPal Credit. To include a PayPal Credit option in your Drop-in integration, include the `paypalCredit` parameter and [enable PayPal in the Braintree Control Panel](https://developers.braintreepayments.com/guides/paypal/testing-go-live/#go-live). - * - * Some of the PayPal Credit configuration options are listed [here](#~paypalCreateOptions), but for a full list see the [PayPal Checkout client reference options](http://braintree.github.io/braintree-web/{@pkg bt-web-version}/PayPalCheckout.html#createPayment). For more information on PayPal Credit, see the [Braintree Developer Docs](https://developers.braintreepayments.com/guides/paypal/paypal-credit/javascript/v3). - * - * PayPal Credit is not [supported in Internet Explorer versions lower than 11](https://developer.paypal.com/docs/checkout/reference/faq/#which-browsers-does-paypal-checkout-support). - * - * @param {object|boolean} [options.venmo] The configuration options for Pay with Venmo. To include a Venmo option in your Drop-in integration, include the `venmo` parameter and [follow the documentation for setting up Venmo in the Braintree control panel](https://articles.braintreepayments.com/guides/payment-methods/venmo#setup). If a user's browser does not support Venmo, the Venmo option will not be rendered. - * - * See [`venmoCreateOptions`](#~venmoCreateOptions) for `venmo` options. - * - * @param {object} [options.applePay] The configuration options for Apple Pay. To include an Apple Pay option in your Drop-in integration, include the `applePay` parameter and [enable Apple Pay in the Braintree Control Panel](https://developers.braintreepayments.com/guides/apple-pay/configuration/javascript/v3). If a user's browser does not support Apple Pay, the Apple Pay option will not be rendered. See [Apple's documentation](https://support.apple.com/en-us/HT201469) for browser and device support. - * - * See [`applePayCreateOptions`](#~applePayCreateOptions) for `applePay` options. - * - * @param {object} [options.googlePay] The configuration options for Google Pay. To include a Google Pay option in your Drop-in integration, include the `googlePay` parameter and [enable Google Pay in the Braintree Control Panel](https://developers.braintreepayments.com/guides/google-pay/configuration/javascript/v3). If a user's browser does not support Google Pay, the Google Pay option will not be rendered. See [Google's documentation](https://developers.google.com/pay/api/web/test-and-deploy) for browser and device support. - * - * See [`googlePayCreateOptions`](#~googlePayCreateOptions) for `googlePay` options. - * - * @param {object} [options.dataCollector] The configuration options for data collector. See [`dataCollectorOptions`](#~dataCollectorOptions) for all `dataCollector` options. If Data Collector is configured and fails to load, Drop-in creation will fail. - * - * @param {object} [options.threeDSecure] The configuration options for 3D Secure. See [`threeDSecureOptions`](#~threeDSecureOptions) for all `threeDSecure` options. If 3D Secure is configured and fails to load, Drop-in creation will fail. - * - * @param {boolean} [options.vaultManager=false] Whether or not to allow a customer to delete saved payment methods when used with a [client token with a customer id](https://developers.braintreepayments.com/reference/request/client-token/generate/#customer_id). *Note:* Deleting a payment method from Drop-in will permanently delete the payment method, so this option is not recomended for merchants using Braintree's recurring billing system. This feature is not supported in Internet Explorer 9. - * - * @param {boolean} [options.preselectVaultedPaymentMethod=true] Whether or not to initialize Drop-in with a vaulted payment method pre-selected. Only applicable when using a [client token with a customer id](https://developers.braintreepayments.com/reference/request/client-token/generate/#customer_id) and a customer with saved payment methods. - * - * @param {function} [callback] The second argument, `data`, is the {@link Dropin} instance. Returns a promise if no callback is provided. - * @returns {void|Promise} Returns a promise if no callback is provided. - * @example - * A full example of accepting credit cards with callback API - * - * - * - * - * Checkout - * - * - *
- * - * - * - * - * - * - * - * @example - * A full example of accepting credit cards with promise API - * - * - * - * - * Checkout - * - * - *
- * - * - * - * - * - * - * - * @example - * Setting up a Drop-in instance to accept credit cards, PayPal, PayPal Credit, Venmo, and Apple Pay - * braintree.dropin.create({ - * authorization: 'CLIENT_AUTHORIZATION', - * container: '#dropin-container', - * applePay: { - * displayName: 'Merchant Name', - * paymentRequest: { - * label: 'Localized Name', - * total: '10.00' - * } - * }, - * paypal: { - * flow: 'checkout', - * amount: '10.00', - * currency: 'USD' - * }, - * paypalCredit: { - * flow: 'checkout', - * amount: '10.00', - * currency: 'USD' - * }, - * venmo: true - * }, function (err, dropinInstance) { - * // Set up a handler to request a payment method and - * // submit the payment method nonce to your server - * }); - * @example - * Setting up a Drop-in instance to accept Venmo with restricted browser support - * braintree.dropin.create({ - * authorization: 'CLIENT_AUTHORIZATION', - * container: '#dropin-container', - * venmo: { - * allowNewBrowserTab: false - * } - * }, function (err, dropinInstance) { - * // Set up a handler to request a payment method and - * // submit the payment method nonce to your server - * }); - * - * @example - * Submitting the payment method nonce to the server using a form - * - * - * - * - * Checkout - * - * - *
- *
- * - * - *
- * - * - * - * - * - * - * - * @example - * Use your own translations - * braintree.dropin.create({ - * authorization: 'CLIENT_AUTHORIZATION', - * container: '#dropin-container', - * translations: { - * payingWith: 'You are paying with {{paymentSource}}', - * chooseAnotherWayToPay: 'My custom chooseAnotherWayToPay string', - * // Any other custom translation strings - * } - * }, callback); - * - * @example - * Customizing Drop-in with card form overrides - * braintree.dropin.create({ - * authorization: 'CLIENT_AUTHORIZATION', - * container: '#dropin-container', - * card: { - * overrides: { - * fields: { - * number: { - * placeholder: '1111 1111 1111 1111' // Update the number field placeholder - * }, - * postalCode: { - * minlength: 5 // Set the minimum length of the postal code field - * }, - * cvv: null // Remove the CVV field from your form - * }, - * styles: { - * input: { - * 'font-size': '18px' // Change the font size for all inputs - * }, - * ':focus': { - * color: 'red' // Change the focus color to red for all inputs - * } - * } - * } - * } - * }, callback); - * - * @example - * Mask Card Inputs - * braintree.dropin.create({ - * authorization: 'CLIENT_AUTHORIZATION', - * container: '#dropin-container', - * card: { - * overrides: { - * fields: { - * number: { - * maskInput: { - * showLastFour: true - * } - * }, - * cvv: { - * maskInput: true - * } - * } - * } - * } - * }, callback); - * - * @example - * Including a cardholder name field - * braintree.dropin.create({ - * authorization: 'CLIENT_AUTHORIZATION', - * container: '#dropin-container', - * card: { - * cardholderName: true - * } - * }, callback); - * - * @example - * Including a required cardholder name field - * braintree.dropin.create({ - * authorization: 'CLIENT_AUTHORIZATION', - * container: '#dropin-container', - * card: { - * cardholderName: { - * required: true - * } - * } - * }, callback); - * - * @example - * Enabling 3D Secure - * braintree.dropin.create({ - * authorization: 'CLIENT_AUTHORIZATION', - * container: '#dropin-container', - * threeDSecure: { - * amount: '10.00' - * } - * }, callback); - * - * @example - * Enabled Vault Manager - * braintree.dropin.create({ - * authorization: 'CLIENT_AUTHORIZATION', - * container: '#dropin-container', - * vaultManager: true - * }, callback); - */ - -function create(options) { - if (!options.authorization) { - return Promise.reject(new DropinError('options.authorization is required.')); - } - - return client.create({ - authorization: options.authorization - }).catch(function (err) { - return Promise.reject(new DropinError({ - message: 'There was an error creating Drop-in.', - braintreeWebError: err - })); - }).then(function (clientInstance) { - clientInstance = setAnalyticsIntegration(clientInstance); - - if (clientInstance.getConfiguration().authorizationType === 'TOKENIZATION_KEY') { - analytics.sendEvent(clientInstance, 'started.tokenization-key'); - } else { - analytics.sendEvent(clientInstance, 'started.client-token'); - } - - return new Promise(function (resolve, reject) { - new Dropin({ - merchantConfiguration: options, - client: clientInstance - })._initialize(function (err, instance) { - if (err) { - reject(err); - - return; - } - - resolve(instance); - }); - }); - }); -} - -function setAnalyticsIntegration(clientInstance) { - var configuration = clientInstance.getConfiguration(); - - configuration.analyticsMetadata.integration = constants.INTEGRATION; - configuration.analyticsMetadata.integrationType = constants.INTEGRATION; - configuration.analyticsMetadata.dropinVersion = VERSION; - - clientInstance.getConfiguration = function () { - return configuration; - }; - - return clientInstance; -} - -// we check for document's existence to support server side rendering -createFromScriptTag(create, typeof document !== 'undefined' && document.querySelector('script[data-braintree-dropin-authorization]')); - -module.exports = { - create: wrapPromise(create), - /** - * @description The current version of Drop-in, i.e. `{@pkg version}`. - * @type {string} - */ - VERSION: VERSION -}; - -},{"./constants":117,"./dropin":119,"./lib/analytics":122,"./lib/create-from-script-tag":127,"./lib/dropin-error":129,"./lib/promise":137,"@braintree/wrap-promise":21,"braintree-web/client":30}],121:[function(require,module,exports){ -'use strict'; - -function addSelectionEventHandler(element, func) { - element.addEventListener('click', func); - element.addEventListener('keyup', function (event) { - if (event.keyCode === 13) { - func(); - } - }); -} - -module.exports = addSelectionEventHandler; - -},{}],122:[function(require,module,exports){ -'use strict'; - -var atob = require('./polyfill').atob; -var constants = require('../constants'); -var braintreeClientVersion = require('braintree-web/client').VERSION; - -function _millisToSeconds(millis) { - return Math.floor(millis / 1000); -} - -function sendAnalyticsEvent(client, kind, callback) { - var configuration = client.getConfiguration(); - var analyticsRequest = client._request; - var timestamp = _millisToSeconds(Date.now()); - var url = configuration.gatewayConfiguration.analytics.url; - var data = { - analytics: [{ - kind: constants.ANALYTICS_PREFIX + kind, - timestamp: timestamp - }], - _meta: configuration.analyticsMetadata, - braintreeLibraryVersion: braintreeClientVersion - }; - - if (configuration.authorizationType === 'TOKENIZATION_KEY') { - data.tokenizationKey = configuration.authorization; - } else { - data.authorizationFingerprint = JSON.parse(atob(configuration.authorization)).authorizationFingerprint; - } - - analyticsRequest({ - url: url, - method: 'post', - data: data, - timeout: constants.ANALYTICS_REQUEST_TIMEOUT_MS - }, callback); -} - -module.exports = { - sendEvent: sendAnalyticsEvent -}; - -},{"../constants":117,"./polyfill":136,"braintree-web/client":30}],123:[function(require,module,exports){ -'use strict'; - -var Promise = require('./promise'); - -function loadScript(options) { - var script = document.createElement('script'); - var attrs = options.dataAttributes || {}; - var container = options.container || document.head; - - script.src = options.src; - script.id = options.id; - script.async = true; - - Object.keys(attrs).forEach(function (key) { - script.setAttribute('data-' + key, attrs[key]); - }); - - return new Promise(function (resolve, reject) { - script.addEventListener('load', resolve); - script.addEventListener('error', function () { - reject(new Error(options.src + ' failed to load.')); - }); - script.addEventListener('abort', function () { - reject(new Error(options.src + ' has aborted.')); - }); - container.appendChild(script); - }); -} - -function loadStylesheet(options) { - var stylesheet = document.createElement('link'); - var container = options.container || document.head; - - stylesheet.setAttribute('rel', 'stylesheet'); - stylesheet.setAttribute('type', 'text/css'); - stylesheet.setAttribute('href', options.href); - stylesheet.setAttribute('id', options.id); - - if (container.firstChild) { - container.insertBefore(stylesheet, container.firstChild); - } else { - container.appendChild(stylesheet); - } -} - -module.exports = { - loadScript: loadScript, - loadStylesheet: loadStylesheet -}; - -},{"./promise":137}],124:[function(require,module,exports){ -arguments[4][63][0].apply(exports,arguments) -},{"dup":63}],125:[function(require,module,exports){ -'use strict'; - -var isIe9 = require('@braintree/browser-detection/is-ie9'); -var isIe10 = require('@braintree/browser-detection/is-ie10'); - -module.exports = { - isIe9: isIe9, - isIe10: isIe10 -}; - -},{"@braintree/browser-detection/is-ie10":5,"@braintree/browser-detection/is-ie9":7}],126:[function(require,module,exports){ -'use strict'; - -function _classesOf(element) { - return element.className.trim().split(/\s+/); -} - -function _hasClass(element, classname) { - return new RegExp('\\b' + classname + '\\b').test(element.className); -} - -function add(element) { - var toAdd = Array.prototype.slice.call(arguments, 1); - var className = _classesOf(element).filter(function (classname) { - return toAdd.indexOf(classname) === -1; - }).concat(toAdd).join(' '); - - element.className = className; -} - -function remove(element) { - var toRemove = Array.prototype.slice.call(arguments, 1); - var className = _classesOf(element).filter(function (classname) { - return toRemove.indexOf(classname) === -1; - }).join(' '); - - element.className = className; -} - -function toggle(element, classname, adding) { - if (arguments.length < 3) { - if (_hasClass(element, classname)) { - remove(element, classname); - } else { - add(element, classname); - } - } else if (adding) { - add(element, classname); - } else { - remove(element, classname); - } -} - -module.exports = { - add: add, - remove: remove, - toggle: toggle -}; - -},{}],127:[function(require,module,exports){ -'use strict'; - -var analytics = require('./analytics'); -var find = require('./find-parent-form'); -var uuid = require('./uuid'); -var DropinError = require('./dropin-error'); -var kebabCaseToCamelCase = require('./kebab-case-to-camel-case'); -var WHITELISTED_DATA_ATTRIBUTES = [ - 'locale', - 'payment-option-priority', - - 'data-collector.kount', - 'data-collector.paypal', - - // camelcase version was accidentally used initially. - // we add the kebab case version to match the docs, but - // we retain the camelcase version for backwards compatibility - 'card.cardholderName', - 'card.cardholderName.required', - 'card.cardholder-name', - 'card.cardholder-name.required', - - 'paypal.amount', - 'paypal.currency', - 'paypal.flow', - 'paypal.landing-page-type', - - 'paypal-credit.amount', - 'paypal-credit.currency', - 'paypal-credit.flow', - 'paypal-credit.landing-page-type' -]; - -function injectHiddenInput(name, value, form) { - var input = form.querySelector('[name="' + name + '"]'); - - if (!input) { - input = document.createElement('input'); - input.type = 'hidden'; - input.name = name; - form.appendChild(input); - } - - input.value = value; -} - -function addCompositeKeyValuePairToObject(obj, key, value) { - var decomposedKeys = key.split('.'); - var topLevelKey = kebabCaseToCamelCase(decomposedKeys[0]); - - if (decomposedKeys.length === 1) { - obj[topLevelKey] = deserialize(value); - } else { - obj[topLevelKey] = obj[topLevelKey] || {}; - addCompositeKeyValuePairToObject(obj[topLevelKey], decomposedKeys.slice(1).join('.'), value); - } -} - -function deserialize(value) { - try { - return JSON.parse(value); - } catch (e) { - return value; - } -} - -function createFromScriptTag(createFunction, scriptTag) { - var authorization, container, createOptions, form; - - if (!scriptTag) { - return; - } - - authorization = scriptTag.getAttribute('data-braintree-dropin-authorization'); - - if (!authorization) { - throw new DropinError('Authorization not found in data-braintree-dropin-authorization attribute'); - } - - container = document.createElement('div'); - container.id = 'braintree-dropin-' + uuid(); - - form = find.findParentForm(scriptTag); - - if (!form) { - throw new DropinError('No form found for script tag integration.'); - } - - form.addEventListener('submit', function (event) { - event.preventDefault(); - }); - - scriptTag.parentNode.insertBefore(container, scriptTag); - - createOptions = { - authorization: authorization, - container: container - }; - - WHITELISTED_DATA_ATTRIBUTES.forEach(function (compositeKey) { - var value = scriptTag.getAttribute('data-' + compositeKey); - - if (value == null) { - return; - } - - addCompositeKeyValuePairToObject(createOptions, compositeKey, value); - }); - - createFunction(createOptions).then(function (instance) { - analytics.sendEvent(instance._client, 'integration-type.script-tag'); - form.addEventListener('submit', function () { - instance.requestPaymentMethod(function (requestPaymentError, payload) { - if (requestPaymentError) { - return; - } - - injectHiddenInput('payment_method_nonce', payload.nonce, form); - - if (payload.deviceData) { - injectHiddenInput('device_data', payload.deviceData, form); - } - - form.submit(); - }); - }); - }); -} - -module.exports = createFromScriptTag; - -},{"./analytics":122,"./dropin-error":129,"./find-parent-form":131,"./kebab-case-to-camel-case":135,"./uuid":142}],128:[function(require,module,exports){ -(function (global){ -'use strict'; - -var constants = require('../constants'); -var assets = require('./assets'); -var Promise = require('./promise'); - -function DataCollector(config) { - this._config = config; -} - -DataCollector.prototype.initialize = function () { - var self = this; - - return Promise.resolve().then(function () { - var braintreeWebVersion; - - if (global.braintree && global.braintree.dataCollector) { - return Promise.resolve(); - } - - braintreeWebVersion = self._config.client.getVersion(); - - return assets.loadScript({ - src: 'https://js.braintreegateway.com/web/' + braintreeWebVersion + '/js/data-collector.min.js', - id: constants.DATA_COLLECTOR_SCRIPT_ID - }); - }).then(function () { - return global.braintree.dataCollector.create(self._config); - }).then(function (instance) { - self._instance = instance; - }); -}; - -DataCollector.prototype.getDeviceData = function () { - return this._instance.deviceData; -}; - -DataCollector.prototype.teardown = function () { - return this._instance.teardown(); -}; - -module.exports = DataCollector; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../constants":117,"./assets":123,"./promise":137}],129:[function(require,module,exports){ -'use strict'; - -function isBraintreeWebError(err) { - return err.name === 'BraintreeError'; -} - -function DropinError(err) { - this.name = 'DropinError'; - - if (typeof err === 'string') { - this.message = err; - } else { - this.message = err.message; - } - - if (isBraintreeWebError(err)) { - this._braintreeWebError = err; - } else { - this._braintreeWebError = err.braintreeWebError; - } -} - -DropinError.prototype = Object.create(Error.prototype); -DropinError.prototype.constructor = DropinError; - -module.exports = DropinError; - -},{}],130:[function(require,module,exports){ -arguments[4][79][0].apply(exports,arguments) -},{"dup":79}],131:[function(require,module,exports){ -'use strict'; - -function findParentForm(element) { - var parentNode = element.parentNode; - - if (!parentNode || parentNode.nodeName === 'FORM') { - return parentNode; - } - - return findParentForm(parentNode); -} - -module.exports = { - findParentForm: findParentForm -}; - -},{}],132:[function(require,module,exports){ -'use strict'; - -var atob = require('./polyfill').atob; - -module.exports = function (client) { - var authorizationFingerprint; - var configuration = client.getConfiguration(); - - if (configuration.authorizationType !== 'TOKENIZATION_KEY') { - authorizationFingerprint = JSON.parse(atob(configuration.authorization)).authorizationFingerprint; - - return !authorizationFingerprint || authorizationFingerprint.indexOf('customer_id=') === -1; - } - - return true; -}; - -},{"./polyfill":136}],133:[function(require,module,exports){ -(function (global){ -'use strict'; - -function isHTTPS() { - return global.location.protocol === 'https:'; -} - -module.exports = { - isHTTPS: isHTTPS -}; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],134:[function(require,module,exports){ -(function (global){ -'use strict'; - -module.exports = function (win) { - win = win || global; - - return Boolean(win.document.characterSet && win.document.characterSet.toLowerCase() === 'utf-8'); -}; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],135:[function(require,module,exports){ -'use strict'; - -function kebabCaseToCamelCase(kebab) { - var parts = kebab.split('-'); - var first = parts.shift(); - var capitalizedParts = parts.map(function (part) { - return part.charAt(0).toUpperCase() + part.substring(1); - }); - - return [first].concat(capitalizedParts).join(''); -} - -module.exports = kebabCaseToCamelCase; - -},{}],136:[function(require,module,exports){ -(function (global){ -'use strict'; -/* eslint-disable no-mixed-operators */ - -var atobNormalized = typeof global.atob === 'function' ? global.atob : atob; - -function atob(base64String) { - var a, b, c, b1, b2, b3, b4, i; - var base64Matcher = new RegExp('^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})([=]{1,2})?$'); - var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; - var result = ''; - - if (!base64Matcher.test(base64String)) { - throw new Error('Non base64 encoded input passed to window.atob polyfill'); - } - - i = 0; - do { - b1 = characters.indexOf(base64String.charAt(i++)); - b2 = characters.indexOf(base64String.charAt(i++)); - b3 = characters.indexOf(base64String.charAt(i++)); - b4 = characters.indexOf(base64String.charAt(i++)); - - a = (b1 & 0x3F) << 2 | b2 >> 4 & 0x3; - b = (b2 & 0xF) << 4 | b3 >> 2 & 0xF; - c = (b3 & 0x3) << 6 | b4 & 0x3F; - - result += String.fromCharCode(a) + (b ? String.fromCharCode(b) : '') + (c ? String.fromCharCode(c) : ''); - } while (i < base64String.length); - - return result; -} - -module.exports = { - atob: function (base64String) { - return atobNormalized.call(global, base64String); - }, - _atob: atob -}; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],137:[function(require,module,exports){ -arguments[4][87][0].apply(exports,arguments) -},{"dup":87,"promise-polyfill":113}],138:[function(require,module,exports){ -'use strict'; - -module.exports = function (string) { - if (typeof string !== 'string') { - return ''; - } - - return string - .replace(//g, '>'); -}; - -},{}],139:[function(require,module,exports){ -'use strict'; - -module.exports = function () { - var el = document.createElement('div'); - var prop = 'flex-basis: 1px'; - var prefixes = [ - '-webkit-', - '-moz-', - '-ms-', - '-o-', - '' - ]; - - prefixes.forEach(function (prefix) { - el.style.cssText += prefix + prop; - }); - - return Boolean(el.style.length); -}; - -},{}],140:[function(require,module,exports){ -'use strict'; - - -var classlist = require('./classlist'); -var threeDSecure = require('braintree-web/three-d-secure'); -var Promise = require('./promise'); - -function ThreeDSecure(client, merchantConfiguration, cardVerificationString) { - this._client = client; - this._config = merchantConfiguration; - this._modal = this._setupModal(cardVerificationString); -} - -ThreeDSecure.prototype.initialize = function () { - var self = this; - - return threeDSecure.create({ - client: this._client - }).then(function (instance) { - self._instance = instance; - }); -}; - -ThreeDSecure.prototype.verify = function (nonce) { - var self = this; - - this._revealModal(); - - return Promise.all([ - this._waitForThreeDSecure(), - this._instance.verifyCard({ - nonce: nonce, - amount: this._config.amount, - showLoader: false, - addFrame: function (err, iframe) { - var modalBody = self._modal.querySelector('.braintree-three-d-secure__modal-body'); - - iframe.onload = function () { - classlist.add(modalBody, 'braintree-three-d-secure__frame-active'); - }; - - modalBody.appendChild(iframe); - }, - removeFrame: function () { - self._cleanupModal(); - } - }).then(function (payload) { - self._resolveThreeDSecure(); - - return payload; - }) - ]).then(function (result) { - self._cleanupModal(); - - return result[1]; - }).catch(function (err) { - self._cleanupModal(); - - if (err.type === 'THREE_D_SECURE_CANCELLED') { - return Promise.resolve(err.payload); - } - - return Promise.reject(err); - }); -}; - -ThreeDSecure.prototype.cancel = function () { - var self = this; - - return this._instance.cancelVerifyCard().then(function (payload) { - self._rejectThreeDSecure({ - type: 'THREE_D_SECURE_CANCELLED', - payload: { - nonce: payload.nonce, - liabilityShifted: payload.liabilityShifted, - liabilityShiftPossible: payload.liabilityShiftPossible - } - }); - }).catch(function () { - // only reason this would reject - // is if there is no verification in progress - // so we just swallow the error - }).then(function () { - self._cleanupModal(); - }); -}; - -ThreeDSecure.prototype.updateConfiguration = function (key, value) { - this._config[key] = value; -}; - -ThreeDSecure.prototype.teardown = function () { - return this._instance.teardown(); -}; - -ThreeDSecure.prototype._cleanupModal = function () { - var iframe = this._modal.querySelector('iframe'); - - classlist.remove(this._modal.querySelector('.braintree-three-d-secure__modal'), 'braintree-three-d-secure__frame_visible'); - classlist.remove(this._modal.querySelector('.braintree-three-d-secure__backdrop'), 'braintree-three-d-secure__frame_visible'); - - if (iframe && iframe.parentNode) { - iframe.parentNode.removeChild(iframe); - } - setTimeout(function () { - if (this._modal.parentNode) { - this._modal.parentNode.removeChild(this._modal); - } - }.bind(this), 300); -}; - -ThreeDSecure.prototype._setupModal = function (cardVerificationString) { - var self = this; - var modal = document.createElement('div'); - - modal.innerHTML = "
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n {{cardVerification}}\n
\n \n \n \n
\n
\n
\n
\n
\n
\n" - .replace('{{cardVerification}}', cardVerificationString); - - modal.querySelector('.braintree-three-d-secure__modal-close').addEventListener('click', function () { - self.cancel(); - }); - - return modal; -}; - -ThreeDSecure.prototype._waitForThreeDSecure = function () { - var self = this; - - return new Promise(function (resolve, reject) { - self._resolveThreeDSecure = resolve; - self._rejectThreeDSecure = reject; - }); -}; - -ThreeDSecure.prototype._revealModal = function () { - document.body.appendChild(this._modal); - classlist.add(this._modal.querySelector('.braintree-three-d-secure__backdrop'), 'braintree-three-d-secure__frame_visible'); - setTimeout(function () { - classlist.add(this._modal.querySelector('.braintree-three-d-secure__modal'), 'braintree-three-d-secure__frame_visible'); - }.bind(this), 10); -}; - -module.exports = ThreeDSecure; - -},{"./classlist":126,"./promise":137,"braintree-web/three-d-secure":97}],141:[function(require,module,exports){ -'use strict'; - -var browserDetection = require('./browser-detection'); - -function isHidden(element) { - if (!element) { // no parentNode, so nothing containing the element is hidden - return false; - } - - if (element.style.display === 'none') { - return true; - } - - return isHidden(element.parentNode); -} - -function onTransitionEnd(element, propertyName, callback) { - if (browserDetection.isIe9() || isHidden(element)) { - callback(); - - return; - } - - function transitionEventListener(event) { - if (event.propertyName === propertyName) { - element.removeEventListener('transitionend', transitionEventListener); - callback(); - } - } - - element.addEventListener('transitionend', transitionEventListener); -} - -module.exports = { - onTransitionEnd: onTransitionEnd -}; - -},{"./browser-detection":125}],142:[function(require,module,exports){ -'use strict'; -/* eslint-disable no-mixed-operators */ - -function uuid() { - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { - var r = Math.random() * 16 | 0; - var v = c === 'x' ? r : r & 0x3 | 0x8; - - return v.toString(16); - }); -} - -module.exports = uuid; - -},{}],143:[function(require,module,exports){ -'use strict'; - -module.exports = { - "payingWith": "Betaler med {{paymentSource}}", - "chooseAnotherWayToPay": "Vælg en anden betalingsmetode", - "chooseAWayToPay": "Vælg, hvordan du vil betale", - "otherWaysToPay": "Andre betalingsmetoder", - "edit": "Rediger", - "doneEditing": "Udført", - "editPaymentMethods": "Rediger betalingsmetoder", - "CreditCardDeleteConfirmationMessage": "Vil du slette {{secondaryIdentifier}}-kortet, der slutter på {{identifier}}?", - "PayPalAccountDeleteConfirmationMessage": "Vil du slette PayPal-kontoen {{identifier}}?", - "VenmoAccountDeleteConfirmationMessage": "Er du sikker på, at du vil slette Venmo-kontoen med brugernavnet {{identifier}}?", - "genericDeleteConfirmationMessage": "Er du sikker på, at du vil slette denne betalingsmetode?", - "deleteCancelButton": "Annuller", - "deleteConfirmationButton": "Slet", - "cardVerification": "Bekræftelse af kort", - "fieldEmptyForCvv": "Du skal angive kontrolcifrene.", - "fieldEmptyForExpirationDate": "Du skal angive udløbsdatoen.", - "fieldEmptyForCardholderName": "Du skal angive kortindehaverens navn.", - "fieldTooLongForCardholderName": "Kortejerens navn skal være mindre end 256 tegn.", - "fieldEmptyForNumber": "Du skal angive et nummer.", - "fieldEmptyForPostalCode": "Du skal angive et postnummer.", - "fieldInvalidForCvv": "Sikkerhedskoden er ugyldig.", - "fieldInvalidForExpirationDate": "Udløbsdatoen er ugyldig.", - "fieldInvalidForNumber": "Kortnummeret er ugyldigt.", - "fieldInvalidForPostalCode": "Postnummeret er ugyldigt.", - "genericError": "Der opstod en fejl.", - "hostedFieldsTokenizationFailOnDuplicateError": "Dette betalingskort er allerede en gemt betalingsmetode.", - "hostedFieldsFailedTokenizationError": "Tjek oplysningerne, og prøv igen.", - "hostedFieldsFieldsInvalidError": "Tjek oplysningerne, og prøv igen.", - "hostedFieldsTokenizationNetworkErrorError": "Netværksfejl. Prøv igen.", - "hostedFieldsTokenizationCvvVerificationFailedError": "Betalingskortet blev ikke bekræftet. Kontrollér oplysningerne, og prøv igen.", - "paypalAccountTokenizationFailedError": "PayPal-kontoen blev ikke tilføjet. Prøv igen.", - "paypalFlowFailedError": "Der kunne ikke oprettes forbindelse til PayPal. Prøv igen.", - "paypalTokenizationRequestActiveError": "PayPal-betalingen er i gang med at blive autoriseret.", - "venmoCanceledError": "Der opstod en fejl. Sørg for, at du har den seneste version af Venmo-appen installeret på din enhed, og at din browser understøtter skift til Venmo.", - "vaultManagerPaymentMethodDeletionError": "Vi kunne ikke slette betalingsmetode. Prøv igen.", - "venmoAppFailedError": "Venmo-appen blev ikke fundet på din enhed.", - "unsupportedCardTypeError": "Korttypen understøttes ikke. Prøv et andet kort.", - "applePayTokenizationError": "Der opstod en netværksfejl under behandlingen af betalingen med Apple Pay. Prøv igen.", - "applePayActiveCardError": "Knyt et understøttet kort til din Apple Pay-e-pung.", - "cardholderNameLabel": "Kortindehaverens navn", - "cardNumberLabel": "Kortnummer", - "cvvLabel": "Kontrolcifre", - "cvvThreeDigitLabelSubheading": "(3 cifre)", - "cvvFourDigitLabelSubheading": "(4 cifre)", - "cardholderNamePlaceholder": "Kortindehaverens navn", - "expirationDateLabel": "Udløbsdato", - "expirationDateLabelSubheading": "(MM/ÅÅ)", - "expirationDatePlaceholder": "MM/ÅÅ", - "postalCodeLabel": "Postnummer", - "payWithCard": "Betal med kort", - "endingIn": "Der slutter på {{lastFourCardDigits}}", - "Apple Pay": "Apple Pay", - "Venmo": "Venmo", - "Card": "Kort", - "PayPal": "PayPal", - "PayPal Credit": "PayPal Credit", - "Google Pay": "Google Pay", - "American Express": "American Express", - "Discover": "Discover", - "Diners Club": "Diners Club", - "MasterCard": "Mastercard", - "Visa": "Visa", - "JCB": "JCB", - "Maestro": "Maestro", - "UnionPay": "UnionPay" -}; - -},{}],144:[function(require,module,exports){ -'use strict'; - -module.exports = { - "payingWith": "Zahlen mit {{paymentSource}}", - "chooseAnotherWayToPay": "Andere Zahlungsmethode wählen", - "chooseAWayToPay": "Wie möchten Sie bezahlen?", - "otherWaysToPay": "Andere Zahlungsmethoden", - "edit": "Bearbeiten", - "doneEditing": "Fertig", - "editPaymentMethods": "Zahlungsquellen bearbeiten", - "CreditCardDeleteConfirmationMessage": "{{secondaryIdentifier}} Karte mit den Endziffern {{identifier}} löschen?", - "PayPalAccountDeleteConfirmationMessage": "PayPal-Konto {{identifier}} löschen?", - "VenmoAccountDeleteConfirmationMessage": "Wollen Sie das Venmo-Konto mit dem Benutzernamen {{identifier}} wirklich löschen?", - "genericDeleteConfirmationMessage": "Wollen Sie diese Zahlungsquelle wirklich löschen?", - "deleteCancelButton": "Abbrechen", - "deleteConfirmationButton": "Löschen", - "cardVerification": "Kartenbestätigung", - "fieldEmptyForCvv": "Geben Sie die Kartenprüfnummer ein.", - "fieldEmptyForExpirationDate": "Geben Sie das Ablaufdatum ein.", - "fieldEmptyForCardholderName": "Geben Sie den Namen des Karteninhabers ein.", - "fieldTooLongForCardholderName": "Der Name des Karteninhabers darf 255 Zeichen nicht übersteigen.", - "fieldEmptyForNumber": "Geben Sie die Nummer ein.", - "fieldEmptyForPostalCode": "Geben Sie die PLZ ein.", - "fieldInvalidForCvv": "Die Kartenprüfnummer ist ungültig.", - "fieldInvalidForExpirationDate": "Das Ablaufdatum ist ungültig.", - "fieldInvalidForNumber": "Die Kreditkartennummer ist ungültig.", - "fieldInvalidForPostalCode": "Die PLZ ist ungültig.", - "genericError": "Bei uns ist ein Problem aufgetreten.", - "hostedFieldsTokenizationFailOnDuplicateError": "Diese Kreditkarte ist bereits als gespeicherte Zahlungsmethode vorhanden.", - "hostedFieldsFailedTokenizationError": "Überprüfen Sie Ihre Eingabe und versuchen Sie es erneut.", - "hostedFieldsFieldsInvalidError": "Überprüfen Sie Ihre Eingabe und versuchen Sie es erneut.", - "hostedFieldsTokenizationNetworkErrorError": "Netzwerkfehler. Versuchen Sie es erneut.", - "hostedFieldsTokenizationCvvVerificationFailedError": "Überprüfung der Karte fehlgeschlagen. Überprüfen Sie Ihre Eingabe und versuchen Sie es erneut.", - "paypalAccountTokenizationFailedError": "Beim Hinzufügen des PayPal-Kontos ist ein Problem aufgetreten. Versuchen Sie es erneut.", - "paypalFlowFailedError": "Beim Verbinden mit PayPal ist ein Problem aufgetreten. Versuchen Sie es erneut.", - "paypalTokenizationRequestActiveError": "Die PayPal-Zahlung wird bereits autorisiert.", - "venmoCanceledError": "Etwas ist schief gelaufen. Vergewissern Sie sich, dass Sie die neueste Version der Venmo-App auf Ihrem Gerät installiert haben und Ihr Browser den Wechsel zu Venmo unterstützt.", - "vaultManagerPaymentMethodDeletionError": "Die Zahlungsquelle konnte nicht gelöscht werden. Versuchen Sie es erneut.", - "venmoAppFailedError": "Die Venmo-App wurde auf Ihrem Gerät nicht gefunden.", - "unsupportedCardTypeError": "Dieser Kreditkartentyp wird nicht unterstützt. Versuchen Sie es mit einer anderen Karte.", - "applePayTokenizationError": "Netzwerkfehler bei der Zahlungsabwicklung mit Apple Pay. Versuchen Sie es erneut.", - "applePayActiveCardError": "Fügen Sie der Apple-Pay-Börse eine unterstützte Kreditkarte hinzu.", - "cardholderNameLabel": "Name des Karteninhabers", - "cardNumberLabel": "Kartennummer", - "cvvLabel": "Prüfnr.", - "cvvThreeDigitLabelSubheading": "(3-stellig)", - "cvvFourDigitLabelSubheading": "(4-stellig)", - "cardholderNamePlaceholder": "Name des Karteninhabers", - "expirationDateLabel": "Gültig bis", - "expirationDateLabelSubheading": "(MM/JJ)", - "expirationDatePlaceholder": "MM/JJ", - "postalCodeLabel": "PLZ", - "payWithCard": "Mit Kreditkarte zahlen", - "endingIn": "Mit den Endziffern {{lastFourCardDigits}}", - "Apple Pay": "Apple Pay", - "Venmo": "Venmo", - "Card": "Kreditkarte", - "PayPal": "PayPal", - "PayPal Credit": "PayPal Credit", - "Google Pay": "Google Pay", - "American Express": "American Express", - "Discover": "Discover", - "Diners Club": "Diners Club", - "MasterCard": "Mastercard", - "Visa": "Visa", - "JCB": "JCB", - "Maestro": "Maestro", - "UnionPay": "UnionPay" -}; - -},{}],145:[function(require,module,exports){ -'use strict'; - -module.exports = { - "payingWith": "Paying with {{paymentSource}}", - "chooseAnotherWayToPay": "Choose another way to pay", - "chooseAWayToPay": "Choose a way to pay", - "otherWaysToPay": "Other ways to pay", - "edit": "Edit", - "doneEditing": "Done", - "editPaymentMethods": "Edit payment methods", - "CreditCardDeleteConfirmationMessage": "Delete {{secondaryIdentifier}} card ending in {{identifier}}?", - "PayPalAccountDeleteConfirmationMessage": "Delete PayPal account {{identifier}}?", - "VenmoAccountDeleteConfirmationMessage": "Are you sure you want to delete the Venmo account with username {{identifier}}?", - "genericDeleteConfirmationMessage": "Are you sure you want to delete this payment method?", - "deleteCancelButton": "Cancel", - "deleteConfirmationButton": "Delete", - "cardVerification": "Card verification", - "fieldEmptyForCvv": "Please fill out a CVV.", - "fieldEmptyForExpirationDate": "Please fill out an expiry date.", - "fieldEmptyForCardholderName": "Please fill out a cardholder name.", - "fieldTooLongForCardholderName": "Cardholder name must be less than 256 characters.", - "fieldEmptyForNumber": "Please fill out a number.", - "fieldEmptyForPostalCode": "Please fill out a postcode.", - "fieldInvalidForCvv": "This security code is not valid.", - "fieldInvalidForExpirationDate": "This expiry date is not valid.", - "fieldInvalidForNumber": "This card number is not valid.", - "fieldInvalidForPostalCode": "This postcode is not valid.", - "genericError": "Something went wrong on our end.", - "hostedFieldsTokenizationFailOnDuplicateError": "This credit card already exists as a saved payment method.", - "hostedFieldsFailedTokenizationError": "Check your entries and try again.", - "hostedFieldsFieldsInvalidError": "Check your entries and try again.", - "hostedFieldsTokenizationNetworkErrorError": "Network error. Please try again.", - "hostedFieldsTokenizationCvvVerificationFailedError": "Credit card verification failed. Check your entries and try again.", - "paypalAccountTokenizationFailedError": "Something went wrong while adding the PayPal account. Please try again.", - "paypalFlowFailedError": "Something went wrong while connecting to PayPal. Please try again.", - "paypalTokenizationRequestActiveError": "PayPal payment authorisation is already in progress.", - "venmoCanceledError": "We're sorry, something seems to have gone wrong. Please ensure you have the most recent version of the Venmo app installed on your device and your browser supports switching to Venmo.", - "vaultManagerPaymentMethodDeletionError": "Unable to delete payment method, try again.", - "venmoAppFailedError": "The Venmo app wasn't found on your device.", - "unsupportedCardTypeError": "This card type is not supported. Please try another card.", - "applePayTokenizationError": "A network error occurred while processing the Apple Pay payment. Please try again.", - "applePayActiveCardError": "Link a supported card to your Apple Pay wallet.", - "cardholderNameLabel": "Cardholder Name", - "cardNumberLabel": "Card Number", - "cvvLabel": "CVV", - "cvvThreeDigitLabelSubheading": "(3 digits)", - "cvvFourDigitLabelSubheading": "(4 digits)", - "cardholderNamePlaceholder": "Cardholder Name", - "expirationDateLabel": "Expiry date", - "expirationDateLabelSubheading": "(MM/YY)", - "expirationDatePlaceholder": "MM/YY", - "postalCodeLabel": "Postcode", - "payWithCard": "Pay with credit or debit card", - "endingIn": "Ending in {{lastFourCardDigits}}", - "Apple Pay": "Apple Pay", - "Venmo": "Venmo", - "Card": "Card", - "PayPal": "PayPal", - "PayPal Credit": "PayPal Credit", - "Google Pay": "Google Pay", - "American Express": "American Express", - "Discover": "Discover", - "Diners Club": "Diners Club", - "MasterCard": "Mastercard", - "Visa": "Visa", - "JCB": "JCB", - "Maestro": "Maestro", - "UnionPay": "UnionPay" -}; - -},{}],146:[function(require,module,exports){ -'use strict'; - -module.exports = { - "payingWith": "Paying with {{paymentSource}}", - "chooseAnotherWayToPay": "Choose another way to pay", - "chooseAWayToPay": "Choose a way to pay", - "otherWaysToPay": "Other ways to pay", - "edit": "Edit", - "doneEditing": "Done", - "editPaymentMethods": "Edit funding sources", - "CreditCardDeleteConfirmationMessage": "Delete {{secondaryIdentifier}} card ending in {{identifier}}?", - "PayPalAccountDeleteConfirmationMessage": "Delete PayPal account {{identifier}}?", - "VenmoAccountDeleteConfirmationMessage": "Are you sure you want to delete the Venmo account with username {{identifier}}?", - "genericDeleteConfirmationMessage": "Are you sure you want to delete this funding source?", - "deleteCancelButton": "Cancel", - "deleteConfirmationButton": "Delete", - "cardVerification": "Card Verification", - "fieldEmptyForCvv": "Please fill in a CSC.", - "fieldEmptyForExpirationDate": "Please fill in an expiry date.", - "fieldEmptyForCardholderName": "Please fill in a cardholder name.", - "fieldTooLongForCardholderName": "Cardholder name must be less than 256 characters.", - "fieldEmptyForNumber": "Please fill in a number.", - "fieldEmptyForPostalCode": "Please fill in a postcode.", - "fieldInvalidForCvv": "This security code is not valid.", - "fieldInvalidForExpirationDate": "This expiry date is not valid.", - "fieldInvalidForNumber": "This card number is not valid.", - "fieldInvalidForPostalCode": "This postcode is not valid.", - "genericError": "Something went wrong on our end.", - "hostedFieldsTokenizationFailOnDuplicateError": "This credit card has already been added to your account as a funding source.", - "hostedFieldsFailedTokenizationError": "Please check your information and try again.", - "hostedFieldsFieldsInvalidError": "Please check your information and try again.", - "hostedFieldsTokenizationNetworkErrorError": "Network error. Please try again.", - "hostedFieldsTokenizationCvvVerificationFailedError": "Credit card verification failed. Please check your information and try again.", - "paypalAccountTokenizationFailedError": "Something went wrong while adding the PayPal account. Please try again.", - "paypalFlowFailedError": "Something went wrong while connecting to PayPal. Please try again.", - "paypalTokenizationRequestActiveError": "PayPal payment authorisation is already in progress.", - "venmoCanceledError": "We're sorry, something seems to have gone wrong. Make sure you have the most recent version of the Venmo app installed on your device and your browser supports the switch to Venmo.", - "vaultManagerPaymentMethodDeletionError": "Unable to delete funding source, try again.", - "venmoAppFailedError": "The Venmo app isn't on your device.", - "unsupportedCardTypeError": "This card type is not supported. Please try another card.", - "applePayTokenizationError": "A network error occurred while processing the Apple Pay payment. Please try again.", - "applePayActiveCardError": "Add a supported card to your Apple Pay wallet.", - "cardholderNameLabel": "Cardholder Name", - "cardNumberLabel": "Card Number", - "cvvLabel": "CSC", - "cvvThreeDigitLabelSubheading": "(3 digits)", - "cvvFourDigitLabelSubheading": "(4 digits)", - "cardholderNamePlaceholder": "Cardholder Name", - "expirationDateLabel": "Expiry Date", - "expirationDateLabelSubheading": "(MM/YY)", - "expirationDatePlaceholder": "MM/YY", - "postalCodeLabel": "Postcode", - "payWithCard": "Pay with card", - "endingIn": "Ending in {{lastFourCardDigits}}", - "Apple Pay": "Apple Pay", - "Venmo": "Venmo", - "Card": "Card", - "PayPal": "PayPal", - "PayPal Credit": "PayPal Credit", - "Google Pay": "Google Pay", - "American Express": "American Express", - "Discover": "Discover", - "Diners Club": "Diners Club", - "MasterCard": "Mastercard", - "Visa": "Visa", - "JCB": "JCB", - "Maestro": "Maestro", - "UnionPay": "UnionPay" -}; - -},{}],147:[function(require,module,exports){ -'use strict'; - -module.exports = { - payingWith: 'Paying with {{paymentSource}}', - chooseAnotherWayToPay: 'Choose another way to pay', - chooseAWayToPay: 'Choose a way to pay', - otherWaysToPay: 'Other ways to pay', - edit: 'Edit', - doneEditing: 'Done', - editPaymentMethods: 'Edit payment methods', - CreditCardDeleteConfirmationMessage: 'Delete {{secondaryIdentifier}} card ending in {{identifier}}?', - PayPalAccountDeleteConfirmationMessage: 'Delete PayPal account {{identifier}}?', - VenmoAccountDeleteConfirmationMessage: 'Are you sure you want to delete Venmo account with username {{identifier}}?', - genericDeleteConfirmationMessage: 'Are you sure you want to delete this payment method?', - deleteCancelButton: 'Cancel', - deleteConfirmationButton: 'Delete', - cardVerification: 'Card Verification', - // Errors - fieldEmptyForCvv: 'Please fill out a CVV.', - fieldEmptyForExpirationDate: 'Please fill out an expiration date.', - fieldEmptyForCardholderName: 'Please fill out a cardholder name.', - fieldEmptyForNumber: 'Please fill out a card number.', - fieldEmptyForPostalCode: 'Please fill out a postal code.', - fieldInvalidForCvv: 'This security code is not valid.', - fieldInvalidForExpirationDate: 'This expiration date is not valid.', - fieldInvalidForNumber: 'This card number is not valid.', - fieldInvalidForPostalCode: 'This postal code is not valid.', - fieldTooLongForCardholderName: 'Cardholder name must be less than 256 characters.', - genericError: 'Something went wrong on our end.', - hostedFieldsTokenizationFailOnDuplicateError: 'This credit card already exists as a saved payment method.', - hostedFieldsFailedTokenizationError: 'Please check your information and try again.', - hostedFieldsTokenizationCvvVerificationFailedError: 'Credit card verification failed. Please check your information and try again.', - hostedFieldsTokenizationNetworkErrorError: 'Network error. Please try again.', - hostedFieldsFieldsInvalidError: 'Please check your information and try again.', - paypalAccountTokenizationFailedError: 'Something went wrong adding the PayPal account. Please try again.', - paypalFlowFailedError: 'Something went wrong connecting to PayPal. Please try again.', - paypalTokenizationRequestActiveError: 'PayPal payment authorization is already in progress.', - applePayTokenizationError: 'A network error occurred while processing the Apple Pay payment. Please try again.', - applePayActiveCardError: 'Add a supported card to your Apple Pay wallet.', - vaultManagerPaymentMethodDeletionError: 'Unable to delete payment method, try again.', - venmoCanceledError: 'Something went wrong. Ensure you have the most recent version of the Venmo app installed on your device and your browser supports switching to Venmo.', - venmoAppFailedError: 'The Venmo app could not be found on your device.', - unsupportedCardTypeError: 'This card type is not supported. Please try another card.', - // Card form - cardholderNameLabel: 'Cardholder Name', - cardNumberLabel: 'Card Number', - cvvLabel: 'CVV', - cvvThreeDigitLabelSubheading: '(3 digits)', - cvvFourDigitLabelSubheading: '(4 digits)', - expirationDateLabel: 'Expiration Date', - expirationDateLabelSubheading: '(MM/YY)', - cardholderNamePlaceholder: 'Cardholder Name', - expirationDatePlaceholder: 'MM/YY', - postalCodeLabel: 'Postal Code', - payWithCard: 'Pay with card', - // Payment Method descriptions - endingIn: 'Ending in {{lastFourCardDigits}}', - Card: 'Card', - PayPal: 'PayPal', - 'PayPal Credit': 'PayPal Credit', - 'Apple Pay': 'Apple Pay', - 'Google Pay': 'Google Pay', - 'Venmo': 'Venmo', - 'American Express': 'American Express', - Discover: 'Discover', - 'Diners Club': 'Diners Club', - MasterCard: 'Mastercard', - Visa: 'Visa', - JCB: 'JCB', - Maestro: 'Maestro', - UnionPay: 'UnionPay' -}; - -},{}],148:[function(require,module,exports){ -'use strict'; - -module.exports = { - "payingWith": "Pago con {{paymentSource}}", - "chooseAnotherWayToPay": "Selecciona otra forma de pago.", - "chooseAWayToPay": "Selecciona una forma de pago.", - "otherWaysToPay": "Otras formas de pago", - "edit": "Modificar", - "doneEditing": "Hecho", - "editPaymentMethods": "Editar formas de pago", - "CreditCardDeleteConfirmationMessage": "¿Quieres eliminar la tarjeta {{secondaryIdentifier}} que termina en {{identifier}}?", - "PayPalAccountDeleteConfirmationMessage": "¿Quieres eliminar la cuenta PayPal {{identifier}}?", - "VenmoAccountDeleteConfirmationMessage": "¿Seguro de que deseas eliminar la cuenta de Venmo con nombre de usuario {{identifier}}?", - "genericDeleteConfirmationMessage": "¿Seguro que deseas eliminar esta forma de pago?", - "deleteCancelButton": "Cancelar", - "deleteConfirmationButton": "Eliminar", - "cardVerification": "Verificación de tarjeta", - "fieldEmptyForCvv": "Escribe el código CVV.", - "fieldEmptyForExpirationDate": "Escribe la fecha de vencimiento.", - "fieldEmptyForCardholderName": "Escribe el nombre de un titular de la tarjeta.", - "fieldTooLongForCardholderName": "El nombre del titular de la tarjeta debe tener menos de 256 caracteres.", - "fieldEmptyForNumber": "Escribe un número.", - "fieldEmptyForPostalCode": "Escribe el código postal.", - "fieldInvalidForCvv": "Este código de seguridad no es válido.", - "fieldInvalidForExpirationDate": "Esta fecha de vencimiento no es válida.", - "fieldInvalidForNumber": "Este número de tarjeta no es válido.", - "fieldInvalidForPostalCode": "Este código postal no es válido.", - "genericError": "Hemos tenido algún problema.", - "hostedFieldsTokenizationFailOnDuplicateError": "Esta tarjeta de crédito ya existe como forma de pago guardada.", - "hostedFieldsFailedTokenizationError": "Comprueba la información e inténtalo de nuevo.", - "hostedFieldsFieldsInvalidError": "Comprueba la información e inténtalo de nuevo.", - "hostedFieldsTokenizationNetworkErrorError": "Error de red. Inténtalo de nuevo.", - "hostedFieldsTokenizationCvvVerificationFailedError": "Error de verificación de la tarjeta de crédito. Comprueba la información e inténtalo de nuevo.", - "paypalAccountTokenizationFailedError": "Se ha producido un error al vincular la cuenta PayPal. Inténtalo de nuevo.", - "paypalFlowFailedError": "Se ha producido un error al conectarse a PayPal. Inténtalo de nuevo.", - "paypalTokenizationRequestActiveError": "Ya hay una autorización de pago de PayPal en curso.", - "venmoCanceledError": "Ha habido un problema. Asegúrate de que tienes la versión más reciente de la aplicación de Venmo instalada en tu dispositivo y de que tu navegador es compatible con cambiar a Venmo.", - "vaultManagerPaymentMethodDeletionError": "No se ha podido eliminar la forma de pago. Inténtalo de nuevo.", - "venmoAppFailedError": "No se ha encontrado la aplicación de Venmo en tu dispositivo.", - "unsupportedCardTypeError": "No se admite este tipo de tarjeta. Prueba con otra tarjeta.", - "applePayTokenizationError": "Se ha producido un error de red al procesar el pago con Apple Pay. Inténtalo de nuevo.", - "applePayActiveCardError": "Añade una tarjeta admitida a tu Wallet de Apple Pay.", - "cardholderNameLabel": "Nombre del titular de la tarjeta", - "cardNumberLabel": "Número de tarjeta", - "cvvLabel": "CVV", - "cvvThreeDigitLabelSubheading": "(3 dígitos)", - "cvvFourDigitLabelSubheading": "(4 dígitos)", - "cardholderNamePlaceholder": "Nombre del titular de la tarjeta", - "expirationDateLabel": "Fecha de vencimiento", - "expirationDateLabelSubheading": "(MM/AA)", - "expirationDatePlaceholder": "MM/AA", - "postalCodeLabel": "Código postal", - "payWithCard": "Pagar con tarjeta", - "endingIn": "Terminada en {{lastFourCardDigits}}", - "Apple Pay": "Apple Pay", - "Venmo": "Venmo", - "Card": "Tarjeta", - "PayPal": "PayPal", - "PayPal Credit": "PayPal Credit", - "Google Pay": "Google Pay", - "American Express": "American Express", - "Discover": "Discover", - "Diners Club": "Diners Club", - "MasterCard": "Mastercard", - "Visa": "Visa", - "JCB": "JCB", - "Maestro": "Maestro", - "UnionPay": "UnionPay" -}; - -},{}],149:[function(require,module,exports){ -'use strict'; - -module.exports = { - "payingWith": "Payer avec {{paymentSource}}", - "chooseAnotherWayToPay": "Choisir un autre mode de paiement", - "chooseAWayToPay": "Choisir le mode de paiement", - "otherWaysToPay": "Autres modes de paiement", - "edit": "Modifier", - "doneEditing": "Terminé", - "editPaymentMethods": "Modifier les modes de paiement", - "CreditCardDeleteConfirmationMessage": "Supprimer la carte {{secondaryIdentifier}} se terminant par {{identifier}}?", - "PayPalAccountDeleteConfirmationMessage": "Supprimer le compte PayPal {{identifier}}?", - "VenmoAccountDeleteConfirmationMessage": "Souhaitez-vous vraiment supprimer le compte Venmo avec le nom d’utilisateur {{identifier}}?", - "genericDeleteConfirmationMessage": "Voulez-vous vraiment supprimer ce mode de paiement?", - "deleteCancelButton": "Annuler", - "deleteConfirmationButton": "Supprimer", - "cardVerification": "Vérification de la carte", - "fieldEmptyForCvv": "Veuillez saisir un cryptogramme visuel.", - "fieldEmptyForExpirationDate": "Veuillez saisir une date d'expiration.", - "fieldEmptyForCardholderName": "Veuillez saisir un nom de titulaire de la carte.", - "fieldTooLongForCardholderName": "Le nom du titulaire de la carte doit contenir moins de 256 caractères.", - "fieldEmptyForNumber": "Veuillez saisir un numéro.", - "fieldEmptyForPostalCode": "Veuillez saisir un code postal.", - "fieldInvalidForCvv": "Ce cryptogramme visuel n'est pas valide.", - "fieldInvalidForExpirationDate": "Cette date d'expiration n'est pas valide.", - "fieldInvalidForNumber": "Ce numéro de carte n'est pas valide.", - "fieldInvalidForPostalCode": "Ce code postal n'est pas valide.", - "genericError": "Une erreur s'est produite de notre côté.", - "hostedFieldsTokenizationFailOnDuplicateError": "Cette carte de crédit existe déjà comme mode de paiement enregistré.", - "hostedFieldsFailedTokenizationError": "Vérifiez vos informations, puis réessayez.", - "hostedFieldsFieldsInvalidError": "Vérifiez vos informations, puis réessayez.", - "hostedFieldsTokenizationNetworkErrorError": "Erreur réseau. Veuillez réessayer.", - "hostedFieldsTokenizationCvvVerificationFailedError": "La vérification de la carte de crédit a échoué. Vérifiez vos informations, puis réessayez.", - "paypalAccountTokenizationFailedError": "Une erreur s'est produite lors de l'enregistrement du compte PayPal. Veuillez réessayer.", - "paypalFlowFailedError": "Une erreur s'est produite au cours de la connexion à PayPal. Veuillez réessayer.", - "paypalTokenizationRequestActiveError": "L'autorisation de paiement PayPal est déjà en cours.", - "venmoCanceledError": "Une erreur s'est produite. Assurez-vous que la version la plus récente de l'application Venmo est installée sur votre appareil et que votre navigateur prend Venmo en charge.", - "vaultManagerPaymentMethodDeletionError": "Impossible de supprimer le mode de paiement, essayez de nouveau.", - "venmoAppFailedError": "L'application Venmo est introuvable sur votre appareil.", - "unsupportedCardTypeError": "Ce type de carte n'est pas pris en charge. Veuillez essayer une autre carte.", - "applePayTokenizationError": "Une erreur de réseau s'est produite lors du traitement du paiement avec Apple Pay. Veuillez réessayer.", - "applePayActiveCardError": "Ajoutez une carte prise en charge à Apple Pay.", - "cardholderNameLabel": "Nom du titulaire de la carte", - "cardNumberLabel": "Numéro de carte", - "cvvLabel": "CVV", - "cvvThreeDigitLabelSubheading": "(3 chiffres)", - "cvvFourDigitLabelSubheading": "(4 chiffres)", - "cardholderNamePlaceholder": "Nom du titulaire de la carte", - "expirationDateLabel": "Date d'expiration", - "expirationDateLabelSubheading": "(MM/AA)", - "expirationDatePlaceholder": "MM/AA", - "postalCodeLabel": "Code postal", - "payWithCard": "Payer par carte", - "endingIn": "Se terminant par {{lastFourCardDigits}}", - "Apple Pay": "Apple Pay", - "Venmo": "Venmo", - "Card": "Carte", - "PayPal": "PayPal", - "PayPal Credit": "PayPal Credit", - "Google Pay": "Google Pay", - "American Express": "American Express", - "Discover": "Discover", - "Diners Club": "Diners Club", - "MasterCard": "Mastercard", - "Visa": "Visa", - "JCB": "JCB", - "Maestro": "Maestro", - "UnionPay": "UnionPay" -}; - -},{}],150:[function(require,module,exports){ -'use strict'; - -module.exports = { - "payingWith": "Payer avec {{paymentSource}}", - "chooseAnotherWayToPay": "Choisissez une autre façon de payer.", - "chooseAWayToPay": "Choisissez comment payer.", - "otherWaysToPay": "Autres façons de payer", - "edit": "Modifier", - "doneEditing": "Terminé", - "editPaymentMethods": "Modifier les sources d'approvisionnement", - "CreditCardDeleteConfirmationMessage": "Supprimer la carte {{secondaryIdentifier}} se terminant par {{identifier}} ?", - "PayPalAccountDeleteConfirmationMessage": "Supprimer le compte PayPal {{identifier}} ?", - "VenmoAccountDeleteConfirmationMessage": "Êtes-vous sûr de vouloir supprimer le compte Venmo avec le nom d'utilisateur {{identifier}} ?", - "genericDeleteConfirmationMessage": "Êtes-vous sûr de vouloir supprimer cette source d'approvisionnement ?", - "deleteCancelButton": "Annuler", - "deleteConfirmationButton": "Supprimer", - "cardVerification": "Vérification de la carte", - "fieldEmptyForCvv": "Entrez un cryptogramme visuel.", - "fieldEmptyForExpirationDate": "Entrez une date d'expiration.", - "fieldEmptyForCardholderName": "Entrez un nom du titulaire de la carte.", - "fieldTooLongForCardholderName": "Le nom du titulaire de la carte doit contenir moins de 256 caractères.", - "fieldEmptyForNumber": "Entrez un numéro.", - "fieldEmptyForPostalCode": "Entrez un code postal.", - "fieldInvalidForCvv": "Ce cryptogramme visuel n'est pas valide.", - "fieldInvalidForExpirationDate": "Cette date d'expiration n'est pas valide.", - "fieldInvalidForNumber": "Ce numéro de carte n'est pas valide.", - "fieldInvalidForPostalCode": "Ce code postal n'est pas valide.", - "genericError": "Une erreur est survenue.", - "hostedFieldsTokenizationFailOnDuplicateError": "Cette carte bancaire existe déjà comme mode de paiement enregistré.", - "hostedFieldsFailedTokenizationError": "Vérifiez vos informations et réessayez.", - "hostedFieldsFieldsInvalidError": "Vérifiez vos informations et réessayez.", - "hostedFieldsTokenizationNetworkErrorError": "Erreur réseau. Réessayez.", - "hostedFieldsTokenizationCvvVerificationFailedError": "Échec de vérification de la carte bancaire. Vérifiez vos informations et réessayez.", - "paypalAccountTokenizationFailedError": "Une erreur est survenue lors de l'ajout du compte PayPal. Réessayez.", - "paypalFlowFailedError": "Une erreur est survenue lors de la connexion à PayPal. Réessayez.", - "paypalTokenizationRequestActiveError": "L'autorisation de paiement PayPal est déjà en cours.", - "venmoCanceledError": "Une erreur est survenue. Vérifiez que vous disposez de la dernière version de l'application Venmo sur votre appareil et que votre navigateur prend en charge la redirection vers Venmo.", - "vaultManagerPaymentMethodDeletionError": "Impossible de supprimer la source d'approvisionnement. Réessayez.", - "venmoAppFailedError": "L'application Venmo est introuvable sur votre appareil.", - "unsupportedCardTypeError": "Ce type de carte n'est pas pris en charge. Essayez une autre carte.", - "applePayTokenizationError": "Une erreur réseau s'est produite lors du traitement du paiement Apple Pay. Réessayez.", - "applePayActiveCardError": "Enregistrez une carte prise en charge sur Apple Pay.", - "cardholderNameLabel": "Nom du titulaire de la carte", - "cardNumberLabel": "Nº de carte", - "cvvLabel": "Cryptogramme visuel", - "cvvThreeDigitLabelSubheading": "(3 chiffres)", - "cvvFourDigitLabelSubheading": "(4 chiffres)", - "cardholderNamePlaceholder": "Nom du titulaire de la carte", - "expirationDateLabel": "Date d'expiration", - "expirationDateLabelSubheading": "(MM/AA)", - "expirationDatePlaceholder": "MM/AA", - "postalCodeLabel": "Code postal", - "payWithCard": "Payer par carte", - "endingIn": "Se terminant par {{lastFourCardDigits}}", - "Apple Pay": "Apple Pay", - "Venmo": "Venmo", - "Card": "Carte", - "PayPal": "PayPal", - "PayPal Credit": "PayPal Credit", - "Google Pay": "Google Pay", - "American Express": "American Express", - "Discover": "Discover", - "Diners Club": "Diners Club", - "MasterCard": "Mastercard", - "Visa": "Visa", - "JCB": "JCB", - "Maestro": "Maestro", - "UnionPay": "UnionPay" -}; - -},{}],151:[function(require,module,exports){ -'use strict'; - -module.exports = { - "payingWith": "Membayar dengan {{paymentSource}}", - "chooseAnotherWayToPay": "Pilih metode pembayaran lain", - "chooseAWayToPay": "Pilih metode pembayaran", - "otherWaysToPay": "Metode pembayaran lain", - "edit": "Edit", - "doneEditing": "Selesai", - "editPaymentMethods": "Edit metode pembayaran", - "CreditCardDeleteConfirmationMessage": "Hapus kartu {{secondaryIdentifier}} yang berakhiran {{identifier}}?", - "PayPalAccountDeleteConfirmationMessage": "Hapus {{identifier}} rekening PayPal?", - "VenmoAccountDeleteConfirmationMessage": "Apakah Anda yakin akan menghapus rekening Venmo dengan nama pengguna {{identifier}}?", - "genericDeleteConfirmationMessage": "Apakah Anda yakin akan menghapus metode pembayaran ini?", - "deleteCancelButton": "Batalkan", - "deleteConfirmationButton": "Hapus", - "cardVerification": "Verifikasi Kartu", - "fieldEmptyForCvv": "Masukkan CVV.", - "fieldEmptyForExpirationDate": "Masukkan tanggal akhir berlaku.", - "fieldEmptyForCardholderName": "Masukkan nama pemegang kartu.", - "fieldTooLongForCardholderName": "Nama pemegang kartu harus kurang dari 256 karakter.", - "fieldEmptyForNumber": "Masukkan nomor.", - "fieldEmptyForPostalCode": "Masukkan kode pos.", - "fieldInvalidForCvv": "Kode keamanan ini tidak valid.", - "fieldInvalidForExpirationDate": "Tanggal akhir berlaku ini tidak valid.", - "fieldInvalidForNumber": "Nomor kartu ini tidak valid.", - "fieldInvalidForPostalCode": "Kode pos ini tidak valid.", - "genericError": "Terjadi kesalahan pada sistem kami.", - "hostedFieldsTokenizationFailOnDuplicateError": "Kartu kredit ini sudah dimasukkan sebagai metode pembayaran tersimpan.", - "hostedFieldsFailedTokenizationError": "Periksa informasi Anda dan coba lagi.", - "hostedFieldsFieldsInvalidError": "Periksa informasi Anda dan coba lagi.", - "hostedFieldsTokenizationNetworkErrorError": "Masalah jaringan. Coba lagi.", - "hostedFieldsTokenizationCvvVerificationFailedError": "Verifikasi kartu kredit gagal. Periksa informasi Anda dan coba lagi.", - "paypalAccountTokenizationFailedError": "Terjadi kesalahan saat menambahkan rekening PayPal. Coba lagi.", - "paypalFlowFailedError": "Terjadi kesalahan saat menyambung ke PayPal. Coba lagi.", - "paypalTokenizationRequestActiveError": "Otorisasi pembayaran PayPal sedang diproses.", - "venmoCanceledError": "Terdapat kesalahan. Pastikan Anda telah menginstal aplikasi Venmo versi terbaru pada perangkat dan peramban Anda mendukung untuk beralih ke Venmo.", - "vaultManagerPaymentMethodDeletionError": "Tidak dapat menghapus metode pembayaran, coba lagi.", - "venmoAppFailedError": "Aplikasi Venmo tidak dapat ditemukan pada perangkat Anda.", - "unsupportedCardTypeError": "Jenis kartu ini tidak didukung. Coba kartu lainnya.", - "applePayTokenizationError": "Terjadi kesalahan jaringan sewaktu memproses pembayaran melalui Apple Pay. Coba lagi.", - "applePayActiveCardError": "Tambahkan kartu yang didukung ke wallet Apple Pay.", - "cardholderNameLabel": "Nama Pemegang Kartu", - "cardNumberLabel": "Nomor Kartu", - "cvvLabel": "CVV", - "cvvThreeDigitLabelSubheading": "(3 angka)", - "cvvFourDigitLabelSubheading": "(4 angka)", - "cardholderNamePlaceholder": "Nama Pemegang Kartu", - "expirationDateLabel": "Tanggal Kedaluwarsa", - "expirationDateLabelSubheading": "(BB/TT)", - "expirationDatePlaceholder": "BB/TT", - "postalCodeLabel": "Kode Pos", - "payWithCard": "Bayar dengan kartu", - "endingIn": "Berakhiran {{lastTwoCardDigits}}", - "Apple Pay": "Apple Pay", - "Venmo": "Venmo", - "Card": "Kartu", - "PayPal": "PayPal", - "PayPal Credit": "PayPal Credit", - "Google Pay": "Google Pay", - "American Express": "American Express", - "Discover": "Discover", - "Diners Club": "Diners Club", - "MasterCard": "Mastercard", - "Visa": "Visa", - "JCB": "JCB", - "Maestro": "Maestro", - "UnionPay": "UnionPay" -}; - -},{}],152:[function(require,module,exports){ -/* eslint-disable camelcase */ -'use strict'; - -var assign = require('../lib/assign').assign; - -var fiveCharacterLocales = { - da_DK: require('./da_DK'), - de_DE: require('./de_DE'), - en_US: require('./en_US'), - en_AU: require('./en_AU'), - en_GB: require('./en_GB'), - es_ES: require('./es_ES'), - fr_CA: require('./fr_CA'), - fr_FR: require('./fr_FR'), - id_ID: require('./id_ID'), - it_IT: require('./it_IT'), - ja_JP: require('./ja_JP'), - ko_KR: require('./ko_KR'), - nl_NL: require('./nl_NL'), - no_NO: require('./no_NO'), - pl_PL: require('./pl_PL'), - pt_BR: require('./pt_BR'), - pt_PT: require('./pt_PT'), - ru_RU: require('./ru_RU'), - sv_SE: require('./sv_SE'), - th_TH: require('./th_TH'), - zh_CN: require('./zh_CN'), - zh_HK: require('./zh_HK'), - zh_TW: require('./zh_TW') -}; - -var twoCharacterLocaleAliases = { - da: fiveCharacterLocales.da_DK, - de: fiveCharacterLocales.de_DE, - en: fiveCharacterLocales.en_US, - es: fiveCharacterLocales.es_ES, - fr: fiveCharacterLocales.fr_FR, - id: fiveCharacterLocales.id_ID, - it: fiveCharacterLocales.it_IT, - ja: fiveCharacterLocales.ja_JP, - ko: fiveCharacterLocales.ko_KR, - nl: fiveCharacterLocales.nl_NL, - no: fiveCharacterLocales.no_NO, - pl: fiveCharacterLocales.pl_PL, - pt: fiveCharacterLocales.pt_PT, - ru: fiveCharacterLocales.ru_RU, - sv: fiveCharacterLocales.sv_SE, - th: fiveCharacterLocales.th_TH, - zh: fiveCharacterLocales.zh_CN -}; - -module.exports = { - twoCharacterLocaleAliases: twoCharacterLocaleAliases, - fiveCharacterLocales: fiveCharacterLocales, - translations: assign({}, twoCharacterLocaleAliases, fiveCharacterLocales) -}; -/* eslint-enable camelcase */ - -},{"../lib/assign":124,"./da_DK":143,"./de_DE":144,"./en_AU":145,"./en_GB":146,"./en_US":147,"./es_ES":148,"./fr_CA":149,"./fr_FR":150,"./id_ID":151,"./it_IT":153,"./ja_JP":154,"./ko_KR":155,"./nl_NL":156,"./no_NO":157,"./pl_PL":158,"./pt_BR":159,"./pt_PT":160,"./ru_RU":161,"./sv_SE":162,"./th_TH":163,"./zh_CN":164,"./zh_HK":165,"./zh_TW":166}],153:[function(require,module,exports){ -'use strict'; - -module.exports = { - "payingWith": "Pagamento con {{paymentSource}}", - "chooseAnotherWayToPay": "Scegli di pagare in un altro modo", - "chooseAWayToPay": "Scegli come pagare", - "otherWaysToPay": "Altri modi di pagare", - "edit": "Modifica", - "doneEditing": "Fine", - "editPaymentMethods": "Modifica i metodi di pagamento", - "CreditCardDeleteConfirmationMessage": "Eliminare la carta {{secondaryIdentifier}} le cui ultime cifre sono {{identifier}}?", - "PayPalAccountDeleteConfirmationMessage": "Eliminare il conto PayPal {{identifier}}?", - "VenmoAccountDeleteConfirmationMessage": "Vuoi eliminare il conto Venmo con nome utente {{identifier}}?", - "genericDeleteConfirmationMessage": "Vuoi eliminare questo metodo di pagamento?", - "deleteCancelButton": "Annulla", - "deleteConfirmationButton": "Rimuovi", - "cardVerification": "Codice di sicurezza", - "fieldEmptyForCvv": "Immetti il codice di sicurezza (CVV).", - "fieldEmptyForExpirationDate": "Immetti la data di scadenza.", - "fieldEmptyForCardholderName": "Immetti il nome del titolare della carta.", - "fieldTooLongForCardholderName": "Il nome del titolare della carta deve avere meno di 256 caratteri.", - "fieldEmptyForNumber": "Immetti il numero di carta.", - "fieldEmptyForPostalCode": "Immetti il CAP.", - "fieldInvalidForCvv": "Il codice di sicurezza non è valido.", - "fieldInvalidForExpirationDate": "La data di scadenza non è valida.", - "fieldInvalidForNumber": "Il numero di carta non è valido.", - "fieldInvalidForPostalCode": "Il CAP non è valido.", - "genericError": "Si è verificato un errore nei nostri sistemi.", - "hostedFieldsTokenizationFailOnDuplicateError": "Questa carta di credito è già registrata come metodo di pagamento salvato.", - "hostedFieldsFailedTokenizationError": "Controlla e riprova.", - "hostedFieldsFieldsInvalidError": "Controlla e riprova.", - "hostedFieldsTokenizationNetworkErrorError": "Errore di rete. Riprova.", - "hostedFieldsTokenizationCvvVerificationFailedError": "La verifica della carta di credito non è andata a buon fine. Controlla i dati e riprova.", - "paypalAccountTokenizationFailedError": "Si è verificato un errore nel collegamento del conto PayPal. Riprova.", - "paypalFlowFailedError": "Si è verificato un errore di connessione a PayPal. Riprova.", - "paypalTokenizationRequestActiveError": "L'autorizzazione di pagamento PayPal è già in corso.", - "venmoCanceledError": "Si è verificato un errore. Assicurati di avere la versione più recente dell'app Venmo installata sul tuo dispositivo e che il browser supporti l'uso di Venmo.", - "vaultManagerPaymentMethodDeletionError": "Impossibile eliminare il metodo di pagamento; riprova.", - "venmoAppFailedError": "Impossibile trovare l'app Venmo sul dispositivo in uso.", - "unsupportedCardTypeError": "Questo tipo di carta non è supportato. Prova con un'altra carta.", - "applePayTokenizationError": "Si è verificato un errore di rete durante l'elaborazione del pagamento con Apple Pay. Riprova.", - "applePayActiveCardError": "Collega una carta supportata al tuo Apple Pay Wallet.", - "cardholderNameLabel": "Titolare della carta", - "cardNumberLabel": "Numero di carta", - "cvvLabel": "CVV", - "cvvThreeDigitLabelSubheading": "(3 cifre)", - "cvvFourDigitLabelSubheading": "(4 cifre)", - "cardholderNamePlaceholder": "Titolare della carta", - "expirationDateLabel": "Data di scadenza", - "expirationDateLabelSubheading": "(MM/AA)", - "expirationDatePlaceholder": "MM/AA", - "postalCodeLabel": "CAP", - "payWithCard": "Paga con una carta", - "endingIn": "Le cui ultime cifre sono {{lastFourCardDigits}}", - "Apple Pay": "Apple Pay", - "Venmo": "Venmo", - "Card": "Carta", - "PayPal": "PayPal", - "PayPal Credit": "PayPal Credit", - "Google Pay": "Google Pay", - "American Express": "American Express", - "Discover": "Discover", - "Diners Club": "Diners Club", - "MasterCard": "Mastercard", - "Visa": "Visa", - "JCB": "JCB", - "Maestro": "Maestro", - "UnionPay": "UnionPay" -}; - -},{}],154:[function(require,module,exports){ -'use strict'; - -module.exports = { - "payingWith": "{{paymentSource}}で支払う", - "chooseAnotherWayToPay": "別の支払方法を選択する", - "chooseAWayToPay": "支払方法を選択する", - "otherWaysToPay": "その他の支払方法", - "edit": "編集", - "doneEditing": "完了", - "editPaymentMethods": "支払方法の編集", - "CreditCardDeleteConfirmationMessage": "末尾が{{identifier}}の{{secondaryIdentifier}}カードを削除しますか?", - "PayPalAccountDeleteConfirmationMessage": "PayPalアカウント{{identifier}}を削除しますか?", - "VenmoAccountDeleteConfirmationMessage": "ユーザー名{{identifier}}のVenmoアカウントを削除してよろしいですか?", - "genericDeleteConfirmationMessage": "この支払い方法を削除してよろしいですか?", - "deleteCancelButton": "キャンセル", - "deleteConfirmationButton": "削除", - "cardVerification": "カード確認", - "fieldEmptyForCvv": "セキュリティコードを入力してください。", - "fieldEmptyForExpirationDate": "有効期限を入力してください。", - "fieldEmptyForCardholderName": "カード保有者の名前を入力してください。", - "fieldTooLongForCardholderName": "カード保有者の名前は256文字未満にしてください。", - "fieldEmptyForNumber": "番号を入力してください。", - "fieldEmptyForPostalCode": "郵便番号を入力してください。", - "fieldInvalidForCvv": "このセキュリティコードは無効です。", - "fieldInvalidForExpirationDate": "この有効期限は無効です。", - "fieldInvalidForNumber": "このカード番号は無効です。", - "fieldInvalidForPostalCode": "この郵便番号は無効です。", - "genericError": "弊社側で問題が発生しました。", - "hostedFieldsTokenizationFailOnDuplicateError": "このクレジットカードは、保存済みの支払方法としてすでに登録されています。", - "hostedFieldsFailedTokenizationError": "情報を確認してもう一度お試しください。", - "hostedFieldsFieldsInvalidError": "情報を確認してもう一度お試しください。", - "hostedFieldsTokenizationNetworkErrorError": "ネットワークエラーです。もう一度お試しください。", - "hostedFieldsTokenizationCvvVerificationFailedError": "クレジットカードの認証に失敗しました。情報を確認してもう一度お試しください。", - "paypalAccountTokenizationFailedError": "PayPalアカウントの追加で問題が発生しました。もう一度お試しください。", - "paypalFlowFailedError": "PayPalへの接続に問題が発生しました。もう一度お試しください。", - "paypalTokenizationRequestActiveError": "PayPal支払いの承認はすでに処理中です。", - "venmoCanceledError": "問題が発生しました。お客さまの端末にインストールされているVenmoアプリが最新のバージョンであること、お使いのブラウザがVenmoへの切り替えをサポートしていることを確認してください。", - "vaultManagerPaymentMethodDeletionError": "支払方法を削除できません。もう一度お試しください。", - "venmoAppFailedError": "お客さまの端末でVenmoアプリが見つかりませんでした。", - "unsupportedCardTypeError": "このカードタイプはサポートされていません。別のカードをご使用ください。", - "applePayTokenizationError": "Apple Payの支払いを処理する際にネットワークエラーが発生しました。もう一度お試しください。", - "applePayActiveCardError": "Apple Payウォレットに対応しているカードを追加してください。", - "cardholderNameLabel": "カード保有者の名前", - "cardNumberLabel": "カード番号", - "cvvLabel": "セキュリティコード", - "cvvThreeDigitLabelSubheading": "(3桁)", - "cvvFourDigitLabelSubheading": "(4桁)", - "cardholderNamePlaceholder": "カード保有者の名前", - "expirationDateLabel": "有効期限", - "expirationDateLabelSubheading": "(MM/YY)", - "expirationDatePlaceholder": "MM/YY", - "postalCodeLabel": "郵便番号", - "payWithCard": "カードで支払う", - "endingIn": "末尾が{{lastFourCardDigits}}", - "Apple Pay": "Apple Pay", - "Venmo": "Venmo", - "Card": "カード", - "PayPal": "PayPal", - "PayPal Credit": "PayPal Credit", - "Google Pay": "Google Pay", - "American Express": "American Express", - "Discover": "Discover", - "Diners Club": "Diners Club", - "MasterCard": "Mastercard", - "Visa": "Visa", - "JCB": "JCB", - "Maestro": "Maestro", - "UnionPay": "銀聯(UnionPay)" -}; - -},{}],155:[function(require,module,exports){ -'use strict'; - -module.exports = { - "payingWith": "{{paymentSource}}(으)로 결제", - "chooseAnotherWayToPay": "다른 결제수단 선택", - "chooseAWayToPay": "결제수단 선택", - "otherWaysToPay": "다른 방법으로 결제", - "edit": "편집", - "doneEditing": "완료", - "editPaymentMethods": "결제수단 편집", - "CreditCardDeleteConfirmationMessage": "끝번호가 {{identifier}}인 {{secondaryIdentifier}} 카드를 삭제하시겠어요?", - "PayPalAccountDeleteConfirmationMessage": "PayPal 계정 {{identifier}}을(를) 삭제하시겠어요?", - "VenmoAccountDeleteConfirmationMessage": "사용자 이름이 {{identifier}}인 Venmo 계정을 삭제하시겠어요?", - "genericDeleteConfirmationMessage": "이 결제수단을 삭제하시겠어요?", - "deleteCancelButton": "취소", - "deleteConfirmationButton": "삭제", - "cardVerification": "카드 인증", - "fieldEmptyForCvv": "CVV를 입력하세요.", - "fieldEmptyForExpirationDate": "만료일을 입력하세요.", - "fieldEmptyForCardholderName": "카드 소유자 이름을 입력하세요.", - "fieldTooLongForCardholderName": "카드 소유자 이름은 256자 미만이어야 합니다.", - "fieldEmptyForNumber": "번호를 입력하세요.", - "fieldEmptyForPostalCode": "우편번호를 입력하세요.", - "fieldInvalidForCvv": "이 보안 코드가 올바르지 않습니다.", - "fieldInvalidForExpirationDate": "이 만료일이 올바르지 않습니다.", - "fieldInvalidForNumber": "이 카드 번호가 올바르지 않습니다.", - "fieldInvalidForPostalCode": "이 우편번호가 올바르지 않습니다.", - "genericError": "저희 쪽에 문제가 발생했습니다.", - "hostedFieldsTokenizationFailOnDuplicateError": "저장된 결제수단에 이미 이 신용카드가 존재합니다.", - "hostedFieldsFailedTokenizationError": "정보를 확인하고 다시 시도해 주세요.", - "hostedFieldsFieldsInvalidError": "정보를 확인하고 다시 시도해 주세요.", - "hostedFieldsTokenizationNetworkErrorError": "네트워크 오류가 발생했습니다. 다시 시도해 주세요.", - "hostedFieldsTokenizationCvvVerificationFailedError": "신용카드 인증에 실패했습니다. 정보를 확인하고 다시 시도해 주세요.", - "paypalAccountTokenizationFailedError": "PayPal 계정을 추가하는 동안 문제가 발생했습니다. 다시 시도해 주세요.", - "paypalFlowFailedError": "PayPal 계정을 연결하는 동안 문제가 발생했습니다. 다시 시도해 주세요.", - "paypalTokenizationRequestActiveError": "PayPal 결제 승인이 이미 진행 중입니다.", - "venmoCanceledError": "오류가 발생했습니다. 기기에 최신 버전의 Venmo 앱이 설치되어 있으며 브라우저가 Venmo로 전환 기능을 지원하는지 확인하세요.", - "vaultManagerPaymentMethodDeletionError": "결제수단을 삭제할 수 없습니다. 다시 시도해 주세요.", - "venmoAppFailedError": "기기에서 Venmo 앱을 찾을 수 없습니다.", - "unsupportedCardTypeError": "이 카드 형식은 지원되지 않습니다. 다른 카드로 시도해 주세요.", - "applePayTokenizationError": "Apple Pay 결제를 처리하는 동안 네트워크 오류가 발생했습니다. 다시 시도해 주세요.", - "applePayActiveCardError": "Apple Pay 전자지갑에 지원되는 카드를 추가하세요.", - "cardholderNameLabel": "카드 소유자 이름", - "cardNumberLabel": "카드 번호", - "cvvLabel": "CVV", - "cvvThreeDigitLabelSubheading": "(3자리)", - "cvvFourDigitLabelSubheading": "(4자리)", - "cardholderNamePlaceholder": "카드 소유자 이름", - "expirationDateLabel": "만료일", - "expirationDateLabelSubheading": "(MM/YY)", - "expirationDatePlaceholder": "MM/YY", - "postalCodeLabel": "우편번호", - "payWithCard": "카드로 결제", - "endingIn": "끝번호: {{lastFourCardDigits}}", - "Apple Pay": "Apple Pay", - "Venmo": "Venmo", - "Card": "카드", - "PayPal": "PayPal", - "PayPal Credit": "PayPal Credit", - "Google Pay": "Google Pay", - "American Express": "American Express", - "Discover": "Discover", - "Diners Club": "Diners Club", - "MasterCard": "Mastercard", - "Visa": "Visa", - "JCB": "JCB", - "Maestro": "Maestro", - "UnionPay": "UnionPay" -}; - -},{}],156:[function(require,module,exports){ -'use strict'; - -module.exports = { - "payingWith": "Betalen met {{paymentSource}}", - "chooseAnotherWayToPay": "Kies een andere betaalmethode", - "chooseAWayToPay": "Kies een betaalwijze", - "otherWaysToPay": "Andere manieren om te betalen", - "edit": "Bewerk", - "doneEditing": "Gereed", - "editPaymentMethods": "Betaalmethoden aanpassen", - "CreditCardDeleteConfirmationMessage": "{{secondaryIdentifier}}-kaart eindigend op {{identifier}} verwijderen?", - "PayPalAccountDeleteConfirmationMessage": "PayPal-rekening {{identifier}} verwijderen?", - "VenmoAccountDeleteConfirmationMessage": "Weet u zeker dat u Venmo-rekening met gebruikersnaam {{identifier}} wilt verwijderen?", - "genericDeleteConfirmationMessage": "Weet u zeker dat u deze betaalmethode wilt verwijderen?", - "deleteCancelButton": "Annuleren", - "deleteConfirmationButton": "Verwijderen", - "cardVerification": "Kaartcontrole", - "fieldEmptyForCvv": "Vul een CSC in.", - "fieldEmptyForExpirationDate": "Vul een vervaldatum in.", - "fieldEmptyForCardholderName": "Vul een naam voor de kaarthouder in.", - "fieldTooLongForCardholderName": "De naam van de kaarthouder moet korter zijn dan 256 tekens.", - "fieldEmptyForNumber": "Vul een nummer in.", - "fieldEmptyForPostalCode": "Vul een postcode in.", - "fieldInvalidForCvv": "Deze CSC is ongeldig.", - "fieldInvalidForExpirationDate": "Deze vervaldatum is ongeldig.", - "fieldInvalidForNumber": "Dit creditcardnummer is ongeldig.", - "fieldInvalidForPostalCode": "Deze postcode is ongeldig.", - "genericError": "Er is iets fout gegaan.", - "hostedFieldsTokenizationFailOnDuplicateError": "Deze creditcard staat al geregistreerd als een opgeslagen betaalmethode.", - "hostedFieldsFailedTokenizationError": "Controleer uw gegevens en probeer het opnieuw.", - "hostedFieldsFieldsInvalidError": "Controleer uw gegevens en probeer het opnieuw.", - "hostedFieldsTokenizationNetworkErrorError": "Netwerkfout. Probeer het opnieuw.", - "hostedFieldsTokenizationCvvVerificationFailedError": "De controle van de creditcard is mislukt. Controleer uw gegevens en probeer het opnieuw.", - "paypalAccountTokenizationFailedError": "Er is iets misgegaan bij het toevoegen van de PayPal-rekening. Probeer het opnieuw.", - "paypalFlowFailedError": "Er is iets misgegaan bij de verbinding met PayPal. Probeer het opnieuw.", - "paypalTokenizationRequestActiveError": "De autorisatie van de PayPal-betaling is al in behandeling.", - "venmoCanceledError": "Er ging iets fout. Controleer of de meest recente versie van de Venmo-app op je apparaat is geïnstalleerd en dat je browser overschakelen naar Venmo ondersteunt.", - "vaultManagerPaymentMethodDeletionError": "Kan de betaalmethode niet verwijderen, probeer het opnieuw.", - "venmoAppFailedError": "De Venmo-app is niet aangetroffen op je apparaat.", - "unsupportedCardTypeError": "Dit type creditcard wordt niet ondersteund. Gebruik een andere creditcard.", - "applePayTokenizationError": "Er is een netwerkfout opgetreden bij het verwerken van de Apple Pay-betaling. Probeer het opnieuw.", - "applePayActiveCardError": "Voeg een ondersteunde creditcard toe aan je Apple Pay-wallet.", - "cardholderNameLabel": "Naam kaarthouder", - "cardNumberLabel": "Creditcardnummer", - "cvvLabel": "CVV", - "cvvThreeDigitLabelSubheading": "(3 cijfers)", - "cvvFourDigitLabelSubheading": "(4 cijfers)", - "cardholderNamePlaceholder": "Naam kaarthouder", - "expirationDateLabel": "VervaldatumB", - "expirationDateLabelSubheading": "(MM/JJ)", - "expirationDatePlaceholder": "MM/JJ", - "postalCodeLabel": "Postcode", - "payWithCard": "Betalen met creditcard", - "endingIn": "Eindigend op {{lastFourCardDigits}}", - "Apple Pay": "Apple Pay", - "Venmo": "Venmo", - "Card": "Creditcard", - "PayPal": "PayPal", - "PayPal Credit": "PayPal Credit", - "Google Pay": "Google Pay", - "American Express": "American Express", - "Discover": "Discover", - "Diners Club": "Diners Club", - "MasterCard": "Mastercard", - "Visa": "Visa", - "JCB": "JCB", - "Maestro": "Maestro", - "UnionPay": "UnionPay" -}; - -},{}],157:[function(require,module,exports){ -'use strict'; - -module.exports = { - "payingWith": "Betaling med {{paymentSource}}", - "chooseAnotherWayToPay": "Velg en annen måte å betale på", - "chooseAWayToPay": "Velg betalingsmåte", - "otherWaysToPay": "Andre måter å betale på", - "edit": "Rediger", - "doneEditing": "Fullført", - "editPaymentMethods": "Endre betalingsmetodene dine", - "CreditCardDeleteConfirmationMessage": "Vil du slette {{secondaryIdentifier}}-kortet som slutter på {{identifier}}?", - "PayPalAccountDeleteConfirmationMessage": "Vil du slette PayPal-kontoen {{identifier}}?", - "VenmoAccountDeleteConfirmationMessage": "Er du sikker på at du vil slette Venmo-kontoen med brukernavnet {{identifier}}?", - "genericDeleteConfirmationMessage": "Er du sikker på at du vil slette denne betalingsmetoden?", - "deleteCancelButton": "Avbryt", - "deleteConfirmationButton": "Slett", - "cardVerification": "Kortbekreftelse", - "fieldEmptyForCvv": "Oppgi en kortsikkerhetskode (CVV).", - "fieldEmptyForExpirationDate": "Oppgi en utløpsdato.", - "fieldEmptyForCardholderName": "Oppgi et navn for kortinnehaveren.", - "fieldTooLongForCardholderName": "Makslengden for kortinnehaverens navn er 256 tegn.", - "fieldEmptyForNumber": "Oppgi et nummer.", - "fieldEmptyForPostalCode": "Oppgi et postnummer.", - "fieldInvalidForCvv": "Denne sikkerhetskoden er ikke gyldig.", - "fieldInvalidForExpirationDate": "Denne utløpsdatoen er ikke gyldig.", - "fieldInvalidForNumber": "Dette kortnummeret er ikke gyldig.", - "fieldInvalidForPostalCode": "Dette postnummeret er ikke gyldig.", - "genericError": "Noe gikk galt hos oss.", - "hostedFieldsTokenizationFailOnDuplicateError": "Dette betalingskortet eksisterer allerede som en lagret betalingsmetode.", - "hostedFieldsFailedTokenizationError": "Kontroller informasjonen og prøv på nytt.", - "hostedFieldsFieldsInvalidError": "Kontroller informasjonen og prøv på nytt.", - "hostedFieldsTokenizationNetworkErrorError": "Nettverksfeil. Prøv på nytt.", - "hostedFieldsTokenizationCvvVerificationFailedError": "Bekreftelsen av betalingskortet mislyktes. Kontroller informasjonen og prøv på nytt.", - "paypalAccountTokenizationFailedError": "Noe gikk galt da PayPal-kontoen ble lagt til. Prøv på nytt.", - "paypalFlowFailedError": "Det oppsto et problem med tilkoblingen til PayPal. Prøv på nytt.", - "paypalTokenizationRequestActiveError": "Godkjenning av PayPal-betalingen pågår allerede", - "venmoCanceledError": "Noe gikk galt. Kontroller at du har installert den nyeste versjonen av Venmo-appen på enheten og at nettleseren din støtter bytte til Venmo.", - "vaultManagerPaymentMethodDeletionError": "Kunne ikke slette betalingsmetoden. Prøv på nytt.", - "venmoAppFailedError": "Finner ikke Venmo-appen på enheten.", - "unsupportedCardTypeError": "Denne korttypen støttes ikke. Prøv med et annet kort.", - "applePayTokenizationError": "Det oppsto en nettverksfeil under behandlingen av Apple Pay-betalingen. Prøv på nytt.", - "applePayActiveCardError": "Legg til et kort som støttes i Apple Pay-lommeboken din.", - "cardholderNameLabel": "Kortinnehaverens navn", - "cardNumberLabel": "Kortnummer", - "cvvLabel": "CVV", - "cvvThreeDigitLabelSubheading": "(3 siffer)", - "cvvFourDigitLabelSubheading": "(4 siffer)", - "cardholderNamePlaceholder": "Kortinnehaverens navn", - "expirationDateLabel": "Utløpsdato", - "expirationDateLabelSubheading": "(MM/ÅÅ)", - "expirationDatePlaceholder": "MM/ÅÅ", - "postalCodeLabel": "Postnummer", - "payWithCard": "Betal med kort", - "endingIn": "Slutter på {{lastFourCardDigits}}", - "Apple Pay": "Apple Pay", - "Venmo": "Venmo", - "Card": "Kort", - "PayPal": "PayPal", - "PayPal Credit": "PayPal Credit", - "Google Pay": "Google Pay", - "American Express": "American Express", - "Discover": "Discover", - "Diners Club": "Diners Club", - "MasterCard": "Mastercard", - "Visa": "Visa", - "JCB": "JCB", - "Maestro": "Maestro", - "UnionPay": "UnionPay" -}; - -},{}],158:[function(require,module,exports){ -'use strict'; - -module.exports = { - "payingWith": "Źródło finansowania płatności: {{paymentSource}}", - "chooseAnotherWayToPay": "Wybierz inne źródło finansowania płatności", - "chooseAWayToPay": "Wybierz źródło finansowania płatności", - "otherWaysToPay": "Inne źródła finansowania płatności", - "edit": "Edytuj", - "doneEditing": "Gotowe", - "editPaymentMethods": "Edytuj źródła finansowania płatności", - "CreditCardDeleteConfirmationMessage": "Usunąć kartę {{secondaryIdentifier}} o numerze zakończonym cyframi {{identifier}}?", - "PayPalAccountDeleteConfirmationMessage": "Usunąć konto PayPal {{identifier}}?", - "VenmoAccountDeleteConfirmationMessage": "Czy na pewno chcesz usunąć konto Venmo z nazwą użytkownika {{identifier}}?", - "genericDeleteConfirmationMessage": "Czy na pewno chcesz usunąć to źródło finansowania płatności?", - "deleteCancelButton": "Anuluj", - "deleteConfirmationButton": "Usuń", - "cardVerification": "Weryfikacja karty", - "fieldEmptyForCvv": "Podaj kod bezpieczeństwa.", - "fieldEmptyForExpirationDate": "Podaj datę ważności.", - "fieldEmptyForCardholderName": "Podaj imię i nazwisko posiadacza karty.", - "fieldTooLongForCardholderName": "Imię i nazwisko posiadacza karty musi mieć mniej niż 256 znaków.", - "fieldEmptyForNumber": "Podaj numer.", - "fieldEmptyForPostalCode": "Podaj kod pocztowy.", - "fieldInvalidForCvv": "Podany kod bezpieczeństwa jest nieprawidłowy.", - "fieldInvalidForExpirationDate": "Podana data ważności jest nieprawidłowa.", - "fieldInvalidForNumber": "Podany numer karty jest nieprawidłowy.", - "fieldInvalidForPostalCode": "Podany kod pocztowy jest nieprawidłowy.", - "genericError": "Wystąpił błąd po naszej stronie.", - "hostedFieldsTokenizationFailOnDuplicateError": "Ta karta kredytowa jest już zapisana jako źródło finansowania płatności.", - "hostedFieldsFailedTokenizationError": "Sprawdź swoje informacje i spróbuj ponownie.", - "hostedFieldsFieldsInvalidError": "Sprawdź swoje informacje i spróbuj ponownie.", - "hostedFieldsTokenizationNetworkErrorError": "Błąd sieci. Spróbuj ponownie.", - "hostedFieldsTokenizationCvvVerificationFailedError": "Weryfikacja karty kredytowej nie powiodła się. Sprawdź swoje informacje i spróbuj ponownie.", - "paypalAccountTokenizationFailedError": "Coś poszło nie tak podczas dodawania konta PayPal. Spróbuj ponownie.", - "paypalFlowFailedError": "Coś poszło nie tak podczas łączenia z systemem PayPal. Spróbuj ponownie.", - "paypalTokenizationRequestActiveError": "Autoryzacja płatności PayPal jest już w trakcie realizacji.", - "venmoCanceledError": "Wystąpił problem. Upewnij się, czy na swoim urządzeniu masz zainstalowaną najnowszą wersję aplikacji Venmo i Twoja przeglądarka ją obsługuje.", - "vaultManagerPaymentMethodDeletionError": "Nie można usunąć źródła finansowania płatności. Spróbuj ponownie.", - "venmoAppFailedError": "Nie można odnaleźć aplikacji Venmo na urządzeniu.", - "unsupportedCardTypeError": "Ten typ karty nie jest obsługiwany. Spróbuj użyć innej karty.", - "applePayTokenizationError": "Wystąpił błąd sieci podczas przetwarzania płatności Apple Pay. Spróbuj ponownie.", - "applePayActiveCardError": "Dodaj obsługiwaną kartę do portfela Apple Pay.", - "cardholderNameLabel": "Imię i nazwisko posiadacza karty", - "cardNumberLabel": "Numer karty", - "cvvLabel": "Kod CVC", - "cvvThreeDigitLabelSubheading": "(3 cyfry)", - "cvvFourDigitLabelSubheading": "(4 cyfry)", - "cardholderNamePlaceholder": "Imię i nazwisko posiadacza karty", - "expirationDateLabel": "Data ważności", - "expirationDateLabelSubheading": "(MM/RR)", - "expirationDatePlaceholder": "MM/RR", - "postalCodeLabel": "Kod pocztowy", - "payWithCard": "Zapłać kartą", - "endingIn": "O numerze zakończonym cyframi {{lastFourCardDigits}}", - "Apple Pay": "Apple Pay", - "Venmo": "Venmo", - "Card": "Karta", - "PayPal": "PayPal", - "PayPal Credit": "PayPal Credit", - "Google Pay": "Google Pay", - "American Express": "American Express", - "Discover": "Discover", - "Diners Club": "Diners Club", - "MasterCard": "Mastercard", - "Visa": "Visa", - "JCB": "JCB", - "Maestro": "Maestro", - "UnionPay": "UnionPay" -}; - -},{}],159:[function(require,module,exports){ -'use strict'; - -module.exports = { - "payingWith": "Pagando com {{paymentSource}}", - "chooseAnotherWayToPay": "Escolher outro meio de pagamento", - "chooseAWayToPay": "Escolher um meio de pagamento", - "otherWaysToPay": "Outro meio de pagamento", - "edit": "Editar", - "doneEditing": "Concluído", - "editPaymentMethods": "Editar meios de pagamento", - "CreditCardDeleteConfirmationMessage": "Excluir cartão com {{secondaryIdentifier}} com final {{identifier}}?", - "PayPalAccountDeleteConfirmationMessage": "Excluir conta do PayPal {{identifier}}?", - "VenmoAccountDeleteConfirmationMessage": "Tem certeza de que deseja excluir a conta do Venmo com o nome de usuário {{identifier}}?", - "genericDeleteConfirmationMessage": "Tem certeza de que deseja excluir este meio de pagamento?", - "deleteCancelButton": "Cancelar", - "deleteConfirmationButton": "Excluir", - "cardVerification": "Verificação do cartão", - "fieldEmptyForCvv": "Informe o Código de Segurança.", - "fieldEmptyForExpirationDate": "Informe a data de vencimento.", - "fieldEmptyForCardholderName": "Informe o nome do titular do cartão.", - "fieldTooLongForCardholderName": "O nome do titular do cartão deve ter menos de 256 caracteres.", - "fieldEmptyForNumber": "Informe um número.", - "fieldEmptyForPostalCode": "Informe um CEP.", - "fieldInvalidForCvv": "Este código de segurança não é válido.", - "fieldInvalidForExpirationDate": "Esta data de vencimento não é válida.", - "fieldInvalidForNumber": "O número do cartão não é válido.", - "fieldInvalidForPostalCode": "Este CEP não é válido.", - "genericError": "Ocorreu um erro.", - "hostedFieldsTokenizationFailOnDuplicateError": "Este cartão de crédito já está salvo em seus meios de pagamento.", - "hostedFieldsFailedTokenizationError": "Verifique as informações e tente novamente.", - "hostedFieldsFieldsInvalidError": "Verifique as informações e tente novamente.", - "hostedFieldsTokenizationNetworkErrorError": "Erro de rede. Tente novamente.", - "hostedFieldsTokenizationCvvVerificationFailedError": "Falha ao verificar o cartão de crédito. Verifique as informações e tente novamente.", - "paypalAccountTokenizationFailedError": "Ocorreu um erro ao adicionar a conta do PayPal. Tente novamente.", - "paypalFlowFailedError": "Ocorreu um erro de conexão com o PayPal. Tente novamente.", - "paypalTokenizationRequestActiveError": "A autorização de pagamento do PayPal já está em andamento.", - "venmoCanceledError": "Ocorreu um erro. Certifique-se de ter a versão mais recente do aplicativo Venmo instalado no seu dispositivo e que o seu navegador suporte a mudança para o Venmo.", - "vaultManagerPaymentMethodDeletionError": "Não é possível excluir o meio de pagamento, tente novamente.", - "venmoAppFailedError": "Não foi possível encontrar o aplicativo Venmo no seu dispositivo.", - "unsupportedCardTypeError": "Este tipo de cartão não é aceito. Experimente outro cartão.", - "applePayTokenizationError": "Ocorreu um erro de rede ao processar o pagamento com Apple Pay. Tente novamente.", - "applePayActiveCardError": "Adicione cartão suportado à sua carteira do Apple Pay.", - "cardholderNameLabel": "Nome do titular do cartão", - "cardNumberLabel": "Número do cartão", - "cvvLabel": "CSC", - "cvvThreeDigitLabelSubheading": "(3 dígitos)", - "cvvFourDigitLabelSubheading": "(4 dígitos)", - "cardholderNamePlaceholder": "Nome do titular do cartão", - "expirationDateLabel": "Data de vencimento", - "expirationDateLabelSubheading": "(MM/AA)", - "expirationDatePlaceholder": "MM/AA", - "postalCodeLabel": "CEP", - "payWithCard": "Pague com seu cartão", - "endingIn": "Com final {{lastFourCardDigits}}", - "Apple Pay": "Apple Pay", - "Venmo": "Venmo", - "Card": "Cartão", - "PayPal": "PayPal", - "PayPal Credit": "PayPal Credit", - "Google Pay": "Google Pay", - "American Express": "American Express", - "Discover": "Discover", - "Diners Club": "Diners Club", - "MasterCard": "Mastercard", - "Visa": "Visa", - "JCB": "JCB", - "Maestro": "Maestro", - "UnionPay": "UnionPay" -}; - -},{}],160:[function(require,module,exports){ -'use strict'; - -module.exports = { - "payingWith": "Pagar com {{paymentSource}}", - "chooseAnotherWayToPay": "Escolher outra forma de pagamento", - "chooseAWayToPay": "Escolha um meio de pagamento", - "otherWaysToPay": "Outras formas de pagamento", - "edit": "Editar", - "doneEditing": "Concluído", - "editPaymentMethods": "Editar meios de pagamento", - "CreditCardDeleteConfirmationMessage": "Eliminar o cartão {{secondaryIdentifier}} terminado em {{identifier}}?", - "PayPalAccountDeleteConfirmationMessage": "Eliminar {{identifier}} da conta PayPal?", - "VenmoAccountDeleteConfirmationMessage": "Tem a certeza de que pretende eliminar a conta Venmo com o nome de utilizador {{identifier}}?", - "genericDeleteConfirmationMessage": "Tem certeza de que pretende eliminar este meio de pagamento?", - "deleteCancelButton": "Cancelar", - "deleteConfirmationButton": "Eliminar", - "cardVerification": "Verificação de cartão", - "fieldEmptyForCvv": "Introduza o código CVV.", - "fieldEmptyForExpirationDate": "Introduza a data de validade.", - "fieldEmptyForCardholderName": "Introduza um nome do titular do cartão.", - "fieldTooLongForCardholderName": "O nome do titular do cartão tem de ter menos de 256 carateres.", - "fieldEmptyForNumber": "Introduza um número.", - "fieldEmptyForPostalCode": "Introduza o código postal.", - "fieldInvalidForCvv": "Este código de segurança não é válido.", - "fieldInvalidForExpirationDate": "Esta data de validade não é correta.", - "fieldInvalidForNumber": "Este número de cartão não é válido.", - "fieldInvalidForPostalCode": "Este código postal não é válido.", - "genericError": "Tudo indica que ocorreu um problema.", - "hostedFieldsTokenizationFailOnDuplicateError": "Este cartão de crédito já está registado como um meio de pagamento guardado.", - "hostedFieldsFailedTokenizationError": "Verifique os dados e tente novamente.", - "hostedFieldsFieldsInvalidError": "Verifique os dados e tente novamente.", - "hostedFieldsTokenizationNetworkErrorError": "Erro de rede. Tente novamente.", - "hostedFieldsTokenizationCvvVerificationFailedError": "A verificação do cartão de crédito falhou. Verifique os dados e tente novamente.", - "paypalAccountTokenizationFailedError": "Ocorreu um erro ao associar a conta PayPal. Tente novamente.", - "paypalFlowFailedError": "Ocorreu um erro na ligação com PayPal. Tente novamente.", - "paypalTokenizationRequestActiveError": "Já há uma autorização de pagamento PayPal em curso.", - "venmoCanceledError": "Ocorreu um erro. Certifique-se de que tem a versão mais recente da aplicação Venmo instalada no seu dispositivo e que o navegador suporta a mudança para o Venmo.", - "vaultManagerPaymentMethodDeletionError": "Não é possível eliminar o meio de pagamento, tente novamente.", - "venmoAppFailedError": "Não foi possível encontrar a aplicação Venmo no dispositivo.", - "unsupportedCardTypeError": "Este tipo de cartão não é suportado. Tente usar outro cartão.", - "applePayTokenizationError": "Ocorreu um erro de rede ao processar o pagamento com Apple Pay. Tente novamente.", - "applePayActiveCardError": "Adicione um cartão suportado à sua carteira Apple Pay.", - "cardholderNameLabel": "Nome do titular do cartão", - "cardNumberLabel": "Número do cartão", - "cvvLabel": "CVV", - "cvvThreeDigitLabelSubheading": "(3 dígitos)", - "cvvFourDigitLabelSubheading": "(4 dígitos)", - "cardholderNamePlaceholder": "Nome do titular do cartão", - "expirationDateLabel": "Data de validade", - "expirationDateLabelSubheading": "(MM/AA)", - "expirationDatePlaceholder": "MM/AA", - "postalCodeLabel": "Código postal", - "payWithCard": "Pagar com cartão", - "endingIn": "Terminado em {{lastFourCardDigits}}", - "Apple Pay": "Apple Pay", - "Venmo": "Venmo", - "Card": "Cartão", - "PayPal": "PayPal", - "PayPal Credit": "PayPal Credit", - "Google Pay": "Google Pay", - "American Express": "American Express", - "Discover": "Discover", - "Diners Club": "Diners Club", - "MasterCard": "Mastercard", - "Visa": "Visa", - "JCB": "JCB", - "Maestro": "Maestro", - "UnionPay": "UnionPay" -}; - -},{}],161:[function(require,module,exports){ -'use strict'; - -module.exports = { - "payingWith": "Способы оплаты: {{paymentSource}}", - "chooseAnotherWayToPay": "Выберите другой способ оплаты", - "chooseAWayToPay": "Выберите способ оплаты", - "otherWaysToPay": "Другие способы оплаты", - "edit": "Редактировать", - "doneEditing": "Готово", - "editPaymentMethods": "Редактировать способы оплаты", - "CreditCardDeleteConfirmationMessage": "Удалить карту {{secondaryIdentifier}}, оканчивающуюся на {{identifier}}?", - "PayPalAccountDeleteConfirmationMessage": "Удалить счет PayPal {{identifier}}?", - "VenmoAccountDeleteConfirmationMessage": "Вы действительно хотите удалить счет Venmo с именем пользователя {{identifier}}?", - "genericDeleteConfirmationMessage": "Вы действительно хотите удалить этот способ оплаты?", - "deleteCancelButton": "Отмена", - "deleteConfirmationButton": "Удалить", - "cardVerification": "Проверка карты", - "fieldEmptyForCvv": "Укажите код безопасности.", - "fieldEmptyForExpirationDate": "Укажите дату окончания срока действия.", - "fieldEmptyForCardholderName": "Введите имя и фамилию владельца карты.", - "fieldTooLongForCardholderName": "Имя владельца карты должно содержать не более 256 символов.", - "fieldEmptyForNumber": "Введите номер.", - "fieldEmptyForPostalCode": "Укажите почтовый индекс.", - "fieldInvalidForCvv": "Этот код безопасности недействителен.", - "fieldInvalidForExpirationDate": "Эта дата окончания срока действия недействительна.", - "fieldInvalidForNumber": "Этот номер карты недействителен.", - "fieldInvalidForPostalCode": "Этот почтовый индекс недействителен.", - "genericError": "Возникла проблема с нашей стороны.", - "hostedFieldsTokenizationFailOnDuplicateError": "Эта кредитная карта уже указана как сохраненный источник средств.", - "hostedFieldsFailedTokenizationError": "Проверьте правильность ввода данных и повторите попытку.", - "hostedFieldsFieldsInvalidError": "Проверьте правильность ввода данных и повторите попытку.", - "hostedFieldsTokenizationNetworkErrorError": "Ошибка сети. Повторите попытку.", - "hostedFieldsTokenizationCvvVerificationFailedError": "Проверка банковской карты не выполнена. Проверьте правильность ввода данных и повторите попытку.", - "paypalAccountTokenizationFailedError": "Что-то пошло не так — не удалось добавить учетную запись PayPal. Повторите попытку.", - "paypalFlowFailedError": "Что-то пошло не так — не удалось подключиться к системе PayPal. Повторите попытку.", - "paypalTokenizationRequestActiveError": "Выполняется авторизация платежа PayPal.", - "venmoCanceledError": "Возникла ошибка. Просим вас убедиться, что у вас установлена новейшая версия приложения Venmo и ваш браузер поддерживает переключение к Venmo.", - "vaultManagerPaymentMethodDeletionError": "Не удалось удалить способ оплаты. Повторите попытку.", - "venmoAppFailedError": "Приложение Venmo не обнаружено на вашем устройстве.", - "unsupportedCardTypeError": "Этот тип карты не поддерживается. Попробуйте воспользоваться другой картой.", - "applePayTokenizationError": "При обработке платежа через Apple Pay возникла сетевая ошибка. Повторите попытку.", - "applePayActiveCardError": "Добавьте поддерживаемую карту к своему счету Apple Pay.", - "cardholderNameLabel": "Имя и фамилия владельца", - "cardNumberLabel": "Номер карты", - "cvvLabel": "Код безопасности", - "cvvThreeDigitLabelSubheading": "(3 цифры)", - "cvvFourDigitLabelSubheading": "(4 цифры)", - "cardholderNamePlaceholder": "Имя и фамилия владельца", - "expirationDateLabel": "Срок действия", - "expirationDateLabelSubheading": "(ММ/ГГ)", - "expirationDatePlaceholder": "ММ/ГГ", - "postalCodeLabel": "Индекс", - "payWithCard": "Оплатить картой", - "endingIn": "Последние четыре цифры номера карты: {{lastFourCardDigits}}", - "Apple Pay": "Apple Pay", - "Venmo": "Venmo", - "Card": "Карта", - "PayPal": "PayPal", - "PayPal Credit": "PayPal Credit", - "Google Pay": "Google Pay", - "American Express": "American Express", - "Discover": "Discover", - "Diners Club": "Diners Club", - "MasterCard": "Mastercard", - "Visa": "Visa", - "JCB": "JCB", - "Maestro": "Maestro", - "UnionPay": "UnionPay" -}; - -},{}],162:[function(require,module,exports){ -'use strict'; - -module.exports = { - "payingWith": "Betalas med {{paymentSource}}", - "chooseAnotherWayToPay": "Välj ett annat sätt att betala", - "chooseAWayToPay": "Välj hur du vill betala", - "otherWaysToPay": "Andra sätt att betala", - "edit": "Ändra", - "doneEditing": "Klart", - "editPaymentMethods": "Redigera betalningsmetoder", - "CreditCardDeleteConfirmationMessage": "Ta bort {{secondaryIdentifier}}-kort som slutar på {{identifier}}?", - "PayPalAccountDeleteConfirmationMessage": "Ta bort PayPal-konto {{identifier}}?", - "VenmoAccountDeleteConfirmationMessage": "Är du säker på att du vill ta bort Venmo-konto med användarnamn {{identifier}}?", - "genericDeleteConfirmationMessage": "Är du säker på att du vill ta bort den här betalningsmetoden?", - "deleteCancelButton": "Avbryt", - "deleteConfirmationButton": "Ta bort", - "cardVerification": "Kortverifiering", - "fieldEmptyForCvv": "Fyll i en CVV-kod.", - "fieldEmptyForExpirationDate": "Fyll i ett utgångsdatum.", - "fieldEmptyForCardholderName": "Fyll i kortinnehavarens namn.", - "fieldTooLongForCardholderName": "Kortinnehavarens namn måste vara kortare än 256 tecken.", - "fieldEmptyForNumber": "Fyll i ett nummer.", - "fieldEmptyForPostalCode": "Fyll i ett postnummer.", - "fieldInvalidForCvv": "Den här säkerhetskoden är inte giltig.", - "fieldInvalidForExpirationDate": "Det här utgångsdatumet är inte giltigt.", - "fieldInvalidForNumber": "Det här kortnumret är inte giltigt.", - "fieldInvalidForPostalCode": "Det här postnumret är inte giltigt.", - "genericError": "Ett fel uppstod.", - "hostedFieldsTokenizationFailOnDuplicateError": "Det här betalkortet finns redan som en sparad betalningsmetod.", - "hostedFieldsFailedTokenizationError": "Kontrollera uppgifterna och försök igen.", - "hostedFieldsFieldsInvalidError": "Kontrollera uppgifterna och försök igen.", - "hostedFieldsTokenizationNetworkErrorError": "Nätverksfel. Försök igen.", - "hostedFieldsTokenizationCvvVerificationFailedError": "Verifieringen av betalkort misslyckades. Kontrollera uppgifterna och försök igen.", - "paypalAccountTokenizationFailedError": "Ett fel uppstod när PayPal-kontot skulle läggas till. Försök igen.", - "paypalFlowFailedError": "Ett fel uppstod när anslutningen till PayPal skulle upprättas. Försök igen.", - "paypalTokenizationRequestActiveError": "Betalningsgodkännandet för PayPal behandlas redan.", - "venmoCanceledError": "Något gick fel. Se till att du har den senaste versionen av Venmo-appen installerad på din enhet och att webbläsaren stöder att gå över till Venmo.", - "vaultManagerPaymentMethodDeletionError": "Det gick inte att ta bort betalningsmetoden. Försök igen.", - "venmoAppFailedError": "Venmo-appen kunde inte hittas på din enhet.", - "unsupportedCardTypeError": "Den här korttypen stöds inte. Pröva med ett annat kort.", - "applePayTokenizationError": "Ett nätverksfel inträffade när Apple Pay-betalningen skulle behandlas. Försök igen.", - "applePayActiveCardError": "Lägg till ett kort som stöds i Apple Pay-e-plånboken.", - "cardholderNameLabel": "Kortinnehavarens namn", - "cardNumberLabel": "Kortnummer", - "cvvLabel": "CVV", - "cvvThreeDigitLabelSubheading": "(3 siffror)", - "cvvFourDigitLabelSubheading": "(4 siffror)", - "cardholderNamePlaceholder": "Kortinnehavarens namn", - "expirationDateLabel": "Utgångsdatum", - "expirationDateLabelSubheading": "(MM/ÅÅ)", - "expirationDatePlaceholder": "MM/ÅÅ", - "postalCodeLabel": "Postnummer", - "payWithCard": "Betala med kort", - "endingIn": "Slutar på {{lastFourCardDigits}}", - "Apple Pay": "Apple Pay", - "Venmo": "Venmo", - "Card": "Kort", - "PayPal": "PayPal", - "PayPal Credit": "PayPal Credit", - "Google Pay": "Google Pay", - "American Express": "American Express", - "Discover": "Discover", - "Diners Club": "Diners Club", - "MasterCard": "Mastercard", - "Visa": "Visa", - "JCB": "JCB", - "Maestro": "Maestro", - "UnionPay": "UnionPay" -}; - -},{}],163:[function(require,module,exports){ -'use strict'; - -module.exports = { - "payingWith": "การชำระเงินด้วย {{paymentSource}}", - "chooseAnotherWayToPay": "เลือกวิธีอื่นเพื่อชำระเงิน", - "chooseAWayToPay": "เลือกวิธีชำระเงิน", - "otherWaysToPay": "วิธีอื่นๆ ในการชำระเงิน", - "edit": "แก้ไข", - "doneEditing": "เสร็จแล้ว", - "editPaymentMethods": "แก้ไขวิธีการชำระเงิน", - "CreditCardDeleteConfirmationMessage": "ลบบัตร {{secondaryIdentifier }} ที่ลงท้ายด้วย {{identifier}} หรือไม่", - "PayPalAccountDeleteConfirmationMessage": "ลบ {{identifier}} บัญชี PayPal หรือไม่", - "VenmoAccountDeleteConfirmationMessage": "คุณมั่นใจว่าต้องการลบบัญชี Venmo ที่มีชื่อผู้ใช้ {{identifier}} หรือไม่", - "genericDeleteConfirmationMessage": "คุณมั่นใจว่าต้องการลบวิธีการชำระเงินนี้หรือไม่", - "deleteCancelButton": "ยกเลิก", - "deleteConfirmationButton": "ลบ", - "cardVerification": "การตรวจสอบยืนยันบัตร", - "fieldEmptyForCvv": "โปรดกรอก CVV (รหัสการตรวจสอบยืนยันบัตร)", - "fieldEmptyForExpirationDate": "โปรดกรอกวันที่หมดอายุ", - "fieldEmptyForCardholderName": "โปรดกรอกชื่อเจ้าของบัตร", - "fieldTooLongForCardholderName": "ชื่อผู้ถือบัตรจะต้องไม่เกิน 256 อักขระ", - "fieldEmptyForNumber": "โปรดกรอกหมายเลข", - "fieldEmptyForPostalCode": "โปรดกรอกรหัสไปรษณีย์", - "fieldInvalidForCvv": "รหัสความปลอดภัยนี้ไม่ถูกต้อง", - "fieldInvalidForExpirationDate": "วันที่หมดอายุนี้ไม่ถูกต้อง", - "fieldInvalidForNumber": "หมายเลขบัตรนี้ไม่ถูกต้อง", - "fieldInvalidForPostalCode": "รหัสไปรษณีย์นี้ไม่ถูกต้อง", - "genericError": "เกิดข้อผิดพลาดขึ้นในระบบของเรา", - "hostedFieldsTokenizationFailOnDuplicateError": "บัตรเครดิตนี้ถูกบันทึกไว้เป็นวิธีการชำระเงิน", - "hostedFieldsFailedTokenizationError": "โปรดตรวจสอบข้อมูลของคุณ แล้วลองใหม่อีกครั้ง", - "hostedFieldsFieldsInvalidError": "โปรดตรวจสอบข้อมูลของคุณ แล้วลองใหม่อีกครั้ง", - "hostedFieldsTokenizationNetworkErrorError": "ข้อผิดพลาดด้านเครือข่าย โปรดลองอีกครั้ง", - "hostedFieldsTokenizationCvvVerificationFailedError": "การตรวจสอบยืนยันบัตรเครดิตล้มเหลว โปรดตรวจสอบข้อมูลของคุณ แล้วลองใหม่อีกครั้ง", - "paypalAccountTokenizationFailedError": "เกิดข้อผิดพลาดในการเพิ่มบัญชี PayPal โปรดลองอีกครั้ง", - "paypalFlowFailedError": "เกิดข้อผิดพลาดในการเชื่อมต่อกับ PayPal โปรดลองอีกครั้ง", - "paypalTokenizationRequestActiveError": "การอนุญาตการชำระเงินของ PayPal อยู่ในระหว่างดำเนินการ", - "venmoCanceledError": "เกิดข้อผิดพลาดบางประการ ตรวจสอบว่าคุณมีแอป Venmo เวอร์ชันล่าสุดติดตั้งในอุปกรณ์ของคุณ และมีเบราเซอร์ที่รองรับ Venmo", - "vaultManagerPaymentMethodDeletionError": "ไม่สามารถลบวิธีการชำระเงินได้ ลองอีกครั้ง", - "venmoAppFailedError": "ไม่พบแอป Venmo บนอุปกรณ์ของคุณ", - "unsupportedCardTypeError": "ไม่รองรับบัตรประเภทนี้ โปรดลองใช้บัตรใบอื่น", - "applePayTokenizationError": "เกิดข้อผิดพลาดด้านเครือข่ายขึ้นขณะดำเนินการชำระเงินด้วย Apple Pay โปรดลองอีกครั้ง", - "applePayActiveCardError": "เพิ่มบัตรที่รองรับในกระเป๋าสตางค์ Apple Pay ของคุณ", - "cardholderNameLabel": "ชื่อเจ้าของบัตร", - "cardNumberLabel": "หมายเลขบัตร", - "cvvLabel": "CVV", - "cvvThreeDigitLabelSubheading": "(3 หลัก)", - "cvvFourDigitLabelSubheading": "(4 หลัก)", - "cardholderNamePlaceholder": "ชื่อเจ้าของบัตร", - "expirationDateLabel": "วันหมดอายุ", - "expirationDateLabelSubheading": "(ดด/ปป)", - "expirationDatePlaceholder": "ดด/ปป", - "postalCodeLabel": "รหัสไปรษณีย์", - "payWithCard": "ชำระเงินด้วยบัตร", - "endingIn": "ลงท้ายด้วย {{lastFourCardDigits}}", - "Apple Pay": "Apple Pay", - "Venmo": "Venmo", - "Card": "บัตร", - "PayPal": "PayPal", - "PayPal Credit": "PayPal Credit", - "Google Pay": "Google Pay", - "American Express": "American Express", - "Discover": "Discover", - "Diners Club": "Diners Club", - "MasterCard": "Mastercard", - "Visa": "Visa", - "JCB": "JCB", - "Maestro": "Maestro", - "UnionPay": "UnionPay" -}; - -},{}],164:[function(require,module,exports){ -'use strict'; - -module.exports = { - "payingWith": "正在使用{{paymentSource}}付款", - "chooseAnotherWayToPay": "选择其他付款方式", - "chooseAWayToPay": "选择付款方式", - "otherWaysToPay": "其他付款方式", - "edit": "编辑", - "doneEditing": "完成", - "editPaymentMethods": "编辑付款方式", - "CreditCardDeleteConfirmationMessage": "删除尾号为{{identifier}}的{{secondaryIdentifier}}卡?", - "PayPalAccountDeleteConfirmationMessage": "删除PayPal账户{{identifier}}?", - "VenmoAccountDeleteConfirmationMessage": "确定要删除用户名为{{identifier}}的Venmo账户吗?", - "genericDeleteConfirmationMessage": "确定要删除该付款方式吗?", - "deleteCancelButton": "取消", - "deleteConfirmationButton": "删除", - "cardVerification": "卡验证", - "fieldEmptyForCvv": "请填写CVV。", - "fieldEmptyForExpirationDate": "请填写有效期限。", - "fieldEmptyForCardholderName": "请填写持卡人的姓名。", - "fieldTooLongForCardholderName": "持卡人姓名必须少于256个字符。", - "fieldEmptyForNumber": "请填写一个号码。", - "fieldEmptyForPostalCode": "请填写邮政编码。", - "fieldInvalidForCvv": "此安全代码无效。", - "fieldInvalidForExpirationDate": "此有效期限无效。", - "fieldInvalidForNumber": "此卡号无效。", - "fieldInvalidForPostalCode": "此邮政编码无效。", - "genericError": "我们遇到了一些问题", - "hostedFieldsTokenizationFailOnDuplicateError": "此信用卡已作为保存后的付款方式存在。", - "hostedFieldsFailedTokenizationError": "请检查您的信息,然后重试。", - "hostedFieldsFieldsInvalidError": "请检查您的信息,然后重试。", - "hostedFieldsTokenizationNetworkErrorError": "网络错误。请重试。", - "hostedFieldsTokenizationCvvVerificationFailedError": "信用卡验证失败。请检查您的信息,然后重试。", - "paypalAccountTokenizationFailedError": "添加PayPal账户时出错。请重试。", - "paypalFlowFailedError": "连接到PayPal时出错。请重试。", - "paypalTokenizationRequestActiveError": "PayPal付款授权已在进行中。", - "venmoCanceledError": "我们遇到了问题。请确保您的设备上已安装最新版本的Venmo应用,并且您的浏览器支持切换到Venmo。", - "vaultManagerPaymentMethodDeletionError": "无法删除付款方式,请重试。", - "venmoAppFailedError": "在您的设备上找不到Venmo应用。", - "unsupportedCardTypeError": "不支持该卡类型。请尝试其他卡。", - "applePayTokenizationError": "处理Apple Pay付款时出现网络错误。请重试。", - "applePayActiveCardError": "请添加受支持的卡到您的Apple Pay钱包。", - "cardholderNameLabel": "持卡人姓名", - "cardNumberLabel": "卡号", - "cvvLabel": "CVV", - "cvvThreeDigitLabelSubheading": "(3位数)", - "cvvFourDigitLabelSubheading": "(4位数)", - "cardholderNamePlaceholder": "持卡人姓名", - "expirationDateLabel": "有效期限", - "expirationDateLabelSubheading": "(MM/YY)", - "expirationDatePlaceholder": "MM/YY", - "postalCodeLabel": "邮政编码", - "payWithCard": "用卡付款", - "endingIn": "尾号为{{lastFourCardDigits}}", - "Apple Pay": "Apple Pay", - "Venmo": "Venmo", - "Card": "卡", - "PayPal": "PayPal", - "PayPal Credit": "PayPal Credit", - "Google Pay": "Google Pay", - "American Express": "American Express", - "Discover": "Discover", - "Diners Club": "Diners Club", - "MasterCard": "Mastercard", - "Visa": "Visa", - "JCB": "JCB", - "Maestro": "Maestro", - "UnionPay": "银联" -}; - -},{}],165:[function(require,module,exports){ -'use strict'; - -module.exports = { - "payingWith": "付款方式為 {{paymentSource}}", - "chooseAnotherWayToPay": "選擇其他付款方式", - "chooseAWayToPay": "選擇付款方式", - "otherWaysToPay": "其他付款方式", - "edit": "編輯", - "doneEditing": "完成", - "editPaymentMethods": "編輯付款方式", - "CreditCardDeleteConfirmationMessage": "要刪除末碼為 {{identifier}} 的 {{secondaryIdentifier}} 卡嗎?", - "PayPalAccountDeleteConfirmationMessage": "要刪除 PayPal 帳戶 {{identifier}} 嗎?", - "VenmoAccountDeleteConfirmationMessage": "確定要刪除使用者名稱為 {{identifier}} 的 Venmo 帳戶嗎?", - "genericDeleteConfirmationMessage": "確定要刪除此付款方式嗎?", - "deleteCancelButton": "取消", - "deleteConfirmationButton": "刪除", - "cardVerification": "信用卡認證", - "fieldEmptyForCvv": "請填寫信用卡認證碼。", - "fieldEmptyForExpirationDate": "請填寫到期日。", - "fieldEmptyForCardholderName": "請填寫持卡人的名字。", - "fieldTooLongForCardholderName": "持卡人姓名必須少於 256 個字元。", - "fieldEmptyForNumber": "請填寫號碼。", - "fieldEmptyForPostalCode": "請填寫郵遞區號。", - "fieldInvalidForCvv": "此安全代碼無效。", - "fieldInvalidForExpirationDate": "此到期日無效。", - "fieldInvalidForNumber": "此卡號無效。", - "fieldInvalidForPostalCode": "此郵遞區號無效。", - "genericError": "系統發生錯誤。", - "hostedFieldsTokenizationFailOnDuplicateError": "此信用卡已存在,為已儲存的付款方式。", - "hostedFieldsFailedTokenizationError": "請檢查你的資料並再試一次。", - "hostedFieldsFieldsInvalidError": "請檢查你的資料並再試一次。", - "hostedFieldsTokenizationNetworkErrorError": "網絡錯誤。再試一次。", - "hostedFieldsTokenizationCvvVerificationFailedError": "信用卡認證失敗。請檢查你的資料並再試一次。", - "paypalAccountTokenizationFailedError": "加入 PayPal 帳戶時發生錯誤。再試一次。", - "paypalFlowFailedError": "連接 PayPal 時發生錯誤。再試一次。", - "paypalTokenizationRequestActiveError": "PayPal 付款授權已在處理中。", - "venmoCanceledError": "系統發生錯誤,請確保你已在裝置上安裝最新版本的 Venmo 應用程式,而且你的瀏覽器支援切換至 Venmo。", - "vaultManagerPaymentMethodDeletionError": "無法刪除付款方式,請再試一次。", - "venmoAppFailedError": "在你的裝置上找不到 Venmo 應用程式。", - "unsupportedCardTypeError": "不可使用此信用卡類型。請改用其他信用卡。", - "applePayTokenizationError": "處理 Apple Pay 付款時發生網絡錯誤。再試一次。", - "applePayActiveCardError": "在 Apple Pay 錢包中加入支援的信用卡。", - "cardholderNameLabel": "持卡人名字", - "cardNumberLabel": "卡號", - "cvvLabel": "信用卡認證碼", - "cvvThreeDigitLabelSubheading": "(3 位數)", - "cvvFourDigitLabelSubheading": "(4 位數)", - "cardholderNamePlaceholder": "持卡人名字", - "expirationDateLabel": "到期日", - "expirationDateLabelSubheading": "(MM/YY)", - "expirationDatePlaceholder": "月 / 年", - "postalCodeLabel": "郵遞區號", - "payWithCard": "使用信用卡付款", - "endingIn": "末碼為 {{lastFourCardDigits}}", - "Apple Pay": "Apple Pay", - "Venmo": "Venmo", - "Card": "信用卡", - "PayPal": "PayPal", - "PayPal Credit": "PayPal Credit", - "Google Pay": "Google Pay", - "American Express": "American Express", - "Discover": "Discover", - "Diners Club": "Diners Club", - "MasterCard": "Mastercard", - "Visa": "Visa", - "JCB": "JCB", - "Maestro": "Maestro", - "UnionPay": "UnionPay" -}; - -},{}],166:[function(require,module,exports){ -'use strict'; - -module.exports = { - "payingWith": "以 {{paymentSource}} 付款", - "chooseAnotherWayToPay": "選擇付款的以其他方式付款", - "chooseAWayToPay": "選擇付款方式", - "otherWaysToPay": "其他付款方式", - "edit": "編輯", - "doneEditing": "完成", - "editPaymentMethods": "編輯付款方式", - "CreditCardDeleteConfirmationMessage": "確定要刪除末碼為 {{identifier}} 的 {{secondaryIdentifier}} 卡片嗎?", - "PayPalAccountDeleteConfirmationMessage": "確定要刪除 {{identifier}} PayPal 帳戶嗎?", - "VenmoAccountDeleteConfirmationMessage": "確定要刪除用戶名稱為 {{identifier}} 的 Venmo 帳戶嗎?", - "genericDeleteConfirmationMessage": "確定要刪除此付款方式?", - "deleteCancelButton": "取消", - "deleteConfirmationButton": "刪除", - "cardVerification": "信用卡認證", - "fieldEmptyForCvv": "請填妥信用卡驗證碼。", - "fieldEmptyForExpirationDate": "請填妥到期日。", - "fieldEmptyForCardholderName": "請填妥持卡人姓名。", - "fieldTooLongForCardholderName": "持卡人姓名不能超過 256 個字元。", - "fieldEmptyForNumber": "請填妥號碼。", - "fieldEmptyForPostalCode": "請填寫郵遞區號。", - "fieldInvalidForCvv": "這組安全代碼無效。", - "fieldInvalidForExpirationDate": "此到期日無效。", - "fieldInvalidForNumber": "此卡號無效。", - "fieldInvalidForPostalCode": "此郵遞區號無效。", - "genericError": "我們的系統發生問題。", - "hostedFieldsTokenizationFailOnDuplicateError": "此信用卡已存在,為已儲存的付款方式。", - "hostedFieldsFailedTokenizationError": "請檢查你的資料並重試。", - "hostedFieldsFieldsInvalidError": "請檢查你的資料並重試。", - "hostedFieldsTokenizationNetworkErrorError": "網路錯誤。請重試。", - "hostedFieldsTokenizationCvvVerificationFailedError": "信用卡認證失敗。請檢查你的資料並重試。", - "paypalAccountTokenizationFailedError": "新增 PayPal 帳戶時,系統發生錯誤。請重試。", - "paypalFlowFailedError": "連結至 PayPal 時,系統發生錯誤。請重試。", - "paypalTokenizationRequestActiveError": "PayPal 支付款項的授權已在處理中。", - "venmoCanceledError": "系統發生錯誤。確認你的裝置上裝有最新版本的 Venmo 應用程式,而且瀏覽器支援切換至 Venmo。", - "vaultManagerPaymentMethodDeletionError": "無法刪除付款方式,請再試一次。", - "venmoAppFailedError": "你的裝置上找不到 Venmo 應用程式。", - "unsupportedCardTypeError": "不支援此卡片類型。請改用其他卡片。", - "applePayTokenizationError": "在處理 Apple Pay 付款時發生網路錯誤。請重試。", - "applePayActiveCardError": "新增支援的卡片至你的 Apple Pay 錢包。", - "cardholderNameLabel": "持卡人姓名", - "cardNumberLabel": "卡號", - "cvvLabel": "CVV", - "cvvThreeDigitLabelSubheading": "(3 位數)", - "cvvFourDigitLabelSubheading": "(4 位數)", - "cardholderNamePlaceholder": "持卡人姓名", - "expirationDateLabel": "到期日", - "expirationDateLabelSubheading": "(月 / 年)", - "expirationDatePlaceholder": "月 / 年", - "postalCodeLabel": "郵遞區號", - "payWithCard": "使用信用卡 / 扣帳卡付款", - "endingIn": "末碼為 {{lastFourCardDigits}}", - "Apple Pay": "Apple Pay", - "Venmo": "Venmo", - "Card": "信用卡或扣帳卡", - "PayPal": "PayPal", - "PayPal Credit": "PayPal 信貸", - "Google Pay": "Google Pay", - "American Express": "美國運通 (American Express)", - "Discover": "Discover", - "Diners Club": "大來國際 (Diners Club)", - "MasterCard": "Mastercard", - "Visa": "Visa", - "JCB": "JCB", - "Maestro": "Maestro", - "UnionPay": "UnionPay" -}; - -},{}],167:[function(require,module,exports){ -'use strict'; - -var assign = require('../lib/assign').assign; -var classlist = require('../lib/classlist'); -var DropinError = require('../lib/dropin-error'); -var errors = require('../constants').errors; -var Promise = require('../lib/promise'); - -function BaseView(options) { - options = options || {}; - - assign(this, options); -} - -BaseView.prototype.getElementById = function (id) { - if (!this.element) { return null; } - - return this.element.querySelector('[data-braintree-id="' + id + '"]'); -}; - -BaseView.prototype.requestPaymentMethod = function () { - return Promise.reject(new DropinError(errors.NO_PAYMENT_METHOD_ERROR)); -}; - -BaseView.prototype.getPaymentMethod = function () { - return this.activeMethodView && this.activeMethodView.paymentMethod; -}; - -BaseView.prototype.onSelection = function () {}; - -BaseView.prototype.teardown = function () { - return Promise.resolve(); -}; - -BaseView.prototype.preventUserAction = function () { - if (this.element) { - classlist.add(this.element, 'braintree-sheet--loading'); - } - - this.model.preventUserAction(); -}; - -BaseView.prototype.allowUserAction = function () { - if (this.element) { - classlist.remove(this.element, 'braintree-sheet--loading'); - } - - this.model.allowUserAction(); -}; - -module.exports = BaseView; - -},{"../constants":117,"../lib/assign":124,"../lib/classlist":126,"../lib/dropin-error":129,"../lib/promise":137}],168:[function(require,module,exports){ -'use strict'; - -var BaseView = require('./base-view'); -var addSelectionEventHandler = require('../lib/add-selection-event-handler'); -var paymentMethodTypes = require('../constants').paymentMethodTypes; - -function DeleteConfirmationView() { - BaseView.apply(this, arguments); - - this._initialize(); -} - -DeleteConfirmationView.prototype = Object.create(BaseView.prototype); -DeleteConfirmationView.prototype.constructor = DeleteConfirmationView; -DeleteConfirmationView.ID = DeleteConfirmationView.prototype.ID = 'delete-confirmation'; - -DeleteConfirmationView.prototype._initialize = function () { - this._yesButton = this.getElementById('delete-confirmation__yes'); - this._noButton = this.getElementById('delete-confirmation__no'); - this._messageBox = this.getElementById('delete-confirmation__message'); - - addSelectionEventHandler(this._yesButton, function () { - this.model.deleteVaultedPaymentMethod(); - }.bind(this)); - addSelectionEventHandler(this._noButton, function () { - this.model.cancelDeleteVaultedPaymentMethod(); - }.bind(this)); -}; - -DeleteConfirmationView.prototype.applyPaymentMethod = function (paymentMethod) { - var identifier, secondaryIdentifier; - var messageText = this.strings[paymentMethod.type + 'DeleteConfirmationMessage']; - - if (messageText) { - switch (paymentMethod.type) { - case paymentMethodTypes.card: - identifier = paymentMethod.details.lastFour; - secondaryIdentifier = paymentMethod.details.cardType; - break; - case paymentMethodTypes.paypal: - identifier = paymentMethod.details.email; - break; - case paymentMethodTypes.venmo: - identifier = paymentMethod.details.username; - break; - default: - break; - } - - messageText = messageText.replace('{{identifier}}', identifier); - if (secondaryIdentifier) { - messageText = messageText.replace('{{secondaryIdentifier}}', secondaryIdentifier); - } - } else { - messageText = this.strings.genericDeleteConfirmationMessage; - } - this._messageBox.innerText = messageText; -}; - -module.exports = DeleteConfirmationView; - -},{"../constants":117,"../lib/add-selection-event-handler":121,"./base-view":167}],169:[function(require,module,exports){ -'use strict'; - -var analytics = require('../lib/analytics'); -var analyticsKinds = require('../constants').analyticsKinds; -var BaseView = require('./base-view'); -var classlist = require('../lib/classlist'); -var sheetViews = require('./payment-sheet-views'); -var PaymentMethodsView = require('./payment-methods-view'); -var PaymentOptionsView = require('./payment-options-view'); -var DeleteConfirmationView = require('./delete-confirmation-view'); -var addSelectionEventHandler = require('../lib/add-selection-event-handler'); -var Promise = require('../lib/promise'); -var supportsFlexbox = require('../lib/supports-flexbox'); - -var CHANGE_ACTIVE_PAYMENT_METHOD_TIMEOUT = require('../constants').CHANGE_ACTIVE_PAYMENT_METHOD_TIMEOUT; -var DEVELOPER_MISCONFIGURATION_MESSAGE = require('../constants').errors.DEVELOPER_MISCONFIGURATION_MESSAGE; - -function MainView() { - BaseView.apply(this, arguments); - - this.dependenciesInitializing = 0; - - this._initialize(); -} - -MainView.prototype = Object.create(BaseView.prototype); -MainView.prototype.constructor = MainView; - -MainView.prototype._initialize = function () { - var paymentOptionsView; - - this._hasMultiplePaymentOptions = this.model.supportedPaymentOptions.length > 1; - - this._views = {}; - - this.sheetContainer = this.getElementById('sheet-container'); - this.sheetErrorText = this.getElementById('sheet-error-text'); - - this.toggle = this.getElementById('toggle'); - this.disableWrapper = this.getElementById('disable-wrapper'); - this.lowerContainer = this.getElementById('lower-container'); - - this.loadingContainer = this.getElementById('loading-container'); - this.dropinContainer = this.element.querySelector('.braintree-dropin'); - - this.supportsFlexbox = supportsFlexbox(); - - this.model.on('asyncDependenciesReady', this.hideLoadingIndicator.bind(this)); - - this.model.on('errorOccurred', this.showSheetError.bind(this)); - this.model.on('errorCleared', this.hideSheetError.bind(this)); - this.model.on('preventUserAction', this.preventUserAction.bind(this)); - this.model.on('allowUserAction', this.allowUserAction.bind(this)); - - this.paymentSheetViewIDs = Object.keys(sheetViews).reduce(function (ids, sheetViewKey) { - var PaymentSheetView, paymentSheetView; - - if (this.model.supportedPaymentOptions.indexOf(sheetViewKey) !== -1) { - PaymentSheetView = sheetViews[sheetViewKey]; - - paymentSheetView = new PaymentSheetView({ - element: this.getElementById(PaymentSheetView.ID), - mainView: this, - model: this.model, - client: this.client, - strings: this.strings - }); - paymentSheetView.initialize(); - - this.addView(paymentSheetView); - ids.push(paymentSheetView.ID); - } - - return ids; - }.bind(this), []); - - this.paymentMethodsViews = new PaymentMethodsView({ - element: this.element, - model: this.model, - strings: this.strings - }); - this.addView(this.paymentMethodsViews); - - this.deleteConfirmationView = new DeleteConfirmationView({ - element: this.getElementById('delete-confirmation'), - model: this.model, - strings: this.strings - }); - this.addView(this.deleteConfirmationView); - - addSelectionEventHandler(this.toggle, this.toggleAdditionalOptions.bind(this)); - - this.model.on('changeActivePaymentMethod', function () { - setTimeout(function () { - this.setPrimaryView(PaymentMethodsView.ID); - }.bind(this), CHANGE_ACTIVE_PAYMENT_METHOD_TIMEOUT); - }.bind(this)); - - this.model.on('changeActivePaymentView', function (id) { - var activePaymentView = this.getView(id); - - if (id === PaymentMethodsView.ID) { - classlist.add(this.paymentMethodsViews.container, 'braintree-methods--active'); - classlist.remove(this.sheetContainer, 'braintree-sheet--active'); - } else { - setTimeout(function () { - classlist.add(this.sheetContainer, 'braintree-sheet--active'); - }.bind(this), 0); - classlist.remove(this.paymentMethodsViews.container, 'braintree-methods--active'); - if (!this.getView(id).getPaymentMethod()) { - this.model.setPaymentMethodRequestable({ - isRequestable: false - }); - } - } - - activePaymentView.onSelection(); - }.bind(this)); - - this.model.on('removeActivePaymentMethod', function () { - var activePaymentView = this.getView(this.model.getActivePaymentView()); - - if (activePaymentView && typeof activePaymentView.removeActivePaymentMethod === 'function') { - activePaymentView.removeActivePaymentMethod(); - } - }.bind(this)); - - this.model.on('enableEditMode', this.enableEditMode.bind(this)); - - this.model.on('disableEditMode', this.disableEditMode.bind(this)); - - this.model.on('confirmPaymentMethodDeletion', this.openConfirmPaymentMethodDeletionDialog.bind(this)); - this.model.on('cancelVaultedPaymentMethodDeletion', this.cancelVaultedPaymentMethodDeletion.bind(this)); - this.model.on('startVaultedPaymentMethodDeletion', this.startVaultedPaymentMethodDeletion.bind(this)); - this.model.on('finishVaultedPaymentMethodDeletion', this.finishVaultedPaymentMethodDeletion.bind(this)); - - if (this._hasMultiplePaymentOptions) { - paymentOptionsView = new PaymentOptionsView({ - client: this.client, - element: this.getElementById(PaymentOptionsView.ID), - mainView: this, - model: this.model, - strings: this.strings - }); - - this.addView(paymentOptionsView); - } - - this._sendToDefaultView(); -}; - -MainView.prototype.addView = function (view) { - this._views[view.ID] = view; -}; - -MainView.prototype.getView = function (id) { - return this._views[id]; -}; - -MainView.prototype.setPrimaryView = function (id, secondaryViewId) { - var paymentMethod; - - setTimeout(function () { - this.element.className = prefixShowClass(id); - if (secondaryViewId) { - classlist.add(this.element, prefixShowClass(secondaryViewId)); - } - }.bind(this), 0); - - this.primaryView = this.getView(id); - this.model.changeActivePaymentView(id); - - if (this.paymentSheetViewIDs.indexOf(id) !== -1) { - if (this.model.getPaymentMethods().length > 0 || this.getView(PaymentOptionsView.ID)) { - this.showToggle(); - } else { - this.hideToggle(); - } - } else if (id === PaymentMethodsView.ID) { - this.showToggle(); - // Move options below the upper-container - this.getElementById('lower-container').appendChild(this.getElementById('options')); - } else if (id === PaymentOptionsView.ID) { - this.hideToggle(); - } - - if (!this.supportsFlexbox) { - this.element.setAttribute('data-braintree-no-flexbox', true); - } - - paymentMethod = this.primaryView.getPaymentMethod(); - - this.model.setPaymentMethodRequestable({ - isRequestable: Boolean(paymentMethod), - type: paymentMethod && paymentMethod.type, - selectedPaymentMethod: paymentMethod - }); - - this.model.clearError(); -}; - -MainView.prototype.requestPaymentMethod = function () { - var activePaymentView = this.getView(this.model.getActivePaymentView()); - - return activePaymentView.requestPaymentMethod().then(function (payload) { - analytics.sendEvent(this.client, 'request-payment-method.' + analyticsKinds[payload.type]); - - return payload; - }.bind(this)).catch(function (err) { - analytics.sendEvent(this.client, 'request-payment-method.error'); - - return Promise.reject(err); - }.bind(this)); -}; - -MainView.prototype.hideLoadingIndicator = function () { - classlist.add(this.dropinContainer, 'braintree-loaded'); - classlist.add(this.loadingContainer, 'braintree-hidden'); -}; - -MainView.prototype.showLoadingIndicator = function () { - classlist.remove(this.dropinContainer, 'braintree-loaded'); - classlist.remove(this.loadingContainer, 'braintree-hidden'); -}; - -MainView.prototype.toggleAdditionalOptions = function () { - var sheetViewID; - var isPaymentSheetView = this.paymentSheetViewIDs.indexOf(this.primaryView.ID) !== -1; - - this.hideToggle(); - - if (!this._hasMultiplePaymentOptions) { - sheetViewID = this.paymentSheetViewIDs[0]; - - classlist.add(this.element, prefixShowClass(sheetViewID)); - this.model.changeActivePaymentView(sheetViewID); - } else if (isPaymentSheetView) { - if (this.model.getPaymentMethods().length === 0) { - this.setPrimaryView(PaymentOptionsView.ID); - } else { - this.setPrimaryView(PaymentMethodsView.ID, PaymentOptionsView.ID); - this.hideToggle(); - } - } else { - classlist.add(this.element, prefixShowClass(PaymentOptionsView.ID)); - } -}; - -MainView.prototype.showToggle = function () { - if (this.model.isInEditMode()) { - return; - } - classlist.remove(this.toggle, 'braintree-hidden'); - classlist.add(this.lowerContainer, 'braintree-hidden'); -}; - -MainView.prototype.hideToggle = function () { - classlist.add(this.toggle, 'braintree-hidden'); - classlist.remove(this.lowerContainer, 'braintree-hidden'); -}; - -MainView.prototype.showSheetError = function (error) { - var errorMessage; - var genericErrorMessage = this.strings.genericError; - - if (this.strings.hasOwnProperty(error)) { - errorMessage = this.strings[error]; - } else if (error && error.code) { - errorMessage = this.strings[snakeCaseToCamelCase(error.code) + 'Error'] || genericErrorMessage; - } else if (error === 'developerError') { - errorMessage = DEVELOPER_MISCONFIGURATION_MESSAGE; - } else { - errorMessage = genericErrorMessage; - } - - classlist.add(this.dropinContainer, 'braintree-sheet--has-error'); - this.sheetErrorText.innerHTML = errorMessage; -}; - -MainView.prototype.hideSheetError = function () { - classlist.remove(this.dropinContainer, 'braintree-sheet--has-error'); -}; - -MainView.prototype.getOptionsElements = function () { - return this._views.options.elements; -}; - -MainView.prototype.preventUserAction = function () { - classlist.remove(this.disableWrapper, 'braintree-hidden'); -}; - -MainView.prototype.allowUserAction = function () { - classlist.add(this.disableWrapper, 'braintree-hidden'); -}; - -MainView.prototype.teardown = function () { - var error; - var viewNames = Object.keys(this._views); - var teardownPromises = viewNames.map(function (view) { - return this._views[view].teardown().catch(function (err) { - error = err; - }); - }.bind(this)); - - return Promise.all(teardownPromises).then(function () { - if (error) { - return Promise.reject(error); - } - - return Promise.resolve(); - }); -}; - -MainView.prototype.enableEditMode = function () { - this.setPrimaryView(this.paymentMethodsViews.ID); - this.paymentMethodsViews.enableEditMode(); - this.hideToggle(); - - this.model.setPaymentMethodRequestable({ - isRequestable: false - }); -}; - -MainView.prototype.disableEditMode = function () { - var paymentMethod; - - this.hideSheetError(); - this.paymentMethodsViews.disableEditMode(); - this.showToggle(); - - paymentMethod = this.primaryView.getPaymentMethod(); - - this.model.setPaymentMethodRequestable({ - isRequestable: Boolean(paymentMethod), - type: paymentMethod && paymentMethod.type, - selectedPaymentMethod: paymentMethod - }); -}; - -MainView.prototype.openConfirmPaymentMethodDeletionDialog = function (paymentMethod) { - this.deleteConfirmationView.applyPaymentMethod(paymentMethod); - this.setPrimaryView(this.deleteConfirmationView.ID); -}; - -MainView.prototype.cancelVaultedPaymentMethodDeletion = function () { - this.setPrimaryView(this.paymentMethodsViews.ID); -}; - -MainView.prototype.startVaultedPaymentMethodDeletion = function () { - this.element.className = ''; - this.showLoadingIndicator(); -}; - -MainView.prototype.finishVaultedPaymentMethodDeletion = function (error) { - var self = this; - - this.paymentMethodsViews.refreshPaymentMethods(); - - if (error && this.model.getPaymentMethods().length > 0) { - this.model.enableEditMode(); - this.showSheetError('vaultManagerPaymentMethodDeletionError'); - } else { - this._sendToDefaultView(); - } - - return new Promise(function (resolve) { - setTimeout(function () { - // allow all the views to reset before hiding the loading indicator - self.hideLoadingIndicator(); - resolve(); - }, 500); - }); -}; - -MainView.prototype._sendToDefaultView = function () { - var paymentMethods = this.model.getPaymentMethods(); - var preselectVaultedPaymentMethod = this.model.merchantConfiguration.preselectVaultedPaymentMethod !== false; - - if (paymentMethods.length > 0) { - if (preselectVaultedPaymentMethod) { - this.model.changeActivePaymentMethod(paymentMethods[0]); - } else { - this.setPrimaryView(this.paymentMethodsViews.ID); - } - } else if (this._hasMultiplePaymentOptions) { - this.setPrimaryView(PaymentOptionsView.ID); - } else { - this.setPrimaryView(this.paymentSheetViewIDs[0]); - } -}; -function snakeCaseToCamelCase(s) { - return s.toLowerCase().replace(/(\_\w)/g, function (m) { - return m[1].toUpperCase(); - }); -} - -function prefixShowClass(classname) { - return 'braintree-show-' + classname; -} - -module.exports = MainView; - -},{"../constants":117,"../lib/add-selection-event-handler":121,"../lib/analytics":122,"../lib/classlist":126,"../lib/promise":137,"../lib/supports-flexbox":139,"./base-view":167,"./delete-confirmation-view":168,"./payment-methods-view":171,"./payment-options-view":172,"./payment-sheet-views":177}],170:[function(require,module,exports){ -'use strict'; - -var BaseView = require('./base-view'); -var classlist = require('../lib/classlist'); -var constants = require('../constants'); - -var addSelectionEventHandler = require('../lib/add-selection-event-handler'); - -var paymentMethodHTML = "
\n
\n \n \n \n
\n
@DISABLE_MESSAGE
\n
\n\n
\n \n \n \n
\n\n
@TITLE
@SUBTITLE
\n\n
\n
\n \n \n \n
\n
\n"; - -function PaymentMethodView() { - BaseView.apply(this, arguments); - - this._initialize(); -} - -PaymentMethodView.prototype = Object.create(BaseView.prototype); -PaymentMethodView.prototype.constructor = PaymentMethodView; - -PaymentMethodView.prototype._initialize = function () { - var endingInText; - var html = paymentMethodHTML; - var paymentMethodCardTypes = constants.paymentMethodCardTypes; - var paymentMethodTypes = constants.paymentMethodTypes; - - this.element = document.createElement('div'); - this.element.className = 'braintree-method'; - this.element.setAttribute('tabindex', '0'); - - addSelectionEventHandler(this.element, this._choosePaymentMethod.bind(this)); - - html = html.replace(/@DISABLE_MESSAGE/g, this.strings.hasSubscription); - - switch (this.paymentMethod.type) { - case paymentMethodTypes.applePay: - html = html.replace(/@ICON/g, 'logoApplePay') - .replace(/@CLASSNAME/g, '') - .replace(/@TITLE/g, this.strings['Apple Pay']) - .replace(/@SUBTITLE/g, ''); - break; - case paymentMethodTypes.card: - endingInText = this.strings.endingIn.replace('{{lastFourCardDigits}}', this.paymentMethod.details.lastFour); - html = html.replace(/@ICON/g, 'icon-' + paymentMethodCardTypes[this.paymentMethod.details.cardType]) - .replace(/@CLASSNAME/g, ' braintree-icon--bordered') - .replace(/@TITLE/g, endingInText) - .replace(/@SUBTITLE/g, this.strings[this.paymentMethod.details.cardType]); - break; - case paymentMethodTypes.googlePay: - html = html.replace(/@ICON/g, 'logoGooglePay') - .replace(/@CLASSNAME/g, '') - .replace(/@TITLE/g, this.strings['Google Pay']) - .replace(/@SUBTITLE/g, ''); - break; - case paymentMethodTypes.paypal: - html = html.replace(/@ICON/g, 'logoPayPal') - .replace(/@CLASSNAME/g, '') - .replace(/@TITLE/g, this.paymentMethod.details.email) - .replace(/@SUBTITLE/g, this.strings.PayPal); - break; - case paymentMethodTypes.venmo: - html = html.replace(/@ICON/g, 'logoVenmo') - .replace(/@CLASSNAME/g, '') - .replace(/@TITLE/g, this.paymentMethod.details.username) - .replace(/@SUBTITLE/g, this.strings.Venmo); - break; - default: - break; - } - - this.element.innerHTML = html; - this.checkMark = this.element.querySelector('.braintree-method__check-container'); - addSelectionEventHandler(this.element.querySelector('.braintree-method__delete-container'), this._selectDelete.bind(this)); -}; - -PaymentMethodView.prototype.setActive = function (isActive) { - // setTimeout required to animate addition of new payment methods - setTimeout(function () { - classlist.toggle(this.element, 'braintree-method--active', isActive); - }.bind(this), 0); -}; - -PaymentMethodView.prototype.enableEditMode = function () { - classlist.add(this.checkMark, 'braintree-hidden'); - if (this.paymentMethod.hasSubscription) { - classlist.add(this.element, 'braintree-method--disabled'); - } -}; - -PaymentMethodView.prototype.disableEditMode = function () { - classlist.remove(this.checkMark, 'braintree-hidden'); - classlist.remove(this.element, 'braintree-method--disabled'); -}; - -PaymentMethodView.prototype._choosePaymentMethod = function () { - if (this.model.isInEditMode()) { - return; - } - this.model.changeActivePaymentMethod(this.paymentMethod); -}; - -PaymentMethodView.prototype._selectDelete = function () { - this.model.confirmPaymentMethodDeletion(this.paymentMethod); -}; - -module.exports = PaymentMethodView; - -},{"../constants":117,"../lib/add-selection-event-handler":121,"../lib/classlist":126,"./base-view":167}],171:[function(require,module,exports){ -'use strict'; - -var BaseView = require('./base-view'); -var PaymentMethodView = require('./payment-method-view'); -var DropinError = require('../lib/dropin-error'); -var classlist = require('../lib/classlist'); -var errors = require('../constants').errors; -var Promise = require('../lib/promise'); -var addSelectionEventHandler = require('../lib/add-selection-event-handler'); - -var PAYMENT_METHOD_TYPE_TO_TRANSLATION_STRING = { - CreditCard: 'Card', - PayPalAccount: 'PayPal', - ApplePayCard: 'Apple Pay', - AndroidPayCard: 'Google Pay', - VenmoAccount: 'Venmo' -}; - -function PaymentMethodsView() { - BaseView.apply(this, arguments); - - this._initialize(); -} - -PaymentMethodsView.prototype = Object.create(BaseView.prototype); -PaymentMethodsView.prototype.constructor = PaymentMethodsView; -PaymentMethodsView.ID = PaymentMethodsView.prototype.ID = 'methods'; - -PaymentMethodsView.prototype._initialize = function () { - this.views = []; - this.container = this.getElementById('methods-container'); - this._headingLabel = this.getElementById('methods-label'); - this._editButton = this.getElementById('methods-edit'); - - this.model.on('addPaymentMethod', this._addPaymentMethod.bind(this)); - this.model.on('changeActivePaymentMethod', this._changeActivePaymentMethodView.bind(this)); - this.model.on('refreshPaymentMethods', this.refreshPaymentMethods.bind(this)); - - this.refreshPaymentMethods(); - - if (this.model.merchantConfiguration.vaultManager) { - this.model.on('removePaymentMethod', this._removePaymentMethod.bind(this)); - - addSelectionEventHandler(this._editButton, function () { - if (this.model.isInEditMode()) { - this.model.disableEditMode(); - } else { - this.model.enableEditMode(); - } - }.bind(this)); - - classlist.remove(this._editButton, 'braintree-hidden'); - } -}; - -PaymentMethodsView.prototype.removeActivePaymentMethod = function () { - if (!this.activeMethodView) { - return; - } - this.activeMethodView.setActive(false); - this.activeMethodView = null; - classlist.add(this._headingLabel, 'braintree-no-payment-method-selected'); -}; - -PaymentMethodsView.prototype._getPaymentMethodString = function () { - var stringKey, paymentMethodTypeString; - - if (!this.activeMethodView) { - return ''; - } - - stringKey = PAYMENT_METHOD_TYPE_TO_TRANSLATION_STRING[this.activeMethodView.paymentMethod.type]; - paymentMethodTypeString = this.strings[stringKey]; - - return this.strings.payingWith.replace('{{paymentSource}}', paymentMethodTypeString); -}; - -PaymentMethodsView.prototype.enableEditMode = function () { - classlist.add(this.container, 'braintree-methods--edit'); - - this._editButton.innerHTML = this.strings.deleteCancelButton; - this._headingLabel.innerHTML = this.strings.editPaymentMethods; - - this.views.forEach(function (view) { - view.enableEditMode(); - }); -}; - -PaymentMethodsView.prototype.disableEditMode = function () { - classlist.remove(this.container, 'braintree-methods--edit'); - - this._editButton.innerHTML = this.strings.edit; - this._headingLabel.innerHTML = this._getPaymentMethodString(); - - this.views.forEach(function (view) { - view.disableEditMode(); - }); -}; - -PaymentMethodsView.prototype._addPaymentMethod = function (paymentMethod) { - var paymentMethodView = new PaymentMethodView({ - model: this.model, - paymentMethod: paymentMethod, - strings: this.strings - }); - - if (this.model.isGuestCheckout && this.container.firstChild) { - this.container.removeChild(this.container.firstChild); - this.views.pop(); - } - - if (this.container.firstChild) { - this.container.insertBefore(paymentMethodView.element, this.container.firstChild); - } else { - this.container.appendChild(paymentMethodView.element); - } - - this.views.push(paymentMethodView); -}; - -PaymentMethodsView.prototype._removePaymentMethod = function (paymentMethod) { - var i; - - for (i = 0; i < this.views.length; i++) { - if (this.views[i].paymentMethod === paymentMethod) { - this.container.removeChild(this.views[i].element); - this._headingLabel.innerHTML = ' '; - this.views.splice(i, 1); - break; - } - } -}; - -PaymentMethodsView.prototype._changeActivePaymentMethodView = function (paymentMethod) { - var i; - var previousActiveMethodView = this.activeMethodView; - - for (i = 0; i < this.views.length; i++) { - if (this.views[i].paymentMethod === paymentMethod) { - this.activeMethodView = this.views[i]; - this._headingLabel.innerHTML = this._getPaymentMethodString(); - break; - } - } - - if (previousActiveMethodView) { - previousActiveMethodView.setActive(false); - } - this.activeMethodView.setActive(true); - classlist.remove(this._headingLabel, 'braintree-no-payment-method-selected'); -}; - -PaymentMethodsView.prototype.requestPaymentMethod = function () { - if (!this.activeMethodView || this.model.isInEditMode()) { - return Promise.reject(new DropinError(errors.NO_PAYMENT_METHOD_ERROR)); - } - - return Promise.resolve(this.activeMethodView.paymentMethod); -}; - -PaymentMethodsView.prototype.refreshPaymentMethods = function () { - var i; - var paymentMethods = this.model.getPaymentMethods(); - - this.views.forEach(function (view) { - this.container.removeChild(view.element); - }.bind(this)); - - this.views = []; - - for (i = paymentMethods.length - 1; i >= 0; i--) { - this._addPaymentMethod(paymentMethods[i]); - } -}; - -module.exports = PaymentMethodsView; - -},{"../constants":117,"../lib/add-selection-event-handler":121,"../lib/classlist":126,"../lib/dropin-error":129,"../lib/promise":137,"./base-view":167,"./payment-method-view":170}],172:[function(require,module,exports){ -'use strict'; - -var analytics = require('../lib/analytics'); -var addSelectionEventHandler = require('../lib/add-selection-event-handler'); -var BaseView = require('./base-view'); - -var paymentOptionIDs = require('../constants').paymentOptionIDs; - -var paymentMethodOptionHTML = "
\n \n \n \n
\n\n
\n @OPTION_TITLE\n
\n
\n"; - -function PaymentOptionsView() { - BaseView.apply(this, arguments); - - this._initialize(); -} - -PaymentOptionsView.prototype = Object.create(BaseView.prototype); -PaymentOptionsView.prototype.constructor = PaymentOptionsView; -PaymentOptionsView.ID = PaymentOptionsView.prototype.ID = 'options'; - -PaymentOptionsView.prototype._initialize = function () { - this.container = this.getElementById('payment-options-container'); - this.elements = {}; - - this.model.supportedPaymentOptions.forEach(function (paymentOptionID) { - this._addPaymentOption(paymentOptionID); - }.bind(this)); -}; - -PaymentOptionsView.prototype._addPaymentOption = function (paymentOptionID) { - var paymentSource; - var div = document.createElement('div'); - var html = paymentMethodOptionHTML; - var clickHandler = function clickHandler() { - this.mainView.setPrimaryView(paymentOptionID); - this.model.selectPaymentOption(paymentOptionID); - analytics.sendEvent(this.client, 'selected.' + paymentOptionIDs[paymentOptionID]); - }.bind(this); - - div.className = 'braintree-option braintree-option__' + paymentOptionID; - div.setAttribute('tabindex', '0'); - - switch (paymentOptionID) { - case paymentOptionIDs.applePay: - paymentSource = this.strings['Apple Pay']; - html = html.replace(/@ICON/g, 'logoApplePay'); - break; - case paymentOptionIDs.card: - paymentSource = this.strings.Card; - html = html.replace(/@ICON/g, 'iconCardFront'); - html = html.replace(/@CLASSNAME/g, 'braintree-icon--bordered'); - break; - case paymentOptionIDs.googlePay: - paymentSource = this.strings['Google Pay']; - html = html.replace(/@ICON/g, 'logoGooglePay'); - break; - case paymentOptionIDs.paypal: - paymentSource = this.strings.PayPal; - html = html.replace(/@ICON/g, 'logoPayPal'); - break; - case paymentOptionIDs.paypalCredit: - paymentSource = this.strings['PayPal Credit']; - html = html.replace(/@ICON/g, 'logoPayPalCredit'); - break; - case paymentOptionIDs.venmo: - paymentSource = this.strings.Venmo; - html = html.replace(/@ICON/g, 'logoVenmo'); - break; - default: - break; - } - - html = html.replace(/@OPTION_LABEL/g, this._generateOptionLabel(paymentSource)); - html = html.replace(/@OPTION_TITLE/g, paymentSource); - html = html.replace(/@CLASSNAME/g, ''); - - div.innerHTML = html; - - addSelectionEventHandler(div, clickHandler); - - this.container.appendChild(div); - this.elements[paymentOptionID] = { - div: div, - clickHandler: clickHandler - }; -}; - -PaymentOptionsView.prototype._generateOptionLabel = function (paymentSourceString) { - return this.strings.payingWith.replace('{{paymentSource}}', paymentSourceString); -}; - -module.exports = PaymentOptionsView; - -},{"../constants":117,"../lib/add-selection-event-handler":121,"../lib/analytics":122,"./base-view":167}],173:[function(require,module,exports){ -(function (global){ -'use strict'; - -var assign = require('../../lib/assign').assign; -var BaseView = require('../base-view'); -var btApplePay = require('braintree-web/apple-pay'); -var DropinError = require('../../lib/dropin-error'); -var isHTTPS = require('../../lib/is-https'); -var Promise = require('../../lib/promise'); -var paymentOptionIDs = require('../../constants').paymentOptionIDs; - -function ApplePayView() { - BaseView.apply(this, arguments); -} - -ApplePayView.prototype = Object.create(BaseView.prototype); -ApplePayView.prototype.constructor = ApplePayView; -ApplePayView.ID = ApplePayView.prototype.ID = paymentOptionIDs.applePay; - -ApplePayView.prototype.initialize = function () { - var self = this; - - self.applePayConfiguration = assign({}, self.model.merchantConfiguration.applePay); - - self.model.asyncDependencyStarting(); - - return btApplePay.create({client: this.client}).then(function (applePayInstance) { - var buttonDiv = self.getElementById('apple-pay-button'); - - self.applePayInstance = applePayInstance; - - self.model.on('changeActivePaymentView', function (paymentViewID) { - if (paymentViewID !== self.ID) { - return; - } - - global.ApplePaySession.canMakePaymentsWithActiveCard(self.applePayInstance.merchantIdentifier).then(function (canMakePayments) { - if (!canMakePayments) { - self.model.reportError('applePayActiveCardError'); - } - }); - }); - - buttonDiv.onclick = self._showPaymentSheet.bind(self); - buttonDiv.style['-apple-pay-button-style'] = self.model.merchantConfiguration.applePay.buttonStyle || 'black'; - - self.model.asyncDependencyReady(); - }).catch(function (err) { - self.model.asyncDependencyFailed({ - view: self.ID, - error: new DropinError(err) - }); - }); -}; - -ApplePayView.prototype._showPaymentSheet = function () { - var self = this; - var request = self.applePayInstance.createPaymentRequest(this.applePayConfiguration.paymentRequest); - var session = new global.ApplePaySession(2, request); - - session.onvalidatemerchant = function (event) { - self.applePayInstance.performValidation({ - validationURL: event.validationURL, - displayName: self.applePayConfiguration.displayName - }).then(function (validationData) { - session.completeMerchantValidation(validationData); - }).catch(function (validationErr) { - self.model.reportError(validationErr); - session.abort(); - }); - }; - - session.onpaymentauthorized = function (event) { - self.applePayInstance.tokenize({ - token: event.payment.token - }).then(function (payload) { - session.completePayment(global.ApplePaySession.STATUS_SUCCESS); - payload.payment = event.payment; - self.model.addPaymentMethod(payload); - }).catch(function (tokenizeErr) { - self.model.reportError(tokenizeErr); - session.completePayment(global.ApplePaySession.STATUS_FAILURE); - }); - }; - - session.begin(); - - return false; -}; - -ApplePayView.prototype.updateConfiguration = function (key, value) { - this.applePayConfiguration[key] = value; -}; - -ApplePayView.isEnabled = function (options) { - var gatewayConfiguration = options.client.getConfiguration().gatewayConfiguration; - var applePayEnabled = gatewayConfiguration.applePayWeb && Boolean(options.merchantConfiguration.applePay); - var applePayBrowserSupported; - - if (!applePayEnabled) { - return Promise.resolve(false); - } - - applePayBrowserSupported = global.ApplePaySession && isHTTPS.isHTTPS(); - - if (!applePayBrowserSupported) { - return Promise.resolve(false); - } - - return Promise.resolve(Boolean(global.ApplePaySession.canMakePayments())); -}; - -module.exports = ApplePayView; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../../constants":117,"../../lib/assign":124,"../../lib/dropin-error":129,"../../lib/is-https":133,"../../lib/promise":137,"../base-view":167,"braintree-web/apple-pay":24}],174:[function(require,module,exports){ -(function (global){ -'use strict'; - -var analytics = require('../../lib/analytics'); -var assign = require('../../lib/assign').assign; -var browserDetection = require('../../lib/browser-detection'); -var BaseView = require('../base-view'); -var btPaypal = require('braintree-web/paypal-checkout'); -var DropinError = require('../../lib/dropin-error'); -var constants = require('../../constants'); -var assets = require('../../lib/assets'); -var translations = require('../../translations').fiveCharacterLocales; -var Promise = require('../../lib/promise'); - -var ASYNC_DEPENDENCY_TIMEOUT = 30000; -var READ_ONLY_CONFIGURATION_OPTIONS = ['offerCredit', 'locale']; -var DEFAULT_CHECKOUTJS_LOG_LEVEL = 'warn'; - -var paypalScriptLoadInProgressPromise; - -function BasePayPalView() { - BaseView.apply(this, arguments); -} - -BasePayPalView.prototype = Object.create(BaseView.prototype); - -BasePayPalView.prototype.initialize = function () { - var asyncDependencyTimeoutHandler; - var isCredit = Boolean(this._isPayPalCredit); - var setupComplete = false; - var self = this; - var paypalType = isCredit ? 'paypalCredit' : 'paypal'; - var paypalConfiguration = this.model.merchantConfiguration[paypalType]; - - this.paypalConfiguration = assign({}, paypalConfiguration); - - this.model.asyncDependencyStarting(); - asyncDependencyTimeoutHandler = setTimeout(function () { - self.model.asyncDependencyFailed({ - view: self.ID, - error: new DropinError('There was an error connecting to PayPal.') - }); - }, ASYNC_DEPENDENCY_TIMEOUT); - - return btPaypal.create({client: this.client}).then(function (paypalInstance) { - var checkoutJSConfiguration; - var buttonSelector = '[data-braintree-id="paypal-button"]'; - var environment = self.client.getConfiguration().gatewayConfiguration.environment === 'production' ? 'production' : 'sandbox'; - var locale = self.model.merchantConfiguration.locale; - - self.paypalInstance = paypalInstance; - - self.paypalConfiguration.offerCredit = Boolean(isCredit); - checkoutJSConfiguration = { - env: environment, - style: self.paypalConfiguration.buttonStyle || {}, - commit: self.paypalConfiguration.commit, - payment: function () { - return paypalInstance.createPayment(self.paypalConfiguration).catch(reportError); - }, - onAuthorize: function (data) { - return paypalInstance.tokenizePayment(data).then(function (tokenizePayload) { - if (self.paypalConfiguration.flow === 'vault' && !self.model.isGuestCheckout) { - tokenizePayload.vaulted = true; - } - self.model.addPaymentMethod(tokenizePayload); - }).catch(reportError); - }, - onError: reportError - }; - - if (locale && locale in translations) { - self.paypalConfiguration.locale = locale; - checkoutJSConfiguration.locale = locale; - } - - if (isCredit) { - buttonSelector = '[data-braintree-id="paypal-credit-button"]'; - checkoutJSConfiguration.style.label = 'credit'; - } - - return global.paypal.Button.render(checkoutJSConfiguration, buttonSelector).then(function () { - self.model.asyncDependencyReady(); - setupComplete = true; - clearTimeout(asyncDependencyTimeoutHandler); - }); - }).catch(reportError); - - function reportError(err) { - if (setupComplete) { - self.model.reportError(err); - } else { - self.model.asyncDependencyFailed({ - view: self.ID, - error: err - }); - clearTimeout(asyncDependencyTimeoutHandler); - } - } -}; - -BasePayPalView.prototype.updateConfiguration = function (key, value) { - if (READ_ONLY_CONFIGURATION_OPTIONS.indexOf(key) === -1) { - this.paypalConfiguration[key] = value; - } -}; - -BasePayPalView.isEnabled = function (options) { - var gatewayConfiguration = options.client.getConfiguration().gatewayConfiguration; - - if (!gatewayConfiguration.paypalEnabled) { - return Promise.resolve(false); - } - - if (browserDetection.isIe9() || browserDetection.isIe10()) { - analytics.sendEvent(options.client, options.viewID + '.checkout.js-browser-not-supported'); - - return Promise.resolve(false); - } - - if (global.paypal && global.paypal.Button) { - return Promise.resolve(true); - } - - if (paypalScriptLoadInProgressPromise) { - return paypalScriptLoadInProgressPromise; - } - - paypalScriptLoadInProgressPromise = assets.loadScript({ - src: constants.CHECKOUT_JS_SOURCE, - id: constants.PAYPAL_CHECKOUT_SCRIPT_ID, - dataAttributes: { - 'log-level': options.merchantConfiguration.paypal.logLevel || DEFAULT_CHECKOUTJS_LOG_LEVEL - } - }).then(function () { - return Promise.resolve(true); - }).catch(function () { - return Promise.resolve(false); - }).then(function (result) { - paypalScriptLoadInProgressPromise = null; - - return Promise.resolve(result); - }); - - return paypalScriptLoadInProgressPromise; -}; - -module.exports = BasePayPalView; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../../constants":117,"../../lib/analytics":122,"../../lib/assets":123,"../../lib/assign":124,"../../lib/browser-detection":125,"../../lib/dropin-error":129,"../../lib/promise":137,"../../translations":152,"../base-view":167,"braintree-web/paypal-checkout":93}],175:[function(require,module,exports){ -'use strict'; - -var assign = require('../../lib/assign').assign; - -var BaseView = require('../base-view'); -var classlist = require('../../lib/classlist'); -var constants = require('../../constants'); -var DropinError = require('../../lib/dropin-error'); -var hostedFields = require('braintree-web/hosted-fields'); -var isUtf8 = require('../../lib/is-utf-8'); -var transitionHelper = require('../../lib/transition-helper'); -var Promise = require('../../lib/promise'); - -var cardIconHTML = "
\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n\n
\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n"; - -function CardView() { - BaseView.apply(this, arguments); -} - -CardView.prototype = Object.create(BaseView.prototype); -CardView.prototype.constructor = CardView; -CardView.ID = CardView.prototype.ID = constants.paymentOptionIDs.card; - -CardView.prototype.initialize = function () { - var cvvFieldGroup, postalCodeFieldGroup; - var cardholderNameField = this.getElementById('cardholder-name-field-group'); - var cardIcons = this.getElementById('card-view-icons'); - var hfOptions = this._generateHostedFieldsOptions(); - - cardIcons.innerHTML = cardIconHTML; - this._hideUnsupportedCardIcons(); - - this.hasCVV = hfOptions.fields.cvv; - this.hasCardholderName = Boolean(this.model.merchantConfiguration.card && this.model.merchantConfiguration.card.cardholderName); - this.cardholderNameInput = cardholderNameField.querySelector('input'); - this.cardNumberIcon = this.getElementById('card-number-icon'); - this.cardNumberIconSvg = this.getElementById('card-number-icon-svg'); - this.cvvIcon = this.getElementById('cvv-icon'); - this.cvvIconSvg = this.getElementById('cvv-icon-svg'); - this.cvvLabelDescriptor = this.getElementById('cvv-label-descriptor'); - this.fieldErrors = {}; - this.extraInputs = [ - { - fieldName: 'cardholderName', - enabled: this.hasCardholderName, - required: this.hasCardholderName && this.model.merchantConfiguration.card.cardholderName.required, - requiredError: this.strings.fieldEmptyForCardholderName, - validations: [ - { - isValid: function (value) { - return value.length < 256; - }, - error: this.strings.fieldTooLongForCardholderName - } - ] - } - ]; - - if (!this.hasCVV) { - cvvFieldGroup = this.getElementById('cvv-field-group'); - cvvFieldGroup.parentNode.removeChild(cvvFieldGroup); - } - - if (!hfOptions.fields.postalCode) { - postalCodeFieldGroup = this.getElementById('postal-code-field-group'); - postalCodeFieldGroup.parentNode.removeChild(postalCodeFieldGroup); - } - - this.extraInputs.forEach(function (extraInput) { - if (extraInput.enabled) { - this._setupExtraInput(extraInput); - } else { - this._removeExtraInput(extraInput); - } - }.bind(this)); - - this.model.asyncDependencyStarting(); - - return hostedFields.create(hfOptions).then(function (hostedFieldsInstance) { - this.hostedFieldsInstance = hostedFieldsInstance; - this.hostedFieldsInstance.on('blur', this._onBlurEvent.bind(this)); - this.hostedFieldsInstance.on('cardTypeChange', this._onCardTypeChangeEvent.bind(this)); - this.hostedFieldsInstance.on('focus', this._onFocusEvent.bind(this)); - this.hostedFieldsInstance.on('notEmpty', this._onNotEmptyEvent.bind(this)); - this.hostedFieldsInstance.on('validityChange', this._onValidityChangeEvent.bind(this)); - - this.model.asyncDependencyReady(); - }.bind(this)).catch(function (err) { - this.model.asyncDependencyFailed({ - view: this.ID, - error: err - }); - }.bind(this)); -}; - -CardView.prototype._setupExtraInput = function (extraInput) { - var self = this; - var fieldNameKebab = camelCaseToKebabCase(extraInput.fieldName); - var field = this.getElementById(fieldNameKebab + '-field-group'); - var input = field.querySelector('input'); - var nameContainer = field.querySelector('.braintree-form__hosted-field'); - - input.addEventListener('keyup', function () { - var valid = self._validateExtraInput(extraInput, true); - - classlist.toggle(nameContainer, 'braintree-form__field--valid', valid); - - if (valid) { - self.hideFieldError(extraInput.fieldName); - } - - self._sendRequestableEvent(); - }, false); - - if (extraInput.required) { - input.addEventListener('blur', function () { - // the active element inside the blur event is the document.body - // by taking it out of the event loop, we can detect the new - // active element (hosted field or other card view element) - setTimeout(function () { - if (isCardViewElement()) { - self._validateExtraInput(extraInput, true); - } - }, 0); - }, false); - } -}; - -CardView.prototype._removeExtraInput = function (extraInput) { - var field = this.getElementById(camelCaseToKebabCase(extraInput.fieldName) + '-field-group'); - - field.parentNode.removeChild(field); -}; - -CardView.prototype._sendRequestableEvent = function () { - if (!this._isTokenizing) { - this.model.setPaymentMethodRequestable({ - isRequestable: this._validateForm(), - type: constants.paymentMethodTypes.card - }); - } -}; - -CardView.prototype._generateHostedFieldsOptions = function () { - var challenges = this.client.getConfiguration().gatewayConfiguration.challenges; - var hasCVVChallenge = challenges.indexOf('cvv') !== -1; - var hasPostalCodeChallenge = challenges.indexOf('postal_code') !== -1; - var overrides = this.model.merchantConfiguration.card && this.model.merchantConfiguration.card.overrides; - var options = { - client: this.client, - fields: { - number: { - selector: this._generateFieldSelector('number'), - placeholder: generateCardNumberPlaceholder() - }, - expirationDate: { - selector: this._generateFieldSelector('expiration'), - placeholder: this.strings.expirationDatePlaceholder - }, - cvv: { - selector: this._generateFieldSelector('cvv'), - placeholder: addBullets(3) - }, - postalCode: { - selector: this._generateFieldSelector('postal-code') - } - }, - styles: { - input: { - 'font-size': '16px', - 'font-family': '-apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif', - color: '#000' - }, - ':focus': { - color: 'black' - }, - '::-webkit-input-placeholder': { - color: '#6a6a6a' - }, - ':-moz-placeholder': { - color: '#6a6a6a' - }, - '::-moz-placeholder': { - color: '#6a6a6a' - }, - ':-ms-input-placeholder ': { - color: '#6a6a6a' - }, - 'input::-ms-clear': { - color: 'transparent' - } - } - }; - - if (!hasCVVChallenge) { - delete options.fields.cvv; - } - - if (!hasPostalCodeChallenge) { - delete options.fields.postalCode; - } - - if (!overrides) { return options; } - - if (overrides.fields) { - if (overrides.fields.cvv && overrides.fields.cvv.placeholder) { - this._hasCustomCVVPlaceholder = true; - } - - Object.keys(overrides.fields).forEach(function (field) { - if ((field === 'cvv' || field === 'postalCode') && overrides.fields[field] === null) { - delete options.fields[field]; - - return; - } - - if (!options.fields[field]) { - return; - } - - assign(options.fields[field], overrides.fields[field], { - selector: options.fields[field].selector - }); - }); - } - - if (overrides.styles) { - Object.keys(overrides.styles).forEach(function (style) { - if (overrides.styles[style] === null) { - delete options.styles[style]; - - return; - } - - normalizeStyles(overrides.styles[style]); - options.styles[style] = options.styles[style] || {}; - - assign(options.styles[style], overrides.styles[style]); - }); - } - - return options; -}; - -CardView.prototype._validateForm = function (showFieldErrors) { - var cardType, cardTypeSupported, state; - var isValid = true; - var supportedCardTypes = this.client.getConfiguration().gatewayConfiguration.creditCards.supportedCardTypes; - - if (!this.hostedFieldsInstance) { - return false; - } - - state = this.hostedFieldsInstance.getState(); - - Object.keys(state.fields).forEach(function (key) { - var field = state.fields[key]; - - if (!showFieldErrors && !isValid) { - // return early if form is already invalid - // and we don't need to display all field errors - return; - } - - if (field.isEmpty) { - isValid = false; - - if (showFieldErrors) { - this.showFieldError(key, this.strings['fieldEmptyFor' + capitalize(key)]); - } - } else if (!field.isValid) { - isValid = false; - - if (showFieldErrors) { - this.showFieldError(key, this.strings['fieldInvalidFor' + capitalize(key)]); - } - } - }.bind(this)); - - if (state.fields.number.isValid) { - cardType = constants.configurationCardTypes[state.cards[0].type]; - cardTypeSupported = supportedCardTypes.indexOf(cardType) !== -1; - - if (!cardTypeSupported) { - isValid = false; - - if (showFieldErrors) { - this.showFieldError('number', this.strings.unsupportedCardTypeError); - } - } - } - - if (this.extraInputs) { - this.extraInputs.forEach(function (extraInput) { - var fieldIsValid; - - if (!extraInput.enabled) { - return; - } - - fieldIsValid = this._validateExtraInput(extraInput, showFieldErrors); - - isValid = isValid && fieldIsValid; - }.bind(this)); - } - - return isValid; -}; - -CardView.prototype._validateExtraInput = function (extraInput, showFieldError) { - var fieldNameKebab = camelCaseToKebabCase(extraInput.fieldName); - var field = this.getElementById(fieldNameKebab + '-field-group'); - var input = field.querySelector('input'); - var valid = true; - - if (extraInput.required) { - valid = input.value.length > 0; - - if (!valid && showFieldError) { - this.showFieldError(extraInput.fieldName, extraInput.requiredError); - } - } - - extraInput.validations.forEach(function (validation) { - var validationPassed = validation.isValid(input.value); - - if (!validationPassed && showFieldError) { - this.showFieldError(extraInput.fieldName, validation.error); - } - - valid = valid && validationPassed; - }.bind(this)); - - return valid; -}; - -CardView.prototype.getPaymentMethod = function () { // eslint-disable-line consistent-return - var formIsValid = this._validateForm(); - - if (formIsValid) { - return { - type: constants.paymentMethodTypes.card - }; - } -}; - -CardView.prototype.tokenize = function () { - var transitionCallback; - var self = this; - var state = self.hostedFieldsInstance.getState(); - var tokenizeOptions = { - vault: !self.model.isGuestCheckout - }; - - this.model.clearError(); - - if (!this._validateForm(true)) { - self.model.reportError('hostedFieldsFieldsInvalidError'); - self.allowUserAction(); - - return Promise.reject(new DropinError(constants.errors.NO_PAYMENT_METHOD_ERROR)); - } - - if (this.hasCardholderName) { - tokenizeOptions.cardholderName = this.cardholderNameInput.value; - } - - self._isTokenizing = true; - - return self.hostedFieldsInstance.tokenize(tokenizeOptions).then(function (payload) { - var retainCardFields = self.model.merchantConfiguration.card && - self.model.merchantConfiguration.card.clearFieldsAfterTokenization === false; - - if (!retainCardFields) { - Object.keys(state.fields).forEach(function (field) { - self.hostedFieldsInstance.clear(field); - }); - - if (self.hasCardholderName) { - self.cardholderNameInput.value = ''; - } - } - - if (!self.model.isGuestCheckout) { - payload.vaulted = true; - } - - return new Promise(function (resolve) { - transitionCallback = function () { - // Wait for braintree-sheet--tokenized class to be added in IE 9 - // before attempting to remove it - setTimeout(function () { - self.model.addPaymentMethod(payload); - resolve(payload); - classlist.remove(self.element, 'braintree-sheet--tokenized'); - }, 0); - self._isTokenizing = false; - }; - - transitionHelper.onTransitionEnd(self.element, 'max-height', transitionCallback); - - setTimeout(function () { - self.allowUserAction(); - }, constants.CHANGE_ACTIVE_PAYMENT_METHOD_TIMEOUT); - - classlist.add(self.element, 'braintree-sheet--tokenized'); - }); - }).catch(function (err) { - self._isTokenizing = false; - // this is a little magical, but if the code property exists - // in the translations with the word Error appended to the end, - // then reportError will automatically print that translation. - // See https://github.com/braintree/braintree-web-drop-in/blob/6ecba73f2f16e8b7ae2119702ac162a1a985908e/src/views/main-view.js#L255-L256 - self.model.reportError(err); - self.allowUserAction(); - - return Promise.reject(new DropinError({ - message: constants.errors.NO_PAYMENT_METHOD_ERROR, - braintreeWebError: err - })); - }); -}; - -CardView.prototype.showFieldError = function (field, errorMessage) { - var fieldError; - var fieldGroup = this.getElementById(camelCaseToKebabCase(field) + '-field-group'); - var input = fieldGroup.querySelector('input'); - - if (!this.fieldErrors.hasOwnProperty(field)) { - this.fieldErrors[field] = this.getElementById(camelCaseToKebabCase(field) + '-field-error'); - } - - classlist.add(fieldGroup, 'braintree-form__field-group--has-error'); - - fieldError = this.fieldErrors[field]; - fieldError.innerHTML = errorMessage; - - if (input && isNormalFieldElement(input)) { - input.setAttribute('aria-invalid', true); - } else { - this.hostedFieldsInstance.setAttribute({ - field: field, - attribute: 'aria-invalid', - value: true - }); - this.hostedFieldsInstance.setMessage({ - field: field, - message: errorMessage - }); - } -}; - -CardView.prototype.hideFieldError = function (field) { - var fieldGroup = this.getElementById(camelCaseToKebabCase(field) + '-field-group'); - var input = fieldGroup.querySelector('input'); - - if (!this.fieldErrors.hasOwnProperty(field)) { - this.fieldErrors[field] = this.getElementById(camelCaseToKebabCase(field) + '-field-error'); - } - - classlist.remove(fieldGroup, 'braintree-form__field-group--has-error'); - - if (input && isNormalFieldElement(input)) { - input.removeAttribute('aria-invalid'); - } else { - this.hostedFieldsInstance.removeAttribute({ - field: field, - attribute: 'aria-invalid' - }); - this.hostedFieldsInstance.setMessage({ - field: field, - message: '' - }); - } -}; - -CardView.prototype.teardown = function () { - return this.hostedFieldsInstance.teardown(); -}; - -CardView.prototype._generateFieldSelector = function (field) { - return '#braintree--dropin__' + this.model.componentID + ' .braintree-form-' + field; -}; - -CardView.prototype._onBlurEvent = function (event) { - var field = event.fields[event.emittedBy]; - var fieldGroup = this.getElementById(camelCaseToKebabCase(event.emittedBy) + '-field-group'); - - classlist.remove(fieldGroup, 'braintree-form__field-group--is-focused'); - - if (shouldApplyFieldEmptyError(field)) { - this.showFieldError(event.emittedBy, this.strings['fieldEmptyFor' + capitalize(event.emittedBy)]); - } else if (!field.isEmpty && !field.isValid) { - this.showFieldError(event.emittedBy, this.strings['fieldInvalidFor' + capitalize(event.emittedBy)]); - } else if (event.emittedBy === 'number' && !this._isCardTypeSupported(event.cards[0].type)) { - this.showFieldError('number', this.strings.unsupportedCardTypeError); - } - - setTimeout(function () { - // when focusing on a field by clicking the label, - // we need to wait a bit for the iframe to be - // focused properly before applying validations - if (shouldApplyFieldEmptyError(field)) { - this.showFieldError(event.emittedBy, this.strings['fieldEmptyFor' + capitalize(event.emittedBy)]); - } - }.bind(this), 150); -}; - -CardView.prototype._onCardTypeChangeEvent = function (event) { - var cardType; - var cardNumberHrefLink = '#iconCardFront'; - var cvvHrefLink = '#iconCVVBack'; - var cvvDescriptor = this.strings.cvvThreeDigitLabelSubheading; - var cvvPlaceholder = addBullets(3); - var numberFieldGroup = this.getElementById('number-field-group'); - - if (event.cards.length === 1) { - cardType = event.cards[0].type; - cardNumberHrefLink = '#icon-' + cardType; - if (cardType === 'american-express') { - cvvHrefLink = '#iconCVVFront'; - cvvDescriptor = this.strings.cvvFourDigitLabelSubheading; - cvvPlaceholder = addBullets(4); - } - // Keep icon visible when field is not focused - classlist.add(numberFieldGroup, 'braintree-form__field-group--card-type-known'); - } else { - classlist.remove(numberFieldGroup, 'braintree-form__field-group--card-type-known'); - } - - this.cardNumberIconSvg.setAttribute('xlink:href', cardNumberHrefLink); - - if (this.hasCVV) { - this.cvvIconSvg.setAttribute('xlink:href', cvvHrefLink); - this.cvvLabelDescriptor.innerHTML = cvvDescriptor; - - if (!this._hasCustomCVVPlaceholder) { - this.hostedFieldsInstance.setAttribute({ - field: 'cvv', - attribute: 'placeholder', - value: cvvPlaceholder - }); - } - } -}; - -CardView.prototype._onFocusEvent = function (event) { - var fieldGroup = this.getElementById(camelCaseToKebabCase(event.emittedBy) + '-field-group'); - - classlist.add(fieldGroup, 'braintree-form__field-group--is-focused'); -}; - -CardView.prototype._onNotEmptyEvent = function (event) { - this.hideFieldError(event.emittedBy); -}; - -CardView.prototype._onValidityChangeEvent = function (event) { - var isValid; - var field = event.fields[event.emittedBy]; - - if (event.emittedBy === 'number' && event.cards[0]) { - isValid = field.isValid && this._isCardTypeSupported(event.cards[0].type); - } else { - isValid = field.isValid; - } - - classlist.toggle(field.container, 'braintree-form__field--valid', isValid); - - if (field.isPotentiallyValid) { - this.hideFieldError(event.emittedBy); - } - - this._sendRequestableEvent(); -}; - -CardView.prototype.requestPaymentMethod = function () { - this.preventUserAction(); - - return this.tokenize(); -}; - -CardView.prototype.onSelection = function () { - if (!this.hostedFieldsInstance) { - return; - } - - if (this.hasCardholderName) { - setTimeout(function () { // wait until input is visible - this.cardholderNameInput.focus(); - }.bind(this), 1); - } else { - this.hostedFieldsInstance.focus('number'); - } -}; - -CardView.prototype._hideUnsupportedCardIcons = function () { - var supportedCardTypes = this.client.getConfiguration().gatewayConfiguration.creditCards.supportedCardTypes; - - Object.keys(constants.configurationCardTypes).forEach(function (paymentMethodCardType) { - var cardIcon; - var configurationCardType = constants.configurationCardTypes[paymentMethodCardType]; - - if (supportedCardTypes.indexOf(configurationCardType) === -1) { - cardIcon = this.getElementById(paymentMethodCardType + '-card-icon'); - classlist.add(cardIcon, 'braintree-hidden'); - } - }.bind(this)); -}; - -CardView.prototype._isCardTypeSupported = function (cardType) { - var configurationCardType = constants.configurationCardTypes[cardType]; - var supportedCardTypes = this.client.getConfiguration().gatewayConfiguration.creditCards.supportedCardTypes; - - return supportedCardTypes.indexOf(configurationCardType) !== -1; -}; - -CardView.isEnabled = function (options) { - var gatewayConfiguration = options.client.getConfiguration().gatewayConfiguration; - - return Promise.resolve(gatewayConfiguration.creditCards.supportedCardTypes.length > 0); -}; - -function isNormalFieldElement(element) { - return element.id.indexOf('braintree__card-view-input') !== -1; -} - -function shouldApplyFieldEmptyError(field) { - return field.isEmpty && isCardViewElement(); -} - -function isCardViewElement() { - var activeId = document.activeElement && document.activeElement.id; - var isHostedFieldsElement = document.activeElement instanceof HTMLIFrameElement && activeId.indexOf('braintree-hosted-field') !== -1; - - return isHostedFieldsElement || isNormalFieldElement(document.activeElement); -} - -function camelCaseToKebabCase(string) { - return string.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); -} - -function capitalize(string) { - return string[0].toUpperCase() + string.substr(1); -} - -function normalizeStyles(styles) { - Object.keys(styles).forEach(function (style) { - var transformedKeyName = camelCaseToKebabCase(style); - - styles[transformedKeyName] = styles[style]; - }); -} - -function addBullets(number) { - var bulletCharacter = isUtf8() ? '•' : '*'; - - return Array(number + 1).join(bulletCharacter); -} - -function generateCardNumberPlaceholder() { - var four = addBullets(4); - - return [four, four, four, four].join(' '); -} - -module.exports = CardView; - -},{"../../constants":117,"../../lib/assign":124,"../../lib/classlist":126,"../../lib/dropin-error":129,"../../lib/is-utf-8":134,"../../lib/promise":137,"../../lib/transition-helper":141,"../base-view":167,"braintree-web/hosted-fields":55}],176:[function(require,module,exports){ -(function (global){ -'use strict'; - -var assign = require('../../lib/assign').assign; -var BaseView = require('../base-view'); -var btGooglePay = require('braintree-web/google-payment'); -var DropinError = require('../../lib/dropin-error'); -var constants = require('../../constants'); -var assets = require('../../lib/assets'); -var Promise = require('../../lib/promise'); -var analytics = require('../../lib/analytics'); - -function GooglePayView() { - BaseView.apply(this, arguments); -} - -GooglePayView.prototype = Object.create(BaseView.prototype); -GooglePayView.prototype.constructor = GooglePayView; -GooglePayView.ID = GooglePayView.prototype.ID = constants.paymentOptionIDs.googlePay; - -GooglePayView.prototype.initialize = function () { - var self = this; - - self.googlePayConfiguration = assign({}, self.model.merchantConfiguration.googlePay); - - self.model.asyncDependencyStarting(); - - return btGooglePay.create({client: self.client}).then(function (googlePayInstance) { - self.googlePayInstance = googlePayInstance; - self.paymentsClient = createPaymentsClient(self.client); - }).then(function () { - var buttonDiv = self.getElementById('google-pay-button'); - - buttonDiv.addEventListener('click', function (event) { - event.preventDefault(); - - self.preventUserAction(); - - self.tokenize().then(function () { - self.allowUserAction(); - }); - }); - self.model.asyncDependencyReady(); - }).catch(function (err) { - self.model.asyncDependencyFailed({ - view: self.ID, - error: new DropinError(err) - }); - }); -}; - -GooglePayView.prototype.tokenize = function () { - var self = this; - var paymentDataRequest = self.googlePayInstance.createPaymentDataRequest(self.googlePayConfiguration); - var rawPaymentData; - - return self.paymentsClient.loadPaymentData(paymentDataRequest).then(function (paymentData) { - rawPaymentData = paymentData; - - return self.googlePayInstance.parseResponse(paymentData); - }).then(function (tokenizePayload) { - tokenizePayload.rawPaymentData = rawPaymentData; - self.model.addPaymentMethod(tokenizePayload); - }).catch(function (err) { - var reportedError = err; - - if (err.statusCode === 'DEVELOPER_ERROR') { - console.error(err); // eslint-disable-line no-console - reportedError = 'developerError'; - } else if (err.statusCode === 'CANCELED') { - analytics.sendEvent(self.client, 'googlepay.loadPaymentData.canceled'); - - return; - } else if (err.statusCode) { - analytics.sendEvent(self.client, 'googlepay.loadPaymentData.failed'); - } - - self.model.reportError(reportedError); - }); -}; - -GooglePayView.prototype.updateConfiguration = function (key, value) { - this.googlePayConfiguration[key] = value; -}; - -GooglePayView.isEnabled = function (options) { - var gatewayConfiguration = options.client.getConfiguration().gatewayConfiguration; - - if (!(gatewayConfiguration.androidPay && Boolean(options.merchantConfiguration.googlePay))) { - return Promise.resolve(false); - } - - return Promise.resolve().then(function () { - if (!(global.google && global.google.payments && global.google.payments.api && global.google.payments.api.PaymentsClient)) { - return assets.loadScript({ - id: constants.GOOGLE_PAYMENT_SCRIPT_ID, - src: constants.GOOGLE_PAYMENT_SOURCE - }); - } - - return Promise.resolve(); - }).then(function () { - var paymentsClient = createPaymentsClient(options.client); - - return paymentsClient.isReadyToPay({ - allowedPaymentMethods: ['CARD', 'TOKENIZED_CARD'] - }); - }).then(function (response) { - return Boolean(response.result); - }); -}; - -function createPaymentsClient(client) { - return new global.google.payments.api.PaymentsClient({ - environment: client.getConfiguration().gatewayConfiguration.environment === 'production' ? 'PRODUCTION' : 'TEST' - }); -} - -module.exports = GooglePayView; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../../constants":117,"../../lib/analytics":122,"../../lib/assets":123,"../../lib/assign":124,"../../lib/dropin-error":129,"../../lib/promise":137,"../base-view":167,"braintree-web/google-payment":49}],177:[function(require,module,exports){ -'use strict'; - -var paymentOptionIDs = require('../../constants').paymentOptionIDs; - -var result = {}; - -result[paymentOptionIDs.applePay] = require('./apple-pay-view'); -result[paymentOptionIDs.card] = require('./card-view'); -result[paymentOptionIDs.googlePay] = require('./google-pay-view'); -result[paymentOptionIDs.paypal] = require('./paypal-view'); -result[paymentOptionIDs.paypalCredit] = require('./paypal-credit-view'); -result[paymentOptionIDs.venmo] = require('./venmo-view'); - -module.exports = result; - -},{"../../constants":117,"./apple-pay-view":173,"./card-view":175,"./google-pay-view":176,"./paypal-credit-view":178,"./paypal-view":179,"./venmo-view":180}],178:[function(require,module,exports){ -'use strict'; - -var assign = require('../../lib/assign').assign; -var Promise = require('../../lib/promise'); -var paymentOptionIDs = require('../../constants').paymentOptionIDs; -var BasePayPalView = require('./base-paypal-view'); - -function PayPalCreditView() { - BasePayPalView.apply(this, arguments); - - this._isPayPalCredit = true; -} - -PayPalCreditView.prototype = Object.create(BasePayPalView.prototype); -PayPalCreditView.prototype.constructor = PayPalCreditView; -PayPalCreditView.ID = PayPalCreditView.prototype.ID = paymentOptionIDs.paypalCredit; - -PayPalCreditView.isEnabled = function (options) { - if (!options.merchantConfiguration.paypalCredit) { - return Promise.resolve(false); - } - - return BasePayPalView.isEnabled(assign({ - viewID: PayPalCreditView.ID - }, options)); -}; -module.exports = PayPalCreditView; - -},{"../../constants":117,"../../lib/assign":124,"../../lib/promise":137,"./base-paypal-view":174}],179:[function(require,module,exports){ -'use strict'; - -var assign = require('../../lib/assign').assign; -var Promise = require('../../lib/promise'); -var paymentOptionIDs = require('../../constants').paymentOptionIDs; -var BasePayPalView = require('./base-paypal-view'); - -function PayPalView() { - BasePayPalView.apply(this, arguments); -} - -PayPalView.prototype = Object.create(BasePayPalView.prototype); -PayPalView.prototype.constructor = PayPalView; -PayPalView.ID = PayPalView.prototype.ID = paymentOptionIDs.paypal; - -PayPalView.isEnabled = function (options) { - if (!options.merchantConfiguration.paypal) { - return Promise.resolve(false); - } - - return BasePayPalView.isEnabled(assign({ - viewID: PayPalView.ID - }, options)); -}; - -module.exports = PayPalView; - -},{"../../constants":117,"../../lib/assign":124,"../../lib/promise":137,"./base-paypal-view":174}],180:[function(require,module,exports){ -'use strict'; - -var assign = require('../../lib/assign').assign; -var BaseView = require('../base-view'); -var btVenmo = require('braintree-web/venmo'); -var DropinError = require('../../lib/dropin-error'); -var Promise = require('../../lib/promise'); -var paymentOptionIDs = require('../../constants').paymentOptionIDs; - -function VenmoView() { - BaseView.apply(this, arguments); -} - -VenmoView.prototype = Object.create(BaseView.prototype); -VenmoView.prototype.constructor = VenmoView; -VenmoView.ID = VenmoView.prototype.ID = paymentOptionIDs.venmo; - -VenmoView.prototype.initialize = function () { - var self = this; - var venmoConfiguration = assign({}, self.model.merchantConfiguration.venmo, {client: this.client}); - - self.model.asyncDependencyStarting(); - - return btVenmo.create(venmoConfiguration).then(function (venmoInstance) { - self.venmoInstance = venmoInstance; - - if (!self.venmoInstance.hasTokenizationResult()) { - return Promise.resolve(); - } - - return self.venmoInstance.tokenize().then(function (payload) { - self.model.reportAppSwitchPayload(payload); - }).catch(function (err) { - if (self._isIgnorableError(err)) { - return; - } - self.model.reportAppSwitchError(paymentOptionIDs.venmo, err); - }); - }).then(function () { - var button = self.getElementById('venmo-button'); - - button.addEventListener('click', function (event) { - event.preventDefault(); - - self.preventUserAction(); - - return self.venmoInstance.tokenize().then(function (payload) { - self.model.addPaymentMethod(payload); - }).catch(function (tokenizeErr) { - if (self._isIgnorableError(tokenizeErr)) { - return; - } - - self.model.reportError(tokenizeErr); - }).then(function () { - self.allowUserAction(); - }); - }); - - self.model.asyncDependencyReady(); - }).catch(function (err) { - self.model.asyncDependencyFailed({ - view: self.ID, - error: new DropinError(err) - }); - }); -}; - -VenmoView.prototype._isIgnorableError = function (error) { - // customer cancels the flow in the app - // we don't emit an error because the customer - // initiated that action - return error.code === 'VENMO_APP_CANCELED'; -}; - -VenmoView.isEnabled = function (options) { - var gatewayConfiguration = options.client.getConfiguration().gatewayConfiguration; - var venmoEnabled = gatewayConfiguration.payWithVenmo && Boolean(options.merchantConfiguration.venmo); - - if (!venmoEnabled) { - return Promise.resolve(false); - } - - return Promise.resolve(btVenmo.isBrowserSupported(options.merchantConfiguration.venmo)); -}; - -module.exports = VenmoView; - -},{"../../constants":117,"../../lib/assign":124,"../../lib/dropin-error":129,"../../lib/promise":137,"../base-view":167,"braintree-web/venmo":104}]},{},[120])(120) -}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;((t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).braintree||(t.braintree={})).dropin=e()}}((function(){return function e(t,i,r){function n(a,s){if(!i[a]){if(!t[a]){var l="function"==typeof require&&require;if(!s&&l)return l(a,!0);if(o)return o(a,!0);var d=new Error("Cannot find module '"+a+"'");throw d.code="MODULE_NOT_FOUND",d}var c=i[a]={exports:{}};t[a][0].call(c.exports,(function(e){return n(t[a][1][e]||e)}),c,c.exports,e,t,i,r)}return i[a].exports}for(var o="function"==typeof require&&require,a=0;a-1}t.exports=function(e){return e=e||window.navigator.userAgent,!(o(e)||n(e)||function(e){return e=e||window.navigator.userAgent,!!r(e)&&/Version\/[\d.]+/.test(e)&&!l(e)}(e)||l(e)||function(e){var t=(e=e||window.navigator.userAgent).match(/CriOS\/(\d+)\./);return!!t&&parseInt(t[1],10)<48}(e)||function(e){return!a(e)&&!s(e)&&/samsung/i.test(e)}(e))}},{"./is-android":6,"./is-chrome":8,"./is-ios-firefox":15,"./is-ios-webview":17,"./is-samsung":20}],22:[function(e,t,i){t.exports=e("./dist/is-android")},{"./dist/is-android":6}],23:[function(e,t,i){t.exports=e("./dist/is-chrome-os")},{"./dist/is-chrome-os":7}],24:[function(e,t,i){t.exports=e("./dist/is-chrome")},{"./dist/is-chrome":8}],25:[function(e,t,i){t.exports=e("./dist/is-edge")},{"./dist/is-edge":9}],26:[function(e,t,i){t.exports=e("./dist/is-firefox")},{"./dist/is-firefox":10}],27:[function(e,t,i){t.exports=e("./dist/is-ie")},{"./dist/is-ie":11}],28:[function(e,t,i){t.exports=e("./dist/is-ie10")},{"./dist/is-ie10":12}],29:[function(e,t,i){t.exports=e("./dist/is-ie9")},{"./dist/is-ie9":14}],30:[function(e,t,i){t.exports=e("./dist/is-ios-safari")},{"./dist/is-ios-safari":16}],31:[function(e,t,i){t.exports=e("./dist/is-ios-webview")},{"./dist/is-ios-webview":17}],32:[function(e,t,i){t.exports=e("./dist/is-ios-wkwebview")},{"./dist/is-ios-wkwebview":18}],33:[function(e,t,i){t.exports=e("./dist/is-ios")},{"./dist/is-ios":19}],34:[function(e,t,i){t.exports=e("./dist/supports-popups")},{"./dist/supports-popups":21}],35:[function(e,t,i){"use strict";function r(e){return e.className.trim().split(/\s+/)}function n(e){for(var t=[],i=1;i0},e.createChild=function(t){t.prototype=Object.create(e.prototype,{constructor:t})},e}();t.exports=r},{}],37:[function(e,t,i){"use strict";var r="undefined"!=typeof Promise?Promise:null,n=function(){function e(t){var i=this;"function"!=typeof t?(this._promise=new e.Promise((function(e,t){i._resolveFunction=e,i._rejectFunction=t})),t=t||{},this._onResolve=t.onResolve||e.defaultOnResolve,this._onReject=t.onReject||e.defaultOnReject,e.shouldCatchExceptions(t)&&this._promise.catch((function(){})),this._resetState()):this._promise=new e.Promise(t)}return e.defaultOnResolve=function(t){return e.Promise.resolve(t)},e.defaultOnReject=function(t){return e.Promise.reject(t)},e.setPromise=function(t){e.Promise=t},e.shouldCatchExceptions=function(t){return t.hasOwnProperty("suppressUnhandledPromiseMessage")?Boolean(t.suppressUnhandledPromiseMessage):Boolean(e.suppressUnhandledPromiseMessage)},e.all=function(t){return e.Promise.all(t)},e.allSettled=function(t){return e.Promise.allSettled(t)},e.race=function(t){return e.Promise.race(t)},e.reject=function(t){return e.Promise.reject(t)},e.resolve=function(t){return e.Promise.resolve(t)},e.prototype.then=function(){for(var e,t=[],i=0;i1&&(i.cid=t[1])})),n={f:e.substr(0,32),fp:i,bu:!1,s:A},o.text=JSON.stringify(n)},N.prototype.request=function(e,t){var i=this,n=new u((function(t,n){var o,a,d,c,u,h=Boolean("payment_methods/credit_cards"===e.endpoint&&i.getConfiguration().gatewayConfiguration.creditCards.collectDeviceData);if("graphQLApi"!==e.api&&(e.method?e.endpoint||(o="options.endpoint"):o="options.method"),o)throw new s({type:v.CLIENT_OPTION_REQUIRED.type,code:v.CLIENT_OPTION_REQUIRED.code,message:o+" is required when making a request."});if(a="api"in e?e.api:"clientApi",c={method:e.method,graphQL:i._graphQL,timeout:e.timeout,metadata:i._configuration.analyticsMetadata},"clientApi"===a)d=i._clientApiBaseUrl,c.data=p(i._configuration,e.data);else{if("graphQLApi"!==a)throw new s({type:v.CLIENT_OPTION_INVALID.type,code:v.CLIENT_OPTION_INVALID.code,message:"options.api is invalid."});d=g[i._configuration.gatewayConfiguration.environment],e.endpoint="",c.method="post",c.data=f({clientSdkMetadata:{platform:i._configuration.analyticsMetadata.platform,source:i._configuration.analyticsMetadata.source,integration:i._configuration.analyticsMetadata.integration,sessionId:i._configuration.analyticsMetadata.sessionId,version:_}},e.data),c.headers={Authorization:"Bearer "+((u=i._configuration).authorizationFingerprint||u.authorization),"Braintree-Version":r}}c.url=d+e.endpoint,c.sendAnalyticsEvent=function(e){E.sendEvent(i,e)},i._request(c,(function(e,r,o){var d,c;(c=function(e,t){var i;-1===e?i=new s(v.CLIENT_REQUEST_TIMEOUT):401===e?i=new s(v.CLIENT_AUTHORIZATION_INVALID):403===e?i=new s(v.CLIENT_AUTHORIZATION_INSUFFICIENT):429===e?i=new s(v.CLIENT_RATE_LIMITED):e>=500?i=new s(v.CLIENT_GATEWAY_NETWORK):(e<200||e>=400)&&(i=l(t,{type:v.CLIENT_REQUEST_ERROR.type,code:v.CLIENT_REQUEST_ERROR.code,message:v.CLIENT_REQUEST_ERROR.message}));if(i)return i.details=i.details||{},i.details.httpStatus=e,i}(o,e))?n(c):"graphQLApi"===a&&r.errors?n(l(r.errors,{type:v.CLIENT_GRAPHQL_REQUEST_ERROR.type,code:v.CLIENT_GRAPHQL_REQUEST_ERROR.code,message:v.CLIENT_GRAPHQL_REQUEST_ERROR.message})):(d=f({_httpStatus:o},r),h&&d.creditCards&&d.creditCards.length>0&&(i._findOrCreateFraudnetJSON(d.creditCards[0].nonce),C.loadScript({src:I,forceScriptReload:!0})),t(d))}))}));return"function"==typeof t?(t=m(y(t)),void n.then((function(e){t(null,e,e._httpStatus)})).catch((function(e){var i=e&&e.details&&e.details.httpStatus;t(e,null,i)}))):n},N.prototype.toJSON=function(){return this.getConfiguration()},N.prototype.getVersion=function(){return _},N.prototype.teardown=h((function(){return delete D[this.getConfiguration().authorization],P(this,b(N.prototype)),u.resolve()})),t.exports=N},{"../lib/add-metadata":88,"../lib/analytics":89,"../lib/assets":90,"../lib/assign":91,"../lib/braintree-error":94,"../lib/constants":95,"../lib/convert-methods-to-error":96,"../lib/convert-to-braintree-error":97,"../lib/create-authorization-data":99,"../lib/deferred":101,"../lib/is-verified-domain":122,"../lib/methods":124,"../lib/once":125,"../lib/promise":126,"./constants":52,"./errors":53,"./get-configuration":54,"./request":66,"./request/graphql":64,"@braintree/wrap-promise":46}],52:[function(e,t,i){"use strict";t.exports={BRAINTREE_VERSION:"2018-05-10"}},{}],53:[function(e,t,i){"use strict";var r=e("../lib/braintree-error");t.exports={CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN:{type:r.types.MERCHANT,code:"CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN"},CLIENT_OPTION_REQUIRED:{type:r.types.MERCHANT,code:"CLIENT_OPTION_REQUIRED"},CLIENT_OPTION_INVALID:{type:r.types.MERCHANT,code:"CLIENT_OPTION_INVALID"},CLIENT_MISSING_GATEWAY_CONFIGURATION:{type:r.types.INTERNAL,code:"CLIENT_MISSING_GATEWAY_CONFIGURATION",message:"Missing gatewayConfiguration."},CLIENT_INVALID_AUTHORIZATION:{type:r.types.MERCHANT,code:"CLIENT_INVALID_AUTHORIZATION",message:"Authorization is invalid. Make sure your client token or tokenization key is valid."},CLIENT_GATEWAY_NETWORK:{type:r.types.NETWORK,code:"CLIENT_GATEWAY_NETWORK",message:"Cannot contact the gateway at this time."},CLIENT_REQUEST_TIMEOUT:{type:r.types.NETWORK,code:"CLIENT_REQUEST_TIMEOUT",message:"Request timed out waiting for a reply."},CLIENT_REQUEST_ERROR:{type:r.types.NETWORK,code:"CLIENT_REQUEST_ERROR",message:"There was a problem with your request."},CLIENT_GRAPHQL_REQUEST_ERROR:{type:r.types.NETWORK,code:"CLIENT_GRAPHQL_REQUEST_ERROR",message:"There was a problem with your request."},CLIENT_RATE_LIMITED:{type:r.types.MERCHANT,code:"CLIENT_RATE_LIMITED",message:"You are being rate-limited; please try again in a few minutes."},CLIENT_AUTHORIZATION_INSUFFICIENT:{type:r.types.MERCHANT,code:"CLIENT_AUTHORIZATION_INSUFFICIENT",message:"The authorization used has insufficient privileges."},CLIENT_AUTHORIZATION_INVALID:{type:r.types.MERCHANT,code:"CLIENT_AUTHORIZATION_INVALID",message:"Either the client token has expired and a new one should be generated or the tokenization key has been deactivated or deleted."}}},{"../lib/braintree-error":94}],54:[function(e,t,i){"use strict";var r=e("../lib/braintree-error"),n=e("../lib/promise"),o=e("@braintree/wrap-promise"),a=e("./request"),s=e("@braintree/uuid"),l=e("../lib/constants"),d=e("./errors"),c=e("./request/graphql"),p=e("../lib/constants").GRAPHQL_URLS,u=e("../lib/is-date-string-before-or-on"),h=e("./constants").BRAINTREE_VERSION;t.exports={getConfiguration:o((function(e){return new n((function(t,i){var n,o,m,y,f=s(),E={merchantAppId:window.location.host,platform:l.PLATFORM,sdkVersion:l.VERSION,source:l.SOURCE,integration:l.INTEGRATION,integrationType:l.INTEGRATION,sessionId:f};o=e.attrs,m=e.configUrl,o._meta=E,o.braintreeLibraryVersion=l.BRAINTREE_LIBRARY_VERSION,o.configVersion="3",y={url:m,method:"GET",data:o},o.authorizationFingerprint&&e.graphQL?(u(e.graphQL.date,h)&&(y.graphQL=new c({graphQL:{url:e.graphQL.url,features:["configuration"]}})),y.metadata=E):o.tokenizationKey&&(y.graphQL=new c({graphQL:{url:p[e.environment],features:["configuration"]}}),y.metadata=E),a(y,(function(e,a,s){var l;if(e)return l=403===s?d.CLIENT_AUTHORIZATION_INSUFFICIENT:401===s?d.CLIENT_AUTHORIZATION_INVALID:d.CLIENT_GATEWAY_NETWORK,void i(new r({type:l.type,code:l.code,message:l.message,details:{originalError:e}}));n={authorizationType:o.tokenizationKey?"TOKENIZATION_KEY":"CLIENT_TOKEN",authorizationFingerprint:o.authorizationFingerprint,analyticsMetadata:E,gatewayConfiguration:a},t(n)}))}))}))}},{"../lib/braintree-error":94,"../lib/constants":95,"../lib/is-date-string-before-or-on":120,"../lib/promise":126,"./constants":52,"./errors":53,"./request":66,"./request/graphql":64,"@braintree/uuid":42,"@braintree/wrap-promise":46}],55:[function(e,t,i){"use strict";var r=e("../lib/braintree-error"),n=e("./client"),o=e("../lib/promise"),a=e("@braintree/wrap-promise"),s=e("../lib/errors");t.exports={create:a((function(e){return e.authorization?n.initialize(e):o.reject(new r({type:s.INSTANTIATION_OPTION_REQUIRED.type,code:s.INSTANTIATION_OPTION_REQUIRED.code,message:"options.authorization is required when instantiating a client."}))})),VERSION:"3.76.3"}},{"../lib/braintree-error":94,"../lib/errors":104,"../lib/promise":126,"./client":51,"@braintree/wrap-promise":46}],56:[function(e,t,i){"use strict";var r=e("../../lib/querystring"),n=e("../../lib/assign").assign,o=e("./prep-body"),a=e("./parse-body"),s=e("./xhr"),l=s.isAvailable,d=e("./graphql/request"),c=e("./default-request");function p(e,t,i){var u,h,m,y,f,E,v,_=e.url,g=e.graphQL,b=e.timeout,P=s.getRequestObject(),C=i,T=Boolean(g&&g.isGraphQLRequest(_,e.data));e.headers=n({"Content-Type":"application/json"},e.headers),_=(m=T?new d(e):new c(e)).getUrl(),y=m.getBody(),f=m.getMethod(),E=m.getHeaders(),"GET"===f&&(_=r.queryify(_,y),y=null),l?P.onreadystatechange=function(){if(4===P.readyState){if(0===P.status&&T)return delete e.graphQL,void p(e,t,i);if(v=a(P.responseText),h=m.adaptResponseBody(v),(u=m.determineStatus(P.status,v))>=400||u<200){if(T&&function(e){var t=!e.data&&e.errors&&e.errors[0]&&e.errors[0].extensions&&e.errors[0].extensions.errorClass;return"UNKNOWN"===t||"INTERNAL"===t}(v))return delete e.graphQL,void p(e,t,i);if(t<1&&function(e){return!e||408===e}(u))return t++,void p(e,t,i);C(h||"error",null,u||500)}else C(null,h,u)}}:(e.headers&&(_=r.queryify(_,E)),P.onload=function(){C(null,a(P.responseText),P.status)},P.onerror=function(){C("error",null,500)},P.onprogress=function(){},P.ontimeout=function(){C("timeout",null,-1)});try{P.open(f,_,!0)}catch(A){if(!T)throw A;return delete e.graphQL,void p(e,t,i)}P.timeout=b,l&&Object.keys(E).forEach((function(e){P.setRequestHeader(e,E[e])}));try{P.send(o(f,y))}catch(I){}}t.exports={request:function(e,t){p(e,0,t)}}},{"../../lib/assign":91,"../../lib/querystring":127,"./default-request":57,"./graphql/request":65,"./parse-body":69,"./prep-body":70,"./xhr":71}],57:[function(e,t,i){"use strict";function r(e){this._url=e.url,this._data=e.data,this._method=e.method,this._headers=e.headers}r.prototype.getUrl=function(){return this._url},r.prototype.getBody=function(){return this._data},r.prototype.getMethod=function(){return this._method},r.prototype.getHeaders=function(){return this._headers},r.prototype.adaptResponseBody=function(e){return e},r.prototype.determineStatus=function(e){return e},t.exports=r},{}],58:[function(e,t,i){"use strict";t.exports=function(){return window.navigator.userAgent}},{}],59:[function(e,t,i){"use strict";var r=e("./error"),n=e("../../../../lib/assign").assign,o={AMERICAN_EXPRESS:"American Express",DISCOVER:"Discover",INTERNATIONAL_MAESTRO:"Maestro",JCB:"JCB",MASTERCARD:"MasterCard",SOLO:"Solo",UK_MAESTRO:"UK Maestro",UNION_PAY:"UnionPay",VISA:"Visa"},a={VISA:"visa",MASTERCARD:"mastercard",DISCOVER:"discover",AMERICAN_EXPRESS:"amex",INTERNATIONAL_MAESTRO:"maestro"},s={VISA:"Visa",MASTERCARD:"MasterCard",DISCOVER:"Discover",AMERICAN_EXPRESS:"American Express"},l={VISA:"visa",MASTERCARD:"mastercard",DISCOVER:"discover",AMERICAN_EXPRESS:"amex"},d={VISA:"visa",MASTERCARD:"master",DISCOVER:"discover",AMERICAN_EXPRESS:"amex",DINERS:"diners",INTERNATIONAL_MAESTRO:"maestro",JCB:"jcb"};function c(e,t){return e.reduce((function(e,i){return t.hasOwnProperty(i)?e.concat(t[i]):e}),[])}t.exports=function(e,t){return e.data&&!e.errors?function(e,t){var i,r=e.data.clientConfiguration;i={environment:r.environment.toLowerCase(),clientApiUrl:r.clientApiUrl,assetsUrl:r.assetsUrl,analytics:{url:r.analyticsUrl},merchantId:r.merchantId,venmo:"off"},r.supportedFeatures&&(i.graphQL={url:t._graphQL._config.url,features:r.supportedFeatures.map((function(e){return e.toLowerCase()}))});r.braintreeApi&&(i.braintreeApi=r.braintreeApi);r.applePayWeb&&(i.applePayWeb=r.applePayWeb,i.applePayWeb.supportedNetworks=c(r.applePayWeb.supportedCardBrands,a),delete i.applePayWeb.supportedCardBrands);r.ideal&&(i.ideal=r.ideal);r.kount&&(i.kount={kountMerchantId:r.kount.merchantId});r.creditCard?(i.challenges=r.creditCard.challenges.map((function(e){return e.toLowerCase()})),i.creditCards={supportedCardTypes:c(r.creditCard.supportedCardBrands,o)},i.threeDSecureEnabled=r.creditCard.threeDSecureEnabled,i.threeDSecure=r.creditCard.threeDSecure):(i.challenges=[],i.creditCards={supportedCardTypes:[]},i.threeDSecureEnabled=!1);r.googlePay&&(i.androidPay={displayName:r.googlePay.displayName,enabled:!0,environment:r.googlePay.environment.toLowerCase(),googleAuthorizationFingerprint:r.googlePay.googleAuthorization,paypalClientId:r.googlePay.paypalClientId,supportedNetworks:c(r.googlePay.supportedCardBrands,l)});r.venmo&&(i.payWithVenmo={merchantId:r.venmo.merchantId,accessToken:r.venmo.accessToken,environment:r.venmo.environment.toLowerCase()});r.paypal?(i.paypalEnabled=!0,i.paypal=n({},r.paypal),i.paypal.currencyIsoCode=i.paypal.currencyCode,i.paypal.environment=i.paypal.environment.toLowerCase(),delete i.paypal.currencyCode):i.paypalEnabled=!1;r.unionPay&&(i.unionPay={enabled:!0,merchantAccountId:r.unionPay.merchantAccountId});r.visaCheckout&&(i.visaCheckout={apikey:r.visaCheckout.apiKey,externalClientId:r.visaCheckout.externalClientId,supportedCardTypes:c(r.visaCheckout.supportedCardBrands,s)});r.masterpass&&(i.masterpass={merchantCheckoutId:r.masterpass.merchantCheckoutId,supportedNetworks:c(r.masterpass.supportedCardBrands,d)});r.usBankAccount&&(i.usBankAccount={routeId:r.usBankAccount.routeId,plaid:{publicKey:r.usBankAccount.plaidPublicKey}});return i}(e,t):r(e)}},{"../../../../lib/assign":91,"./error":61}],60:[function(e,t,i){"use strict";var r=e("./error"),n={AMERICAN_EXPRESS:"American Express",DINERS:"Discover",DISCOVER:"Discover",INTERNATIONAL_MAESTRO:"Maestro",JCB:"JCB",MASTERCARD:"MasterCard",UK_MAESTRO:"Maestro",UNION_PAY:"Union Pay",VISA:"Visa"},o={YES:"Yes",NO:"No",UNKNOWN:"Unknown"},a={PSDTWO:"psd2"};t.exports=function(e){return e.data&&!e.errors?function(e){var t,i,r=e.data.tokenizeCreditCard,s=r.creditCard,l=s.last4?s.last4.substr(2,4):"",d=s.binData;d&&(["commercial","debit","durbinRegulated","healthcare","payroll","prepaid"].forEach((function(e){d[e]?d[e]=o[d[e]]:d[e]="Unknown"})),["issuingBank","countryOfIssuance","productId"].forEach((function(e){d[e]||(d[e]="Unknown")})));t={creditCards:[{binData:d,consumed:!1,description:l?"ending in "+l:"",nonce:r.token,details:{cardholderName:s.cardholderName,expirationMonth:s.expirationMonth,expirationYear:s.expirationYear,bin:s.bin||"",cardType:n[s.brandCode]||"Unknown",lastFour:s.last4||"",lastTwo:l},type:"CreditCard",threeDSecureInfo:null}]},r.authenticationInsight&&(i=r.authenticationInsight.customerAuthenticationRegulationEnvironment,t.creditCards[0].authenticationInsight={regulationEnvironment:a[i]||i.toLowerCase()});return t}(e):r(e)}},{"./error":61}],61:[function(e,t,i){"use strict";function r(e,t,i){var n,o=t.extensions.legacyCode,a=e[0];1!==e.length?(i.forEach((function(e){e.field===a&&(n=e)})),n||(n={field:a,fieldErrors:[]},i.push(n)),r(e.slice(1),t,n.fieldErrors)):i.push({code:o,field:a,message:t.message})}function n(e){return{creditCard:"Credit card is invalid"}[e[0].field]}t.exports=function(e){var t=e.errors&&e.errors[0]&&e.errors[0].extensions&&e.errors[0].extensions.errorClass;return"VALIDATION"===t?function(e){var t=function(e){var t=[];return e.forEach((function(e){e.extensions&&e.extensions.inputPath&&r(e.extensions.inputPath.slice(1),e,t)})),t}(e.errors);if(0===t.length)return{error:{message:e.errors[0].message}};return{error:{message:n(t)},fieldErrors:t}}(e):t?function(e){return{error:{message:e.errors[0].message},fieldErrors:[]}}(e):{error:{message:"There was a problem serving your request"},fieldErrors:[]}}},{}],62:[function(e,t,i){"use strict";t.exports=function(){return{query:"query ClientConfiguration { clientConfiguration { analyticsUrl environment merchantId assetsUrl clientApiUrl creditCard { supportedCardBrands challenges threeDSecureEnabled threeDSecure { cardinalAuthenticationJWT } } applePayWeb { countryCode currencyCode merchantIdentifier supportedCardBrands } googlePay { displayName supportedCardBrands environment googleAuthorization paypalClientId } ideal { routeId assetsUrl } kount { merchantId } masterpass { merchantCheckoutId supportedCardBrands } paypal { displayName clientId privacyUrl userAgreementUrl assetsUrl environment environmentNoNetwork unvettedMerchant braintreeClientId billingAgreementsEnabled merchantAccountId currencyCode payeeEmail } unionPay { merchantAccountId } usBankAccount { routeId plaidPublicKey } venmo { merchantId accessToken environment } visaCheckout { apiKey externalClientId supportedCardBrands } braintreeApi { accessToken url } supportedFeatures } }",operationName:"ClientConfiguration"}}},{}],63:[function(e,t,i){"use strict";var r=e("../../../../lib/assign").assign;function n(e,t){var i=e.creditCard,n=i&&i.billingAddress,o=i&&i.expirationDate,a=i&&(i.expirationMonth||o&&o.split("/")[0].trim()),s=i&&(i.expirationYear||o&&o.split("/")[1].trim()),l={input:{creditCard:{number:i&&i.number,expirationMonth:a,expirationYear:s,cvv:i&&i.cvv,cardholderName:i&&i.cardholderName},options:{}}};return t.hasAuthenticationInsight&&(l.authenticationInsightInput={merchantAccountId:e.merchantAccountId}),n&&(l.input.creditCard.billingAddress=n),l.input=function(e,t){var i;e.creditCard&&e.creditCard.options&&"boolean"==typeof e.creditCard.options.validate?i=e.creditCard.options.validate:e.authorizationFingerprint&&e.tokenizationKey||e.authorizationFingerprint?i=!0:e.tokenizationKey&&(i=!1);"boolean"==typeof i&&(t.options=r({validate:i},t.options));return t}(e,l.input),l}t.exports=function(e){var t,i,r,o={hasAuthenticationInsight:Boolean(e.authenticationInsight&&e.merchantAccountId)};return{query:(t=o,i=t.hasAuthenticationInsight,r="mutation TokenizeCreditCard($input: TokenizeCreditCardInput!",i&&(r+=", $authenticationInsightInput: AuthenticationInsightInput!"),r+=") { tokenizeCreditCard(input: $input) { token creditCard { bin brandCode last4 cardholderName expirationMonth expirationYear binData { prepaid healthcare debit durbinRegulated commercial payroll issuingBank countryOfIssuance productId } } ",i&&(r+=" authenticationInsight(input: $authenticationInsightInput) { customerAuthenticationRegulationEnvironment }"),r+=" } }"),variables:n(e,o),operationName:"TokenizeCreditCard"}}},{"../../../../lib/assign":91}],64:[function(e,t,i){"use strict";var r=e("../../browser-detection"),n={tokenize_credit_cards:"payment_methods/credit_cards",configuration:"configuration"},o=["creditCard.options.unionPayEnrollment"];function a(e){this._config=e.graphQL}a.prototype.getGraphQLEndpoint=function(){return this._config.url},a.prototype.isGraphQLRequest=function(e,t){var i,a=this.getClientApiPath(e);return!(!this._isGraphQLEnabled()||!a||r.isIe9())&&(i=this._config.features.some((function(e){return n[e]===a})),!function(e){return o.some((function(t){return void 0!==t.split(".").reduce((function(e,t){return e&&e[t]}),e)}))}(t)&&i)},a.prototype.getClientApiPath=function(e){var t,i=e.split("/client_api/v1/");return i.length>1&&(t=i[1].split("?")[0]),t},a.prototype._isGraphQLEnabled=function(){return Boolean(this._config)},t.exports=a},{"../../browser-detection":50}],65:[function(e,t,i){"use strict";var r=e("../../constants").BRAINTREE_VERSION,n=e("../../../lib/assign").assign,o=e("./generators/credit-card-tokenization"),a=e("./adapters/credit-card-tokenization"),s=e("./generators/configuration"),l=e("./adapters/configuration"),d={"payment_methods/credit_cards":o,configuration:s},c={"payment_methods/credit_cards":a,configuration:l};function p(e){var t=e.graphQL.getClientApiPath(e.url);this._graphQL=e.graphQL,this._data=e.data,this._method=e.method,this._headers=e.headers,this._clientSdkMetadata={source:e.metadata.source,integration:e.metadata.integration,sessionId:e.metadata.sessionId},this._sendAnalyticsEvent=e.sendAnalyticsEvent||Function.prototype,this._generator=d[t],this._adapter=c[t],this._sendAnalyticsEvent("graphql.init")}function u(e){var t={};return Object.keys(e).forEach((function(i){var r,n=-1===(r=i).indexOf("_")?r:r.toLowerCase().replace(/(\_\w)/g,(function(e){return e[1].toUpperCase()}));"object"==typeof e[i]?t[n]=u(e[i]):"number"==typeof e[i]?t[n]=String(e[i]):t[n]=e[i]})),t}p.prototype.getUrl=function(){return this._graphQL.getGraphQLEndpoint()},p.prototype.getBody=function(){var e=u(this._data),t=this._generator(e),i=n({clientSdkMetadata:this._clientSdkMetadata},t);return JSON.stringify(i)},p.prototype.getMethod=function(){return"POST"},p.prototype.getHeaders=function(){var e,t;return this._data.authorizationFingerprint?(this._sendAnalyticsEvent("graphql.authorization-fingerprint"),e=this._data.authorizationFingerprint):(this._sendAnalyticsEvent("graphql.tokenization-key"),e=this._data.tokenizationKey),t={Authorization:"Bearer "+e,"Braintree-Version":r},n({},this._headers,t)},p.prototype.adaptResponseBody=function(e){return this._adapter(e,this)},p.prototype.determineStatus=function(e,t){var i,r;return 200===e?(r=t.errors&&t.errors[0]&&t.errors[0].extensions&&t.errors[0].extensions.errorClass,i=t.data&&!t.errors?200:"VALIDATION"===r?422:"AUTHORIZATION"===r?403:"AUTHENTICATION"===r?401:function(e,t){return!e&&t.errors[0].message}(r,t)?403:500):i=e||500,this._sendAnalyticsEvent("graphql.status."+e),this._sendAnalyticsEvent("graphql.determinedStatus."+i),i},t.exports=p},{"../../../lib/assign":91,"../../constants":52,"./adapters/configuration":59,"./adapters/credit-card-tokenization":60,"./generators/configuration":62,"./generators/credit-card-tokenization":63}],66:[function(e,t,i){"use strict";var r,n=e("../../lib/once"),o=e("./jsonp-driver"),a=e("./ajax-driver"),s=e("./get-user-agent"),l=e("./is-http");t.exports=function(e,t){t=n(t||Function.prototype),e.method=(e.method||"GET").toUpperCase(),e.timeout=null==e.timeout?6e4:e.timeout,e.data=e.data||{},null==r&&(r=!(l()&&/MSIE\s(8|9)/.test(s()))),r?a.request(e,t):o.request(e,t)}},{"../../lib/once":125,"./ajax-driver":56,"./get-user-agent":58,"./is-http":67,"./jsonp-driver":68}],67:[function(e,t,i){"use strict";t.exports=function(){return"http:"===window.location.protocol}},{}],68:[function(e,t,i){"use strict";var r,n=e("@braintree/uuid"),o=e("../../lib/querystring"),a={};function s(e){try{delete window[e]}catch(t){window[e]=null}}t.exports={request:function(e,t){var i,l="callback_json_"+n().replace(/-/g,""),d=e.url,c=e.data,p=e.method,u=e.timeout;d=o.queryify(d,c),function(e,t,i){window[i]=function(r){var n=r.status||500,o=null,l=null;delete r.status,n>=400||n<200?o=r:l=r,s(i),function(e){e&&e.parentNode&&e.parentNode.removeChild(e)}(e),clearTimeout(a[i]),t(o,l,n)}}(i=function(e,t){var i=document.createElement("script"),r=!1;return i.src=e,i.async=!0,i.onerror=function(){window[t]({message:"error",status:500})},i.onload=i.onreadystatechange=function(){r||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState||(r=!0,i.onload=i.onreadystatechange=null)},i}(d=o.queryify(d,{_method:p,callback:l}),l),t,l),function(e,t){a[t]=setTimeout((function(){a[t]=null,window[t]({error:"timeout",status:-1}),window[t]=function(){s(t)}}),e)}(u,l),r||(r=document.getElementsByTagName("head")[0]),r.appendChild(i)}}},{"../../lib/querystring":127,"@braintree/uuid":42}],69:[function(e,t,i){"use strict";t.exports=function(e){try{e=JSON.parse(e)}catch(t){}return e}},{}],70:[function(e,t,i){"use strict";t.exports=function(e,t){if("string"!=typeof e)throw new Error("Method must be a string");return"get"!==e.toLowerCase()&&null!=t&&(t="string"==typeof t?t:JSON.stringify(t)),t}},{}],71:[function(e,t,i){"use strict";var r="undefined"!=typeof window&&window.XMLHttpRequest&&"withCredentials"in new window.XMLHttpRequest;t.exports={isAvailable:r,getRequestObject:function(){return r?new window.XMLHttpRequest:new window.XDomainRequest}}},{}],72:[function(e,t,i){"use strict";var r=e("../lib/braintree-error");t.exports={GOOGLE_PAYMENT_NOT_ENABLED:{type:r.types.MERCHANT,code:"GOOGLE_PAYMENT_NOT_ENABLED",message:"Google Pay is not enabled for this merchant."},GOOGLE_PAYMENT_GATEWAY_ERROR:{code:"GOOGLE_PAYMENT_GATEWAY_ERROR",message:"There was an error when tokenizing the Google Pay payment method.",type:r.types.UNKNOWN},GOOGLE_PAYMENT_UNSUPPORTED_VERSION:{code:"GOOGLE_PAYMENT_UNSUPPORTED_VERSION",type:r.types.MERCHANT}}},{"../lib/braintree-error":94}],73:[function(e,t,i){"use strict";var r=e("../lib/analytics"),n=e("../lib/assign").assign,o=e("../lib/convert-methods-to-error"),a=e("../lib/find"),s=e("../lib/generate-google-pay-configuration"),l=e("../lib/braintree-error"),d=e("./errors"),c=e("../lib/methods"),p=e("../lib/promise"),u=e("@braintree/wrap-promise"),h={1:"_createV1PaymentDataRequest",2:"_createV2PaymentDataRequest"};function m(e){if(this._createPromise=e.createPromise,this._client=e.client,this._useDeferredClient=e.useDeferredClient,this._googlePayVersion=e.googlePayVersion||1,this._googleMerchantId=e.googleMerchantId,this._isUnsupportedGooglePayAPIVersion())throw new l({code:d.GOOGLE_PAYMENT_UNSUPPORTED_VERSION.code,message:"The Braintree SDK does not support Google Pay version "+this._googlePayVersion+". Please upgrade the version of your Braintree SDK and contact support if this error persists.",type:d.GOOGLE_PAYMENT_UNSUPPORTED_VERSION.type})}m.prototype._waitForClient=function(){return this._client?p.resolve():this._createPromise.then(function(e){this._client=e}.bind(this))},m.prototype._isUnsupportedGooglePayAPIVersion=function(){return!(this._googlePayVersion in h)},m.prototype._getDefaultConfig=function(){return this._defaultConfig||(this._defaultConfig=s(this._client.getConfiguration(),this._googlePayVersion,this._googleMerchantId)),this._defaultConfig},m.prototype._createV1PaymentDataRequest=function(e){var t=this._getDefaultConfig(),i=e.cardRequirements&&e.cardRequirements.allowedCardNetworks,r=t.cardRequirements.allowedCardNetworks,o=i||r;return(e=n({},t,e)).cardRequirements.allowedCardNetworks=o,e},m.prototype._createV2PaymentDataRequest=function(e){var t=this._getDefaultConfig();return e.allowedPaymentMethods&&e.allowedPaymentMethods.forEach((function(e){var i=a(t.allowedPaymentMethods,"type",e.type);i&&function(e,t){Object.keys(t).forEach((function(i){"object"==typeof t[i]?e[i]=n({},t[i],e[i]):e[i]=e[i]||t[i]}))}(e,i)})),e=n({},t,e)},m.prototype.createPaymentDataRequest=function(e){return this._useDeferredClient?this._waitForClient().then(function(){return this._createPaymentDataRequestSyncronously(e)}.bind(this)):this._createPaymentDataRequestSyncronously(e)},m.prototype._createPaymentDataRequestSyncronously=function(e){var t=n({},e),i=this._googlePayVersion,o=h[i];return r.sendEvent(this._createPromise,"google-payment.v"+i+".createPaymentDataRequest"),this[o](t)},m.prototype.parseResponse=function(e){var t=this;return p.resolve().then((function(){var i,n=2===e.apiVersion?e.paymentMethodData.tokenizationData.token:e.paymentMethodToken.token,o=JSON.parse(n),a=o.error;return a?p.reject(a):(r.sendEvent(t._createPromise,"google-payment.parseResponse.succeeded"),o.paypalAccounts?(i=o.paypalAccounts[0],r.sendEvent(t._createPromise,"google-payment.parseResponse.succeeded.paypal"),p.resolve({nonce:i.nonce,type:i.type,description:i.description})):(i=o.androidPayCards[0],r.sendEvent(t._createPromise,"google-payment.parseResponse.succeeded.google-payment"),p.resolve({nonce:i.nonce,type:i.type,description:i.description,details:{cardType:i.details.cardType,lastFour:i.details.lastFour,lastTwo:i.details.lastTwo,isNetworkTokenized:i.details.isNetworkTokenized,bin:i.details.bin},binData:i.binData})))})).catch((function(e){return r.sendEvent(t._createPromise,"google-payment.parseResponse.failed"),p.reject(new l({code:d.GOOGLE_PAYMENT_GATEWAY_ERROR.code,message:d.GOOGLE_PAYMENT_GATEWAY_ERROR.message,type:d.GOOGLE_PAYMENT_GATEWAY_ERROR.type,details:{originalError:e}}))}))},m.prototype.teardown=function(){return o(this,c(m.prototype)),p.resolve()},t.exports=u.wrapPrototype(m)},{"../lib/analytics":89,"../lib/assign":91,"../lib/braintree-error":94,"../lib/convert-methods-to-error":96,"../lib/find":106,"../lib/generate-google-pay-configuration":118,"../lib/methods":124,"../lib/promise":126,"./errors":72,"@braintree/wrap-promise":46}],74:[function(e,t,i){"use strict";var r=e("./google-payment"),n=e("../lib/braintree-error"),o=e("../lib/promise"),a=e("../lib/create-assets-url"),s=e("../lib/create-deferred-client"),l=e("../lib/basic-component-verification"),d=e("@braintree/wrap-promise"),c=e("./errors");t.exports={create:d((function(e){var t="Google Pay";return l.verify({name:t,client:e.client,authorization:e.authorization}).then((function(){var i,l;return i=s.create({authorization:e.authorization,client:e.client,debug:e.debug,assetsUrl:a.create(e.authorization),name:t}).then((function(t){var i=t.getConfiguration();return e.client=t,i.gatewayConfiguration.androidPay?t:o.reject(new n(c.GOOGLE_PAYMENT_NOT_ENABLED))})),e.createPromise=i,l=new r(e),e.useDeferredClient?l:i.then((function(e){return l._client=e,l}))}))})),VERSION:"3.76.3"}},{"../lib/basic-component-verification":92,"../lib/braintree-error":94,"../lib/create-assets-url":98,"../lib/create-deferred-client":100,"../lib/promise":126,"./errors":72,"./google-payment":73,"@braintree/wrap-promise":46}],75:[function(e,t,i){"use strict";var r=e("../../lib/braintree-error"),n=e("../shared/errors"),o=e("../shared/constants").allowedAttributes;t.exports=function(e,t){var i;return o.hasOwnProperty(e)?null==t||function(e,t){if("string"===o[e])return"string"==typeof t||"number"==typeof t;if("boolean"===o[e])return"true"===String(t)||"false"===String(t);return!1}(e,t)||(i=new r({type:n.HOSTED_FIELDS_ATTRIBUTE_VALUE_NOT_ALLOWED.type,code:n.HOSTED_FIELDS_ATTRIBUTE_VALUE_NOT_ALLOWED.code,message:'Value "'+t+'" is not allowed for "'+e+'" attribute.'})):i=new r({type:n.HOSTED_FIELDS_ATTRIBUTE_NOT_SUPPORTED.type,code:n.HOSTED_FIELDS_ATTRIBUTE_NOT_SUPPORTED.code,message:'The "'+e+'" attribute is not supported in Hosted Fields.'}),i}},{"../../lib/braintree-error":94,"../shared/constants":83,"../shared/errors":84}],76:[function(e,t,i){"use strict";var r=e("../shared/constants"),n=e("../../lib/use-min");t.exports=function(e,t,i){return e+"/web/"+r.VERSION+"/html/hosted-fields-frame"+n(i)+".html#"+t}},{"../../lib/use-min":129,"../shared/constants":83}],77:[function(e,t,i){"use strict";var r=e("../shared/constants").navigationDirections,n=e("../shared/browser-detection"),o=e("../shared/focus-intercept"),a=e("../shared/find-parent-tags"),s=["INPUT","SELECT","TEXTAREA"],l=["hidden","button","reset","submit","checkbox","radio","file"];function d(e){return n.hasSoftwareKeyboard()?s.indexOf(e.tagName)>-1&&l.indexOf(e.type)<0:"hidden"!==e.type}function c(e){var t,i;for(t=0;tt-1},indexChange:1}}return{}}(i.direction,l.length);do{if(n+=c.indexChange,c.checkIndexBounds(n))return;s=l[n]}while(!d(s));o.matchFocusElement(s.getAttribute("id"))?t.onTriggerInputFocus(s.getAttribute("data-braintree-type")):s.focus()}}}}},{"../shared/browser-detection":82,"../shared/constants":83,"../shared/find-parent-tags":85,"../shared/focus-intercept":86}],78:[function(e,t,i){"use strict";var r=e("../shared/constants").allowedStyles;t.exports=function(e){var t,i=document.createElement("input"),n={};return"."===e[0]&&(e=e.substring(1)),i.className=e,i.style.display="none !important",i.style.position="fixed !important",i.style.left="-99999px !important",i.style.top="-99999px !important",document.body.appendChild(i),t=window.getComputedStyle(i),r.forEach((function(e){var i=t[e];i&&(n[e]=i)})),document.body.removeChild(i),n}},{"../shared/constants":83}],79:[function(e,t,i){"use strict";var r=e("../../lib/assign").assign,n=e("../../lib/create-assets-url"),o=e("../../lib/is-verified-domain"),a=e("../../lib/destructor"),s=e("@braintree/class-list"),l=e("@braintree/iframer"),d=e("framebus"),c=e("../../lib/create-deferred-client"),p=e("../../lib/braintree-error"),u=e("./compose-url"),h=e("./get-styles-from-class"),m=e("../shared/constants"),y=e("../shared/errors"),f=e("../../lib/constants").INTEGRATION_TIMEOUT_MS,E=e("@braintree/uuid"),v=e("../shared/find-parent-tags"),_=e("../shared/browser-detection"),g=m.events,b=e("@braintree/event-emitter"),P=e("./inject-frame"),C=e("../../lib/analytics"),T=m.allowedFields,A=e("../../lib/methods"),I=e("../../lib/shadow"),D=e("../../lib/find-root-node"),N=e("../../lib/convert-methods-to-error"),w=e("../../lib/errors"),O=e("../shared/get-card-types"),F=e("./attribute-validation-error"),M=e("../../lib/promise"),S=e("@braintree/wrap-promise"),L=e("./focus-change"),k=e("../shared/focus-intercept").destroy;function R(e){return function(t){var i,r=t.merchantPayload,n=r.emittedBy,o=e[n].containerElement;Object.keys(r.fields).forEach((function(t){r.fields[t].container=e[t].containerElement})),i=r.fields[n],"blur"===t.type&&function(e){var t;if(!_.isIos())return;document.activeElement===document.body&&((t=e.querySelector("input"))||((t=document.createElement("input")).type="button",t.style.height="0px",t.style.width="0px",t.style.opacity="0",t.style.padding="0",t.style.position="absolute",t.style.left="-200%",t.style.top="0px",e.insertBefore(t,e.firstChild)),t.focus(),t.blur())}(o),s.toggle(o,m.externalClasses.FOCUSED,i.isFocused),s.toggle(o,m.externalClasses.VALID,i.isValid),s.toggle(o,m.externalClasses.INVALID,!i.isPotentiallyValid),this._state={cards:r.cards,fields:r.fields},this._emit(t.type,r)}}function V(e){var t,i,v,T,D,F=this,S={},z={},x=[],U=E();if(this._merchantConfigurationOptions=r({},e),e.client?(v=(i=e.client.getConfiguration()).gatewayConfiguration.assetsUrl,T=i.isDebug):(v=n.create(e.authorization),T=Boolean(e.isDebug)),this._clientPromise=c.create({client:e.client,authorization:e.authorization,debug:T,assetsUrl:v,name:"Hosted Fields"}),D=u(v,U,T),!e.fields||0===Object.keys(e.fields).length)throw new p({type:w.INSTANTIATION_OPTION_REQUIRED.type,code:w.INSTANTIATION_OPTION_REQUIRED.code,message:"options.fields is required when instantiating Hosted Fields."});b.call(this),this._injectedNodes=[],this._destructor=new a,this._fields=S,this._state={fields:{},cards:O("")},this._bus=new d({channel:U,verifyDomain:o}),this._destructor.registerFunctionForTeardown((function(){F._bus.teardown()})),e.client?C.sendEvent(this._clientPromise,"custom.hosted-fields.initialized"):C.sendEvent(this._clientPromise,"custom.hosted-fields.initialized.deferred-client"),Object.keys(e.fields).forEach(function(t){var i,r,n,o,a;if(!m.allowedFields.hasOwnProperty(t))throw new p({type:y.HOSTED_FIELDS_INVALID_FIELD_KEY.type,code:y.HOSTED_FIELDS_INVALID_FIELD_KEY.code,message:'"'+t+'" is not a valid field.'});if("string"==typeof(r=(i=e.fields[t]).container||i.selector)&&(r=document.querySelector(r)),!r||1!==r.nodeType)throw new p({type:y.HOSTED_FIELDS_INVALID_FIELD_SELECTOR.type,code:y.HOSTED_FIELDS_INVALID_FIELD_SELECTOR.code,message:y.HOSTED_FIELDS_INVALID_FIELD_SELECTOR.message,details:{fieldSelector:i.selector,fieldContainer:i.container,fieldKey:t}});if(r.querySelector('iframe[name^="braintree-"]'))throw new p({type:y.HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME.type,code:y.HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME.code,message:y.HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME.message,details:{fieldSelector:i.selector,fieldContainer:i.container,fieldKey:t}});if(n=r,I.isShadowElement(n)&&(n=I.transformToSlot(n,"height: 100%")),i.maxlength&&"number"!=typeof i.maxlength)throw new p({type:y.HOSTED_FIELDS_FIELD_PROPERTY_INVALID.type,code:y.HOSTED_FIELDS_FIELD_PROPERTY_INVALID.code,message:"The value for maxlength must be a number.",details:{fieldKey:t}});if(i.minlength&&"number"!=typeof i.minlength)throw new p({type:y.HOSTED_FIELDS_FIELD_PROPERTY_INVALID.type,code:y.HOSTED_FIELDS_FIELD_PROPERTY_INVALID.code,message:"The value for minlength must be a number.",details:{fieldKey:t}});o=l({type:t,name:"braintree-hosted-field-"+t,style:m.defaultIFrameStyle,title:"Secure Credit Card Frame - "+m.allowedFields[t].label}),this._injectedNodes.push.apply(this._injectedNodes,P(U,o,n,(function(){F._bus.emit(g.TRIGGER_INPUT_FOCUS,{field:t})}))),this._setupLabelFocus(t,r),S[t]={frameElement:o,containerElement:r},a=new M((function(e){z[t]=e})),x.push(a),this._state.fields[t]={isEmpty:!0,isValid:!1,isPotentiallyValid:!0,isFocused:!1,container:r},setTimeout((function(){_.isIE()||_.isEdge()?(o.src="about:blank",setTimeout((function(){o.src=D}),0)):o.src=D}),0)}.bind(this)),this._merchantConfigurationOptions.styles&&Object.keys(this._merchantConfigurationOptions.styles).forEach((function(e){var t=F._merchantConfigurationOptions.styles[e];"string"==typeof t&&(F._merchantConfigurationOptions.styles[e]=h(t))})),this._bus.on(g.REMOVE_FOCUS_INTERCEPTS,(function(e){k(e&&e.id)})),this._bus.on(g.TRIGGER_FOCUS_CHANGE,L.createFocusChangeHandler(U,{onRemoveFocusIntercepts:function(e){F._bus.emit(g.REMOVE_FOCUS_INTERCEPTS,{id:e})},onTriggerInputFocus:function(e){F._bus.emit(g.TRIGGER_INPUT_FOCUS,{field:e})}})),this._bus.on(g.READY_FOR_CLIENT,(function(e){F._clientPromise.then((function(t){e(t)}))})),this._bus.on(g.CARD_FORM_ENTRY_HAS_BEGUN,(function(){C.sendEvent(F._clientPromise,"hosted-fields.input.started")})),this._bus.on(g.BIN_AVAILABLE,(function(e){F._emit("binAvailable",{bin:e})})),t=setTimeout((function(){C.sendEvent(F._clientPromise,"custom.hosted-fields.load.timed-out"),F._emit("timeout")}),f),M.all(x).then((function(e){var i,n,o=e[0];clearTimeout(t),o((i=F._merchantConfigurationOptions,(n=r({},i)).fields=r({},n.fields),Object.keys(n.fields).forEach((function(e){n.fields[e]=r({},n.fields[e]),delete n.fields[e].container})),n)),F._cleanUpFocusIntercepts(),F._emit("ready")})),this._bus.on(g.FRAME_READY,(function(e,t){z[e.field](t)})),this._bus.on(g.INPUT_EVENT,R(S).bind(this)),_.isIos()&&this._bus.on(g.TRIGGER_INPUT_FOCUS,(function(e){var t=S[e.field].containerElement;setTimeout((function(){var e,i,r;e=t.getBoundingClientRect(),i=Math.floor(e.height/2),r=Math.floor(e.width/2),e.top<(window.innerHeight-i||document.documentElement.clientHeight-i)&&e.right>r&&e.bottom>i&&e.left<(window.innerWidth-r||document.documentElement.clientWidth-r)||t.scrollIntoView()}),5)})),this._destructor.registerFunctionForTeardown((function(){var e,t,i;for(e=0;e0&&(e.details.invalidFields={},e.details.invalidFieldKeys.forEach(function(t){e.details.invalidFields[t]=this._fields[t].containerElement}.bind(this)))},V.prototype.getChallenges=function(){return this._clientPromise.then((function(e){return e.getConfiguration().gatewayConfiguration.challenges}))},V.prototype.getSupportedCardTypes=function(){return this._clientPromise.then((function(e){return e.getConfiguration().gatewayConfiguration.creditCards.supportedCardTypes.map((function(e){return"MasterCard"===e?"Mastercard":e}))}))},V.prototype.teardown=function(){var e=this;return new M((function(t,i){e._destructor.teardown((function(r){C.sendEvent(e._clientPromise,"custom.hosted-fields.teardown-completed"),r?i(r):t()}))}))},V.prototype.tokenize=function(e){var t=this;return e||(e={}),new M((function(i,r){t._bus.emit(g.TOKENIZATION_REQUEST,e,(function(e){var n=e[0],o=e[1];n?(t._attachInvalidFieldContainersToError(n),r(new p(n))):i(o)}))}))},V.prototype.addClass=function(e,t){var i;return T.hasOwnProperty(e)?this._fields.hasOwnProperty(e)?this._bus.emit(g.ADD_CLASS,{field:e,classname:t}):i=new p({type:y.HOSTED_FIELDS_FIELD_NOT_PRESENT.type,code:y.HOSTED_FIELDS_FIELD_NOT_PRESENT.code,message:'Cannot add class to "'+e+'" field because it is not part of the current Hosted Fields options.'}):i=new p({type:y.HOSTED_FIELDS_FIELD_INVALID.type,code:y.HOSTED_FIELDS_FIELD_INVALID.code,message:'"'+e+'" is not a valid field. You must use a valid field option when adding a class.'}),i?M.reject(i):M.resolve()},V.prototype.removeClass=function(e,t){var i;return T.hasOwnProperty(e)?this._fields.hasOwnProperty(e)?this._bus.emit(g.REMOVE_CLASS,{field:e,classname:t}):i=new p({type:y.HOSTED_FIELDS_FIELD_NOT_PRESENT.type,code:y.HOSTED_FIELDS_FIELD_NOT_PRESENT.code,message:'Cannot remove class from "'+e+'" field because it is not part of the current Hosted Fields options.'}):i=new p({type:y.HOSTED_FIELDS_FIELD_INVALID.type,code:y.HOSTED_FIELDS_FIELD_INVALID.code,message:'"'+e+'" is not a valid field. You must use a valid field option when removing a class.'}),i?M.reject(i):M.resolve()},V.prototype.setAttribute=function(e){var t,i;return T.hasOwnProperty(e.field)?this._fields.hasOwnProperty(e.field)?(t=F(e.attribute,e.value))?i=t:this._bus.emit(g.SET_ATTRIBUTE,{field:e.field,attribute:e.attribute,value:e.value}):i=new p({type:y.HOSTED_FIELDS_FIELD_NOT_PRESENT.type,code:y.HOSTED_FIELDS_FIELD_NOT_PRESENT.code,message:'Cannot set attribute for "'+e.field+'" field because it is not part of the current Hosted Fields options.'}):i=new p({type:y.HOSTED_FIELDS_FIELD_INVALID.type,code:y.HOSTED_FIELDS_FIELD_INVALID.code,message:'"'+e.field+'" is not a valid field. You must use a valid field option when setting an attribute.'}),i?M.reject(i):M.resolve()},V.prototype.setMonthOptions=function(e){var t,i=this,r=this._merchantConfigurationOptions.fields;return r.expirationMonth?r.expirationMonth.select||(t="Expiration month field must be a select element."):t="Expiration month field must exist to use setMonthOptions.",t?M.reject(new p({type:y.HOSTED_FIELDS_FIELD_PROPERTY_INVALID.type,code:y.HOSTED_FIELDS_FIELD_PROPERTY_INVALID.code,message:t})):new M((function(t){i._bus.emit(g.SET_MONTH_OPTIONS,e,t)}))},V.prototype.setMessage=function(e){this._bus.emit(g.SET_MESSAGE,{field:e.field,message:e.message})},V.prototype.removeAttribute=function(e){var t,i;return T.hasOwnProperty(e.field)?this._fields.hasOwnProperty(e.field)?(t=F(e.attribute))?i=t:this._bus.emit(g.REMOVE_ATTRIBUTE,{field:e.field,attribute:e.attribute}):i=new p({type:y.HOSTED_FIELDS_FIELD_NOT_PRESENT.type,code:y.HOSTED_FIELDS_FIELD_NOT_PRESENT.code,message:'Cannot remove attribute for "'+e.field+'" field because it is not part of the current Hosted Fields options.'}):i=new p({type:y.HOSTED_FIELDS_FIELD_INVALID.type,code:y.HOSTED_FIELDS_FIELD_INVALID.code,message:'"'+e.field+'" is not a valid field. You must use a valid field option when removing an attribute.'}),i?M.reject(i):M.resolve()},V.prototype.setPlaceholder=function(e,t){return this.setAttribute({field:e,attribute:"placeholder",value:t})},V.prototype.clear=function(e){var t;return T.hasOwnProperty(e)?this._fields.hasOwnProperty(e)?this._bus.emit(g.CLEAR_FIELD,{field:e}):t=new p({type:y.HOSTED_FIELDS_FIELD_NOT_PRESENT.type,code:y.HOSTED_FIELDS_FIELD_NOT_PRESENT.code,message:'Cannot clear "'+e+'" field because it is not part of the current Hosted Fields options.'}):t=new p({type:y.HOSTED_FIELDS_FIELD_INVALID.type,code:y.HOSTED_FIELDS_FIELD_INVALID.code,message:'"'+e+'" is not a valid field. You must use a valid field option when clearing a field.'}),t?M.reject(t):M.resolve()},V.prototype.focus=function(e){var t;return T.hasOwnProperty(e)?this._fields.hasOwnProperty(e)?this._bus.emit(g.TRIGGER_INPUT_FOCUS,{field:e}):t=new p({type:y.HOSTED_FIELDS_FIELD_NOT_PRESENT.type,code:y.HOSTED_FIELDS_FIELD_NOT_PRESENT.code,message:'Cannot focus "'+e+'" field because it is not part of the current Hosted Fields options.'}):t=new p({type:y.HOSTED_FIELDS_FIELD_INVALID.type,code:y.HOSTED_FIELDS_FIELD_INVALID.code,message:'"'+e+'" is not a valid field. You must use a valid field option when focusing a field.'}),t?M.reject(t):M.resolve()},V.prototype.getState=function(){return this._state},t.exports=S.wrapPrototype(V)},{"../../lib/analytics":89,"../../lib/assign":91,"../../lib/braintree-error":94,"../../lib/constants":95,"../../lib/convert-methods-to-error":96,"../../lib/create-assets-url":98,"../../lib/create-deferred-client":100,"../../lib/destructor":102,"../../lib/errors":104,"../../lib/find-root-node":105,"../../lib/is-verified-domain":122,"../../lib/methods":124,"../../lib/promise":126,"../../lib/shadow":128,"../shared/browser-detection":82,"../shared/constants":83,"../shared/errors":84,"../shared/find-parent-tags":85,"../shared/focus-intercept":86,"../shared/get-card-types":87,"./attribute-validation-error":75,"./compose-url":76,"./focus-change":77,"./get-styles-from-class":78,"./inject-frame":80,"@braintree/class-list":35,"@braintree/event-emitter":36,"@braintree/iframer":38,"@braintree/uuid":42,"@braintree/wrap-promise":46,framebus:168}],80:[function(e,t,i){"use strict";var r=e("../shared/focus-intercept"),n=e("../shared/constants").navigationDirections;t.exports=function(e,t,i,o){var a=t.getAttribute("type"),s=document.createElement("div"),l=document.createDocumentFragment(),d=r.generate(e,a,n.BACK,o),c=r.generate(e,a,n.FORWARD,o);return s.style.clear="both",l.appendChild(d),l.appendChild(t),l.appendChild(c),l.appendChild(s),i.appendChild(l),[t,s]}},{"../shared/constants":83,"../shared/focus-intercept":86}],81:[function(e,t,i){"use strict";var r=e("./external/hosted-fields"),n=e("../lib/basic-component-verification"),o=e("./shared/errors"),a=e("restricted-input/supports-input-formatting"),s=e("@braintree/wrap-promise"),l=e("../lib/braintree-error"),d=e("../lib/promise");t.exports={supportsInputFormatting:a,create:s((function(e){return n.verify({name:"Hosted Fields",authorization:e.authorization,client:e.client}).then((function(){var t=new r(e);return new d((function(e,i){t.on("ready",(function(){e(t)})),t.on("timeout",(function(){i(new l(o.HOSTED_FIELDS_TIMEOUT))}))}))}))})),VERSION:"3.76.3"}},{"../lib/basic-component-verification":92,"../lib/braintree-error":94,"../lib/promise":126,"./external/hosted-fields":79,"./shared/errors":84,"@braintree/wrap-promise":46,"restricted-input/supports-input-formatting":185}],82:[function(e,t,i){"use strict";var r=e("@braintree/browser-detection/is-android"),n=e("@braintree/browser-detection/is-chrome-os"),o=e("@braintree/browser-detection/is-ios"),a=e("@braintree/browser-detection/is-chrome");t.exports={isIE:e("@braintree/browser-detection/is-ie"),isEdge:e("@braintree/browser-detection/is-edge"),isIe9:e("@braintree/browser-detection/is-ie9"),isIe10:e("@braintree/browser-detection/is-ie10"),isAndroid:r,isChromeOS:n,isChromeIos:function(){return a()&&o()},isFirefox:e("@braintree/browser-detection/is-firefox"),isIos:o,isIosWebview:e("@braintree/browser-detection/is-ios-webview"),hasSoftwareKeyboard:function(){return r()||n()||o()}}},{"@braintree/browser-detection/is-android":22,"@braintree/browser-detection/is-chrome":24,"@braintree/browser-detection/is-chrome-os":23,"@braintree/browser-detection/is-edge":25,"@braintree/browser-detection/is-firefox":26,"@braintree/browser-detection/is-ie":27,"@braintree/browser-detection/is-ie10":28,"@braintree/browser-detection/is-ie9":29,"@braintree/browser-detection/is-ios":33,"@braintree/browser-detection/is-ios-webview":31}],83:[function(e,t,i){"use strict";var r=e("../../lib/enumerate"),n=e("./errors"),o={VERSION:"3.76.3",maxExpirationYearAge:19,externalEvents:{FOCUS:"focus",BLUR:"blur",EMPTY:"empty",NOT_EMPTY:"notEmpty",VALIDITY_CHANGE:"validityChange",CARD_TYPE_CHANGE:"cardTypeChange"},defaultMaxLengths:{number:19,postalCode:8,expirationDate:7,expirationMonth:2,expirationYear:4,cvv:3},externalClasses:{FOCUSED:"braintree-hosted-fields-focused",INVALID:"braintree-hosted-fields-invalid",VALID:"braintree-hosted-fields-valid"},navigationDirections:{BACK:"before",FORWARD:"after"},defaultIFrameStyle:{border:"none",width:"100%",height:"100%",float:"left"},tokenizationErrorCodes:{81724:n.HOSTED_FIELDS_TOKENIZATION_FAIL_ON_DUPLICATE,81736:n.HOSTED_FIELDS_TOKENIZATION_CVV_VERIFICATION_FAILED},allowedStyles:["-moz-appearance","-moz-box-shadow","-moz-osx-font-smoothing","-moz-tap-highlight-color","-moz-transition","-webkit-appearance","-webkit-box-shadow","-webkit-font-smoothing","-webkit-tap-highlight-color","-webkit-transition","appearance","box-shadow","color","direction","font","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-weight","letter-spacing","line-height","margin","margin-top","margin-right","margin-bottom","margin-left","opacity","outline","padding","padding-top","padding-right","padding-bottom","padding-left","text-align","text-shadow","transition"],allowedFields:{cardholderName:{name:"cardholder-name",label:"Cardholder Name"},number:{name:"credit-card-number",label:"Credit Card Number"},cvv:{name:"cvv",label:"CVV"},expirationDate:{name:"expiration",label:"Expiration Date"},expirationMonth:{name:"expiration-month",label:"Expiration Month"},expirationYear:{name:"expiration-year",label:"Expiration Year"},postalCode:{name:"postal-code",label:"Postal Code"}},allowedAttributes:{"aria-invalid":"boolean","aria-required":"boolean",disabled:"boolean",placeholder:"string"},autocompleteMappings:{"cardholder-name":"cc-name","credit-card-number":"cc-number",expiration:"cc-exp","expiration-month":"cc-exp-month","expiration-year":"cc-exp-year",cvv:"cc-csc","postal-code":"billing postal-code"}};o.events=r(["ADD_CLASS","AUTOFILL_DATA_AVAILABLE","BIN_AVAILABLE","CARD_FORM_ENTRY_HAS_BEGUN","CLEAR_FIELD","CONFIGURATION","FRAME_READY","INPUT_EVENT","READY_FOR_CLIENT","REMOVE_ATTRIBUTE","REMOVE_CLASS","REMOVE_FOCUS_INTERCEPTS","SET_ATTRIBUTE","SET_MESSAGE","SET_MONTH_OPTIONS","TOKENIZATION_REQUEST","TRIGGER_FOCUS_CHANGE","TRIGGER_INPUT_FOCUS","VALIDATE_STRICT"],"hosted-fields:"),t.exports=o},{"../../lib/enumerate":103,"./errors":84}],84:[function(e,t,i){"use strict";var r=e("../../lib/braintree-error");t.exports={HOSTED_FIELDS_TIMEOUT:{type:r.types.UNKNOWN,code:"HOSTED_FIELDS_TIMEOUT",message:"Hosted Fields timed out when attempting to set up."},HOSTED_FIELDS_INVALID_FIELD_KEY:{type:r.types.MERCHANT,code:"HOSTED_FIELDS_INVALID_FIELD_KEY"},HOSTED_FIELDS_INVALID_FIELD_SELECTOR:{type:r.types.MERCHANT,code:"HOSTED_FIELDS_INVALID_FIELD_SELECTOR",message:"Selector does not reference a valid DOM node."},HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME:{type:r.types.MERCHANT,code:"HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME",message:"Element already contains a Braintree iframe."},HOSTED_FIELDS_FIELD_INVALID:{type:r.types.MERCHANT,code:"HOSTED_FIELDS_FIELD_INVALID"},HOSTED_FIELDS_FIELD_NOT_PRESENT:{type:r.types.MERCHANT,code:"HOSTED_FIELDS_FIELD_NOT_PRESENT"},HOSTED_FIELDS_TOKENIZATION_NETWORK_ERROR:{type:r.types.NETWORK,code:"HOSTED_FIELDS_TOKENIZATION_NETWORK_ERROR",message:"A tokenization network error occurred."},HOSTED_FIELDS_TOKENIZATION_FAIL_ON_DUPLICATE:{type:r.types.CUSTOMER,code:"HOSTED_FIELDS_TOKENIZATION_FAIL_ON_DUPLICATE",message:"This credit card already exists in the merchant's vault."},HOSTED_FIELDS_TOKENIZATION_CVV_VERIFICATION_FAILED:{type:r.types.CUSTOMER,code:"HOSTED_FIELDS_TOKENIZATION_CVV_VERIFICATION_FAILED",message:"CVV verification failed during tokenization."},HOSTED_FIELDS_FAILED_TOKENIZATION:{type:r.types.CUSTOMER,code:"HOSTED_FIELDS_FAILED_TOKENIZATION",message:"The supplied card data failed tokenization."},HOSTED_FIELDS_FIELDS_EMPTY:{type:r.types.CUSTOMER,code:"HOSTED_FIELDS_FIELDS_EMPTY",message:"All fields are empty. Cannot tokenize empty card fields."},HOSTED_FIELDS_FIELDS_INVALID:{type:r.types.CUSTOMER,code:"HOSTED_FIELDS_FIELDS_INVALID",message:"Some payment input fields are invalid. Cannot tokenize invalid card fields."},HOSTED_FIELDS_ATTRIBUTE_NOT_SUPPORTED:{type:r.types.MERCHANT,code:"HOSTED_FIELDS_ATTRIBUTE_NOT_SUPPORTED"},HOSTED_FIELDS_ATTRIBUTE_VALUE_NOT_ALLOWED:{type:r.types.MERCHANT,code:"HOSTED_FIELDS_ATTRIBUTE_VALUE_NOT_ALLOWED"},HOSTED_FIELDS_FIELD_PROPERTY_INVALID:{type:r.types.MERCHANT,code:"HOSTED_FIELDS_FIELD_PROPERTY_INVALID"}}},{"../../lib/braintree-error":94}],85:[function(e,t,i){"use strict";t.exports=function(e,t){for(var i=e.parentNode,r=[];null!=i;)null!=i.tagName&&i.tagName.toLowerCase()===t&&r.push(i),i=i.parentNode;return r}},{}],86:[function(e,t,i){"use strict";var r=e("./browser-detection"),n=e("@braintree/class-list"),o=e("./constants"),a=Object.keys(o.allowedFields),s=o.navigationDirections,l={generate:function(e,t,i,o){var a=document.createElement("input");return r.hasSoftwareKeyboard()||r.isFirefox()||r.isIE()?(a.setAttribute("aria-hidden","true"),a.setAttribute("autocomplete","off"),a.setAttribute("data-braintree-direction",i),a.setAttribute("data-braintree-type",t),a.setAttribute("id","bt-"+t+"-"+i+"-"+e),a.setAttribute("style",JSON.stringify({border:"none !important",display:"block !important",height:"1px !important",left:"-1px !important",opacity:"0 !important",position:"absolute !important",top:"-1px !important",width:"1px !important"}).replace(/[{}"]/g,"").replace(/,/g,";")),n.add(a,"focus-intercept"),a.addEventListener("focus",(function(e){o(e),r.hasSoftwareKeyboard()||a.blur()})),a):document.createDocumentFragment()},destroy:function(e){var t;e?t=[document.getElementById(e)]:(t=document.querySelectorAll("[data-braintree-direction]"),t=[].slice.call(t)),t.forEach((function(e){e&&1===e.nodeType&&l.matchFocusElement(e.getAttribute("id"))&&e.parentNode.removeChild(e)}))},matchFocusElement:function(e){var t,i,r,n;return!!e&&(!((t=e.split("-")).length<4)&&(i="bt"===t[0],r=a.indexOf(t[1])>-1,n=t[2]===s.BACK||t[2]===s.FORWARD,Boolean(i&&r&&n)))}};t.exports=l},{"./browser-detection":82,"./constants":83,"@braintree/class-list":35}],87:[function(e,t,i){"use strict";var r=e("credit-card-type");t.exports=function(e){var t=r(e);return t.forEach((function(e){"mastercard"===e.type&&(e.type="master-card")})),t}},{"credit-card-type":160}],88:[function(e,t,i){"use strict";var r=e("./create-authorization-data"),n=e("./json-clone"),o=e("./constants");t.exports=function(e,t){var i,a=t?n(t):{},s=r(e.authorization).attrs,l=n(e.analyticsMetadata);for(i in a.braintreeLibraryVersion=o.BRAINTREE_LIBRARY_VERSION,a._meta)a._meta.hasOwnProperty(i)&&(l[i]=a._meta[i]);return a._meta=l,s.tokenizationKey?a.tokenizationKey=s.tokenizationKey:a.authorizationFingerprint=s.authorizationFingerprint,a}},{"./constants":95,"./create-authorization-data":99,"./json-clone":123}],89:[function(e,t,i){"use strict";var r=e("./promise"),n=e("./constants"),o=e("./add-metadata");t.exports={sendEvent:function(e,t,i){var a=Date.now();return r.resolve(e).then((function(e){var r=Date.now(),s=e.getConfiguration(),l=e._request,d=s.gatewayConfiguration.analytics.url,c={analytics:[{kind:n.ANALYTICS_PREFIX+t,isAsync:Math.floor(r/1e3)!==Math.floor(a/1e3),timestamp:a}]};l({url:d,method:"post",data:o(s,c),timeout:n.ANALYTICS_REQUEST_TIMEOUT_MS},i)}))}}},{"./add-metadata":88,"./constants":95,"./promise":126}],90:[function(e,t,i){"use strict";var r=e("@braintree/asset-loader/load-script");t.exports={loadScript:r}},{"@braintree/asset-loader/load-script":5}],91:[function(e,t,i){"use strict";var r="function"==typeof Object.assign?Object.assign:n;function n(e){var t,i,r;for(t=1;t>4&3,i=(15&n)<<4|(o=s.indexOf(e.charAt(a++)))>>2&15,r=(3&o)<<6|63&s.indexOf(e.charAt(a++)),l+=String.fromCharCode(t)+(i?String.fromCharCode(i):"")+(r?String.fromCharCode(r):"")}while(a-1?(r.sendEvent(i._clientPromise,"paypal-checkout.startVaultInitiatedCheckout.failed.popup-not-opened"),s.reject(new c({code:u.PAYPAL_START_VAULT_INITIATED_CHECKOUT_POPUP_OPEN_FAILED.code,type:u.PAYPAL_START_VAULT_INITIATED_CHECKOUT_POPUP_OPEN_FAILED.type,message:u.PAYPAL_START_VAULT_INITIATED_CHECKOUT_POPUP_OPEN_FAILED.message,details:{originalError:e}}))):s.reject(e))})).then((function(e){return i._frameService.close(),i._vaultInitiatedCheckoutInProgress=!1,i._removeModalBackdrop(),r.sendEvent(i._clientPromise,"paypal-checkout.startVaultInitiatedCheckout.succeeded"),s.resolve(e)}))))},P.prototype._addModalBackdrop=function(e){e.optOutOfModalBackdrop||(this._modalBackdrop||(this._modalBackdrop=document.createElement("div"),this._modalBackdrop.setAttribute("data-braintree-paypal-vault-initiated-checkout-modal",!0),this._modalBackdrop.style.position="fixed",this._modalBackdrop.style.top=0,this._modalBackdrop.style.bottom=0,this._modalBackdrop.style.left=0,this._modalBackdrop.style.right=0,this._modalBackdrop.style.zIndex=9999,this._modalBackdrop.style.background="black",this._modalBackdrop.style.opacity="0.7",this._modalBackdrop.addEventListener("click",function(){this.focusVaultInitiatedCheckoutWindow()}.bind(this))),document.body.appendChild(this._modalBackdrop))},P.prototype._removeModalBackdrop=function(){this._modalBackdrop&&this._modalBackdrop.parentNode&&this._modalBackdrop.parentNode.removeChild(this._modalBackdrop)},P.prototype.closeVaultInitiatedCheckoutWindow=function(){return this._vaultInitiatedCheckoutInProgress&&r.sendEvent(this._clientPromise,"paypal-checkout.startVaultInitiatedCheckout.canceled.by-merchant"),this._waitForVaultInitiatedCheckoutDependencies().then(function(){this._frameService.close()}.bind(this))},P.prototype.focusVaultInitiatedCheckoutWindow=function(){return this._waitForVaultInitiatedCheckoutDependencies().then(function(){this._frameService.focus()}.bind(this))},P.prototype._createFrameServiceCallback=function(e){var t=this;return function(i,r){i?e.reject(i):r&&(t._frameService.redirect(t._loadingFrameUrl),t.tokenizePayment({paymentToken:r.token,payerID:r.PayerID,paymentID:r.paymentId}).then((function(t){e.resolve(t)})).catch((function(t){e.reject(t)})))}},P.prototype._waitForVaultInitiatedCheckoutDependencies=function(){var e=this;return this._clientPromise.then((function(){return e._frameServicePromise}))},P.prototype._constructVaultCheckutUrl=function(e){var t=this._frameService._serviceId;return this._assetsUrl+"/html/"+e+E(this._isDebug)+".html?channel="+t},P.prototype.tokenizePayment=function(e){var t,i=this,n=!0,o={flow:e.billingToken&&!e.paymentID?"vault":"checkout",intent:e.intent||this.intentFromCreatePayment},a={ecToken:e.paymentToken,billingToken:e.billingToken,payerId:e.payerID,paymentId:e.paymentID,shippingOptionsId:e.shippingOptionsId};return e.hasOwnProperty("vault")&&(n=e.vault),o.vault=n,r.sendEvent(this._clientPromise,"paypal-checkout.tokenization.started"),this._clientPromise.then((function(e){return e.request({endpoint:"payment_methods/paypal_accounts",method:"post",data:i._formatTokenizeData(o,a)})})).then((function(e){return t=i._formatTokenizePayload(e),r.sendEvent(i._clientPromise,"paypal-checkout.tokenization.success"),t.creditFinancingOffered&&r.sendEvent(i._clientPromise,"paypal-checkout.credit.accepted"),t})).catch((function(e){return i._setupError?s.reject(i._setupError):(r.sendEvent(i._clientPromise,"paypal-checkout.tokenization.failed"),s.reject(p(e,{type:u.PAYPAL_ACCOUNT_TOKENIZATION_FAILED.type,code:u.PAYPAL_ACCOUNT_TOKENIZATION_FAILED.code,message:u.PAYPAL_ACCOUNT_TOKENIZATION_FAILED.message})))}))},P.prototype.getClientId=function(){return this._clientPromise.then((function(e){return e.getConfiguration().gatewayConfiguration.paypal.clientId}))},P.prototype.loadPayPalSDK=function(e){var t,i=new l,r=e&&e.dataAttributes;return t=r&&r["user-id-token"]?r["user-id-token"]:this._authorizationInformation.fingerprint&&this._authorizationInformation.fingerprint.split("?")[0],this._paypalScript=document.createElement("script"),delete(e=n({},{components:"buttons"},e)).dataAttributes,e.vault?e.intent=e.intent||"tokenize":(e.intent=e.intent||"authorize",e.currency=e.currency||"USD"),"https://www.paypal.com/sdk/js?",this._paypalScript.onload=function(){i.resolve()},r&&Object.keys(r).forEach(function(e){this._paypalScript.setAttribute("data-"+e,r[e])}.bind(this)),(e["client-id"]?s.resolve(e["client-id"]):this.getClientId()).then(function(i){e["client-id"]=i,this._autoSetDataUserIdToken&&t&&(this._paypalScript.setAttribute("data-user-id-token",t),this._attachPreloadPixel({id:i,userIdToken:t,amount:r&&r.amount,currency:e.currency,merchantId:e["merchant-id"]})),this._paypalScript.src=_.queryify("https://www.paypal.com/sdk/js?",e),document.head.insertBefore(this._paypalScript,document.head.firstElementChild)}.bind(this)),i.then(function(){return this}.bind(this))},P.prototype._attachPreloadPixel=function(e){var t,i=e.id,r=e.userIdToken,n=this._authorizationInformation.environment,o="https://www.{ENV}paypal.com/smart/buttons/preload".replace("{ENV}","production"===n?"":"sandbox."),a={"client-id":i,"user-id-token":r};e.amount&&(a.amount=e.amount),e.currency&&(a.currency=e.currency),e.merchantId&&(a["merchant-id"]=e.merchantId),(t=new XMLHttpRequest).open("GET",_.queryify(o,a)),t.send()},P.prototype._formatPaymentResourceData=function(e,t){var i,r=this._configuration.gatewayConfiguration,n=e.intent,o={returnUrl:t.returnUrl||"https://www.paypal.com/checkoutnow/error",cancelUrl:t.cancelUrl||"https://www.paypal.com/checkoutnow/error",offerPaypalCredit:!0===e.offerCredit,merchantAccountId:this._merchantAccountId,experienceProfile:{brandName:e.displayName||r.paypal.displayName,localeCode:e.locale,noShipping:(!e.enableShippingAddress).toString(),addressOverride:!1===e.shippingAddressEditable,landingPageType:e.landingPageType},shippingOptions:e.shippingOptions};if("checkout"===e.flow){for(i in o.amount=e.amount,o.currencyIsoCode=e.currency,o.requestBillingAgreement=e.requestBillingAgreement,n&&("capture"===n&&(n="sale"),o.intent=n),e.hasOwnProperty("lineItems")&&(o.lineItems=e.lineItems),e.hasOwnProperty("vaultInitiatedCheckoutPaymentMethodToken")&&(o.vaultInitiatedCheckoutPaymentMethodToken=e.vaultInitiatedCheckoutPaymentMethodToken),e.hasOwnProperty("shippingOptions")&&(o.shippingOptions=e.shippingOptions),e.shippingAddressOverride)e.shippingAddressOverride.hasOwnProperty(i)&&(o[i]=e.shippingAddressOverride[i]);e.hasOwnProperty("billingAgreementDetails")&&(o.billingAgreementDetails=e.billingAgreementDetails)}else o.shippingAddress=e.shippingAddressOverride,e.billingAgreementDescription&&(o.description=e.billingAgreementDescription);return o},P.prototype._formatTokenizeData=function(e,t){var i=this._configuration,r=i.gatewayConfiguration,n="TOKENIZATION_KEY"===i.authorizationType,o="vault"===e.flow,a={paypalAccount:{correlationId:t.billingToken||t.ecToken,options:{validate:o&&!n&&e.vault}}};return o?a.paypalAccount.billingAgreementToken=t.billingToken:(a.paypalAccount.paymentToken=t.paymentId,a.paypalAccount.payerId=t.payerId,a.paypalAccount.unilateral=r.paypal.unvettedMerchant,e.intent&&(a.paypalAccount.intent=e.intent)),this._merchantAccountId&&(a.merchantAccountId=this._merchantAccountId),a},P.prototype._formatTokenizePayload=function(e){var t,i={};return e.paypalAccounts&&(i=e.paypalAccounts[0]),t={nonce:i.nonce,details:{},type:i.type},i.details&&i.details.payerInfo&&(t.details=i.details.payerInfo),i.details&&i.details.creditFinancingOffered&&(t.creditFinancingOffered=i.details.creditFinancingOffered),i.details&&i.details.shippingOptionId&&(t.shippingOptionId=i.details.shippingOptionId),i.details&&i.details.cobrandedCardLabel&&(t.cobrandedCardLabel=i.details.cobrandedCardLabel),t},P.prototype.teardown=function(){var e=this;return v(this,f(P.prototype)),this._paypalScript&&this._paypalScript.parentNode&&this._paypalScript.parentNode.removeChild(this._paypalScript),this._frameServicePromise.catch((function(){})).then((function(){return e._frameService?e._frameService.teardown():s.resolve()}))},t.exports=d.wrapPrototype(P)},{"../lib/analytics":89,"../lib/assign":91,"../lib/braintree-error":94,"../lib/constants":95,"../lib/convert-methods-to-error":96,"../lib/convert-to-braintree-error":97,"../lib/create-assets-url":98,"../lib/create-authorization-data":99,"../lib/create-deferred-client":100,"../lib/frame-service/external":108,"../lib/methods":124,"../lib/promise":126,"../lib/querystring":127,"../lib/use-min":129,"../paypal/shared/constants":134,"./errors":131,"@braintree/extended-promise":37,"@braintree/wrap-promise":46}],134:[function(e,t,i){"use strict";t.exports={LANDING_FRAME_NAME:"braintreepaypallanding",FLOW_ENDPOINTS:{checkout:"create_payment_resource",vault:"setup_billing_agreement"}}},{}],135:[function(e,t,i){"use strict";var r=e("../../../lib/assign").assign,n=e("../../../lib/analytics"),o=e("../../../lib/braintree-error"),a=e("../../../lib/promise"),s=e("../../../lib/is-verified-domain"),l=e("@braintree/extended-promise"),d=e("@braintree/event-emitter"),c=e("../../shared/errors"),p=e("@braintree/iframer"),u=e("framebus"),h=e("../../shared/constants"),m=e("@braintree/uuid"),y=e("../../shared/events"),f=e("../../../lib/use-min"),E=e("../../../lib/constants").BUS_CONFIGURATION_REQUEST_EVENT,v="3.76.3";function _(e){d.call(this),this._client=e.client,this._createPromise=e.createPromise,this._createOptions=e,this._client?(this._isDebug=this._client.getConfiguration().isDebug,this._assetsUrl=this._client.getConfiguration().gatewayConfiguration.assetsUrl):(this._isDebug=Boolean(e.isDebug),this._assetsUrl=e.assetsUrl),this._assetsUrl=this._assetsUrl+"/web/"+v}d.createChild(_),_.prototype._waitForClient=function(){return this._client?a.resolve():this._createPromise.then(function(e){this._client=e}.bind(this))},_.prototype.setUpEventListeners=function(){throw new o(c.THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED)},_.prototype.verifyCard=function(e,t){var i,r,o=this;return t=t||{},(r=this._checkForVerifyCardError(e,t))?a.reject(r):(this._verifyCardInProgress=!0,i=this._formatVerifyCardOptions(e),this._formatLookupData(i).then((function(e){return n.sendEvent(o._createPromise,"three-d-secure.verification-flow.started"),o._performLookup(i.nonce,e)})).then((function(e){return n.sendEvent(o._createPromise,"three-d-secure.verification-flow.3ds-version."+e.lookup.threeDSecureVersion),o._onLookupComplete(e,i)})).then((function(e){return o.initializeChallengeWithLookupResponse(e,i)})).then((function(e){return o._resetVerificationState(),n.sendEvent(o._createPromise,"three-d-secure.verification-flow.completed"),e})).catch((function(e){return o._resetVerificationState(),n.sendEvent(o._createPromise,"three-d-secure.verification-flow.failed"),a.reject(e)})))},_.prototype._checkForFrameworkSpecificVerifyCardErrors=function(){throw new o(c.THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED)},_.prototype._presentChallenge=function(){throw new o(c.THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED)},_.prototype.prepareLookup=function(){throw new o(c.THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED)},_.prototype._resetVerificationState=function(){this._verifyCardInProgress=!1,this._verifyCardPromisePlus=null},_.prototype._performLookup=function(e,t){var i=this,r="payment_methods/"+e+"/three_d_secure/lookup";return this._waitForClient().then((function(){return i._client.request({endpoint:r,method:"post",data:t}).catch((function(e){var t,r=e&&e.details&&e.details.httpStatus,s="three-d-secure.verification-flow.lookup-failed";return 404===r?(t=c.THREEDS_LOOKUP_TOKENIZED_CARD_NOT_FOUND_ERROR,s+=".404"):422===r?(t=c.THREEDS_LOOKUP_VALIDATION_ERROR,s+=".422"):t=c.THREEDS_LOOKUP_ERROR,n.sendEvent(i._createPromise,s),a.reject(new o({type:t.type,code:t.code,message:t.message,details:{originalError:e}}))}))}))},_.prototype._checkForVerifyCardError=function(e,t){var i;return!0===this._verifyCardInProgress?new o(c.THREEDS_AUTHENTICATION_IN_PROGRESS):(e.nonce?e.amount||(i="an amount"):i="a nonce",i||(i=this._checkForFrameworkSpecificVerifyCardErrors(e,t)),i?new o({type:c.THREEDS_MISSING_VERIFY_CARD_OPTION.type,code:c.THREEDS_MISSING_VERIFY_CARD_OPTION.code,message:"verifyCard options must include "+i+"."}):null)},_.prototype.initializeChallengeWithLookupResponse=function(e,t){var i=this;return t=t||{},this._lookupPaymentMethod=e.paymentMethod,i._verifyCardPromisePlus=i._verifyCardPromisePlus||new l,i._handleLookupResponse(e,t),i._verifyCardPromisePlus.then((function(e){return n.sendEvent(i._createPromise,"three-d-secure.verification-flow.liability-shifted."+String(e.liabilityShifted)),n.sendEvent(i._createPromise,"three-d-secure.verification-flow.liability-shift-possible."+String(e.liabilityShiftPossible)),e}))},_.prototype._handleLookupResponse=function(e,t){var i,r=Boolean(e.lookup&&e.lookup.acsUrl);n.sendEvent(this._createPromise,"three-d-secure.verification-flow.challenge-presented."+String(r)),r?this._presentChallenge(e,t):((i=this._formatAuthResponse(e.paymentMethod,e.threeDSecureInfo)).verificationDetails=e.threeDSecureInfo,this._verifyCardPromisePlus.resolve(i))},_.prototype._onLookupComplete=function(e){return this._lookupPaymentMethod=e.paymentMethod,this._verifyCardPromisePlus=new l,a.resolve(e)},_.prototype._formatAuthResponse=function(e,t){return{nonce:e.nonce,binData:e.binData,details:e.details,description:e.description&&e.description.replace(/\+/g," "),liabilityShifted:t&&t.liabilityShifted,liabilityShiftPossible:t&&t.liabilityShiftPossible,threeDSecureInfo:e.threeDSecureInfo}},_.prototype._formatVerifyCardOptions=function(e){return r({},e)},_.prototype._formatLookupData=function(e){var t={amount:e.amount};return a.resolve(t)},_.prototype._handleV1AuthResponse=function(e){var t=JSON.parse(e.auth_response);t.success?this._verifyCardPromisePlus.resolve(this._formatAuthResponse(t.paymentMethod,t.threeDSecureInfo)):t.threeDSecureInfo&&t.threeDSecureInfo.liabilityShiftPossible?this._verifyCardPromisePlus.resolve(this._formatAuthResponse(this._lookupPaymentMethod,t.threeDSecureInfo)):this._verifyCardPromisePlus.reject(new o({type:o.types.UNKNOWN,code:"UNKNOWN_AUTH_RESPONSE",message:t.error.message}))},_.prototype.cancelVerifyCard=function(){var e,t;return this._verifyCardInProgress=!1,this._lookupPaymentMethod?(t=this._lookupPaymentMethod.threeDSecureInfo,e=r({},this._lookupPaymentMethod,{liabilityShiftPossible:t&&t.liabilityShiftPossible,liabilityShifted:t&&t.liabilityShifted,verificationDetails:t&&t.verificationDetails}),a.resolve(e)):a.reject(new o(c.THREEDS_NO_VERIFICATION_PAYLOAD))},_.prototype._setupV1Bus=function(e){var t=window.location.href.split("#")[0],i=e.lookupResponse,r=m(),n=new u({channel:r,verifyDomain:s}),o=this._assetsUrl+"/html/three-d-secure-authentication-complete-frame.html?channel="+encodeURIComponent(r)+"&";return n.on(E,(function(e){e({acsUrl:i.acsUrl,pareq:i.pareq,termUrl:i.termUrl+"&three_d_secure_version="+"3.76.3&authentication_complete_base_url="+encodeURIComponent(o),md:i.md,parentUrl:t})})),n.on(y.AUTHENTICATION_COMPLETE,e.handleAuthResponse),n},_.prototype._setupV1Iframe=function(e){var t=this._assetsUrl+"/html/three-d-secure-bank-frame"+f(this._isDebug)+".html?showLoader="+e.showLoader;return p({src:t,height:400,width:400,name:h.LANDING_FRAME_NAME+"_"+this._v1Bus.channel,title:"3D Secure Authorization Frame"})},_.prototype._setupV1Elements=function(e){this._v1Bus=this._setupV1Bus(e),this._v1Iframe=this._setupV1Iframe(e)},_.prototype._teardownV1Elements=function(){this._v1Bus&&(this._v1Bus.teardown(),this._v1Bus=null),this._v1Iframe&&this._v1Iframe.parentNode&&(this._v1Iframe.parentNode.removeChild(this._v1Iframe),this._v1Iframe=null),this._onV1Keyup&&(document.removeEventListener("keyup",this._onV1Keyup),this._onV1Keyup=null)},_.prototype.teardown=function(){return n.sendEvent(this._createPromise,"three-d-secure.teardown-completed"),this._teardownV1Elements(),a.resolve()},t.exports=_},{"../../../lib/analytics":89,"../../../lib/assign":91,"../../../lib/braintree-error":94,"../../../lib/constants":95,"../../../lib/is-verified-domain":122,"../../../lib/promise":126,"../../../lib/use-min":129,"../../shared/constants":144,"../../shared/errors":145,"../../shared/events":146,"@braintree/event-emitter":36,"@braintree/extended-promise":37,"@braintree/iframer":38,"@braintree/uuid":42,framebus:168}],136:[function(e,t,i){"use strict";var r=e("./songbird");function n(e){r.call(this,e)}n.prototype=Object.create(r.prototype,{constructor:r}),n.prototype._createV1IframeModalElement=function(e){var t=document.createElement("div");return t.innerHTML='',t.querySelector("[data-braintree-v1-fallback-iframe-container]").appendChild(e),t},n.prototype._createCardinalConfigurationOptions=function(e){var t=r.prototype._createCardinalConfigurationOptions.call(this,e);return t.payment.framework="bootstrap3",t},t.exports=n},{"./songbird":141}],137:[function(e,t,i){"use strict";var r=e("./songbird");function n(e){r.call(this,e)}n.prototype=Object.create(r.prototype,{constructor:r}),n.prototype._createV1IframeModalElement=function(e){var t=document.createElement("div"),i=Boolean(this._createOptions&&this._createOptions.cardinalSDKConfig&&this._createOptions.cardinalSDKConfig.payment&&this._createOptions.cardinalSDKConfig.payment.displayExitButton);return t.innerHTML='
',i||(t.querySelector("[data-braintree-v1-fallback-close-button]").style.display="none"),t.querySelector("[data-braintree-v1-fallback-iframe-container]").appendChild(e),t},t.exports=n},{"./songbird":141}],138:[function(e,t,i){"use strict";var r=e("./legacy"),n=e("./cardinal-modal"),o=e("./bootstrap3-modal"),a=e("./inline-iframe");t.exports={legacy:r,"cardinal-modal":n,"bootstrap3-modal":o,"inline-iframe":a}},{"./bootstrap3-modal":136,"./cardinal-modal":137,"./inline-iframe":139,"./legacy":140}],139:[function(e,t,i){"use strict";var r=e("./songbird"),n=e("../../../lib/braintree-error"),o=e("../../shared/errors"),a=e("../../../lib/enumerate");function s(e){r.call(this,e)}s.prototype=Object.create(r.prototype,{constructor:r}),s.events=a(["AUTHENTICATION_IFRAME_AVAILABLE"],"inline-iframe-framework:"),s.prototype.setUpEventListeners=function(e){r.prototype.setUpEventListeners.call(this,e),this.on(s.events.AUTHENTICATION_IFRAME_AVAILABLE,(function(t,i){e("authentication-iframe-available",t,i)}))},s.prototype._createCardinalConfigurationOptions=function(e){var t=r.prototype._createCardinalConfigurationOptions.call(this,e);return t.payment.framework="inline",t},s.prototype._addV1IframeToPage=function(){this._emit(s.events.AUTHENTICATION_IFRAME_AVAILABLE,{element:this._v1Modal},(function(){}))},s.prototype._setupFrameworkSpecificListeners=function(){this.setCardinalListener("ui.inline.setup",this._onInlineSetup.bind(this))},s.prototype._onInlineSetup=function(e,t,i,r){var a,l;e&&t?("CCA"!==t.paymentType||"suppress"!==t.data.mode&&"static"!==t.data.mode)&&(l=!0):l=!0,l?r(new n(o.THREEDS_INLINE_IFRAME_DETAILS_INCORRECT)):((a=document.createElement("div")).innerHTML=e,"suppress"===t.data.mode?(a.style.display="none",document.body.appendChild(a),i()):"static"===t.data.mode&&this._emit(s.events.AUTHENTICATION_IFRAME_AVAILABLE,{element:a},(function(){i()})))},t.exports=s},{"../../../lib/braintree-error":94,"../../../lib/enumerate":103,"../../shared/errors":145,"./songbird":141}],140:[function(e,t,i){"use strict";var r=e("./base"),n=e("../../../lib/deferred");function o(e){r.call(this,e)}o.prototype=Object.create(r.prototype,{constructor:o}),o.prototype.setUpEventListeners=function(){},o.prototype.transformV1CustomerBillingAddress=function(e){return e.billingAddress.line1=e.billingAddress.streetAddress,e.billingAddress.line2=e.billingAddress.extendedAddress,e.billingAddress.city=e.billingAddress.locality,e.billingAddress.state=e.billingAddress.region,e.billingAddress.countryCode=e.billingAddress.countryCodeAlpha2,delete e.billingAddress.streetAddress,delete e.billingAddress.extendedAddress,delete e.billingAddress.locality,delete e.billingAddress.region,delete e.billingAddress.countryCodeAlpha2,e},o.prototype._createIframe=function(e){var t=this;return this._setupV1Elements({lookupResponse:e.lookupResponse,showLoader:e.showLoader,handleAuthResponse:function(i){t._handleAuthResponse(i,e)}}),this._v1Iframe},o.prototype._handleAuthResponse=function(e,t){this._v1Bus.teardown(),t.removeFrame(),n(function(){this._handleV1AuthResponse(e)}.bind(this))()},o.prototype._checkForFrameworkSpecificVerifyCardErrors=function(e){var t;return"function"!=typeof e.addFrame?t="an addFrame function":"function"!=typeof e.removeFrame&&(t="a removeFrame function"),t},o.prototype._formatVerifyCardOptions=function(e){var t=r.prototype._formatVerifyCardOptions.call(this,e);return t.addFrame=n(e.addFrame),t.removeFrame=n(e.removeFrame),t.showLoader=!1!==e.showLoader,t},o.prototype._formatLookupData=function(e){var t=this;return r.prototype._formatLookupData.call(this,e).then((function(i){return e.customer&&e.customer.billingAddress&&(i.customer=t.transformV1CustomerBillingAddress(e.customer)),i}))},o.prototype._presentChallenge=function(e,t){t.addFrame(null,this._createIframe({showLoader:t.showLoader,lookupResponse:e.lookup,removeFrame:t.removeFrame}))},t.exports=o},{"../../../lib/deferred":101,"./base":135}],141:[function(e,t,i){"use strict";var r=e("./base"),n=e("../../../lib/assign").assign,o=e("../../../lib/deferred"),a=e("../../../lib/braintree-error"),s=e("../../../lib/convert-to-braintree-error"),l=e("../../../lib/analytics"),d=e("../../../lib/assets"),c=e("../../shared/errors"),p=e("../../../lib/enumerate"),u=e("../../shared/constants"),h=e("../../../lib/promise"),m=e("@braintree/extended-promise"),y=e("../../../lib/constants").INTEGRATION_TIMEOUT_MS,f=e("../../../lib/constants").PLATFORM,E="3.76.3",v=["ui.close","ui.render","ui.renderHidden","ui.loading.close","ui.loading.render"];function _(e){r.call(this,e),this._useV1Fallback=!1,this._clientMetadata={requestedThreeDSecureVersion:"2",sdkVersion:f+"/"+E},this._getDfReferenceIdPromisePlus=new m,this.setupSongbird(e),this._cardinalEvents=[]}function g(e,t,i){t[i+"Line1"]=e.streetAddress,t[i+"Line2"]=e.extendedAddress,t[i+"Line3"]=e.line3,t[i+"City"]=e.locality,t[i+"State"]=e.region,t[i+"PostalCode"]=e.postalCode,t[i+"CountryCode"]=e.countryCodeAlpha2}_.prototype=Object.create(r.prototype,{constructor:_}),_.events=p(["LOOKUP_COMPLETE","CUSTOMER_CANCELED","UI.CLOSE","UI.RENDER","UI.RENDERHIDDEN","UI.LOADING.CLOSE","UI.LOADING.RENDER"],"songbird-framework:"),_.prototype.setUpEventListeners=function(e){this.on(_.events.LOOKUP_COMPLETE,(function(t,i){e("lookup-complete",t,i)})),this.on(_.events.CUSTOMER_CANCELED,(function(){e("customer-canceled")})),this.on(_.events["UI.CLOSE"],(function(){e("authentication-modal-close")})),this.on(_.events["UI.RENDER"],(function(){e("authentication-modal-render")})),this.on(_.events["UI.RENDERHIDDEN"],(function(){e("authentication-modal-render-hidden")})),this.on(_.events["UI.LOADING.CLOSE"],(function(){e("authentication-modal-loader-close")})),this.on(_.events["UI.LOADING.RENDER"],(function(){e("authentication-modal-loader-render")}))},_.prototype.prepareLookup=function(e){var t=n({},e),i=this;return this.getDfReferenceId().then((function(e){t.dfReferenceId=e})).then((function(){return i._triggerCardinalBinProcess(e.bin)})).catch((function(){})).then((function(){return i._waitForClient()})).then((function(){return t.clientMetadata=i._clientMetadata,t.authorizationFingerprint=i._client.getConfiguration().authorizationFingerprint,t.braintreeLibraryVersion="braintree/web/3.76.3",t}))},_.prototype.initializeChallengeWithLookupResponse=function(e,t){return this.setupSongbird().then(function(){return r.prototype.initializeChallengeWithLookupResponse.call(this,e,t)}.bind(this))},_.prototype._initiateV1Fallback=function(e){this._useV1Fallback=!0,l.sendEvent(this._createPromise,"three-d-secure.v1-fallback."+e),this._songbirdPromise.resolve()},_.prototype._triggerCardinalBinProcess=function(e){var t=this,i=Date.now();return e?window.Cardinal.trigger("bin.process",e).then((function(e){t._clientMetadata.issuerDeviceDataCollectionTimeElapsed=Date.now()-i,t._clientMetadata.issuerDeviceDataCollectionResult=e&&e.Status})):h.resolve()},_.prototype.transformBillingAddress=function(e,t){return t&&(g(t,e,"billing"),e.billingPhoneNumber=t.phoneNumber,e.billingGivenName=t.givenName,e.billingSurname=t.surname),e},_.prototype.transformShippingAddress=function(e){var t=e.shippingAddress;return t&&(g(t,e,"shipping"),delete e.shippingAddress),e},_.prototype._createV1IframeModalElement=function(e){var t=document.createElement("div");return t.innerHTML='
',t.querySelector('[data-braintree-v1-fallback-iframe-container="true"]').appendChild(e),t},_.prototype._createV1IframeModal=function(e){var t=this._createV1IframeModalElement(e),i=t.querySelector("[data-braintree-v1-fallback-close-button]"),r=t.querySelector("[data-braintree-v1-fallback-backdrop]"),n=this;function o(){t.parentNode.removeChild(t),n.cancelVerifyCard(c.THREEDS_CARDINAL_SDK_CANCELED),document.removeEventListener("keyup",n._onV1Keyup),n._onV1Keyup=null}return this._onV1Keyup=function(e){"Escape"===e.key&&t.parentNode&&o()},i&&i.addEventListener("click",o),r&&r.addEventListener("click",o),document.addEventListener("keyup",this._onV1Keyup),t},_.prototype._addV1IframeToPage=function(){document.body.appendChild(this._v1Modal)},_.prototype._handleAuthResponseFromV1Fallback=function(e){this._teardownV1Elements(),this._v1Modal.parentNode.removeChild(this._v1Modal),this._handleV1AuthResponse(e)},_.prototype._presentChallengeWithV1Fallback=function(e){var t=this;this._setupV1Elements({lookupResponse:e,showLoader:!0,handleAuthResponse:function(e){t._handleAuthResponseFromV1Fallback(e)}}),this._v1Modal=this._createV1IframeModal(this._v1Iframe),this._addV1IframeToPage()},_.prototype.setupSongbird=function(e){var t=this,i=Date.now();return this._songbirdPromise||(e=e||{},this._songbirdPromise=new m,this._v2SetupFailureReason="reason-unknown",t._loadCardinalScript(e).then((function(){return window.Cardinal?t._configureCardinalSdk({setupOptions:e,setupStartTime:i}):(t._v2SetupFailureReason="cardinal-global-unavailable",h.reject(new a(c.THREEDS_CARDINAL_SDK_SETUP_FAILED)))})).catch((function(e){var i=s(e,{type:c.THREEDS_CARDINAL_SDK_SETUP_FAILED.type,code:c.THREEDS_CARDINAL_SDK_SETUP_FAILED.code,message:c.THREEDS_CARDINAL_SDK_SETUP_FAILED.message});t._getDfReferenceIdPromisePlus.reject(i),window.clearTimeout(t._songbirdSetupTimeoutReference),l.sendEvent(t._client,"three-d-secure.cardinal-sdk.init.setup-failed"),t._initiateV1Fallback("cardinal-sdk-setup-failed."+t._v2SetupFailureReason)}))),this._songbirdPromise},_.prototype._configureCardinalSdk=function(e){var t=this;return this._waitForClient().then((function(){var e=t._client.getConfiguration().gatewayConfiguration.threeDSecure;return e.hasOwnProperty("versionTwo")&&"cardinal"!==e.versionTwo?h.reject(new Error("cardinal-api-not-available-or-configured")):e})).then((function(i){var r=i.cardinalAuthenticationJWT,n=e.setupOptions,o=e.setupStartTime,a=t._createCardinalConfigurationOptions(n);v.forEach((function(e){t.setCardinalListener(e,(function(){t._emit(_.events[e.toUpperCase()])}))})),t.setCardinalListener("payments.setupComplete",t._createPaymentsSetupCompleteCallback()),t._setupFrameworkSpecificListeners(),window.Cardinal.configure(a),window.Cardinal.setup("init",{jwt:r}),t._clientMetadata.cardinalDeviceDataCollectionTimeElapsed=Date.now()-o,t.setCardinalListener("payments.validated",t._createPaymentsValidatedCallback())})).catch((function(e){return"cardinal-api-not-available-or-configured"===e.message?t._v2SetupFailureReason="cardinal-api-not-available-or-configured":t._v2SetupFailureReason="cardinal-configuration-threw-error",h.reject(e)}))},_.prototype.setCardinalListener=function(e,t){this._cardinalEvents.push(e),window.Cardinal.on(e,t)},_.prototype._setupFrameworkSpecificListeners=function(){},_.prototype._createCardinalConfigurationOptions=function(e){var t=e.cardinalSDKConfig||{},i=t.payment||{};return!t.logging&&e.loggingEnabled&&(t.logging={level:"verbose"}),t.payment={},i.hasOwnProperty("displayLoading")&&(t.payment.displayLoading=i.displayLoading),i.hasOwnProperty("displayExitButton")&&(t.payment.displayExitButton=i.displayExitButton),t},_.prototype._loadCardinalScript=function(e){var t=this,i=u.CARDINAL_SCRIPT_SOURCE.sandbox;return this._waitForClient().then((function(){var r="production"===t._client.getConfiguration().gatewayConfiguration.environment;return t._songbirdSetupTimeoutReference=window.setTimeout((function(){l.sendEvent(t._client,"three-d-secure.cardinal-sdk.init.setup-timeout"),t._initiateV1Fallback("cardinal-sdk-setup-timeout")}),e.timeout||y),r&&(i=u.CARDINAL_SCRIPT_SOURCE.production),d.loadScript({src:i})})).catch((function(e){return t._v2SetupFailureReason="songbird-js-failed-to-load",h.reject(s(e,c.THREEDS_CARDINAL_SDK_SCRIPT_LOAD_FAILED))}))},_.prototype._createPaymentsSetupCompleteCallback=function(){var e=this;return function(t){e._getDfReferenceIdPromisePlus.resolve(t.sessionId),window.clearTimeout(e._songbirdSetupTimeoutReference),l.sendEvent(e._createPromise,"three-d-secure.cardinal-sdk.init.setup-completed"),e._songbirdPromise.resolve()}},_.prototype.getDfReferenceId=function(){return this._getDfReferenceIdPromisePlus},_.prototype._performJWTValidation=function(e,t){var i=this,r=this._lookupPaymentMethod.nonce,n="payment_methods/"+r+"/three_d_secure/authenticate_from_jwt",o=e&&e.Payment&&e.Payment.ExtendedData&&e.Payment.ExtendedData.ChallengeCancel;return o&&(l.sendEvent(this._createPromise,"three-d-secure.verification-flow.cardinal-sdk.cancel-code."+o),"01"===o&&this._emit(_.events.CUSTOMER_CANCELED)),l.sendEvent(this._createPromise,"three-d-secure.verification-flow.upgrade-payment-method.started"),this._waitForClient().then((function(){return i._client.request({method:"post",endpoint:n,data:{jwt:t,paymentMethodNonce:r}})})).then((function(t){var r=t.paymentMethod||i._lookupPaymentMethod,n=i._formatAuthResponse(r,t.threeDSecureInfo);return n.rawCardinalSDKVerificationData=e,l.sendEvent(i._client,"three-d-secure.verification-flow.upgrade-payment-method.succeeded"),h.resolve(n)})).catch((function(e){var t=new a({type:c.THREEDS_JWT_AUTHENTICATION_FAILED.type,code:c.THREEDS_JWT_AUTHENTICATION_FAILED.code,message:c.THREEDS_JWT_AUTHENTICATION_FAILED.message,details:{originalError:e}});return l.sendEvent(i._client,"three-d-secure.verification-flow.upgrade-payment-method.errored"),h.reject(t)}))},_.prototype._createPaymentsValidatedCallback=function(){var e=this;return function(t,i){var r;if(l.sendEvent(e._createPromise,"three-d-secure.verification-flow.cardinal-sdk.action-code."+t.ActionCode.toLowerCase()),e._verifyCardPromisePlus)switch(t.ActionCode){case"SUCCESS":case"NOACTION":case"FAILURE":e._performJWTValidation(t,i).then((function(t){e._verifyCardPromisePlus.resolve(t)})).catch((function(t){e._verifyCardPromisePlus.reject(t)}));break;case"ERROR":switch(l.sendEvent(e._createPromise,"three-d-secure.verification-flow.cardinal-sdk-error."+t.ErrorNumber),t.ErrorNumber){case 10001:case 10002:r=new a(c.THREEDS_CARDINAL_SDK_SETUP_TIMEDOUT);break;case 10003:case 10007:case 10009:r=new a(c.THREEDS_CARDINAL_SDK_RESPONSE_TIMEDOUT);break;case 10005:case 10006:r=new a(c.THREEDS_CARDINAL_SDK_BAD_CONFIG);break;case 10008:case 10010:r=new a(c.THREEDS_CARDINAL_SDK_BAD_JWT);break;case 10011:l.sendEvent(e._createPromise,"three-d-secure.verification-flow.canceled"),r=new a(c.THREEDS_CARDINAL_SDK_CANCELED);break;default:r=new a(c.THREEDS_CARDINAL_SDK_ERROR)}r.details={originalError:{code:t.ErrorNumber,description:t.ErrorDescription}},e._verifyCardPromisePlus.reject(r)}else e._initiateV1Fallback("cardinal-sdk-setup-error.number-"+t.ErrorNumber)}},_.prototype._checkForVerifyCardError=function(e,t){return r.prototype._checkForVerifyCardError.call(this,e,t)},_.prototype._checkForFrameworkSpecificVerifyCardErrors=function(e,t){var i;return"function"==typeof e.onLookupComplete||t.ignoreOnLookupCompleteRequirement||(i="an onLookupComplete function"),i},_.prototype._formatVerifyCardOptions=function(e){var t=r.prototype._formatVerifyCardOptions.call(this,e),i=t.additionalInformation||{};return i=this.transformBillingAddress(i,e.billingAddress),i=this.transformShippingAddress(i),e.onLookupComplete&&(t.onLookupComplete=o(e.onLookupComplete)),e.email&&(i.email=e.email),e.mobilePhoneNumber&&(i.mobilePhoneNumber=e.mobilePhoneNumber),t.additionalInformation=i,t},_.prototype._onLookupComplete=function(e,t){var i=this;return r.prototype._onLookupComplete.call(this,e).then((function(e){return new h((function(r,n){function o(){r(e)}e.requiresUserAuthentication=Boolean(e.lookup&&e.lookup.acsUrl),i._verifyCardPromisePlus.catch(n),t.onLookupComplete?t.onLookupComplete(e,o):i._emit(_.events.LOOKUP_COMPLETE,e,o)}))}))},_.prototype._presentChallenge=function(e){!this._useV1Fallback&&e.lookup.transactionId?window.Cardinal.continue("cca",{AcsUrl:e.lookup.acsUrl,Payload:e.lookup.pareq},{OrderDetails:{TransactionId:e.lookup.transactionId}}):this._presentChallengeWithV1Fallback(e.lookup)},_.prototype._formatLookupData=function(e){var t=this;return r.prototype._formatLookupData.call(this,e).then((function(i){return i.additionalInfo=e.additionalInformation,e.accountType&&(i.accountType=e.accountType),e.challengeRequested&&(i.challengeRequested=e.challengeRequested),e.dataOnlyRequested&&(i.dataOnlyRequested=e.dataOnlyRequested),e.exemptionRequested&&(i.exemptionRequested=e.exemptionRequested),e.bin&&(i.bin=e.bin),t.prepareLookup(i)}))},_.prototype.cancelVerifyCard=function(e){var t=this;return r.prototype.cancelVerifyCard.call(this).then((function(i){return t._verifyCardPromisePlus&&(e=e||new a(c.THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT),t._verifyCardPromisePlus.reject(e)),i}))},_.prototype.teardown=function(){return window.Cardinal&&this._cardinalEvents.forEach((function(e){window.Cardinal.off(e)})),r.prototype.teardown.call(this)},t.exports=_},{"../../../lib/analytics":89,"../../../lib/assets":90,"../../../lib/assign":91,"../../../lib/braintree-error":94,"../../../lib/constants":95,"../../../lib/convert-to-braintree-error":97,"../../../lib/deferred":101,"../../../lib/enumerate":103,"../../../lib/promise":126,"../../shared/constants":144,"../../shared/errors":145,"./base":135,"@braintree/extended-promise":37}],142:[function(e,t,i){"use strict";var r=e("@braintree/wrap-promise"),n=e("../../lib/methods"),o=e("../../lib/convert-methods-to-error"),a=e("@braintree/event-emitter"),s=e("./frameworks");function l(e){var t=this,i=s[e.framework];a.call(this),this._framework=new i(e),this._framework.setUpEventListeners((function(){t._emit.apply(t,arguments)}))}a.createChild(l),l.prototype.verifyCard=function(e){var t;return this.hasListener("lookup-complete")&&(t={ignoreOnLookupCompleteRequirement:!0}),this._framework.verifyCard(e,t)},l.prototype.initializeChallengeWithLookupResponse=function(e){return"string"==typeof e&&(e=JSON.parse(e)),this._framework.initializeChallengeWithLookupResponse(e)},l.prototype.prepareLookup=function(e){return this._framework.prepareLookup(e).then((function(e){return JSON.stringify(e)}))},l.prototype.cancelVerifyCard=function(){return this._framework.cancelVerifyCard()},l.prototype.teardown=function(){var e=n(l.prototype).concat(n(a.prototype));return o(this,e),this._framework.teardown()},t.exports=r.wrapPrototype(l)},{"../../lib/convert-methods-to-error":96,"../../lib/methods":124,"./frameworks":138,"@braintree/event-emitter":36,"@braintree/wrap-promise":46}],143:[function(e,t,i){"use strict";var r=e("./external/three-d-secure"),n=e("../lib/is-https").isHTTPS,o=e("../lib/basic-component-verification"),a=e("../lib/create-deferred-client"),s=e("../lib/create-assets-url"),l=e("../lib/braintree-error"),d=e("../lib/analytics"),c=e("./shared/errors"),p=e("../lib/promise"),u=e("@braintree/wrap-promise");t.exports={create:u((function(e){var t="3D Secure";return o.verify({name:t,client:e.client,authorization:e.authorization}).then((function(){var i=s.create(e.authorization),o=function(e){var t=String(e.version||"");if(!t||"1"===t)return"legacy";switch(t){case"2":case"2-cardinal-modal":return"cardinal-modal";case"2-bootstrap3-modal":return"bootstrap3-modal";case"2-inline-iframe":return"inline-iframe";default:throw new l({code:c.THREEDS_UNRECOGNIZED_VERSION.code,type:c.THREEDS_UNRECOGNIZED_VERSION.type,message:"Version `"+e.version+"` is not a recognized version. You may need to update the version of your Braintree SDK to support this version."})}}(e),u=a.create({authorization:e.authorization,client:e.client,debug:e.debug,assetsUrl:i,name:t}).then((function(t){var i,r=t.getConfiguration(),a=r.gatewayConfiguration;return e.client=t,a.threeDSecureEnabled||(i=c.THREEDS_NOT_ENABLED),"TOKENIZATION_KEY"===r.authorizationType&&(i=c.THREEDS_CAN_NOT_USE_TOKENIZATION_KEY),"production"===a.environment&&!n()&&(i=c.THREEDS_HTTPS_REQUIRED),"legacy"===o||a.threeDSecure&&a.threeDSecure.cardinalAuthenticationJWT||(d.sendEvent(e.client,"three-d-secure.initialization.failed.missing-cardinalAuthenticationJWT"),i=c.THREEDS_NOT_ENABLED_FOR_V2),i?p.reject(new l(i)):(d.sendEvent(e.client,"three-d-secure.initialized"),t)})),h=new r({client:e.client,assetsUrl:i,createPromise:u,loggingEnabled:e.loggingEnabled,cardinalSDKConfig:e.cardinalSDKConfig,framework:o});return e.client?u.then((function(){return h})):h}))})),VERSION:"3.76.3"}},{"../lib/analytics":89,"../lib/basic-component-verification":92,"../lib/braintree-error":94,"../lib/create-assets-url":98,"../lib/create-deferred-client":100,"../lib/is-https":121,"../lib/promise":126,"./external/three-d-secure":142,"./shared/errors":145,"@braintree/wrap-promise":46}],144:[function(e,t,i){"use strict";t.exports={LANDING_FRAME_NAME:"braintreethreedsecurelanding",CARDINAL_SCRIPT_SOURCE:{production:"https://songbird.cardinalcommerce.com/edge/v1/songbird.js",sandbox:"https://songbirdstag.cardinalcommerce.com/edge/v1/songbird.js"}}},{}],145:[function(e,t,i){"use strict";var r=e("../../lib/braintree-error");t.exports={THREEDS_NOT_ENABLED:{type:r.types.MERCHANT,code:"THREEDS_NOT_ENABLED",message:"3D Secure is not enabled for this merchant."},THREEDS_CAN_NOT_USE_TOKENIZATION_KEY:{type:r.types.MERCHANT,code:"THREEDS_CAN_NOT_USE_TOKENIZATION_KEY",message:"3D Secure can not use a tokenization key for authorization."},THREEDS_HTTPS_REQUIRED:{type:r.types.MERCHANT,code:"THREEDS_HTTPS_REQUIRED",message:"3D Secure requires HTTPS."},THREEDS_NOT_ENABLED_FOR_V2:{type:r.types.MERCHANT,code:"THREEDS_NOT_ENABLED_FOR_V2",message:"3D Secure version 2 is not enabled for this merchant. Contact Braintree Support for assistance at https://help.braintreepayments.com/"},THREEDS_UNRECOGNIZED_VERSION:{type:r.types.MERCHANT,code:"THREEDS_UNRECOGNIZED_VERSION"},THREEDS_CARDINAL_SDK_SETUP_FAILED:{type:r.types.UNKNOWN,code:"THREEDS_CARDINAL_SDK_SETUP_FAILED",message:"Something went wrong setting up Cardinal's Songbird.js library."},THREEDS_CARDINAL_SDK_SCRIPT_LOAD_FAILED:{type:r.types.NETWORK,code:"THREEDS_CARDINAL_SDK_SCRIPT_LOAD_FAILED",message:"Cardinal's Songbird.js library could not be loaded."},THREEDS_CARDINAL_SDK_SETUP_TIMEDOUT:{type:r.types.UNKNOWN,code:"THREEDS_CARDINAL_SDK_SETUP_TIMEDOUT",message:"Cardinal's Songbird.js took too long to setup."},THREEDS_CARDINAL_SDK_RESPONSE_TIMEDOUT:{type:r.types.UNKNOWN,code:"THREEDS_CARDINAL_SDK_RESPONSE_TIMEDOUT",message:"Cardinal's API took too long to respond."},THREEDS_CARDINAL_SDK_BAD_CONFIG:{type:r.types.MERCHANT,code:"THREEDS_CARDINAL_SDK_BAD_CONFIG",message:"JWT or other required field missing. Please check your setup configuration."},THREEDS_CARDINAL_SDK_BAD_JWT:{type:r.types.MERCHANT,code:"THREEDS_CARDINAL_SDK_BAD_JWT",message:"Cardinal JWT missing or malformed. Please check your setup configuration."},THREEDS_CARDINAL_SDK_ERROR:{type:r.types.UNKNOWN,code:"THREEDS_CARDINAL_SDK_ERROR",message:"A general error has occurred with Cardinal. See description for more information."},THREEDS_CARDINAL_SDK_CANCELED:{type:r.types.CUSTOMER,code:"THREEDS_CARDINAL_SDK_CANCELED",message:"Canceled by user."},THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT:{type:r.types.MERCHANT,code:"THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT",message:"3D Secure verfication canceled by merchant."},THREEDS_AUTHENTICATION_IN_PROGRESS:{type:r.types.MERCHANT,code:"THREEDS_AUTHENTICATION_IN_PROGRESS",message:"Cannot call verifyCard while existing authentication is in progress."},THREEDS_MISSING_VERIFY_CARD_OPTION:{type:r.types.MERCHANT,code:"THREEDS_MISSING_VERIFY_CARD_OPTION"},THREEDS_JWT_AUTHENTICATION_FAILED:{type:r.types.UNKNOWN,code:"THREEDS_JWT_AUTHENTICATION_FAILED",message:"Something went wrong authenticating the JWT from Cardinal"},THREEDS_LOOKUP_TOKENIZED_CARD_NOT_FOUND_ERROR:{type:r.types.MERCHANT,code:"THREEDS_LOOKUP_TOKENIZED_CARD_NOT_FOUND_ERROR",message:"Either the payment method nonce passed to `verifyCard` does not exist, or it was already consumed"},THREEDS_LOOKUP_VALIDATION_ERROR:{type:r.types.CUSTOMER,code:"THREEDS_LOOKUP_VALIDATION_ERROR",message:"The data passed in `verifyCard` did not pass validation checks. See details for more info"},THREEDS_LOOKUP_ERROR:{type:r.types.UNKNOWN,code:"THREEDS_LOOKUP_ERROR",message:"Something went wrong during the 3D Secure lookup"},THREEDS_INLINE_IFRAME_DETAILS_INCORRECT:{type:r.types.UNKNOWN,code:"THREEDS_INLINE_IFRAME_DETAILS_INCORRECT",message:"Something went wrong when attempting to add the authentication iframe to the page."},THREEDS_NO_VERIFICATION_PAYLOAD:{type:r.types.MERCHANT,code:"THREEDS_NO_VERIFICATION_PAYLOAD",message:"No verification payload available."},THREEDS_TERM_URL_REQUIRES_BRAINTREE_DOMAIN:{type:r.types.INTERNAL,code:"THREEDS_TERM_URL_REQUIRES_BRAINTREE_DOMAIN",message:"Term Url must be on a Braintree domain."},THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED:{type:r.types.INTERNAL,code:"THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED",message:"Method not implemented for this framework."}}},{"../../lib/braintree-error":94}],146:[function(e,t,i){"use strict";var r=e("../../lib/enumerate");t.exports=r(["AUTHENTICATION_COMPLETE"],"threedsecure:")},{"../../lib/enumerate":103}],147:[function(e,t,i){"use strict";var r=e("../lib/braintree-error");t.exports={VAULT_MANAGER_DELETE_PAYMENT_METHOD_NONCE_REQUIRES_CLIENT_TOKEN:{type:r.types.MERCHANT,code:"VAULT_MANAGER_DELETE_PAYMENT_METHOD_NONCE_REQUIRES_CLIENT_TOKEN",message:"A client token with a customer id must be used to delete a payment method nonce."},VAULT_MANAGER_PAYMENT_METHOD_NONCE_NOT_FOUND:{type:r.types.MERCHANT,code:"VAULT_MANAGER_PAYMENT_METHOD_NONCE_NOT_FOUND"},VAULT_MANAGER_DELETE_PAYMENT_METHOD_UNKNOWN_ERROR:{type:r.types.UNKNOWN,code:"VAULT_MANAGER_DELETE_PAYMENT_METHOD_UNKNOWN_ERROR"}}},{"../lib/braintree-error":94}],148:[function(e,t,i){"use strict";var r=e("../lib/basic-component-verification"),n=e("../lib/create-deferred-client"),o=e("../lib/create-assets-url"),a=e("./vault-manager"),s=e("@braintree/wrap-promise");t.exports={create:s((function(e){var t="Vault Manager";return r.verify({name:t,client:e.client,authorization:e.authorization}).then((function(){return new a({createPromise:n.create({authorization:e.authorization,client:e.client,debug:e.debug,assetsUrl:o.create(e.authorization),name:t})})}))})),VERSION:"3.76.3"}},{"../lib/basic-component-verification":92,"../lib/create-assets-url":98,"../lib/create-deferred-client":100,"./vault-manager":149,"@braintree/wrap-promise":46}],149:[function(e,t,i){"use strict";var r=e("../lib/analytics"),n=e("../lib/braintree-error"),o=e("./errors"),a=e("../lib/convert-methods-to-error"),s=e("../lib/methods"),l=e("../lib/promise"),d=e("@braintree/wrap-promise");function c(e){this._createPromise=e.createPromise}function p(e){var t={nonce:e.nonce,default:e.default,details:e.details,hasSubscription:e.hasSubscription,type:e.type};return e.description&&(t.description=e.description),e.binData&&(t.binData=e.binData),t}c.prototype.fetchPaymentMethods=function(e){var t;return t=!0===(e=e||{}).defaultFirst?1:0,this._createPromise.then((function(e){return e.request({endpoint:"payment_methods",method:"get",data:{defaultFirst:t}})})).then(function(e){return r.sendEvent(this._createPromise,"vault-manager.fetch-payment-methods.succeeded"),e.paymentMethods.map(p)}.bind(this))},c.prototype.deletePaymentMethod=function(e){return this._createPromise.then((function(t){return"CLIENT_TOKEN"===t.getConfiguration().authorizationType?t.request({api:"graphQLApi",data:{query:"mutation DeletePaymentMethodFromSingleUseToken($input: DeletePaymentMethodFromSingleUseTokenInput!) { deletePaymentMethodFromSingleUseToken(input: $input) { clientMutationId }}",variables:{input:{singleUseTokenId:e}},operationName:"DeletePaymentMethodFromSingleUseToken"}}).then((function(){r.sendEvent(t,"vault-manager.delete-payment-method.succeeded")})).catch((function(i){var a,s=i.details.originalError;return r.sendEvent(t,"vault-manager.delete-payment-method.failed"),s[0]&&"NOT_FOUND"===s[0].extensions.errorClass&&(a=new n({type:o.VAULT_MANAGER_PAYMENT_METHOD_NONCE_NOT_FOUND.type,code:o.VAULT_MANAGER_PAYMENT_METHOD_NONCE_NOT_FOUND.code,message:"A payment method for payment method nonce `"+e+"` could not be found.",details:{originalError:s}})),a||(a=new n({type:o.VAULT_MANAGER_DELETE_PAYMENT_METHOD_UNKNOWN_ERROR.type,code:o.VAULT_MANAGER_DELETE_PAYMENT_METHOD_UNKNOWN_ERROR.code,message:"An unknown error occured when attempting to delete the payment method assocaited with the payment method nonce `"+e+"`.",details:{originalError:s}})),l.reject(a)})):l.reject(new n(o.VAULT_MANAGER_DELETE_PAYMENT_METHOD_NONCE_REQUIRES_CLIENT_TOKEN))}))},c.prototype.teardown=function(){return a(this,s(c.prototype)),l.resolve()},t.exports=d.wrapPrototype(c)},{"../lib/analytics":89,"../lib/braintree-error":94,"../lib/convert-methods-to-error":96,"../lib/methods":124,"../lib/promise":126,"./errors":147,"@braintree/wrap-promise":46}],150:[function(e,t,i){"use strict";var r=(this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}})(e("./venmo-desktop"));t.exports=function(e){return new r.default(e).initialize()}},{"./venmo-desktop":152}],151:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.VENMO_DESKTOP_PAYMENT_RESOURCE_STATUS_QUERY=i.UPDATE_VENMO_DESKTOP_PAYMENT_RESOURCE_QUERY=i.CREATE_VENMO_DESKTOP_PAYMENT_RESOURCE_QUERY=void 0,i.CREATE_VENMO_DESKTOP_PAYMENT_RESOURCE_QUERY="mutation CreateVenmoQRCodePaymentContext($input: CreateVenmoQRCodePaymentContextInput!) {\n createVenmoQRCodePaymentContext(input: $input) {\n clientMutationId\n venmoQRCodePaymentContext {\n id\n merchantId\n createdAt\n expiresAt\n }\n }\n}",i.UPDATE_VENMO_DESKTOP_PAYMENT_RESOURCE_QUERY="mutation UpdateVenmoQRCodePaymentContext($input: UpdateVenmoQRCodePaymentContextInput!) {\n updateVenmoQRCodePaymentContext(input: $input) {\n clientMutationId\n }\n}",i.VENMO_DESKTOP_PAYMENT_RESOURCE_STATUS_QUERY="query PaymentContext($id: ID!) {\n node(id: $id) {\n ... on VenmoQRCodePaymentContext {\n status\n paymentMethodId\n userName\n }\n }\n}"},{}],152:[function(e,t,i){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,i=1,r=arguments.length;it?this.updateVenmoDesktopPaymentContext("EXPIRED").then((function(){return i.displayError("Something went wrong"),i.sendEvent("venmo.tokenize.desktop.status-change.sdk-timeout"),i.Promise.reject({allowUIToHandleError:!0,reason:"TIMEOUT"})})):this.lookupVenmoDesktopPaymentContext().then((function(r){if(!i.venmoContextId||!r)return i.Promise.resolve();var n=r.status;if(n!==e)switch(e=n,i.sendEvent("venmo.tokenize.desktop.status-change."+e.toLowerCase()),e){case"CREATED":break;case"EXPIRED":case"FAILED":case"CANCELED":var o="CANCELED"===e?"The authorization was canceled":"Something went wrong";return i.displayError(o),i.Promise.reject({allowUIToHandleError:!0,reason:e});case"SCANNED":i.authorizing();break;case"APPROVED":return i.authorize(),i.Promise.resolve(r)}return new i.Promise((function(r,n){setTimeout((function(){i.pollForStatusChange(e,t).then(r).catch(n)}),1e3)}))})):this.Promise.resolve()},e.prototype.teardown=function(){this.bus.teardown(),this.iframe.parentNode&&this.iframe.parentNode.removeChild(this.iframe),this.alertBox.parentNode&&this.alertBox.parentNode.removeChild(this.alertBox)},e.prototype.setAlert=function(e){this.alertBox.style.display=e?"block":"none",this.alertBox.textContent=e},e.prototype.createVenmoDesktopPaymentContext=function(){var e=this,t={environment:this.env,intent:"PAY_FROM_APP"};return this.apiRequest(d.CREATE_VENMO_DESKTOP_PAYMENT_RESOURCE_QUERY,{input:t}).then((function(t){var i=t.createVenmoQRCodePaymentContext.venmoQRCodePaymentContext;e.venmoContextId=i.id;var r=e.profileId||i.merchantId;return{id:i.id,status:i.status,merchantId:r,createdAt:i.createdAt,expiresAt:i.expiresAt}}))},e.prototype.updateVenmoDesktopPaymentContext=function(e,t){if(void 0===t&&(t={}),!this.venmoContextId)return this.Promise.resolve();var i={input:r({id:this.venmoContextId,status:e},t)};return this.apiRequest(d.UPDATE_VENMO_DESKTOP_PAYMENT_RESOURCE_QUERY,i).then((function(){}))},e.prototype.lookupVenmoDesktopPaymentContext=function(){return this.venmoContextId?this.apiRequest(d.VENMO_DESKTOP_PAYMENT_RESOURCE_STATUS_QUERY,{id:this.venmoContextId}).then((function(e){return e.node})):this.Promise.resolve()},e}();i.default=c},{"../shared/events":157,"./queries":151,"@braintree/iframer":38,"@braintree/uuid":42,framebus:168}],153:[function(e,t,i){"use strict";var r=e("../lib/analytics"),n=e("../lib/basic-component-verification"),o=e("../lib/create-deferred-client"),a=e("../lib/create-assets-url"),s=e("./shared/errors"),l=e("@braintree/wrap-promise"),d=e("../lib/braintree-error"),c=e("./venmo"),p=e("../lib/promise"),u=e("./shared/supports-venmo");t.exports={create:l((function(e){var t="Venmo";return n.verify({name:t,client:e.client,authorization:e.authorization}).then((function(){var i,n;return e.profileId&&"string"!=typeof e.profileId?p.reject(new d(s.VENMO_INVALID_PROFILE_ID)):e.deepLinkReturnUrl&&"string"!=typeof e.deepLinkReturnUrl?p.reject(new d(s.VENMO_INVALID_DEEP_LINK_RETURN_URL)):(i=o.create({authorization:e.authorization,client:e.client,debug:e.debug,assetsUrl:a.create(e.authorization),name:t}).then((function(t){var i=t.getConfiguration();return e.client=t,i.gatewayConfiguration.payWithVenmo?t:p.reject(new d(s.VENMO_NOT_ENABLED))})),e.createPromise=i,n=new c(e),r.sendEvent(i,"venmo.initialized"),i.then((function(){return n})))}))})),isBrowserSupported:function(e){return u.isBrowserSupported(e)},VERSION:"3.76.3"}},{"../lib/analytics":89,"../lib/basic-component-verification":92,"../lib/braintree-error":94,"../lib/create-assets-url":98,"../lib/create-deferred-client":100,"../lib/promise":126,"./shared/errors":156,"./shared/supports-venmo":158,"./venmo":159,"@braintree/wrap-promise":46}],154:[function(e,t,i){"use strict";var r=e("@braintree/browser-detection/is-android"),n=e("@braintree/browser-detection/is-chrome"),o=e("@braintree/browser-detection/is-ios"),a=e("@braintree/browser-detection/is-ios-safari"),s=e("@braintree/browser-detection/is-ios-webview");t.exports={isAndroid:r,isAndroidWebview:function(){return r()&&window.navigator.userAgent.toLowerCase().indexOf("wv")>-1},isChrome:n,isIos:o,isIosSafari:a,isIosWebview:s}},{"@braintree/browser-detection/is-android":22,"@braintree/browser-detection/is-chrome":24,"@braintree/browser-detection/is-ios":33,"@braintree/browser-detection/is-ios-safari":30,"@braintree/browser-detection/is-ios-webview":31}],155:[function(e,t,i){"use strict";t.exports={DOCUMENT_VISIBILITY_CHANGE_EVENT_DELAY:500,DEFAULT_PROCESS_RESULTS_DELAY:1e3,VENMO_OPEN_URL:"https://venmo.com/braintree/checkout"}},{}],156:[function(e,t,i){"use strict";var r=e("../../lib/braintree-error");t.exports={VENMO_NOT_ENABLED:{type:r.types.MERCHANT,code:"VENMO_NOT_ENABLED",message:"Venmo is not enabled for this merchant."},VENMO_TOKENIZATION_REQUEST_ACTIVE:{type:r.types.MERCHANT,code:"VENMO_TOKENIZATION_REQUEST_ACTIVE",message:"Another tokenization request is active."},VENMO_TOKENIZATION_REQUEST_NOT_ACTIVE:{type:r.types.MERCHANT,code:"VENMO_TOKENIZATION_REQUEST_NOT_ACTIVE",message:"No tokenization in progress."},VENMO_APP_FAILED:{type:r.types.UNKNOWN,code:"VENMO_APP_FAILED",message:"Venmo app encountered a problem."},VENMO_APP_CANCELED:{type:r.types.CUSTOMER,code:"VENMO_APP_CANCELED",message:"Venmo app authorization was canceled."},VENMO_CANCELED:{type:r.types.CUSTOMER,code:"VENMO_CANCELED",message:"User canceled Venmo authorization, or Venmo app is not available."},VENMO_DESKTOP_CANCELED:{type:r.types.CUSTOMER,code:"VENMO_DESKTOP_CANCELED",message:"User canceled Venmo authorization by closing the Venmo Desktop modal."},VENMO_TOKENIZATION_CANCELED_BY_MERCHANT:{type:r.types.MERCHANT,code:"VENMO_TOKENIZATION_CANCELED_BY_MERCHANT",message:"The Venmo tokenization was canceled by the merchant."},VENMO_DESKTOP_UNKNOWN_ERROR:{type:r.types.UNKNOWN,code:"VENMO_DESKTOP_UNKNOWN_ERROR",message:"Something went wrong with the Venmo Desktop flow."},VENMO_MOBILE_POLLING_SETUP_FAILED:{type:r.types.UNKNOWN,code:"VENMO_MOBILE_POLLING_SETUP_FAILED",message:"Something went wrong setting up Venmo for mobile polling."},VENMO_MOBILE_POLLING_TOKENIZATION_NETWORK_ERROR:{type:r.types.UNKNOWN,code:"VENMO_MOBILE_POLLING_TOKENIZATION_NETWORK_ERROR",message:"Something went wrong during mobile polling."},VENMO_MOBILE_POLLING_TOKENIZATION_EXPIRED:{type:r.types.CUSTOMER,code:"VENMO_MOBILE_POLLING_TOKENIZATION_EXPIRED",message:"The Venmo authorization request is expired."},VENMO_MOBILE_POLLING_TOKENIZATION_CANCELED:{type:r.types.CUSTOMER,code:"VENMO_MOBILE_POLLING_TOKENIZATION_CANCELED",message:"The Venmo authorization was canceled"},VENMO_MOBILE_POLLING_TOKENIZATION_TIMEOUT:{type:r.types.CUSTOMER,code:"VENMO_MOBILE_POLLING_TOKENIZATION_TIMEOUT",message:"Customer took too long to authorize Venmo payment."},VENMO_MOBILE_POLLING_TOKENIZATION_FAILED:{type:r.types.UNKNOWN,code:"VENMO_MOBILE_POLLING_TOKENIZATION_FAILED",message:"The Venmo authorization failed."},VENMO_INVALID_PROFILE_ID:{type:r.types.MERCHANT,code:"VENMO_INVALID_PROFILE_ID",message:"Venmo profile ID is invalid."},VENMO_INVALID_DEEP_LINK_RETURN_URL:{type:r.types.MERCHANT,code:"VENMO_INVALID_DEEP_LINK_RETURN_URL",message:"Venmo deep link return URL is invalid."}}},{"../../lib/braintree-error":94}],157:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.VENMO_DESKTOP_UNKNOWN_ERROR=i.VENMO_DESKTOP_REQUEST_NEW_QR_CODE=i.VENMO_DESKTOP_CLOSED_FROM_PARENT=i.VENMO_DESKTOP_IFRAME_READY=i.VENMO_DESKTOP_DISPLAY_QR_CODE=i.VENMO_DESKTOP_DISPLAY_ERROR=i.VENMO_DESKTOP_CUSTOMER_CANCELED=i.VENMO_DESKTOP_AUTHORIZATION_COMPLETED=i.VENMO_DESKTOP_AUTHORIZING=i.VENMO_DESKTOP_AUTHORIZE=i.VENMO_DESKTOP_AUTHORIZATION_TIMED_OUT=void 0,i.VENMO_DESKTOP_AUTHORIZATION_TIMED_OUT="VENMO_DESKTOP_AUTHORIZATION_TIMED_OUT",i.VENMO_DESKTOP_AUTHORIZE="VENMO_DESKTOP_AUTHORIZE",i.VENMO_DESKTOP_AUTHORIZING="VENMO_DESKTOP_AUTHORIZING",i.VENMO_DESKTOP_AUTHORIZATION_COMPLETED="VENMO_DESKTOP_AUTHORIZATION_COMPLETED",i.VENMO_DESKTOP_CUSTOMER_CANCELED="VENMO_DESKTOP_CUSTOMER_CANCELED",i.VENMO_DESKTOP_DISPLAY_ERROR="VENMO_DESKTOP_DISPLAY_ERROR",i.VENMO_DESKTOP_DISPLAY_QR_CODE="VENMO_DESKTOP_DISPLAY_QR_CODE",i.VENMO_DESKTOP_IFRAME_READY="VENMO_DESKTOP_IFRAME_READY",i.VENMO_DESKTOP_CLOSED_FROM_PARENT="VENMO_DESKTOP_CLOSED_FROM_PARENT",i.VENMO_DESKTOP_REQUEST_NEW_QR_CODE="VENMO_DESKTOP_REQUEST_NEW_QR_CODE",i.VENMO_DESKTOP_UNKNOWN_ERROR="VENMO_DESKTOP_UNKNOWN_ERROR"},{}],158:[function(e,t,i){"use strict";var r=e("./browser-detection");t.exports={isBrowserSupported:function(e){var t,i,n=r.isAndroid(),o=n||r.isIos(),a=n&&r.isChrome(),s=r.isIosSafari()||a;return i=!0===(e=e||{}).allowDesktop,t=!e.hasOwnProperty("allowNewBrowserTab")||e.allowNewBrowserTab,!(!(!e.hasOwnProperty("allowWebviews")||e.allowWebviews)&&(r.isAndroidWebview()||r.isIosWebview()))&&(t?!!i||o:!!s||i&&!o)}}},{"./browser-detection":154}],159:[function(e,t,i){"use strict";var r=e("../lib/analytics"),n=e("./shared/supports-venmo"),o=e("./shared/browser-detection"),a=e("./shared/constants"),s=e("./shared/errors"),l=e("../lib/querystring"),d=e("../lib/is-verified-domain"),c=e("../lib/methods"),p=e("../lib/convert-methods-to-error"),u=e("@braintree/wrap-promise"),h=e("../lib/braintree-error"),m=e("../lib/in-iframe"),y=e("../lib/promise"),f=e("@braintree/extended-promise"),E=e("./external/"),v=e("./external/queries");function _(e){var t=this;this._createPromise=e.createPromise,this._allowNewBrowserTab=!1!==e.allowNewBrowserTab,this._allowWebviews=!1!==e.allowWebviews,this._allowDesktop=!0===e.allowDesktop,this._requireManualReturn=!0===e.requireManualReturn,this._useRedirectForIOS=!0===e.useRedirectForIOS,this._profileId=e.profileId,this._deepLinkReturnUrl=e.deepLinkReturnUrl,this._ignoreHistoryChanges=e.ignoreHistoryChanges,this._useDesktopFlow=this._allowDesktop&&this._isDesktop(),this._useMobilePollingStrategy=m()||this._requireManualReturn,r.sendEvent(this._createPromise,"venmo.desktop-flow.configured."+String(Boolean(this._allowDesktop))),this._useDesktopFlow?this._createPromise=this._createPromise.then((function(e){var i=e.getConfiguration().gatewayConfiguration;return E({url:i.assetsUrl+"/web/3.76.3/html/venmo-desktop-frame.html",environment:"production"===i.environment?"PRODUCTION":"SANDBOX",profileId:t._profileId||i.payWithVenmo.merchantId,Promise:y,apiRequest:function(t,i){return e.request({api:"graphQLApi",data:{query:t,variables:i}}).then((function(e){return e.data}))},sendEvent:function(e){r.sendEvent(t._createPromise,e)},verifyDomain:d}).then((function(i){return t._venmoDesktopInstance=i,r.sendEvent(t._createPromise,"venmo.desktop-flow.presented"),e})).catch((function(){return r.sendEvent(t._createPromise,"venmo.desktop-flow.setup-failed"),t._useDesktopFlow=!1,e}))})):this._useMobilePollingStrategy&&(this._mobilePollingInterval=250,this._mobilePollingExpiresThreshold=3e5,this._createPromise=this._createPromise.then((function(e){var i=e.getConfiguration().gatewayConfiguration;return t._mobilePollingContextEnvironment=i.environment.toUpperCase(),e.request({api:"graphQLApi",data:{query:v.CREATE_VENMO_DESKTOP_PAYMENT_RESOURCE_QUERY,variables:{input:{environment:t._mobilePollingContextEnvironment,intent:"PAY_FROM_APP"}}}}).then((function(i){var n=i.data.createVenmoQRCodePaymentContext.venmoQRCodePaymentContext;return t._mobilePollingContextStatus=n.status,t._mobilePollingContextId=n.id,r.sendEvent(t._createPromise,"venmo.mobile-polling.presented"),e})).catch((function(e){return r.sendEvent(t._createPromise,"venmo.mobile-polling.setup-failed"),y.reject(new h({type:s.VENMO_MOBILE_POLLING_SETUP_FAILED.type,code:s.VENMO_MOBILE_POLLING_SETUP_FAILED.code,message:s.VENMO_MOBILE_POLLING_SETUP_FAILED.message,details:{originalError:e}}))}))})))}function g(e){return(e||window.location.hash.substring(1)).split("&").reduce((function(e,t){var i=t.split("="),r=decodeURIComponent(i[0]).replace(/\W/g,""),n=decodeURIComponent(i[1]);return e[r]=n,e}),{})}function b(){var e;return void 0!==window.document.hidden?e="visibilitychange":void 0!==window.document.msHidden?e="msvisibilitychange":void 0!==window.document.webkitHidden&&(e="webkitvisibilitychange"),e}_.prototype.getUrl=function(){return this._createPromise.then(function(e){var t=e.getConfiguration(),i={},r=this._deepLinkReturnUrl||window.location.href.replace(window.location.hash,""),n=t.gatewayConfiguration.payWithVenmo,o=t.analyticsMetadata,s=n.accessToken,d={_meta:{version:o.sdkVersion,integration:o.integration,platform:o.platform,sessionId:o.sessionId}};return r=r.replace(/#*$/,""),this._mobilePollingContextId&&(s+="|pcid:"+this._mobilePollingContextId),this._shouldIncludeReturnUrls()?(i["x-success"]=r+"#venmoSuccess=1",i["x-cancel"]=r+"#venmoCancel=1",i["x-error"]=r+"#venmoError=1"):(i["x-success"]="NOOP",i["x-cancel"]="NOOP",i["x-error"]="NOOP"),i.ua=window.navigator.userAgent,i.braintree_merchant_id=this._profileId||n.merchantId,i.braintree_access_token=s,i.braintree_environment=n.environment,i.braintree_sdk_data=btoa(JSON.stringify(d)),a.VENMO_OPEN_URL+"?"+l.stringify(i)}.bind(this))},_.prototype.isBrowserSupported=function(){return n.isBrowserSupported({allowNewBrowserTab:this._allowNewBrowserTab,allowWebviews:this._allowWebviews,allowDesktop:this._allowDesktop})},_.prototype.hasTokenizationResult=function(){return this._hasTokenizationResult()},_.prototype._hasTokenizationResult=function(e){var t=g(e);return void 0!==(t.venmoSuccess||t.venmoError||t.venmoCancel)},_.prototype._shouldIncludeReturnUrls=function(){return!!this._deepLinkReturnUrl||!this._useMobilePollingStrategy},_.prototype._isDesktop=function(){return!(o.isIos()||o.isAndroid())},_.prototype.tokenize=function(e){var t=this;return e=e||{},!0===this._tokenizationInProgress?y.reject(new h(s.VENMO_TOKENIZATION_REQUEST_ACTIVE)):(this._tokenizationInProgress=!0,(this._useDesktopFlow?this._tokenizeForDesktop(e):this._useMobilePollingStrategy?this._tokenizeForMobileWithPolling():this._tokenizeForMobileWithHashChangeListeners(e)).then((function(e){return t._tokenizationInProgress=!1,function(e){return{nonce:e.paymentMethodNonce,type:"VenmoAccount",details:{username:e.username}}}(e)})).catch((function(e){return t._tokenizationInProgress=!1,y.reject(e)})))},_.prototype.cancelTokenization=function(){return this._tokenizationInProgress?(this._removeVisibilityEventListener(),this._tokenizePromise&&this._tokenizePromise.reject(new h(s.VENMO_TOKENIZATION_CANCELED_BY_MERCHANT)),y.all([this._cancelMobilePollingContext(),this._cancelVenmoDesktopContext()])):y.reject(new h(s.VENMO_TOKENIZATION_REQUEST_NOT_ACTIVE))},_.prototype._pollForStatusChange=function(){var e=this;return Date.now()>e._mobilePollingContextExpiresIn?y.reject(new h(s.VENMO_MOBILE_POLLING_TOKENIZATION_TIMEOUT)):this._createPromise.then((function(t){return t.request({api:"graphQLApi",data:{query:v.VENMO_DESKTOP_PAYMENT_RESOURCE_STATUS_QUERY,variables:{id:e._mobilePollingContextId}}})})).catch((function(e){return y.reject(new h({type:s.VENMO_MOBILE_POLLING_TOKENIZATION_NETWORK_ERROR.type,code:s.VENMO_MOBILE_POLLING_TOKENIZATION_NETWORK_ERROR.code,message:s.VENMO_MOBILE_POLLING_TOKENIZATION_NETWORK_ERROR.message,details:{originalError:e}}))})).then((function(t){var i=t.data.node,n=i.status;if(n!==e._mobilePollingContextStatus)switch(e._mobilePollingContextStatus=n,r.sendEvent(e._createPromise,"venmo.tokenize.mobile-polling.status-change."+n.toLowerCase()),n){case"EXPIRED":case"FAILED":case"CANCELED":return y.reject(new h(s["VENMO_MOBILE_POLLING_TOKENIZATION_"+n]));case"APPROVED":return y.resolve(i)}return new y((function(t,i){setTimeout((function(){e._pollForStatusChange().then(t).catch(i)}),e._mobilePollingInterval)}))}))},_.prototype._tokenizeForMobileWithPolling=function(){var e=this;return r.sendEvent(this._createPromise,"venmo.tokenize.mobile-polling.start"),this._mobilePollingContextExpiresIn=Date.now()+this._mobilePollingExpiresThreshold,this._tokenizePromise=new f,this._pollForStatusChange().then((function(t){r.sendEvent(e._createPromise,"venmo.tokenize.mobile-polling.success"),e._tokenizePromise.resolve({paymentMethodNonce:t.paymentMethodId,username:"@"+(t.userName||"").replace("@","")})})).catch((function(t){r.sendEvent(e._createPromise,"venmo.tokenize.mobile-polling.failure"),e._tokenizePromise.reject(t)})),this.getUrl().then((function(t){return r.sendEvent(e._createPromise,"venmo.appswitch.start.browser"),o.isIosWebview()||e._shouldUseRedirectStrategy()?window.location.href=t:window.open(t),e._tokenizePromise}))},_.prototype._shouldUseRedirectStrategy=function(){return!!o.isIos()&&this._useRedirectForIOS},_.prototype._tokenizeForMobileWithHashChangeListeners=function(e){var t,i,n=this;if(this.hasTokenizationResult())return this._processResults();function o(e){var t;n._processResults(e).catch((function(e){t=e})).then((function(e){n._ignoreHistoryChanges||window.location.hash===n._previousHash||(window.location.hash=n._previousHash),n._removeVisibilityEventListener(),t?n._tokenizePromise.reject(t):n._tokenizePromise.resolve(e),delete n._tokenizePromise}))}return r.sendEvent(this._createPromise,"venmo.tokenize.mobile.start"),this._tokenizePromise=new f,this._previousHash=window.location.hash,this._onHashChangeListener=function(e){var r=e.newURL.split("#")[1];n._hasTokenizationResult(r)&&(t=!0,clearTimeout(i),o(r))},window.addEventListener("hashchange",this._onHashChangeListener,!1),this._visibilityChangeListener=function(){var r=e.processResultsDelay||a.DEFAULT_PROCESS_RESULTS_DELAY;window.document.hidden||t||(i=setTimeout(o,r))},this.getUrl().then((function(e){return n._deepLinkReturnUrl?window.navigator.platform&&/iPhone|iPad|iPod/.test(window.navigator.platform)?(r.sendEvent(n._createPromise,"venmo.appswitch.start.ios-webview"),window.location.href=e):window.popupBridge&&"function"==typeof window.popupBridge.open?(r.sendEvent(n._createPromise,"venmo.appswitch.start.popup-bridge"),window.popupBridge.open(e)):(r.sendEvent(n._createPromise,"venmo.appswitch.start.webview"),window.open(e)):(r.sendEvent(n._createPromise,"venmo.appswitch.start.browser"),n._shouldUseRedirectStrategy()?window.location.href=e:window.open(e)),setTimeout((function(){window.document.addEventListener(b(),n._visibilityChangeListener)}),a.DOCUMENT_VISIBILITY_CHANGE_EVENT_DELAY),n._tokenizePromise}))},_.prototype._tokenizeForDesktop=function(){var e=this;return r.sendEvent(this._createPromise,"venmo.tokenize.desktop.start"),this._tokenizePromise=new f,this._createPromise.then((function(){return e._venmoDesktopInstance.launchDesktopFlow()})).then((function(t){e._venmoDesktopInstance.hideDesktopFlow(),r.sendEvent(e._createPromise,"venmo.tokenize.desktop.success"),e._tokenizePromise.resolve(t)})).catch((function(t){r.sendEvent(e._createPromise,"venmo.tokenize.desktop.failure"),e._venmoDesktopInstance&&e._venmoDesktopInstance.hideDesktopFlow(),t&&"CUSTOMER_CANCELED"===t.reason?e._tokenizePromise.reject(new h(s.VENMO_DESKTOP_CANCELED)):e._tokenizePromise.reject(new h({type:s.VENMO_DESKTOP_UNKNOWN_ERROR.type,code:s.VENMO_DESKTOP_UNKNOWN_ERROR.code,message:s.VENMO_DESKTOP_UNKNOWN_ERROR.message,details:{originalError:t}}))})),this._tokenizePromise},_.prototype._updateVenmoDesktopPaymentContext=function(e,t){return this._venmoDesktopInstance.updateVenmoDesktopPaymentContext(e,t)},_.prototype._cancelMobilePollingContext=function(){var e=this;return this._createPromise.then((function(t){return e._mobilePollingContextId?t.request({api:"graphQLApi",data:{query:v.UPDATE_VENMO_DESKTOP_PAYMENT_RESOURCE_QUERY,variables:{input:{id:e._mobilePollingContextId,status:"CANCELED"}}}}):y.resolve()}))},_.prototype._cancelVenmoDesktopContext=function(){var e=this;return this._createPromise.then((function(){return e._venmoDesktopInstance&&e._venmoDesktopInstance.updateVenmoDesktopPaymentContext("CANCELED"),y.resolve()}))},_.prototype.teardown=function(){var e=this;return this._removeVisibilityEventListener(),this._createPromise.then(function(){e._venmoDesktopInstance&&e._venmoDesktopInstance.teardown(),e._cancelMobilePollingContext(),p(this,c(_.prototype))}.bind(this))},_.prototype._removeVisibilityEventListener=function(){window.removeEventListener("hashchange",this._onHashChangeListener),window.document.removeEventListener(b(),this._visibilityChangeListener),delete this._visibilityChangeListener,delete this._onHashChangeListener},_.prototype._processResults=function(e){var t=this,i=g(e);return new y((function(e,n){i.venmoSuccess?(r.sendEvent(t._createPromise,"venmo.appswitch.handle.success"),e(i)):i.venmoError?(r.sendEvent(t._createPromise,"venmo.appswitch.handle.error"),n(new h({type:s.VENMO_APP_FAILED.type,code:s.VENMO_APP_FAILED.code,message:s.VENMO_APP_FAILED.message,details:{originalError:{message:decodeURIComponent(i.errorMessage),code:i.errorCode}}}))):i.venmoCancel?(r.sendEvent(t._createPromise,"venmo.appswitch.handle.cancel"),n(new h(s.VENMO_APP_CANCELED))):(r.sendEvent(t._createPromise,"venmo.appswitch.cancel-or-unavailable"),n(new h(s.VENMO_CANCELED))),t._clearFragmentParameters()}))},_.prototype._clearFragmentParameters=function(){this._ignoreHistoryChanges||"function"==typeof window.history.replaceState&&window.location.hash&&history.pushState({},"",window.location.href.slice(0,window.location.href.indexOf("#")))},t.exports=u.wrapPrototype(_)},{"../lib/analytics":89,"../lib/braintree-error":94,"../lib/convert-methods-to-error":96,"../lib/in-iframe":119,"../lib/is-verified-domain":122,"../lib/methods":124,"../lib/promise":126,"../lib/querystring":127,"./external/":150,"./external/queries":151,"./shared/browser-detection":154,"./shared/constants":155,"./shared/errors":156,"./shared/supports-venmo":158,"@braintree/extended-promise":37,"@braintree/wrap-promise":46}],160:[function(e,t,i){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,i=1,r=arguments.length;i=a&&(l.matchStrength=a),i.push(l);break}}}},{"./clone":163,"./matches":166}],162:[function(e,t,i){"use strict";t.exports={visa:{niceType:"Visa",type:"visa",patterns:[4],gaps:[4,8,12],lengths:[16,18,19],code:{name:"CVV",size:3}},mastercard:{niceType:"Mastercard",type:"mastercard",patterns:[[51,55],[2221,2229],[223,229],[23,26],[270,271],2720],gaps:[4,8,12],lengths:[16],code:{name:"CVC",size:3}},"american-express":{niceType:"American Express",type:"american-express",patterns:[34,37],gaps:[4,10],lengths:[15],code:{name:"CID",size:4}},"diners-club":{niceType:"Diners Club",type:"diners-club",patterns:[[300,305],36,38,39],gaps:[4,10],lengths:[14,16,19],code:{name:"CVV",size:3}},discover:{niceType:"Discover",type:"discover",patterns:[6011,[644,649],65],gaps:[4,8,12],lengths:[16,19],code:{name:"CID",size:3}},jcb:{niceType:"JCB",type:"jcb",patterns:[2131,1800,[3528,3589]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:"CVV",size:3}},unionpay:{niceType:"UnionPay",type:"unionpay",patterns:[620,[624,626],[62100,62182],[62184,62187],[62185,62197],[62200,62205],[622010,622999],622018,[622019,622999],[62207,62209],[622126,622925],[623,626],6270,6272,6276,[627700,627779],[627781,627799],[6282,6289],6291,6292,810,[8110,8131],[8132,8151],[8152,8163],[8164,8171]],gaps:[4,8,12],lengths:[14,15,16,17,18,19],code:{name:"CVN",size:3}},maestro:{niceType:"Maestro",type:"maestro",patterns:[493698,[5e5,504174],[504176,506698],[506779,508999],[56,59],63,67,6],gaps:[4,8,12],lengths:[12,13,14,15,16,17,18,19],code:{name:"CVC",size:3}},elo:{niceType:"Elo",type:"elo",patterns:[401178,401179,438935,457631,457632,431274,451416,457393,504175,[506699,506778],[509e3,509999],627780,636297,636368,[650031,650033],[650035,650051],[650405,650439],[650485,650538],[650541,650598],[650700,650718],[650720,650727],[650901,650978],[651652,651679],[655e3,655019],[655021,655058]],gaps:[4,8,12],lengths:[16],code:{name:"CVE",size:3}},mir:{niceType:"Mir",type:"mir",patterns:[[2200,2204]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:"CVP2",size:3}},hiper:{niceType:"Hiper",type:"hiper",patterns:[637095,63737423,63743358,637568,637599,637609,637612],gaps:[4,8,12],lengths:[16],code:{name:"CVC",size:3}},hipercard:{niceType:"Hipercard",type:"hipercard",patterns:[606282],gaps:[4,8,12],lengths:[16],code:{name:"CVC",size:3}}}},{}],163:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.clone=void 0,i.clone=function(e){return e?JSON.parse(JSON.stringify(e)):null}},{}],164:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.findBestMatch=void 0,i.findBestMatch=function(e){return function(e){var t=e.filter((function(e){return e.matchStrength})).length;return t>0&&t===e.length}(e)?e.reduce((function(e,t){return e?Number(e.matchStrength)=t&&o<=i}(e,t[0],t[1]):function(e,t){return(t=String(t)).substring(0,e.length)===e.substring(0,t.length)}(e,t)}},{}],167:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.Framebus=void 0;var r=e("./lib/is-not-string"),n=e("./lib/subscription-args-invalid"),o=e("./lib/broadcast"),a=e("./lib/package-payload"),s=e("./lib/constants"),l="undefined"!=typeof window&&window.Promise,d=function(){function e(e){void 0===e&&(e={}),this.origin=e.origin||"*",this.channel=e.channel||"",this.verifyDomain=e.verifyDomain,this.isDestroyed=!1,this.listeners=[]}return e.setPromise=function(t){e.Promise=t},e.target=function(t){return new e(t)},e.prototype.include=function(e){return null!=e&&(null!=e.Window&&(e.constructor===e.Window&&(s.childWindows.push(e),!0)))},e.prototype.target=function(t){return e.target(t)},e.prototype.emit=function(e,t,i){if(this.isDestroyed)return!1;var n=this.origin;if(e=this.namespaceEvent(e),r.isntString(e))return!1;if(r.isntString(n))return!1;"function"==typeof t&&(i=t,t=void 0);var s=a.packagePayload(e,n,t,i);return!!s&&(o.broadcast(window.top||window.self,s,n),!0)},e.prototype.emitAsPromise=function(t,i){var r=this;return new e.Promise((function(e,n){r.emit(t,i,(function(t){e(t)}))||n(new Error('Listener not added for "'+t+'"'))}))},e.prototype.on=function(e,t){if(this.isDestroyed)return!1;var i=this,r=this.origin,o=t;return e=this.namespaceEvent(e),!n.subscriptionArgsInvalid(e,o,r)&&(this.verifyDomain&&(o=function(){for(var e=[],r=0;r=0;o--){var a=n.childWindows[o];a.closed?n.childWindows.splice(o,1):i!==a&&r.broadcast(a.top,e,t)}}},{"./broadcast":171,"./constants":172}],171:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.broadcast=void 0;var r=e("./has-opener");i.broadcast=function e(t,i,n){var o,a=0;try{for(t.postMessage(i,n),r.hasOpener(t)&&t.opener.top!==window.top&&e(t.opener.top,i,n);o=t.frames[a];)e(o,i,n),a++}catch(s){}}},{"./has-opener":174}],172:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.subscribers=i.childWindows=i.prefix=void 0,i.prefix="/*framebus*/",i.childWindows=[],i.subscribers={}},{}],173:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.dispatch=void 0;var r=e("./constants");i.dispatch=function(e,t,i,n,o){if(r.subscribers[e]&&r.subscribers[e][t]){var a=[];i&&a.push(i),n&&a.push(n);for(var s=0;s1)for(var i=1;i-1}(e)}},{"@braintree/browser-detection/is-android":22,"@braintree/browser-detection/is-chrome":24,"@braintree/browser-detection/is-chrome-os":23,"@braintree/browser-detection/is-ie9":29,"@braintree/browser-detection/is-ios":33}],184:[function(e,t,i){"use strict";var r=e("./lib/device");t.exports=function(){return!r.isSamsungBrowser()}},{"./lib/device":183}],185:[function(e,t,i){t.exports=e("./dist/supports-input-formatting")},{"./dist/supports-input-formatting":184}],186:[function(e,t,i){(function(t,r){(function(){var n=e("process/browser.js").nextTick,o=Function.prototype.apply,a=Array.prototype.slice,s={},l=0;function d(e,t){this._id=e,this._clearFn=t}i.setTimeout=function(){return new d(o.call(setTimeout,window,arguments),clearTimeout)},i.setInterval=function(){return new d(o.call(setInterval,window,arguments),clearInterval)},i.clearTimeout=i.clearInterval=function(e){e.close()},d.prototype.unref=d.prototype.ref=function(){},d.prototype.close=function(){this._clearFn.call(window,this._id)},i.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},i.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},i._unrefActive=i.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},i.setImmediate="function"==typeof t?t:function(e){var t=l++,r=!(arguments.length<2)&&a.call(arguments,1);return s[t]=!0,n((function(){s[t]&&(r?e.apply(null,r):e.call(null),i.clearImmediate(t))})),t},i.clearImmediate="function"==typeof r?r:function(e){delete s[e]}}).call(this)}).call(this,e("timers").setImmediate,e("timers").clearImmediate)},{"process/browser.js":181,timers:186}],187:[function(e,t,i){"use strict";t.exports={paymentOptionIDs:{card:"card",paypal:"paypal",paypalCredit:"paypalCredit",applePay:"applePay",venmo:"venmo",googlePay:"googlePay"},paymentMethodTypes:{card:"CreditCard",paypal:"PayPalAccount",paypalCredit:"PayPalAccount",applePay:"ApplePayCard",venmo:"VenmoAccount",googlePay:"AndroidPayCard"},analyticsKinds:{CreditCard:"card",PayPalAccount:"paypal",ApplePayCard:"applepay",VenmoAccount:"venmo",AndroidPayCard:"googlepay"},paymentMethodCardTypes:{Visa:"visa",MasterCard:"master-card","American Express":"american-express","Diners Club":"diners-club",Discover:"discover",JCB:"jcb",UnionPay:"unionpay",Maestro:"maestro"},configurationCardTypes:{visa:"Visa","master-card":"MasterCard","american-express":"American Express","diners-club":"Discover",discover:"Discover",jcb:"JCB",unionpay:"UnionPay",maestro:"Maestro"},dependencySetupStates:{DONE:"done",FAILED:"failed",INITIALIZING:"initializing",NOT_ENABLED:"not-enabled"},errors:{NO_PAYMENT_METHOD_ERROR:"No payment method is available.",DEVELOPER_MISCONFIGURATION_MESSAGE:"Developer Error: Something went wrong. Check the console for details."},ANALYTICS_REQUEST_TIMEOUT_MS:2e3,ANALYTICS_PREFIX:"web.dropin.",CHANGE_ACTIVE_PAYMENT_METHOD_TIMEOUT:200,CHECKOUT_JS_SOURCE:"https://www.paypalobjects.com/api/checkout.min.js",GOOGLE_PAYMENT_SOURCE:"https://pay.google.com/gp/p/js/pay.js",INTEGRATION:"dropin2",PAYPAL_CHECKOUT_SCRIPT_ID:"braintree-dropin-paypal-checkout-script",GOOGLE_PAYMENT_SCRIPT_ID:"braintree-dropin-google-payment-script",DATA_COLLECTOR_SCRIPT_ID:"braintree-dropin-data-collector-script",STYLESHEET_ID:"braintree-dropin-stylesheet"}},{}],188:[function(e,t,i){"use strict";var r=e("./lib/analytics"),n=e("./lib/dropin-error"),o=e("@braintree/event-emitter"),a=e("./constants"),s=a.paymentMethodTypes,l=a.paymentOptionIDs,d=a.dependencySetupStates,c=e("./lib/is-guest-checkout"),p=e("./lib/promise"),u=e("./views/payment-sheet-views"),h=e("braintree-web/vault-manager"),m=[s.applePay,s.googlePay,s.venmo],y=[l.card,l.paypal,l.paypalCredit,l.venmo,l.applePay,l.googlePay],f=y.concat(["threeDSecure","dataCollector"]);function E(e){for(this.rootNode=e.container,this.componentID=e.componentID,this.merchantConfiguration=e.merchantConfiguration,this.isGuestCheckout=c(e.client),this.dependencyStates=f.reduce((function(t,i){return e.merchantConfiguration[i]&&(t[i]=d.INITIALIZING),t}),{}),!1!==e.merchantConfiguration.card&&(this.dependencyStates.card=d.INITIALIZING),this.failedDependencies={},this._options=e,this._setupComplete=!1;this.rootNode.parentNode;)this.rootNode=this.rootNode.parentNode;this.isInShadowDom="[object ShadowRoot]"===this.rootNode.toString(),o.call(this)}o.createChild(E),E.prototype.initialize=function(){var e,t=this,i=setInterval((function(){for(e in t.dependencyStates)if(t.dependencyStates[e]===d.INITIALIZING)return;clearInterval(i),t._emit("asyncDependenciesReady")}),200);return h.create({client:t._options.client}).then((function(e){return t._vaultManager=e,t._getSupportedPaymentOptions(t._options)})).then((function(e){return t.supportedPaymentOptions=e,t.getVaultedPaymentMethods()})).then((function(e){t._paymentMethods=e,t._paymentMethodIsRequestable=t._paymentMethods.length>0}))},E.prototype.confirmDropinReady=function(){this._setupComplete=!0},E.prototype.isPaymentMethodRequestable=function(){return Boolean(this._paymentMethodIsRequestable)},E.prototype.addPaymentMethod=function(e){this._paymentMethods.push(e),this._emit("addPaymentMethod",e),this.changeActivePaymentMethod(e)},E.prototype.removePaymentMethod=function(e){var t=this._paymentMethods.indexOf(e);-1!==t&&(this._paymentMethods.splice(t,1),this._emit("removePaymentMethod",e))},E.prototype.refreshPaymentMethods=function(){var e=this;return e.getVaultedPaymentMethods().then((function(t){e._paymentMethods=t,e._emit("refreshPaymentMethods")}))},E.prototype.changeActivePaymentMethod=function(e){this._activePaymentMethod=e,this._emit("changeActivePaymentMethod",e)},E.prototype.changeActiveView=function(e){var t=this._activePaymentViewId;this._activePaymentViewId=e,this._emit("changeActiveView",{previousViewId:t,newViewId:e})},E.prototype.removeActivePaymentMethod=function(){this._activePaymentMethod=null,this._emit("removeActivePaymentMethod"),this.setPaymentMethodRequestable({isRequestable:!1})},E.prototype.selectPaymentOption=function(e){this._emit("paymentOptionSelected",{paymentOption:e})},E.prototype.enableEditMode=function(){r.sendEvent(this._options.client,"manager.appeared"),this._isInEditMode=!0,this._emit("enableEditMode")},E.prototype.disableEditMode=function(){this._isInEditMode=!1,this._emit("disableEditMode")},E.prototype.isInEditMode=function(){return Boolean(this._isInEditMode)},E.prototype.confirmPaymentMethodDeletion=function(e){this._paymentMethodWaitingToBeDeleted=e,this._emit("confirmPaymentMethodDeletion",e)},E.prototype._shouldEmitRequestableEvent=function(e){var t=this.isPaymentMethodRequestable()===e.isRequestable,i=(e.selectedPaymentMethod&&e.selectedPaymentMethod.nonce)===this._paymentMethodRequestableNonce;return!!this._setupComplete&&!(t&&(!e.isRequestable||i))},E.prototype.setPaymentMethodRequestable=function(e){var t=this._shouldEmitRequestableEvent(e),i={paymentMethodIsSelected:Boolean(e.selectedPaymentMethod),type:e.type};this._paymentMethodIsRequestable=e.isRequestable,e.isRequestable?this._paymentMethodRequestableNonce=e.selectedPaymentMethod&&e.selectedPaymentMethod.nonce:delete this._paymentMethodRequestableNonce,t&&(e.isRequestable?this._emit("paymentMethodRequestable",i):this._emit("noPaymentMethodRequestable"))},E.prototype.getPaymentMethods=function(){return this._paymentMethods.slice()},E.prototype.getActivePaymentMethod=function(){return this._activePaymentMethod},E.prototype.getActivePaymentViewId=function(){return this._activePaymentViewId},E.prototype.reportAppSwitchPayload=function(e){this.appSwitchPayload=e},E.prototype.reportAppSwitchError=function(e,t){this.appSwitchError={id:e,error:t}},E.prototype.hasAtLeastOneAvailablePaymentOption=function(){var e;for(e=0;e-1}))},E.prototype._getSupportedPaymentOptions=function(e){var t,i=this,r=e.merchantConfiguration.paymentOptionPriority||y;if(!(r instanceof Array))throw new n("paymentOptionPriority must be an array.");return t=(r=r.filter((function(e,t){return r.indexOf(e)===t}))).map((function(t){return function(e,t){return function(e,t){var i=u[l[e]];if(!i)return p.reject(new n("paymentOptionPriority: Invalid payment option specified."));return i.isEnabled({client:t.client,merchantConfiguration:t.merchantConfiguration}).catch((function(e){return console.error(i.ID+" view errored when checking if it was supported."),console.error(e),p.resolve(!1)}))}(e,t).then((function(t){return{success:t,id:l[e]}}))}(t,e).then((function(e){return e.success||(i.dependencyStates[e.id]=d.NOT_ENABLED),e}))})),p.all(t).then((function(e){return 0===(e=e.filter((function(e){return e.success}))).length?p.reject(new n("No valid payment options available.")):e.map((function(e){return e.id}))}))},t.exports=E},{"./constants":187,"./lib/analytics":192,"./lib/dropin-error":197,"./lib/is-guest-checkout":199,"./lib/promise":204,"./views/payment-sheet-views":255,"@braintree/event-emitter":36,"braintree-web/vault-manager":148}],189:[function(e,t,i){"use strict";var r=e("./lib/assign").assign,n=e("./lib/analytics"),o=e("@braintree/class-list"),a=e("./constants"),s=e("./lib/dropin-error"),l=e("./dropin-model"),d=e("@braintree/event-emitter"),c=e("@braintree/asset-loader"),p=e("./views/main-view"),u=e("./views/payment-methods-view").ID,h=e("./views/payment-options-view").ID,m=a.paymentOptionIDs,y=e("./translations").translations,f=e("./lib/is-utf-8"),E=e("@braintree/uuid"),v=e("./lib/promise"),_=e("./lib/sanitize-html"),g=e("./lib/data-collector"),b=e("./lib/three-d-secure"),P=e("@braintree/wrap-promise").wrapPrototype,C=["changeActiveView","paymentMethodRequestable","noPaymentMethodRequestable","paymentOptionSelected","card:binAvailable","card:blur","card:cardTypeChange","card:empty","card:focus","card:inputSubmitRequest","card:notEmpty","card:validityChange","3ds:customer-canceled","3ds:authentication-modal-render","3ds:authentication-modal-close"],T=[m.paypal,m.paypalCredit,m.applePay,m.googlePay,"threeDSecure"],A=[m.paypal,m.paypalCredit,m.applePay,m.googlePay],I={};function D(e){this._client=e.client,this._componentID=E(),this._dropinWrapper=document.createElement("div"),this._dropinWrapper.id="braintree--dropin__"+this._componentID,this._dropinWrapper.setAttribute("data-braintree-id","wrapper"),this._dropinWrapper.style.display="none",this._dropinWrapper.className="braintree-loading",this._merchantConfiguration=e.merchantConfiguration,d.call(this)}I[a.paymentMethodTypes.googlePay]=!0,I[a.paymentMethodTypes.applePay]=!0,d.createChild(D),D.prototype._initialize=function(e){var t,i,o=this,a=o._merchantConfiguration.container||o._merchantConfiguration.selector;return a?o._merchantConfiguration.container&&o._merchantConfiguration.selector?(n.sendEvent(o._client,"configuration-error"),void e(new s("Must only have one options.selector or options.container."))):("string"==typeof a&&(a=document.querySelector(a)),a&&1===a.nodeType?a.innerHTML.trim()?(n.sendEvent(o._client,"configuration-error"),void e(new s("options.selector or options.container must reference an empty DOM node."))):(o._strings=r({},y.en),o._merchantConfiguration.locale&&(t=y[o._merchantConfiguration.locale]||y[o._merchantConfiguration.locale.split("_")[0]],o._strings=r(o._strings,t)),f()||(o._strings.endingIn=o._strings.endingIn.replace(/•/g,"*")),o._merchantConfiguration.translations&&Object.keys(o._merchantConfiguration.translations).forEach((function(e){o._strings[e]=_(o._merchantConfiguration.translations[e])})),i=Object.keys(o._strings).reduce((function(e,t){var i=o._strings[t];return e.replace(RegExp("{{"+t+"}}","g"),i)}),'
\n
 
\n
{{edit}}
\n
{{chooseAWayToPay}}
\n
 
\n\n
\n
\n
\n \n \n \n
\n
\n\n
\n
\n
\n
{{deleteCancelButton}}
\n
{{deleteConfirmationButton}}
\n
\n
\n\n
\n
\n
\n\n
\n
\n
\n\n
\n
\n
\n
\n
\n \n \n \n
\n
{{PayPal}}
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n \n \n
\n
{{PayPal Credit}}
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n \n \n
\n
{{Apple Pay}}
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n \n \n
\n
{{Google Pay}}
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n \n \n
\n
{{Venmo}}
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n
\n
\n \n \n \n
\n
{{payWithCard}}
\n
\n
\n
\n
\n
\n \n
\n
\n
\n \n
\n
\n\n
\n
\n \n
\n
\n\n\n
\n \n
\n
\n\n
\n \n
\n
\n
\n\n
\n \n
\n
\n
\n\n
\n
\n \n \n \n
\n
\n
\n
\n
\n\n
\n
{{otherWaysToPay}}
\n
\n\n
\n {{chooseAnotherWayToPay}}\n
\n
\n
\n'),o._dropinWrapper.innerHTML='\n \n \n Visa\n \n \n \n \n\n \n MasterCard\n \n \n \n \n \n \n\n \n Union Pay\n \n \n \n \n \n \n \n \n \n \n\n \n American Express\n \n \n \n \n\n \n JCB\n \n \n \n \n \n\n \n Discover\n \n \n \n \n \n\n \n Diners Club\n \n \n \n \n \n\n \n Maestro\n \n \n \n \n \n \n\n \n PayPal Logo\n \n \n \n \n \n \n\n \n PayPal Credit Logo\n \n \n \n \n \n \n \n \n\n \n Generic Card\n \n \n \n \n \n \n \n\n \n CVV Back\n \n \n \n \n \n \n \n\n \n CVV Front\n \n \n \n \n \n \n \n \n\n \n Check\n \n \n\n \n X\n \n \n\n \n Lock Loader\n \n \n\n \n \n \n \n\n \n Apple Pay Logo\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Google Pay Mark\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n Venmo\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n\n'+i,a.appendChild(o._dropinWrapper),o._model=new l({client:o._client,container:a,componentID:o._componentID,merchantConfiguration:o._merchantConfiguration}),o._injectStylesheet(),void o._model.initialize().then((function(){return o._model.on("cancelInitialization",(function(t){o._dropinWrapper.innerHTML="",n.sendEvent(o._client,"load-error"),e(t)})),o._model.on("asyncDependenciesReady",(function(){o._model.hasAtLeastOneAvailablePaymentOption()?(n.sendEvent(o._client,"appeared"),o._disableErroredPaymentMethods(),o._handleAppSwitch(),o._model.confirmDropinReady(),e(null,o)):o._model.cancelInitialization(new s("All payment options failed to load."))})),C.forEach((function(e){o._model.on(e,(function(t){o._emit(e,t)}))})),o._setUpDependenciesAndViews()})).catch((function(t){o.teardown().then((function(){e(t)}))}))):(n.sendEvent(o._client,"configuration-error"),void e(new s("options.selector or options.container must reference a valid DOM node.")))):(n.sendEvent(o._client,"configuration-error"),void e(new s("options.container is required.")))},D.prototype.updateConfiguration=function(e,t,i){var r;-1!==T.indexOf(e)&&("threeDSecure"!==e?(r=this._mainView.getView(e))&&(r.updateConfiguration(t,i),-1!==A.indexOf(e)&&(this._removeUnvaultedPaymentMethods((function(t){return t.type===a.paymentMethodTypes[e]})),this._navigateToInitialView())):this._threeDSecure&&this._threeDSecure.updateConfiguration(t,i))},D.prototype.getAvailablePaymentOptions=function(){return this._model.supportedPaymentOptions},D.prototype.clearSelectedPaymentMethod=function(){this._removeUnvaultedPaymentMethods(),this._model.removeActivePaymentMethod(),0!==this._model.getPaymentMethods().length?(this._mainView.showLoadingIndicator(),this._model.refreshPaymentMethods().then(function(){this._navigateToInitialView(),this._mainView.hideLoadingIndicator()}.bind(this))):this._navigateToInitialView()},D.prototype._setUpDataCollector=function(){var e=this,t=r({},e._merchantConfiguration.dataCollector,{client:e._client});this._dataCollector=new g(t),this._dataCollector.initialize().then((function(){e._model.asyncDependencyReady("dataCollector")})).catch((function(t){e._model.cancelInitialization(new s({message:"Data Collector failed to set up.",braintreeWebError:t}))}))},D.prototype._setUpThreeDSecure=function(){var e=this;this._threeDSecure=new b(this._client,this._model),this._threeDSecure.initialize().then((function(){e._model.asyncDependencyReady("threeDSecure")})).catch((function(t){e._model.cancelInitialization(new s({message:"3D Secure failed to set up.",braintreeWebError:t}))}))},D.prototype._setUpDependenciesAndViews=function(){this._merchantConfiguration.dataCollector&&this._setUpDataCollector(),this._merchantConfiguration.threeDSecure&&this._setUpThreeDSecure(),this._mainView=new p({client:this._client,element:this._dropinWrapper,model:this._model,strings:this._strings})},D.prototype._removeUnvaultedPaymentMethods=function(e){e=e||function(){return!0},this._model.getPaymentMethods().forEach(function(t){e(t)&&!t.vaulted&&this._model.removePaymentMethod(t)}.bind(this))},D.prototype._navigateToInitialView=function(){this._mainView.primaryView.ID===u&&0===this._model.getPaymentMethods().length&&(1===this._model.supportedPaymentOptions.length?this._mainView.setPrimaryView(this._model.supportedPaymentOptions[0]):this._mainView.setPrimaryView(h))},D.prototype._supportsPaymentOption=function(e){return-1!==this._model.supportedPaymentOptions.indexOf(e)},D.prototype._disableErroredPaymentMethods=function(){var e,t=Object.keys(this._model.failedDependencies);0!==t.length&&(e=this._mainView.getOptionsElements(),t.forEach(function(t){var i=e[t],r=i.div,n=i.clickHandler,s=this._model.failedDependencies[t],l=r.querySelector(".braintree-option__disabled-message");o.add(r,"braintree-disabled"),r.removeEventListener("click",n),l.innerHTML=a.errors.DEVELOPER_MISCONFIGURATION_MESSAGE,console.error(s)}.bind(this)))},D.prototype._sendVaultedPaymentMethodAppearAnalyticsEvents=function(){var e,t,i={},r=this._model._paymentMethods;for(e=0;e>4&3,i=(15&n)<<4|(o=s.indexOf(e.charAt(a++)))>>2&15,r=(3&o)<<6|63&s.indexOf(e.charAt(a++)),l+=String.fromCharCode(t)+(i?String.fromCharCode(i):"")+(r?String.fromCharCode(r):"")}while(a/g,">")}},{}],206:[function(e,t,i){"use strict";t.exports=function(){var e=document.createElement("div");return["-webkit-","-moz-","-ms-","-o-",""].forEach((function(t){e.style.cssText+=t+"flex-basis: 1px"})),Boolean(e.style.length)}},{}],207:[function(e,t,i){"use strict";var r=e("./assign").assign,n=e("braintree-web/three-d-secure"),o=["customer-canceled","authentication-modal-render","authentication-modal-close"];function a(e,t){this._client=e,this._model=t,this._config=r({},t.merchantConfiguration.threeDSecure)}a.prototype.initialize=function(){var e=this;return n.create({client:this._client,version:2}).then((function(t){e._instance=t,o.forEach((function(t){e._instance.on(t,(function(i){e._model._emit("3ds:"+t,i)}))}))}))},a.prototype.verify=function(e,t){var i=r({amount:this._config.amount},t,{nonce:e.nonce,bin:e.details.bin,onLookupComplete:function(e,t){t()}});return i.additionalInformation=i.additionalInformation||{},i.additionalInformation.acsWindowSize=i.additionalInformation.acsWindowSize||"03",this._instance.verifyCard(i)},a.prototype.updateConfiguration=function(e,t){this._config[e]=t},a.prototype.teardown=function(){return this._instance.teardown()},t.exports=a},{"./assign":193,"braintree-web/three-d-secure":143}],208:[function(e,t,i){"use strict";var r=e("./browser-detection");function n(e){return!!e&&("none"===e.style.display||n(e.parentNode))}t.exports={onTransitionEnd:function(e,t,i){r.isIe9()||n(e)?i():e.addEventListener("transitionend",(function r(n){n.propertyName===t&&(e.removeEventListener("transitionend",r),i())}))}}},{"./browser-detection":194}],209:[function(e,t,i){"use strict";var r=e("./promise");t.exports={delay:function(e){return e=e||0,new r((function(t){window.setTimeout(t,e)}))}}},{"./promise":204}],210:[function(e,t,i){"use strict";t.exports={payingWith:"الدفع باستخدام {{paymentSource}}",chooseAnotherWayToPay:"اختر طريقة دفع أخرى",chooseAWayToPay:"اختر طريقة الدفع",otherWaysToPay:"طرق أخرى للدفع",edit:"تحرير",doneEditing:"تم",editPaymentMethods:"تحرير طرق الدفع",CreditCardDeleteConfirmationMessage:"هل تريد حذف البطاقة ({{secondaryIdentifier}}) التي تنتهي بالرقم {{identifier}}؟",PayPalAccountDeleteConfirmationMessage:"هل تريد حذف حساب {{identifier}} على PayPal؟",VenmoAccountDeleteConfirmationMessage:"هل تريد فعلاً حذف حساب Venmo الذي يحمل اسم المستخدم {{identifier}}؟",genericDeleteConfirmationMessage:"هل تريد فعلاً حذف طريقة الدفع هذه؟",deleteCancelButton:"إلغاء",deleteConfirmationButton:"حذف",fieldEmptyForCvv:"يرجى إدخال رمز حماية البطاقة.",fieldEmptyForExpirationDate:"يرجى إدخال تاريخ انتهاء الصلاحية.",fieldEmptyForCardholderName:"يرجى إدخال اسم صاحب البطاقة.",fieldTooLongForCardholderName:"يجب أن يقل اسم صاحب البطاقة عن 256 حرفاً.",fieldEmptyForNumber:"يرجى إدخال رقم.",fieldEmptyForPostalCode:"يرجى إدخال الرمز البريدي.",fieldInvalidForCardholderName:"اسم حامل البطاقة غير صحيح.",fieldInvalidForCvv:"رمز الحماية هذا غير صحيح.",fieldInvalidForExpirationDate:"تاريخ انتهاء الصلاحية هذا غير صحيح.",fieldInvalidForNumber:"رقم هذه البطاقة غير صحيح.",fieldInvalidForPostalCode:"الرمز البريدي هذا غير صحيح.",genericError:"وقع خطأ ما من جانبنا.",hostedFieldsTokenizationFailOnDuplicateError:"هذه البطاقة الائتمانية موجودة حالياً كطريقة دفع محفوظة.",hostedFieldsFailedTokenizationError:"يرجى مراجعة بياناتك وإعادة المحاولة.",hostedFieldsFieldsInvalidError:"يرجى مراجعة بياناتك وإعادة المحاولة.",hostedFieldsTokenizationNetworkErrorError:"خطأ في الشبكة. يرجى إعادة المحاولة.",hostedFieldsTokenizationCvvVerificationFailedError:"فشلت مصادقة بطاقة الائتمان. يرجى مراجعة بياناتك وإعادة المحاولة.",paypalButtonMustBeUsed:"استخدم زر PayPal لاستئناف الدفع.",paypalAccountTokenizationFailedError:"وقع خطأ أثناء إضافة حساب PayPal. يرجى إعادة المحاولة.",paypalFlowFailedError:"وقع خطأ أثناء الاتصال بـ PayPal. يرجى إعادة المحاولة.",paypalTokenizationRequestActiveError:"تفويض الدفع عبر PayPal قيد التنفيذ.",venmoCanceledError:"وقع خطأ ما. تأكد أن أحدث إصدار من تطبيق Venmo مثبت في جهازك وأن متصفحك يدعم التبديل إلى Venmo.",vaultManagerPaymentMethodDeletionError:"فشل حذف طريقة الدفع. أعد المحاولة.",venmoAppFailedError:"تطبيق Venmo غير موجود في جهازك.",unsupportedCardTypeError:"نوع هذه البطاقة غير مدعوم. يرجى استخدام بطاقة أخرى.",applePayTokenizationError:"وقع خطأ في الشبكة أثناء معالجة الدفع عبر Apple Pay. يرجى إعادة المحاولة.",applePayActiveCardError:"إضافة بطاقة مدعومة إلى محفظة Apple Pay.",cardholderNameLabel:"اسم صاحب البطاقة",cardNumberLabel:"رقم البطاقة",cvvLabel:"رمز حماية البطاقة",cvvThreeDigitLabelSubheading:"(3 أرقام)",cvvFourDigitLabelSubheading:"(4 أرقام)",cardholderNamePlaceholder:"اسم صاحب البطاقة",expirationDateLabel:"تاريخ انتهاء الصلاحية",expirationDateLabelSubheading:"(MM/YY)",expirationDatePlaceholder:"MM/YY",postalCodeLabel:"الرمز البريدي",saveCardLabel:"حفظ البطاقة",payWithCard:"الدفع باستخدام بطاقة",endingIn:"التي تنتهي بالرقم {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"بطاقة",PayPal:"Paypal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],211:[function(e,t,i){"use strict";t.exports={payingWith:"Způsob platby: {{paymentSource}}",chooseAnotherWayToPay:"Vybrat jiný způsob platby",chooseAWayToPay:"Vybrat způsob platby",otherWaysToPay:"Jiné způsoby platby",edit:"Upravit",doneEditing:"Hotovo",editPaymentMethods:"Upravit způsoby platby",CreditCardDeleteConfirmationMessage:"Chcete kartu {{secondaryIdentifier}} s koncovým číslem {{identifier}} odstranit?",PayPalAccountDeleteConfirmationMessage:"Chcete účet {{identifier}} ve službě PayPal odstranit?",VenmoAccountDeleteConfirmationMessage:"Opravdu chcete účet Venmo s uživatelským jménem {{identifier}} odstranit?",genericDeleteConfirmationMessage:"Opravdu chcete tento způsob platby odstranit?",deleteCancelButton:"Zrušit",deleteConfirmationButton:"Odstranit",fieldEmptyForCvv:"Vyplňte kód CVV.",fieldEmptyForExpirationDate:"Vyplňte datum vypršení platnosti.",fieldEmptyForCardholderName:"Vyplňte jméno držitele karty.",fieldTooLongForCardholderName:"Jméno držitele karty musí obsahovat méně než 256 znaků.",fieldEmptyForNumber:"Vyplňte číslo.",fieldEmptyForPostalCode:"Vyplňte PSČ.",fieldInvalidForCardholderName:"Toto jméno držitele karty není platné.",fieldInvalidForCvv:"Tento bezpečnostní kód není platný.",fieldInvalidForExpirationDate:"Toto datum vypršení platnosti není platné.",fieldInvalidForNumber:"Toto číslo karty není platné.",fieldInvalidForPostalCode:"Toto PSČ není platné.",genericError:"Došlo k chybě na naší straně.",hostedFieldsTokenizationFailOnDuplicateError:"Tato kreditní karta je již jako způsob platby uložena.",hostedFieldsFailedTokenizationError:"Zkontrolujte zadané údaje a zkuste to znovu.",hostedFieldsFieldsInvalidError:"Zkontrolujte zadané údaje a zkuste to znovu.",hostedFieldsTokenizationNetworkErrorError:"Došlo k chybě sítě. Zkuste to znovu.",hostedFieldsTokenizationCvvVerificationFailedError:"Ověření kreditní karty se nezdařilo. Zkontrolujte zadané údaje a zkuste to znovu.",paypalButtonMustBeUsed:"Chcete-li přejít k platbě, použijte tlačítko PayPal.",paypalAccountTokenizationFailedError:"Při přidávání účtu PayPal došlo k chybě. Zkuste to znovu.",paypalFlowFailedError:"Při připojování ke službě PayPal došlo k chybě. Zkuste to znovu.",paypalTokenizationRequestActiveError:"Autorizace platby přes PayPal již probíhá.",venmoCanceledError:"Došlo k chybě. Zkontrolujte, zda máte v zařízení nainstalovanou nejnovější verzi aplikace Venmo a zda prohlížeč přechod na aplikaci Venmo podporuje.",vaultManagerPaymentMethodDeletionError:"Způsob platby se nepodařilo odstranit. Zkuste to znovu.",venmoAppFailedError:"Aplikaci Venmo se ve vašem zařízení nepodařilo najít.",unsupportedCardTypeError:"Tento typ karty není podporován. Vyzkoušejte jinou kartu.",applePayTokenizationError:"Při zpracování platby přes Apple Pay došlo k chybě sítě. Zkuste to znovu.",applePayActiveCardError:"Přidejte si podporovanou kartu do peněženky Apple Pay.",cardholderNameLabel:"Jméno držitele karty",cardNumberLabel:"Číslo karty",cvvLabel:"CVV",cvvThreeDigitLabelSubheading:"(3 číslice)",cvvFourDigitLabelSubheading:"(4 číslice)",cardholderNamePlaceholder:"Jméno držitele karty",expirationDateLabel:"Datum vypršení platnosti",expirationDateLabelSubheading:"(MM/RR)",expirationDatePlaceholder:"MM/RR",postalCodeLabel:"PSČ",saveCardLabel:"Uložit kartu",payWithCard:"Zaplatit kartou",endingIn:"Koncové číslo: {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"Karta",PayPal:"Společnost PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],212:[function(e,t,i){"use strict";t.exports={payingWith:"Betaler med {{paymentSource}}",chooseAnotherWayToPay:"Vælg en anden betalingsmetode",chooseAWayToPay:"Vælg, hvordan du vil betale",otherWaysToPay:"Andre betalingsmetoder",edit:"Rediger",doneEditing:"Udført",editPaymentMethods:"Rediger betalingsmetoder",CreditCardDeleteConfirmationMessage:"Vil du slette {{secondaryIdentifier}}-kortet, der slutter på {{identifier}}?",PayPalAccountDeleteConfirmationMessage:"Vil du slette PayPal-kontoen {{identifier}}?",VenmoAccountDeleteConfirmationMessage:"Er du sikker på, at du vil slette Venmo-kontoen med brugernavnet {{identifier}}?",genericDeleteConfirmationMessage:"Er du sikker på, at du vil slette denne betalingsmetode?",deleteCancelButton:"Annuller",deleteConfirmationButton:"Slet",fieldEmptyForCvv:"Du skal angive kontrolcifrene.",fieldEmptyForExpirationDate:"Du skal angive udløbsdatoen.",fieldEmptyForCardholderName:"Du skal angive kortindehaverens navn.",fieldTooLongForCardholderName:"Kortejerens navn skal være mindre end 256 tegn.",fieldEmptyForNumber:"Du skal angive et nummer.",fieldEmptyForPostalCode:"Du skal angive et postnummer.",fieldInvalidForCardholderName:"Kortindehaverens navn er ugyldigt.",fieldInvalidForCvv:"Sikkerhedskoden er ugyldig.",fieldInvalidForExpirationDate:"Udløbsdatoen er ugyldig.",fieldInvalidForNumber:"Kortnummeret er ugyldigt.",fieldInvalidForPostalCode:"Postnummeret er ugyldigt.",genericError:"Der opstod en fejl.",hostedFieldsTokenizationFailOnDuplicateError:"Dette betalingskort er allerede en gemt betalingsmetode.",hostedFieldsFailedTokenizationError:"Tjek oplysningerne, og prøv igen.",hostedFieldsFieldsInvalidError:"Tjek oplysningerne, og prøv igen.",hostedFieldsTokenizationNetworkErrorError:"Netværksfejl. Prøv igen.",hostedFieldsTokenizationCvvVerificationFailedError:"Betalingskortet blev ikke bekræftet. Tjek oplysningerne, og prøv igen.",paypalButtonMustBeUsed:"Brug PayPal-knappen for at fortsætte med din betaling.",paypalAccountTokenizationFailedError:"PayPal-kontoen blev ikke tilføjet. Prøv igen.",paypalFlowFailedError:"Der kunne ikke oprettes forbindelse til PayPal. Prøv igen.",paypalTokenizationRequestActiveError:"PayPal-betalingen er i gang med at blive autoriseret.",venmoCanceledError:"Der opstod en fejl. Sørg for, at du har den seneste version af Venmo-appen installeret på din enhed, og at din browser understøtter skift til Venmo.",vaultManagerPaymentMethodDeletionError:"Vi kunne ikke slette betalingsmetoden. Prøv igen.",venmoAppFailedError:"Venmo-appen blev ikke fundet på din enhed.",unsupportedCardTypeError:"Korttypen understøttes ikke. Prøv et andet kort.",applePayTokenizationError:"Der opstod en netværksfejl under behandlingen af betalingen med Apple Pay. Prøv igen.",applePayActiveCardError:"Knyt et understøttet kort til din Apple Pay-e-pung.",cardholderNameLabel:"Kortindehaverens navn",cardNumberLabel:"Kortnummer",cvvLabel:"Kontrolcifre",cvvThreeDigitLabelSubheading:"(3 cifre)",cvvFourDigitLabelSubheading:"(4 cifre)",cardholderNamePlaceholder:"Kortindehaverens navn",expirationDateLabel:"Udløbsdato",expirationDateLabelSubheading:"(MM/ÅÅ)",expirationDatePlaceholder:"MM/ÅÅ",postalCodeLabel:"Postnummer",saveCardLabel:"Gem kort",payWithCard:"Betal med kort",endingIn:"Der slutter på {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"Kort",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],213:[function(e,t,i){"use strict";t.exports={payingWith:"Zahlen mit {{paymentSource}}",chooseAnotherWayToPay:"Andere Zahlungsmethode wählen",chooseAWayToPay:"Wie möchten Sie bezahlen?",otherWaysToPay:"Andere Zahlungsmethoden",edit:"Bearbeiten",doneEditing:"Fertig",editPaymentMethods:"Zahlungsquellen bearbeiten",CreditCardDeleteConfirmationMessage:"{{secondaryIdentifier}} Karte mit den Endziffern {{identifier}} löschen?",PayPalAccountDeleteConfirmationMessage:"PayPal-Konto {{identifier}} löschen?",VenmoAccountDeleteConfirmationMessage:"Wollen Sie das Venmo-Konto mit dem Benutzernamen {{identifier}} wirklich löschen?",genericDeleteConfirmationMessage:"Wollen Sie diese Zahlungsquelle wirklich löschen?",deleteCancelButton:"Abbrechen",deleteConfirmationButton:"Löschen",fieldEmptyForCvv:"Geben Sie die Kartenprüfnummer ein.",fieldEmptyForExpirationDate:"Geben Sie das Ablaufdatum ein.",fieldEmptyForCardholderName:"Geben Sie den Namen des Karteninhabers ein.",fieldTooLongForCardholderName:"Der Name des Karteninhabers darf 255 Zeichen nicht übersteigen.",fieldEmptyForNumber:"Geben Sie die Nummer ein.",fieldEmptyForPostalCode:"Geben Sie die PLZ ein.",fieldInvalidForCardholderName:"Der Name des Karteninhabers ist nicht gültig.",fieldInvalidForCvv:"Die Kartenprüfnummer ist ungültig.",fieldInvalidForExpirationDate:"Das Ablaufdatum ist ungültig.",fieldInvalidForNumber:"Die Kreditkartennummer ist ungültig.",fieldInvalidForPostalCode:"Die PLZ ist ungültig.",genericError:"Bei uns ist ein Problem aufgetreten.",hostedFieldsTokenizationFailOnDuplicateError:"Diese Kreditkarte ist bereits als gespeicherte Zahlungsmethode vorhanden.",hostedFieldsFailedTokenizationError:"Überprüfen Sie Ihre Eingabe und versuchen Sie es erneut.",hostedFieldsFieldsInvalidError:"Überprüfen Sie Ihre Eingabe und versuchen Sie es erneut.",hostedFieldsTokenizationNetworkErrorError:"Netzwerkfehler. Versuchen Sie es erneut.",hostedFieldsTokenizationCvvVerificationFailedError:"Überprüfung der Karte fehlgeschlagen. Überprüfen Sie Ihre Eingabe und versuchen Sie es erneut.",paypalButtonMustBeUsed:"Verwenden Sie den PayPal-Button, um mit der Zahlung fortfahren.",paypalAccountTokenizationFailedError:"Beim Hinzufügen des PayPal-Kontos ist ein Problem aufgetreten. Versuchen Sie es erneut.",paypalFlowFailedError:"Beim Verbinden mit PayPal ist ein Problem aufgetreten. Versuchen Sie es erneut.",paypalTokenizationRequestActiveError:"Die PayPal-Zahlung wird bereits autorisiert.",venmoCanceledError:"Etwas ist schief gelaufen. Vergewissern Sie sich, dass Sie die neueste Version der Venmo-App auf Ihrem Gerät installiert haben und Ihr Browser den Wechsel zu Venmo unterstützt.",vaultManagerPaymentMethodDeletionError:"Die Zahlungsquelle konnte nicht gelöscht werden. Versuchen Sie es erneut.",venmoAppFailedError:"Die Venmo-App wurde auf Ihrem Gerät nicht gefunden.",unsupportedCardTypeError:"Dieser Kreditkartentyp wird nicht unterstützt. Versuchen Sie es mit einer anderen Karte.",applePayTokenizationError:"Netzwerkfehler bei der Zahlungsabwicklung mit Apple Pay. Versuchen Sie es erneut.",applePayActiveCardError:"Fügen Sie der Apple-Pay-Börse eine unterstützte Kreditkarte hinzu.",cardholderNameLabel:"Name des Karteninhabers",cardNumberLabel:"Kartennummer",cvvLabel:"Prüfnr.",cvvThreeDigitLabelSubheading:"(3-stellig)",cvvFourDigitLabelSubheading:"(4-stellig)",cardholderNamePlaceholder:"Name des Karteninhabers",expirationDateLabel:"Gültig bis",expirationDateLabelSubheading:"(MM/JJ)",expirationDatePlaceholder:"MM/JJ",postalCodeLabel:"PLZ",saveCardLabel:"Karte speichern",payWithCard:"Mit Kreditkarte zahlen",endingIn:"Mit den Endziffern {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"Kreditkarte",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],214:[function(e,t,i){"use strict";t.exports={payingWith:"Πληρωμή μέσω {{paymentSource}}",chooseAnotherWayToPay:"Επιλέξτε έναν άλλον τρόπο πληρωμής",chooseAWayToPay:"Επιλογή τρόπου πληρωμής",otherWaysToPay:"Άλλοι τρόποι πληρωμής",edit:"Επεξεργασία",doneEditing:"Τέλος",editPaymentMethods:"Επεξεργασία μεθόδων πληρωμής",CreditCardDeleteConfirmationMessage:"Διαγραφή κάρτας {{secondaryIdentifier}} που λήγει σε {{identifier}};",PayPalAccountDeleteConfirmationMessage:"Διαγραφή λογαριασμού PayPal {{identifier}};",VenmoAccountDeleteConfirmationMessage:"Θέλετε σίγουρα να διαγράψετε τον λογαριασμό Venmo με το όνομα χρήστη {{identifier}};",genericDeleteConfirmationMessage:"Θέλετε σίγουρα να διαγράψετε αυτήν τη μέθοδο πληρωμής;",deleteCancelButton:"Ακύρωση",deleteConfirmationButton:"Διαγραφή",fieldEmptyForCvv:"Συμπληρώστε έναν CVV.",fieldEmptyForExpirationDate:"Συμπληρώστε ημερομηνία λήξης.",fieldEmptyForCardholderName:"Συμπληρώστε το όνομα ενός κατόχου κάρτας.",fieldTooLongForCardholderName:"Το όνομα του κατόχου της κάρτας πρέπει να περιέχει λιγότερους από 256 χαρακτήρες.",fieldEmptyForNumber:"Συμπληρώστε έναν αριθμό.",fieldEmptyForPostalCode:"Συμπληρώστε έναν ταχυδρομικό κώδικα.",fieldInvalidForCardholderName:"Αυτό το όνομα κατόχου κάρτας δεν είναι έγκυρο.",fieldInvalidForCvv:"Αυτός ο κωδικός ασφαλείας δεν είναι έγκυρος.",fieldInvalidForExpirationDate:"Αυτή η ημερομηνία λήξης δεν είναι έγκυρη.",fieldInvalidForNumber:"Αυτός ο αριθμός κάρτας δεν είναι έγκυρος.",fieldInvalidForPostalCode:"Αυτός ο ταχυδρομικός κώδικας δεν είναι έγκυρος.",genericError:"Προέκυψε ένα πρόβλημα στο σύστημά μας.",hostedFieldsTokenizationFailOnDuplicateError:"Αυτή η πιστωτική κάρτα υπάρχει ήδη ως αποθηκευμένη μέθοδος πληρωμής.",hostedFieldsFailedTokenizationError:"Ελέγξτε τα στοιχεία σας και δοκιμάστε ξανά.",hostedFieldsFieldsInvalidError:"Ελέγξτε τα στοιχεία σας και δοκιμάστε ξανά.",hostedFieldsTokenizationNetworkErrorError:"Σφάλμα δικτύου. Δοκιμάστε ξανά.",hostedFieldsTokenizationCvvVerificationFailedError:"Η επαλήθευση της πιστωτικής κάρτας απέτυχε. Ελέγξτε τα στοιχεία σας και δοκιμάστε ξανά.",paypalButtonMustBeUsed:"Χρησιμοποιήστε το κουμπί PayPal για να συνεχίσετε με την πληρωμή.",paypalAccountTokenizationFailedError:"Προέκυψε κάποιο πρόβλημα με την προσθήκη του λογαριασμού PayPal. Δοκιμάστε ξανά.",paypalFlowFailedError:"Προέκυψε κάποιο πρόβλημα με τη σύνδεση στην PayPal. Δοκιμάστε ξανά.",paypalTokenizationRequestActiveError:"Η εξουσιοδότηση πληρωμής PayPal βρίσκεται ήδη σε εξέλιξη.",venmoCanceledError:"Προέκυψε πρόβλημα. Βεβαιωθείτε ότι έχετε την πιο πρόσφατη έκδοση της εφαρμογής Venmo εγκατεστημένη στη συσκευή σας και ότι το πρόγραμμα περιήγησής σας υποστηρίζει τη μετάβαση στη Venmo.",vaultManagerPaymentMethodDeletionError:"Η διαγραφή της μεθόδου πληρωμής είναι αδύνατη, δοκιμάστε ξανά.",venmoAppFailedError:"Η εφαρμογή Venmo δεν βρέθηκε στη συσκευή σας.",unsupportedCardTypeError:"Αυτός ο τύπος κάρτας δεν υποστηρίζεται. Δοκιμάστε άλλη κάρτα.",applePayTokenizationError:"Προέκυψε σφάλμα δικτύου κατά την επεξεργασία της πληρωμής μέσω Apple Pay. Δοκιμάστε ξανά.",applePayActiveCardError:"Προσθέστε μια υποστηριζόμενη κάρτα στο πορτοφόλι Apple Pay.",cardholderNameLabel:"Όνομα κατόχου κάρτας",cardNumberLabel:"Αριθμός κάρτας",cvvLabel:"CVV",cvvThreeDigitLabelSubheading:"(3 ψηφία)",cvvFourDigitLabelSubheading:"(4 ψηφία)",cardholderNamePlaceholder:"Όνομα κατόχου κάρτας",expirationDateLabel:"Ημερομηνία λήξης",expirationDateLabelSubheading:"(ΜΜ/ΕΕ)",expirationDatePlaceholder:"MM/ΕΕ",postalCodeLabel:"Ταχυδρομικός κώδικας",saveCardLabel:"Αποθήκευση κάρτας",payWithCard:"Πληρωμή με κάρτα",endingIn:"που λήγει σε {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"Κάρτα",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],215:[function(e,t,i){"use strict";t.exports={payingWith:"Paying with {{paymentSource}}",chooseAnotherWayToPay:"Choose another way to pay",chooseAWayToPay:"Choose a way to pay",otherWaysToPay:"Other ways to pay",edit:"Edit",doneEditing:"Done",editPaymentMethods:"Edit payment methods",CreditCardDeleteConfirmationMessage:"Delete {{secondaryIdentifier}} card ending in {{identifier}}?",PayPalAccountDeleteConfirmationMessage:"Delete PayPal account {{identifier}}?",VenmoAccountDeleteConfirmationMessage:"Are you sure you want to delete the Venmo account with username {{identifier}}?",genericDeleteConfirmationMessage:"Are you sure you want to delete this payment method?",deleteCancelButton:"Cancel",deleteConfirmationButton:"Delete",fieldEmptyForCvv:"Please fill out a CVV.",fieldEmptyForExpirationDate:"Please fill out an expiry date.",fieldEmptyForCardholderName:"Please fill out a cardholder name.",fieldTooLongForCardholderName:"Cardholder name must be less than 256 characters.",fieldEmptyForNumber:"Please fill out a number.",fieldEmptyForPostalCode:"Please fill out a postcode.",fieldInvalidForCardholderName:"This cardholder name isn't valid.",fieldInvalidForCvv:"This security code is not valid.",fieldInvalidForExpirationDate:"This expiry date is not valid.",fieldInvalidForNumber:"This card number is not valid.",fieldInvalidForPostalCode:"This postcode is not valid.",genericError:"Something went wrong on our end.",hostedFieldsTokenizationFailOnDuplicateError:"This credit card already exists as a saved payment method.",hostedFieldsFailedTokenizationError:"Check your entries and try again.",hostedFieldsFieldsInvalidError:"Check your entries and try again.",hostedFieldsTokenizationNetworkErrorError:"Network error. Please try again.",hostedFieldsTokenizationCvvVerificationFailedError:"Credit card verification failed. Check your entries and try again.",paypalButtonMustBeUsed:"Use the PayPal button to continue with your payment.",paypalAccountTokenizationFailedError:"Something went wrong while adding the PayPal account. Please try again.",paypalFlowFailedError:"Something went wrong while connecting to PayPal. Please try again.",paypalTokenizationRequestActiveError:"PayPal payment authorisation is already in progress.",venmoCanceledError:"We're sorry, something seems to have gone wrong. Please ensure you have the most recent version of the Venmo app installed on your device and your browser supports switching to Venmo.",vaultManagerPaymentMethodDeletionError:"We're sorry. We couldn't delete that payment method. Please try again.",venmoAppFailedError:"The Venmo app wasn't found on your device.",unsupportedCardTypeError:"This card type is not supported. Please try another card.",applePayTokenizationError:"A network error occurred while processing the Apple Pay payment. Please try again.",applePayActiveCardError:"Link a supported card to your Apple Pay Wallet.",cardholderNameLabel:"Cardholder Name",cardNumberLabel:"Card Number",cvvLabel:"CVV",cvvThreeDigitLabelSubheading:"(3 digits)",cvvFourDigitLabelSubheading:"(4 digits)",cardholderNamePlaceholder:"Cardholder Name",expirationDateLabel:"Expiry date",expirationDateLabelSubheading:"(MM/YY)",expirationDatePlaceholder:"MM/YY",postalCodeLabel:"Postcode",saveCardLabel:"Save card",payWithCard:"Pay with credit or debit card",endingIn:"Ending in {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"Card",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],216:[function(e,t,i){"use strict";t.exports={payingWith:"Paying with {{paymentSource}}",chooseAnotherWayToPay:"Choose another way to pay",chooseAWayToPay:"Choose a way to pay",otherWaysToPay:"Other ways to pay",edit:"Edit",doneEditing:"Done",editPaymentMethods:"Edit funding sources",CreditCardDeleteConfirmationMessage:"Delete {{secondaryIdentifier}} card ending in {{identifier}}?",PayPalAccountDeleteConfirmationMessage:"Delete PayPal account {{identifier}}?",VenmoAccountDeleteConfirmationMessage:"Are you sure you want to delete the Venmo account with username {{identifier}}?",genericDeleteConfirmationMessage:"Are you sure you want to delete this funding source?",deleteCancelButton:"Cancel",deleteConfirmationButton:"Delete",fieldEmptyForCvv:"Please fill in a CSC.",fieldEmptyForExpirationDate:"Please fill in an expiry date.",fieldEmptyForCardholderName:"Please fill in a cardholder name.",fieldTooLongForCardholderName:"Cardholder name must be less than 256 characters.",fieldEmptyForNumber:"Please fill in a number.",fieldEmptyForPostalCode:"Please fill in a postcode.",fieldInvalidForCardholderName:"This cardholder name isn't valid.",fieldInvalidForCvv:"This security code is not valid.",fieldInvalidForExpirationDate:"This expiry date is not valid.",fieldInvalidForNumber:"This card number is not valid.",fieldInvalidForPostalCode:"This postcode is not valid.",genericError:"Something went wrong on our end.",hostedFieldsTokenizationFailOnDuplicateError:"This credit card has already been added to your account as a funding source.",hostedFieldsFailedTokenizationError:"Please check your information and try again.",hostedFieldsFieldsInvalidError:"Please check your information and try again.",hostedFieldsTokenizationNetworkErrorError:"Network error. Please try again.",hostedFieldsTokenizationCvvVerificationFailedError:"Credit card verification failed. Please check your information and try again.",paypalButtonMustBeUsed:"Use the PayPal button to continue with your payment.",paypalAccountTokenizationFailedError:"Something went wrong while adding the PayPal account. Please try again.",paypalFlowFailedError:"Something went wrong while connecting to PayPal. Please try again.",paypalTokenizationRequestActiveError:"PayPal payment authorisation is already in progress.",venmoCanceledError:"We're sorry, something seems to have gone wrong. Make sure you have the most recent version of the Venmo app installed on your device and your browser supports the switch to Venmo.",vaultManagerPaymentMethodDeletionError:"Unable to delete funding source, try again.",venmoAppFailedError:"The Venmo app isn't on your device.",unsupportedCardTypeError:"This card type is not supported. Please try another card.",applePayTokenizationError:"A network error occurred while processing the Apple Pay payment. Please try again.",applePayActiveCardError:"Add a supported card to your Apple Pay wallet.",cardholderNameLabel:"Cardholder name",cardNumberLabel:"Card number",cvvLabel:"CSC",cvvThreeDigitLabelSubheading:"(3 digits)",cvvFourDigitLabelSubheading:"(4 digits)",cardholderNamePlaceholder:"Cardholder name",expirationDateLabel:"Expiry date",expirationDateLabelSubheading:"(MM/YY)",expirationDatePlaceholder:"MM/YY",postalCodeLabel:"Postcode",saveCardLabel:"Save card",payWithCard:"Pay with card",endingIn:"Ending in {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"Card",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],217:[function(e,t,i){"use strict";t.exports={payingWith:"Paying with {{paymentSource}}",chooseAnotherWayToPay:"Choose another way to pay",chooseAWayToPay:"Choose a way to pay",otherWaysToPay:"Other ways to pay",edit:"Edit",doneEditing:"Done",editPaymentMethods:"Edit payment methods",CreditCardDeleteConfirmationMessage:"Delete {{secondaryIdentifier}} card ending in {{identifier}}?",PayPalAccountDeleteConfirmationMessage:"Delete PayPal account {{identifier}}?",VenmoAccountDeleteConfirmationMessage:"Are you sure you want to delete the Venmo account with username {{identifier}}?",genericDeleteConfirmationMessage:"Are you sure you want to delete this payment method?",deleteCancelButton:"Cancel",deleteConfirmationButton:"Delete",fieldEmptyForCvv:"Please enter a CVV.",fieldEmptyForExpirationDate:"Please enter an expiry date.",fieldEmptyForCardholderName:"Please enter a cardholder name.",fieldTooLongForCardholderName:"Cardholder name must have less than 256 characters.",fieldEmptyForNumber:"Please enter a number.",fieldEmptyForPostalCode:"Please enter a PIN code.",fieldInvalidForCardholderName:"This cardholder name isn't valid.",fieldInvalidForCvv:"This security code isn't valid.",fieldInvalidForExpirationDate:"This expiration date isn't valid.",fieldInvalidForNumber:"This card number isn't valid.",fieldInvalidForPostalCode:"This PIN code isn't valid.",genericError:"We're sorry, something seems to have gone wrong.",hostedFieldsTokenizationFailOnDuplicateError:"This credit card already exists as a saved payment method.",hostedFieldsFailedTokenizationError:"Please check your information and try again.",hostedFieldsFieldsInvalidError:"Please check your information and try again.",hostedFieldsTokenizationNetworkErrorError:"Network error. Please try again.",hostedFieldsTokenizationCvvVerificationFailedError:"Credit card verification failed. Please check your information and try again.",paypalButtonMustBeUsed:"Use the PayPal button to continue with your payment.",paypalAccountTokenizationFailedError:"Something went wrong adding the PayPal account. Please try again.",paypalFlowFailedError:"Something went wrong connecting to PayPal. Please try again.",paypalTokenizationRequestActiveError:"PayPal payment authorisation is already in progress.",venmoCanceledError:"We're sorry, something seems to have gone wrong. Please ensure you have the most recent version of the Venmo app installed on your device and your browser supports switching to Venmo.",vaultManagerPaymentMethodDeletionError:"Unable to delete payment method. Please try again.",venmoAppFailedError:"The Venmo app couldn't be found on your device.",unsupportedCardTypeError:"This card type isn't supported. Please try another card.",applePayTokenizationError:"A network error occurred while processing the Apple Pay payment. Please try again.",applePayActiveCardError:"Add a supported card to your Apple Pay wallet.",cardholderNameLabel:"Cardholder name",cardNumberLabel:"Card number",cvvLabel:"CVV",cvvThreeDigitLabelSubheading:"(3 digits)",cvvFourDigitLabelSubheading:"(4 digits)",cardholderNamePlaceholder:"Cardholder name",expirationDateLabel:"Expiry date",expirationDateLabelSubheading:"(MM/YY)",expirationDatePlaceholder:"MM/YY",postalCodeLabel:"PIN code",saveCardLabel:"Save card",payWithCard:"Pay with card",endingIn:"Ending in {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"Card",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],218:[function(e,t,i){"use strict";t.exports={payingWith:"Paying with {{paymentSource}}",chooseAnotherWayToPay:"Choose another way to pay",chooseAWayToPay:"Choose a way to pay",otherWaysToPay:"Other ways to pay",edit:"Edit",doneEditing:"Done",editPaymentMethods:"Edit payment methods",CreditCardDeleteConfirmationMessage:"Delete {{secondaryIdentifier}} card ending in {{identifier}}?",PayPalAccountDeleteConfirmationMessage:"Delete PayPal account {{identifier}}?",VenmoAccountDeleteConfirmationMessage:"Are you sure you want to delete Venmo account with username {{identifier}}?",genericDeleteConfirmationMessage:"Are you sure you want to delete this payment method?",deleteCancelButton:"Cancel",deleteConfirmationButton:"Delete",fieldEmptyForCvv:"Please fill out a CVV.",fieldEmptyForExpirationDate:"Please fill out an expiration date.",fieldEmptyForCardholderName:"Please fill out a cardholder name.",fieldEmptyForNumber:"Please fill out a card number.",fieldEmptyForPostalCode:"Please fill out a postal code.",fieldInvalidForCardholderName:"This cardholder name is not valid.",fieldInvalidForCvv:"This security code is not valid.",fieldInvalidForExpirationDate:"This expiration date is not valid.",fieldInvalidForNumber:"This card number is not valid.",fieldInvalidForPostalCode:"This postal code is not valid.",fieldTooLongForCardholderName:"Cardholder name must be less than 256 characters.",genericError:"Something went wrong on our end.",hostedFieldsTokenizationFailOnDuplicateError:"This credit card already exists as a saved payment method.",hostedFieldsFailedTokenizationError:"Please check your information and try again.",hostedFieldsTokenizationCvvVerificationFailedError:"Credit card verification failed. Please check your information and try again.",hostedFieldsTokenizationNetworkErrorError:"Network error. Please try again.",hostedFieldsFieldsInvalidError:"Please check your information and try again.",paypalButtonMustBeUsed:"Use the PayPal button to continue with your payment.",paypalAccountTokenizationFailedError:"Something went wrong adding the PayPal account. Please try again.",paypalFlowFailedError:"Something went wrong connecting to PayPal. Please try again.",paypalTokenizationRequestActiveError:"PayPal payment authorization is already in progress.",applePayTokenizationError:"A network error occurred while processing the Apple Pay payment. Please try again.",applePayActiveCardError:"Add a supported card to your Apple Pay wallet.",vaultManagerPaymentMethodDeletionError:"Unable to delete payment method, try again.",venmoCanceledError:"Something went wrong. Ensure you have the most recent version of the Venmo app installed on your device and your browser supports switching to Venmo.",venmoAppFailedError:"The Venmo app could not be found on your device.",unsupportedCardTypeError:"This card type is not supported. Please try another card.",cardholderNameLabel:"Cardholder Name",cardNumberLabel:"Card Number",cvvLabel:"CVV",cvvThreeDigitLabelSubheading:"(3 digits)",cvvFourDigitLabelSubheading:"(4 digits)",expirationDateLabel:"Expiration Date",expirationDateLabelSubheading:"(MM/YY)",cardholderNamePlaceholder:"Cardholder Name",expirationDatePlaceholder:"MM/YY",postalCodeLabel:"Postal Code",saveCardLabel:"Save card",payWithCard:"Pay with card",endingIn:"Ending in {{lastFourCardDigits}}",Card:"Card",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Apple Pay":"Apple Pay","Google Pay":"Google Pay",Venmo:"Venmo","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],219:[function(e,t,i){"use strict";t.exports={payingWith:"Pago con {{paymentSource}}",chooseAnotherWayToPay:"Selecciona otra forma de pago.",chooseAWayToPay:"Selecciona una forma de pago.",otherWaysToPay:"Otras formas de pago",edit:"Modificar",doneEditing:"Hecho",editPaymentMethods:"Editar formas de pago",CreditCardDeleteConfirmationMessage:"¿Quieres eliminar la tarjeta {{secondaryIdentifier}} que termina en {{identifier}}?",PayPalAccountDeleteConfirmationMessage:"¿Quieres eliminar la cuenta PayPal {{identifier}}?",VenmoAccountDeleteConfirmationMessage:"¿Seguro de que deseas eliminar la cuenta de Venmo con nombre de usuario {{identifier}}?",genericDeleteConfirmationMessage:"¿Seguro que deseas eliminar esta forma de pago?",deleteCancelButton:"Cancelar",deleteConfirmationButton:"Eliminar",fieldEmptyForCvv:"Escribe el código CVV.",fieldEmptyForExpirationDate:"Escribe la fecha de vencimiento.",fieldEmptyForCardholderName:"Escribe el nombre de un titular de la tarjeta.",fieldTooLongForCardholderName:"El nombre del titular de la tarjeta debe tener menos de 256 caracteres.",fieldEmptyForNumber:"Escribe un número.",fieldEmptyForPostalCode:"Escribe el código postal.",fieldInvalidForCardholderName:"El nombre del titular de la tarjeta no es válido.",fieldInvalidForCvv:"Este código de seguridad no es válido.",fieldInvalidForExpirationDate:"Esta fecha de vencimiento no es válida.",fieldInvalidForNumber:"Este número de tarjeta no es válido.",fieldInvalidForPostalCode:"Este código postal no es válido.",genericError:"Hemos tenido algún problema.",hostedFieldsTokenizationFailOnDuplicateError:"Esta tarjeta de crédito ya existe como forma de pago guardada.",hostedFieldsFailedTokenizationError:"Comprueba la información e inténtalo de nuevo.",hostedFieldsFieldsInvalidError:"Comprueba la información e inténtalo de nuevo.",hostedFieldsTokenizationNetworkErrorError:"Error de red. Inténtalo de nuevo.",hostedFieldsTokenizationCvvVerificationFailedError:"Error de verificación de la tarjeta de crédito. Comprueba la información e inténtalo de nuevo.",paypalButtonMustBeUsed:"Utiliza el botón de PayPal para continuar con el pago.",paypalAccountTokenizationFailedError:"Se ha producido un error al vincular la cuenta PayPal. Inténtalo de nuevo.",paypalFlowFailedError:"Se ha producido un error al conectarse a PayPal. Inténtalo de nuevo.",paypalTokenizationRequestActiveError:"Ya hay una autorización de pago de PayPal en curso.",venmoCanceledError:"Ha habido un problema. Asegúrate de que tienes la versión más reciente de la aplicación de Venmo instalada en tu dispositivo y de que tu navegador es compatible con cambiar a Venmo.",vaultManagerPaymentMethodDeletionError:"No se ha podido eliminar la forma de pago. Inténtalo de nuevo.",venmoAppFailedError:"No se ha encontrado la aplicación de Venmo en tu dispositivo.",unsupportedCardTypeError:"No se admite este tipo de tarjeta. Prueba con otra tarjeta.",applePayTokenizationError:"Se ha producido un error de red al procesar el pago con Apple Pay. Inténtalo de nuevo.",applePayActiveCardError:"Añade una tarjeta admitida a tu Wallet de Apple Pay.",cardholderNameLabel:"Nombre del titular de la tarjeta",cardNumberLabel:"Número de tarjeta",cvvLabel:"CVV",cvvThreeDigitLabelSubheading:"(3 dígitos)",cvvFourDigitLabelSubheading:"(4 dígitos)",cardholderNamePlaceholder:"Nombre del titular de la tarjeta",expirationDateLabel:"Fecha de vencimiento",expirationDateLabelSubheading:"(MM/AA)",expirationDatePlaceholder:"MM/AA",postalCodeLabel:"Código postal",saveCardLabel:"Guardar tarjeta",payWithCard:"Pagar con tarjeta",endingIn:"Terminada en {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"Tarjeta",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],220:[function(e,t,i){"use strict";t.exports={payingWith:"Pagando con {{paymentSource}}",chooseAnotherWayToPay:"Elija otra forma de pago",chooseAWayToPay:"Elija una forma de pago",otherWaysToPay:"Otras formas de pago",edit:"Editar",doneEditing:"Listo",editPaymentMethods:"Editar formas de pago",CreditCardDeleteConfirmationMessage:"¿Desea eliminar la tarjeta {{secondaryIdentifier}} con terminación en {{identifier}}?",PayPalAccountDeleteConfirmationMessage:"¿Desea eliminar la cuenta de PayPal {{identifier}}?",VenmoAccountDeleteConfirmationMessage:"¿Seguro que desea eliminar la cuenta de Venmo con el nombre de usuario {{identifier}}?",genericDeleteConfirmationMessage:"¿Seguro que desea eliminar esta forma de pago?",deleteCancelButton:"Cancelar",deleteConfirmationButton:"Eliminar",fieldEmptyForCvv:"Ingrese un CVV.",fieldEmptyForExpirationDate:"Complete una fecha de vencimiento.",fieldEmptyForCardholderName:"Ingrese el nombre del titular de la tarjeta.",fieldTooLongForCardholderName:"El nombre del titular de la tarjeta debe tener menos de 256 caracteres.",fieldEmptyForNumber:"Ingrese un número.",fieldEmptyForPostalCode:"Ingrese un código postal.",fieldInvalidForCardholderName:"El nombre del titular de la tarjeta no es válido.",fieldInvalidForCvv:"Este código de seguridad no es válido.",fieldInvalidForExpirationDate:"Esta fecha de vencimiento no es válida.",fieldInvalidForNumber:"Este número de tarjeta no es válido.",fieldInvalidForPostalCode:"Este código postal no es válido.",genericError:"Se ha producido un error.",hostedFieldsTokenizationFailOnDuplicateError:"Esta tarjeta de crédito ya existe como forma de pago guardada.",hostedFieldsFailedTokenizationError:"Verifique su información e inténtelo de nuevo.",hostedFieldsFieldsInvalidError:"Verifique su información e inténtelo de nuevo.",hostedFieldsTokenizationNetworkErrorError:"Error de red. Inténtelo de nuevo.",hostedFieldsTokenizationCvvVerificationFailedError:"La verificación de la tarjeta de crédito falló. Revise su información e inténtelo de nuevo.",paypalButtonMustBeUsed:"Utilice el botón de PayPal para continuar con su pago.",paypalAccountTokenizationFailedError:"Se ha producido un error al agregar la cuenta de PayPal. Inténtelo de nuevo.",paypalFlowFailedError:"Se ha producido un error al conectar con PayPal. Inténtelo de nuevo.",paypalTokenizationRequestActiveError:"La autorización de pago de PayPal ya está en curso.",venmoCanceledError:"Se ha producido un error. Asegúrese de que tiene la versión más reciente de la aplicación de Venmo instalada en su dispositivo y que su navegador admita el sitio web Venmo.",vaultManagerPaymentMethodDeletionError:"No se pudo eliminar la forma de pago, inténtelo de nuevo.",venmoAppFailedError:"No se pudo encontrar la aplicación de Venmo en su dispositivo.",unsupportedCardTypeError:"Este tipo de tarjeta no es compatible. Inténtelo con otra tarjeta.",applePayTokenizationError:"Se ha producido un error de red al procesar el pago de Apple Pay. Inténtelo de nuevo.",applePayActiveCardError:"Agregue una tarjeta compatible a su cartera de Apple Pay.",cardholderNameLabel:"Nombre del titular de la tarjeta",cardNumberLabel:"Número de tarjeta",cvvLabel:"CVV",cvvThreeDigitLabelSubheading:"(3 dígitos)",cvvFourDigitLabelSubheading:"(4 dígitos)",cardholderNamePlaceholder:"Nombre del titular de la tarjeta",expirationDateLabel:"Fecha de vencimiento",expirationDateLabelSubheading:"(MM/AA)",expirationDatePlaceholder:"MM/AA",postalCodeLabel:"Código postal",saveCardLabel:"Guardar tarjeta",payWithCard:"Pagar con tarjeta",endingIn:"Con terminación en {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"Tarjeta",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],221:[function(e,t,i){"use strict";t.exports={payingWith:"Maksutapa: {{paymentSource}}",chooseAnotherWayToPay:"Valitse toinen maksutapa",chooseAWayToPay:"Valitse maksutapa",otherWaysToPay:"Muut maksutavat",edit:"Muokkaa",doneEditing:"Valmis",editPaymentMethods:"Muokkaa maksutapoja",CreditCardDeleteConfirmationMessage:"Haluatko poistaa {{secondaryIdentifier}}-kortin, jonka numero päättyy {{identifier}}?",PayPalAccountDeleteConfirmationMessage:"Haluatko poistaa PayPal-tilin {{identifier}}?",VenmoAccountDeleteConfirmationMessage:"Haluatko varmasti poistaa Venmo-tilin, jonka käyttäjätunnus on {{identifier}}?",genericDeleteConfirmationMessage:"Haluatko varmasti poistaa tämän maksutavan?",deleteCancelButton:"Peruuta",deleteConfirmationButton:"Poista",fieldEmptyForCvv:"Täytä CVV.",fieldEmptyForExpirationDate:"Täytä voimassaolon päättymispäivämäärä.",fieldEmptyForCardholderName:"Täytä kortinhaltijan nimi.",fieldTooLongForCardholderName:"Kortin haltijan nimen on oltava alle 256 merkkiä.",fieldEmptyForNumber:"Täytä numero.",fieldEmptyForPostalCode:"Täytä postinumero.",fieldInvalidForCardholderName:"Kortinhaltijan nimi ei ole kelvollinen.",fieldInvalidForCvv:"Tämä turvakoodi ei ole kelvollinen.",fieldInvalidForExpirationDate:"Tämä päättymispäivämäärä ei ole kelvollinen.",fieldInvalidForNumber:"Tämä kortin numero ei ole kelvollinen.",fieldInvalidForPostalCode:"Tämä postinumero ei ole kelvollinen.",genericError:"Jokin meni pieleen meidän päässämme.",hostedFieldsTokenizationFailOnDuplicateError:"Tämä luottokortti on jo tallennettu maksutavaksi.",hostedFieldsFailedTokenizationError:"Tarkista tiedot ja yritä uudelleen.",hostedFieldsFieldsInvalidError:"Tarkista tiedot ja yritä uudelleen.",hostedFieldsTokenizationNetworkErrorError:"Verkkovirhe. Yritä uudelleen.",hostedFieldsTokenizationCvvVerificationFailedError:"Luottokortin varmennus epäonnistui. Tarkista tiedot ja yritä uudelleen.",paypalButtonMustBeUsed:"Jatka maksua PayPal-painikkeen avulla.",paypalAccountTokenizationFailedError:"Jotain meni pieleen PayPal-tiliä lisätessä. Yritä uudelleen.",paypalFlowFailedError:"Jotain meni pieleen muodostettaessa yhteyttä PayPaliin. Yritä uudelleen.",paypalTokenizationRequestActiveError:"PayPal-maksun valtuutus on jo meneillään.",venmoCanceledError:"Jokin meni pieleen. Varmista, että laitteeseesi on asennettu Venmo-sovelluksen viimeisin versio, ja että selain tukee vaihtamista Venmoon.",vaultManagerPaymentMethodDeletionError:"Maksutavan poistaminen ei onnistu, yritä uudelleen.",venmoAppFailedError:"Venmo-sovellusta ei löytynyt laitteesta.",unsupportedCardTypeError:"Tätä korttityyppiä ei tueta. Kokeile toista korttia.",applePayTokenizationError:"Tapahtui verkkovirhe Apple Pay -maksun käsittelyssä. Yritä uudelleen.",applePayActiveCardError:"Lisää tuettu kortti Apple Pay -lompakkoon.",cardholderNameLabel:"Kortinhaltijan nimi",cardNumberLabel:"Kortin numero",cvvLabel:"CVV",cvvThreeDigitLabelSubheading:"(kolme numeroa)",cvvFourDigitLabelSubheading:"(neljä numeroa)",cardholderNamePlaceholder:"Kortinhaltijan nimi",expirationDateLabel:"Päättymispäivämäärä",expirationDateLabelSubheading:"(KK/VV)",expirationDatePlaceholder:"KK/VV",postalCodeLabel:"Postinumero",saveCardLabel:"Tallenna kortti",payWithCard:"Maksa kortilla",endingIn:"Päättyy {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"Kortti",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],222:[function(e,t,i){"use strict";t.exports={payingWith:"Payer avec {{paymentSource}}",chooseAnotherWayToPay:"Choisir un autre mode de paiement",chooseAWayToPay:"Choisir le mode de paiement",otherWaysToPay:"Autres modes de paiement",edit:"Modifier",doneEditing:"Terminé",editPaymentMethods:"Modifier les modes de paiement",CreditCardDeleteConfirmationMessage:"Supprimer la carte {{secondaryIdentifier}} se terminant par {{identifier}}?",PayPalAccountDeleteConfirmationMessage:"Supprimer le compte PayPal {{identifier}}?",VenmoAccountDeleteConfirmationMessage:"Souhaitez-vous vraiment supprimer le compte Venmo avec le nom d’utilisateur {{identifier}}?",genericDeleteConfirmationMessage:"Voulez-vous vraiment supprimer ce mode de paiement?",deleteCancelButton:"Annuler",deleteConfirmationButton:"Supprimer",fieldEmptyForCvv:"Veuillez saisir un cryptogramme visuel.",fieldEmptyForExpirationDate:"Veuillez saisir une date d'expiration.",fieldEmptyForCardholderName:"Veuillez saisir un nom de titulaire de la carte.",fieldTooLongForCardholderName:"Le nom du titulaire de la carte doit contenir moins de 256 caractères.",fieldEmptyForNumber:"Veuillez saisir un numéro.",fieldEmptyForPostalCode:"Veuillez saisir un code postal.",fieldInvalidForCardholderName:"Le nom de ce titulaire de la carte n'est pas valide.",fieldInvalidForCvv:"Ce cryptogramme visuel n'est pas valide.",fieldInvalidForExpirationDate:"Cette date d'expiration n'est pas valide.",fieldInvalidForNumber:"Ce numéro de carte n'est pas valide.",fieldInvalidForPostalCode:"Ce code postal n'est pas valide.",genericError:"Une erreur s'est produite de notre côté.",hostedFieldsTokenizationFailOnDuplicateError:"Cette carte de crédit existe déjà comme mode de paiement enregistré.",hostedFieldsFailedTokenizationError:"Vérifiez vos informations, puis réessayez.",hostedFieldsFieldsInvalidError:"Vérifiez vos informations, puis réessayez.",hostedFieldsTokenizationNetworkErrorError:"Erreur réseau. Veuillez réessayer.",hostedFieldsTokenizationCvvVerificationFailedError:"La vérification de la carte de crédit a échoué. Vérifiez vos informations, puis réessayez.",paypalButtonMustBeUsed:"Utilisez le bouton PayPal pour poursuivre votre paiement.",paypalAccountTokenizationFailedError:"Une erreur s'est produite lors de l'enregistrement du compte PayPal. Veuillez réessayer.",paypalFlowFailedError:"Une erreur s'est produite au cours de la connexion à PayPal. Veuillez réessayer.",paypalTokenizationRequestActiveError:"L'autorisation de paiement PayPal est déjà en cours.",venmoCanceledError:"Une erreur s'est produite. Assurez-vous que la version la plus récente de l'application Venmo est installée sur votre appareil et que votre navigateur prend Venmo en charge.",vaultManagerPaymentMethodDeletionError:"Impossible de supprimer le mode de paiement, essayez de nouveau.",venmoAppFailedError:"L'application Venmo est introuvable sur votre appareil.",unsupportedCardTypeError:"Ce type de carte n'est pas pris en charge. Veuillez essayer une autre carte.",applePayTokenizationError:"Une erreur de réseau s'est produite lors du traitement du paiement avec Apple Pay. Veuillez réessayer.",applePayActiveCardError:"Ajoutez une carte prise en charge à Apple Pay.",cardholderNameLabel:"Nom du titulaire de la carte",cardNumberLabel:"Numéro de carte",cvvLabel:"CVV",cvvThreeDigitLabelSubheading:"(3 chiffres)",cvvFourDigitLabelSubheading:"(4 chiffres)",cardholderNamePlaceholder:"Nom du titulaire de la carte",expirationDateLabel:"Date d'expiration",expirationDateLabelSubheading:"(MM/AA)",expirationDatePlaceholder:"MM/AA",postalCodeLabel:"Code postal",saveCardLabel:"Enregistrer la carte",payWithCard:"Payer par carte",endingIn:"Se terminant par {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"Carte",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],223:[function(e,t,i){"use strict";t.exports={payingWith:"Payer avec {{paymentSource}}",chooseAnotherWayToPay:"Choisissez une autre façon de payer.",chooseAWayToPay:"Choisissez comment payer.",otherWaysToPay:"Autres façons de payer",edit:"Modifier",doneEditing:"Terminé",editPaymentMethods:"Modifier les sources d'approvisionnement",CreditCardDeleteConfirmationMessage:"Supprimer la carte {{secondaryIdentifier}} se terminant par {{identifier}} ?",PayPalAccountDeleteConfirmationMessage:"Supprimer le compte PayPal {{identifier}} ?",VenmoAccountDeleteConfirmationMessage:"Êtes-vous sûr de vouloir supprimer le compte Venmo avec le nom d'utilisateur {{identifier}} ?",genericDeleteConfirmationMessage:"Êtes-vous sûr de vouloir supprimer cette source d'approvisionnement ?",deleteCancelButton:"Annuler",deleteConfirmationButton:"Supprimer",fieldEmptyForCvv:"Entrez un cryptogramme visuel.",fieldEmptyForExpirationDate:"Entrez une date d'expiration.",fieldEmptyForCardholderName:"Entrez un nom du titulaire de la carte.",fieldTooLongForCardholderName:"Le nom du titulaire de la carte doit contenir moins de 256 caractères.",fieldEmptyForNumber:"Entrez un numéro.",fieldEmptyForPostalCode:"Entrez un code postal.",fieldInvalidForCardholderName:"Le nom de ce titulaire de la carte est incorrect.",fieldInvalidForCvv:"Ce cryptogramme visuel n'est pas valide.",fieldInvalidForExpirationDate:"Cette date d'expiration n'est pas valide.",fieldInvalidForNumber:"Ce numéro de carte n'est pas valide.",fieldInvalidForPostalCode:"Ce code postal n'est pas valide.",genericError:"Une erreur est survenue.",hostedFieldsTokenizationFailOnDuplicateError:"Cette carte bancaire existe déjà comme mode de paiement enregistré.",hostedFieldsFailedTokenizationError:"Vérifiez vos informations et réessayez.",hostedFieldsFieldsInvalidError:"Vérifiez vos informations et réessayez.",hostedFieldsTokenizationNetworkErrorError:"Erreur réseau. Réessayez.",hostedFieldsTokenizationCvvVerificationFailedError:"Échec de vérification de la carte bancaire. Vérifiez vos informations et réessayez.",paypalButtonMustBeUsed:"Utilisez le bouton PayPal pour poursuivre votre paiement.",paypalAccountTokenizationFailedError:"Une erreur est survenue lors de l'ajout du compte PayPal. Réessayez.",paypalFlowFailedError:"Une erreur est survenue lors de la connexion à PayPal. Réessayez.",paypalTokenizationRequestActiveError:"L'autorisation de paiement PayPal est déjà en cours.",venmoCanceledError:"Une erreur est survenue. Vérifiez que vous disposez de la dernière version de l'application Venmo sur votre appareil et que votre navigateur prend en charge la redirection vers Venmo.",vaultManagerPaymentMethodDeletionError:"Impossible de supprimer la source d'approvisionnement. Réessayez.",venmoAppFailedError:"L'application Venmo est introuvable sur votre appareil.",unsupportedCardTypeError:"Ce type de carte n'est pas pris en charge. Essayez une autre carte.",applePayTokenizationError:"Une erreur réseau s'est produite lors du traitement du paiement Apple Pay. Réessayez.",applePayActiveCardError:"Enregistrez une carte prise en charge sur Apple Pay.",cardholderNameLabel:"Nom du titulaire de la carte",cardNumberLabel:"Nº de carte",cvvLabel:"Cryptogramme visuel",cvvThreeDigitLabelSubheading:"(3 chiffres)",cvvFourDigitLabelSubheading:"(4 chiffres)",cardholderNamePlaceholder:"Nom du titulaire de la carte",expirationDateLabel:"Date d'expiration",expirationDateLabelSubheading:"(MM/AA)",expirationDatePlaceholder:"MM/AA",postalCodeLabel:"Code postal",saveCardLabel:"Enregistrer une carte",payWithCard:"Payer par carte",endingIn:"Se terminant par {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"Carte",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],224:[function(e,t,i){"use strict";t.exports={payingWith:"Payer avec {{paymentSource}}",chooseAnotherWayToPay:"Choisir un autre mode de paiement",chooseAWayToPay:"Choisir un mode de paiement",otherWaysToPay:"Autres modes de paiement",edit:"Modifier",doneEditing:"Terminé",editPaymentMethods:"Modifier les modes de paiement",CreditCardDeleteConfirmationMessage:"Supprimer la carte {{secondaryIdentifier}} se terminant par {{identifier}} ?",PayPalAccountDeleteConfirmationMessage:"Supprimer le compte PayPal {{identifier}} ?",VenmoAccountDeleteConfirmationMessage:"Souhaitez-vous vraiment supprimer le compte Venmo associé au nom d'utilisateur {{identifier}}?",genericDeleteConfirmationMessage:"Souhaitez-vous vraiment supprimer ce mode de paiement ?",deleteCancelButton:"Annuler",deleteConfirmationButton:"Supprimer",fieldEmptyForCvv:"Saisissez un cryptogramme visuel.",fieldEmptyForExpirationDate:"Indiquez une date d'expiration.",fieldEmptyForCardholderName:"Saisissez le nom du titulaire de la carte.",fieldTooLongForCardholderName:"Le nom du titulaire de la carte doit comporter moins de 256 caractères.",fieldEmptyForNumber:"Indiquez un numéro.",fieldEmptyForPostalCode:"Indiquez un code postal.",fieldInvalidForCardholderName:"Le nom de ce titulaire de la carte est incorrect.",fieldInvalidForCvv:"Ce cryptogramme visuel n'est pas valide.",fieldInvalidForExpirationDate:"Cette date d'expiration n'est pas valide.",fieldInvalidForNumber:"Ce numéro de carte n'est pas valide.",fieldInvalidForPostalCode:"Ce code postal n'est pas valide.",genericError:"Une erreur est survenue.",hostedFieldsTokenizationFailOnDuplicateError:"Cette carte bancaire existe déjà en tant que mode de paiement enregistré.",hostedFieldsFailedTokenizationError:"Vérifiez les informations et réessayez.",hostedFieldsFieldsInvalidError:"Vérifiez les informations et réessayez.",hostedFieldsTokenizationNetworkErrorError:"Erreur réseau. Réessayez.",hostedFieldsTokenizationCvvVerificationFailedError:"Échec de la vérification de carte bancaire. Vérifiez les informations et réessayez.",paypalButtonMustBeUsed:"Utilisez le bouton PayPal pour poursuivre le paiement.",paypalAccountTokenizationFailedError:"Un problème est survenu lors de l'ajout du compte PayPal. Réessayez.",paypalFlowFailedError:"Une erreur est survenue lors de la connexion à PayPal. Réessayez.",paypalTokenizationRequestActiveError:"L'autorisation de paiement PayPal est déjà en cours.",venmoCanceledError:"Une erreur est survenue. Vérifiez que la dernière version de l'application Venmo est installée sur votre appareil et que votre navigateur prend en charge la redirection vers Venmo.",vaultManagerPaymentMethodDeletionError:"Impossible de supprimer le mode de paiement, réessayez.",venmoAppFailedError:"Nous n'avons pas trouvé l'application Venmo sur votre appareil.",unsupportedCardTypeError:"Ce type de carte n'est pas pris en charge. Essayez une autre carte.",applePayTokenizationError:"Une erreur réseau s'est produite lors du traitement du paiement Apple Pay. Réessayez.",applePayActiveCardError:"Ajoutez une carte prise en charge à votre portefeuille Apple Pay.",cardholderNameLabel:"Nom du titulaire de la carte",cardNumberLabel:"Numéro de carte",cvvLabel:"CVV",cvvThreeDigitLabelSubheading:"(3 chiffres)",cvvFourDigitLabelSubheading:"(4 chiffres)",cardholderNamePlaceholder:"Nom du titulaire de la carte",expirationDateLabel:"Date d'expiration",expirationDateLabelSubheading:"(MM/AA)",expirationDatePlaceholder:"MM/AA",postalCodeLabel:"Code postal",saveCardLabel:"Enregistrer la carte",payWithCard:"Payer avec la carte",endingIn:"Se terminant par {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"Carte",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],225:[function(e,t,i){"use strict";t.exports={payingWith:"שליחת תשלום באמצעות {{paymentSource}}",chooseAnotherWayToPay:"עליך לבחור שיטת תשלום אחרת",chooseAWayToPay:"עליך לבחור שיטת תשלום",otherWaysToPay:"שיטות תשלום אחרות",edit:"עריכה",doneEditing:"סיום",editPaymentMethods:"עריכת שיטות תשלום",CreditCardDeleteConfirmationMessage:"ברצונך למחוק את כרטיס ה-{{secondaryIdentifier}} שמסתיים בספרות {{identifier}}?",PayPalAccountDeleteConfirmationMessage:"ברצונך למחוק את חשבון ה-PayPal {{identifier}}?",VenmoAccountDeleteConfirmationMessage:"האם אתה בטוח שברצונך למחוק את חשבון Venmo הרשום תחת שם המשתמש {{identifier}}?",genericDeleteConfirmationMessage:"האם אתה בטוח שברצונך למחוק שיטת תשלום זו?",deleteCancelButton:"ביטול",deleteConfirmationButton:"מחיקה",fieldEmptyForCvv:"עליך למלא את מספר האבטחה של כרטיס האשראי.",fieldEmptyForExpirationDate:"עליך למלא את תאריך פקיעת התוקף.",fieldEmptyForCardholderName:"עליך למלא את שם בעל הכרטיס.",fieldTooLongForCardholderName:"שם בעל הכרטיס יכול להכיל 256 תווים לכל היותר.",fieldEmptyForNumber:"עליך למלא את המספר.",fieldEmptyForPostalCode:"עליך למלא את המיקוד.",fieldInvalidForCardholderName:"שם בעל הכרטיס אינו חוקי.",fieldInvalidForCvv:"קוד אבטחה זה אינו חוקי.",fieldInvalidForExpirationDate:"תאריך פקיעת התוקף הזה אינו חוקי.",fieldInvalidForNumber:"מספר כרטיס האשראי הזה אינו חוקי.",fieldInvalidForPostalCode:"מיקוד זה אינו חוקי.",genericError:"נראה שמשהו השתבש בצד שלנו.",hostedFieldsTokenizationFailOnDuplicateError:"כרטיס אשראי זה כבר שמור כשיטת תשלום.",hostedFieldsFailedTokenizationError:"עליך לבדוק את הפרטים שלך ולנסות שוב.",hostedFieldsFieldsInvalidError:"עליך לבדוק את הפרטים שלך ולנסות שוב.",hostedFieldsTokenizationNetworkErrorError:"שגיאת רשת. יש לנסות שוב.",hostedFieldsTokenizationCvvVerificationFailedError:"אימות כרטיס האשראי נכשל. עליך לבדוק את הפרטים שלך ולנסות שוב.",paypalButtonMustBeUsed:"להשתמש בלחצן PayPal כדי להמשיך בביצוע התשלום שלך.",paypalAccountTokenizationFailedError:"משהו השתבש בו בעת הוספת חשבון PayPal. יש לנסות שוב.",paypalFlowFailedError:"משהו השתבש בהתחברות ל-PayPal. יש לנסות שוב.",paypalTokenizationRequestActiveError:"אישור התשלום של PayPal כבר מתבצע.",venmoCanceledError:"נראה שמשהו השתבש. עליך לוודא שהגרסה העדכנית ביותר של אפליקציית Venmo מותקנת במכשיר שלך, ושהדפדפן שלך תומך במעבר ל-Venmo.",vaultManagerPaymentMethodDeletionError:"לא הצלחנו למחוק את שיטת התשלום, עליך לנסות שוב.",venmoAppFailedError:"לא מצאנו למצוא את אפליקציית Venmo במכשיר שלך.",unsupportedCardTypeError:"סוג כרטיס זה אינו נתמך. עליך לנסות כרטיס אחר.",applePayTokenizationError:"אירעה שגיאת רשת בעת עיבוד תשלום התשלומים של Apple Pay. יש לנסות שוב.",applePayActiveCardError:"הוספת כרטיס נתמך לארנק Apple Pay שלך.",cardholderNameLabel:"שם בעל הכרטיס",cardNumberLabel:"מספר הכרטיס",cvvLabel:"קוד האבטחה (CVV)",cvvThreeDigitLabelSubheading:"(3 ספרות)",cvvFourDigitLabelSubheading:"(ארבע ספרות)",cardholderNamePlaceholder:"שם בעל הכרטיס",expirationDateLabel:"תאריך פקיעת תוקף",expirationDateLabelSubheading:"(MM/YY)",expirationDatePlaceholder:"MM/YY",postalCodeLabel:"מיקוד",saveCardLabel:"שמירת הכרטיס",payWithCard:"תשלום באמצעות כרטיס אשראי",endingIn:"המסתיים בספרות {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"כרטיס",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],226:[function(e,t,i){"use strict";t.exports={payingWith:"Fizetve ezzel {{paymentSource}}",chooseAnotherWayToPay:"Válasszon másik fizetési módot",chooseAWayToPay:"Válasszon fizetési módot",otherWaysToPay:"Egyéb fizetési módok",edit:"Szerkesztés",doneEditing:"Kész",editPaymentMethods:"Fizetési módok szerkesztése",CreditCardDeleteConfirmationMessage:"Törli a(z) {{identifier}}-re végződő {{secondaryIdentifier}} kártyát?",PayPalAccountDeleteConfirmationMessage:"Törli a(z) {{identifier}} PayPal-számlát?",VenmoAccountDeleteConfirmationMessage:"Biztosan törli a(z) {{identifier}} felhasználónévhez tartozó Venmo-számlát?",genericDeleteConfirmationMessage:"Biztosan törli ezt a fizetési módot?",deleteCancelButton:"Mégse",deleteConfirmationButton:"Törés",fieldEmptyForCvv:"Adja meg a CVV-t.",fieldEmptyForExpirationDate:"Töltse ki a lejárati dátumot.",fieldEmptyForCardholderName:"Töltse ki a kártyatulajdonos nevét.",fieldTooLongForCardholderName:"A kártyatulajdonos neve nem lehet hosszabb mint 256 karakter.",fieldEmptyForNumber:"Töltse ki a számot.",fieldEmptyForPostalCode:"Töltse ki az irányítószámot.",fieldInvalidForCardholderName:"Ez a kártyabirtokos neve nem érvényes.",fieldInvalidForCvv:"Ez a biztonsági kód nem érvényes.",fieldInvalidForExpirationDate:"Ez a lejárati dátum nem érvényes.",fieldInvalidForNumber:"Ez a kártyaszám nem érvényes.",fieldInvalidForPostalCode:"Ez az irányítószám nem érvényes.",genericError:"Hiba történt a mi oldalunkon.",hostedFieldsTokenizationFailOnDuplicateError:"Ez a hitelkártya már szerepel mentett fizetési módként.",hostedFieldsFailedTokenizationError:"Ellenőrizze adatait, majd próbálja újra.",hostedFieldsFieldsInvalidError:"Ellenőrizze adatait, majd próbálja újra.",hostedFieldsTokenizationNetworkErrorError:"Hálózati hiba. Próbálja újra.",hostedFieldsTokenizationCvvVerificationFailedError:"A hitelkártya hitelesítése sikertelen. Ellenőrizze adatait, majd próbálja újra.",paypalButtonMustBeUsed:"A fizetés folytatásához használja a PayPal-gombot.",paypalAccountTokenizationFailedError:"Hiba történt a PayPal-számla hozzáadása közben. Próbálja újra.",paypalFlowFailedError:"Hiba történt a PayPalhoz való kapcsolódás közben. Próbálja újra.",paypalTokenizationRequestActiveError:"A PayPal-fizetés engedélyezése már folyamatban van.",venmoCanceledError:"Hiba történt. Ellenőrizze, hogy eszközére a Venmo-alkalmazás legfrissebb verziója van-e telepítve, és hogy a böngészője támogatja-e a Venmo-ra történő átváltást.",vaultManagerPaymentMethodDeletionError:"Nem sikerült törölni a fizetési módot, próbálja újra.",venmoAppFailedError:"A Venmo-alkalmazást nem találja a rendszer az eszközön.",unsupportedCardTypeError:"Ez a kártyatípus nem támogatott. Próbáljon meg másik kártyát.",applePayTokenizationError:"Hálózati hiba történt az Apple Pay-kifizetés közben. Próbálja újra.",applePayActiveCardError:"Adjon egy támogatott kártyáját az Apple Pay pénztárcához.",cardholderNameLabel:"Kártyatulajdonos neve",cardNumberLabel:"Kártyaszám",cvvLabel:"CVV",cvvThreeDigitLabelSubheading:"(3 számjegy)",cvvFourDigitLabelSubheading:"(4 számjegy)",cardholderNamePlaceholder:"Kártyatulajdonos neve",expirationDateLabel:"Lejárati dátum",expirationDateLabelSubheading:"(HH/ÉÉ)",expirationDatePlaceholder:"HH/ÉÉ",postalCodeLabel:"Irányítószám",saveCardLabel:"Kártya mentése",payWithCard:"Fizetés kártyával",endingIn:"{{lastFourCardDigits}} végű","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"-kártya",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],227:[function(e,t,i){"use strict";t.exports={payingWith:"Membayar dengan {{paymentSource}}",chooseAnotherWayToPay:"Pilih metode pembayaran lain",chooseAWayToPay:"Pilih metode pembayaran",otherWaysToPay:"Metode pembayaran lain",edit:"Edit",doneEditing:"Selesai",editPaymentMethods:"Edit metode pembayaran",CreditCardDeleteConfirmationMessage:"Hapus kartu {{secondaryIdentifier}} yang berakhiran {{identifier}}?",PayPalAccountDeleteConfirmationMessage:"Hapus {{identifier}} rekening PayPal?",VenmoAccountDeleteConfirmationMessage:"Yakin akan menghapus rekening Venmo dengan nama pengguna {{identifier}}?",genericDeleteConfirmationMessage:"Yakin akan menghapus metode pembayaran ini?",deleteCancelButton:"Batalkan",deleteConfirmationButton:"Hapus",fieldEmptyForCvv:"Masukkan CVV.",fieldEmptyForExpirationDate:"Masukkan tanggal akhir berlaku.",fieldEmptyForCardholderName:"Masukkan nama pemegang kartu.",fieldTooLongForCardholderName:"Nama pemegang kartu harus kurang dari 256 karakter.",fieldEmptyForNumber:"Masukkan nomor.",fieldEmptyForPostalCode:"Masukkan kode pos.",fieldInvalidForCardholderName:"Nama pemilik kartu ini tidak valid.",fieldInvalidForCvv:"Kode keamanan ini tidak valid.",fieldInvalidForExpirationDate:"Tanggal akhir berlaku ini tidak valid.",fieldInvalidForNumber:"Nomor kartu ini tidak valid.",fieldInvalidForPostalCode:"Kode pos ini tidak valid.",genericError:"Ada yang salah pada sistem kami.",hostedFieldsTokenizationFailOnDuplicateError:"Kartu kredit ini sudah dimasukkan sebagai metode pembayaran tersimpan.",hostedFieldsFailedTokenizationError:"Periksa informasi Anda dan coba lagi.",hostedFieldsFieldsInvalidError:"Periksa informasi Anda dan coba lagi.",hostedFieldsTokenizationNetworkErrorError:"Masalah jaringan. Coba lagi.",hostedFieldsTokenizationCvvVerificationFailedError:"Verifikasi kartu kredit gagal. Periksa informasi Anda dan coba lagi.",paypalButtonMustBeUsed:"Gunakan tombol PayPal untuk melanjutkan pembayaran Anda.",paypalAccountTokenizationFailedError:"Terjadi kesalahan saat menambahkan rekening PayPal. Coba lagi.",paypalFlowFailedError:"Terjadi kesalahan saat menyambung ke PayPal. Coba lagi.",paypalTokenizationRequestActiveError:"Otorisasi pembayaran PayPal sedang diproses.",venmoCanceledError:"Terdapat kesalahan. Pastikan Anda telah menginstal aplikasi Venmo versi terbaru pada perangkat dan peramban Anda mendukung untuk beralih ke Venmo.",vaultManagerPaymentMethodDeletionError:"Tidak dapat menghapus metode pembayaran, coba lagi.",venmoAppFailedError:"Aplikasi Venmo tidak dapat ditemukan pada perangkat Anda.",unsupportedCardTypeError:"Jenis kartu ini tidak didukung. Coba kartu lainnya.",applePayTokenizationError:"Terjadi kesalahan jaringan sewaktu memproses pembayaran melalui Apple Pay. Coba lagi.",applePayActiveCardError:"Tambahkan kartu yang didukung ke wallet Apple Pay.",cardholderNameLabel:"Nama Pemegang Kartu",cardNumberLabel:"Nomor Kartu",cvvLabel:"CVV",cvvThreeDigitLabelSubheading:"(3 angka)",cvvFourDigitLabelSubheading:"(4 angka)",cardholderNamePlaceholder:"Nama Pemegang Kartu",expirationDateLabel:"Tanggal Kedaluwarsa",expirationDateLabelSubheading:"(BB/TT)",expirationDatePlaceholder:"BB/TT",postalCodeLabel:"Kode Pos",saveCardLabel:"Simpan kartu",payWithCard:"Bayar dengan kartu",endingIn:"Berakhiran {{lastTwoCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"Kartu",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],228:[function(e,t,i){"use strict";var r=e("../lib/assign").assign,n={ar_EG:e("./ar_EG"),cs_CZ:e("./cs_CZ"),da_DK:e("./da_DK"),de_DE:e("./de_DE"),el_GR:e("./el_GR"),en_AU:e("./en_AU"),en_GB:e("./en_GB"),en_IN:e("./en_IN"),en_US:e("./en_US"),es_ES:e("./es_ES"),es_XC:e("./es_XC"),fi_FI:e("./fi_FI"),fr_CA:e("./fr_CA"),fr_FR:e("./fr_FR"),fr_XC:e("./fr_XC"),he_IL:e("./he_IL"),hu_HU:e("./hu_HU"),id_ID:e("./id_ID"),it_IT:e("./it_IT"),ja_JP:e("./ja_JP"),ko_KR:e("./ko_KR"),nl_NL:e("./nl_NL"),no_NO:e("./no_NO"),pl_PL:e("./pl_PL"),pt_BR:e("./pt_BR"),pt_PT:e("./pt_PT"),ru_RU:e("./ru_RU"),sk_SK:e("./sk_SK"),sv_SE:e("./sv_SE"),th_TH:e("./th_TH"),zh_CN:e("./zh_CN"),zh_HK:e("./zh_HK"),zh_TW:e("./zh_TW"),zh_XC:e("./zh_XC")},o={ar:n.ar_EG,cs:n.cs_CZ,da:n.da_DK,de:n.de_DE,el:n.el_GR,en:n.en_US,es:n.es_ES,fi:n.fi_FI,fr:n.fr_FR,id:n.id_ID,it:n.it_IT,hu:n.hu_HU,ja:n.ja_JP,ko:n.ko_KR,nl:n.nl_NL,no:n.no_NO,pl:n.pl_PL,pt:n.pt_PT,ru:n.ru_RU,sk:n.sk_SK,sv:n.sv_SE,th:n.th_TH,zh:n.zh_CN};t.exports={twoCharacterLocaleAliases:o,fiveCharacterLocales:n,translations:r({},o,n)}},{"../lib/assign":193,"./ar_EG":210,"./cs_CZ":211,"./da_DK":212,"./de_DE":213,"./el_GR":214,"./en_AU":215,"./en_GB":216,"./en_IN":217,"./en_US":218,"./es_ES":219,"./es_XC":220,"./fi_FI":221,"./fr_CA":222,"./fr_FR":223,"./fr_XC":224,"./he_IL":225,"./hu_HU":226,"./id_ID":227,"./it_IT":229,"./ja_JP":230,"./ko_KR":231,"./nl_NL":232,"./no_NO":233,"./pl_PL":234,"./pt_BR":235,"./pt_PT":236,"./ru_RU":237,"./sk_SK":238,"./sv_SE":239,"./th_TH":240,"./zh_CN":241,"./zh_HK":242,"./zh_TW":243,"./zh_XC":244}],229:[function(e,t,i){"use strict";t.exports={payingWith:"Pagamento con {{paymentSource}}",chooseAnotherWayToPay:"Scegli di pagare in un altro modo",chooseAWayToPay:"Scegli come pagare",otherWaysToPay:"Altri modi di pagare",edit:"Modifica",doneEditing:"Fine",editPaymentMethods:"Modifica i metodi di pagamento",CreditCardDeleteConfirmationMessage:"Eliminare la carta {{secondaryIdentifier}} le cui ultime cifre sono {{identifier}}?",PayPalAccountDeleteConfirmationMessage:"Eliminare il conto PayPal {{identifier}}?",VenmoAccountDeleteConfirmationMessage:"Vuoi eliminare il conto Venmo con nome utente {{identifier}}?",genericDeleteConfirmationMessage:"Vuoi eliminare questo metodo di pagamento?",deleteCancelButton:"Annulla",deleteConfirmationButton:"Rimuovi",fieldEmptyForCvv:"Immetti il codice di sicurezza (CVV).",fieldEmptyForExpirationDate:"Immetti la data di scadenza.",fieldEmptyForCardholderName:"Immetti il nome del titolare della carta.",fieldTooLongForCardholderName:"Il nome del titolare della carta deve avere meno di 256 caratteri.",fieldEmptyForNumber:"Immetti il numero di carta.",fieldEmptyForPostalCode:"Immetti il CAP.",fieldInvalidForCardholderName:"Il nome del titolare non è valido.",fieldInvalidForCvv:"Il codice di sicurezza non è valido.",fieldInvalidForExpirationDate:"La data di scadenza non è valida.",fieldInvalidForNumber:"Il numero di carta non è valido.",fieldInvalidForPostalCode:"Il CAP non è valido.",genericError:"Si è verificato un errore nei nostri sistemi.",hostedFieldsTokenizationFailOnDuplicateError:"Questa carta di credito è già registrata come metodo di pagamento salvato.",hostedFieldsFailedTokenizationError:"Controlla e riprova.",hostedFieldsFieldsInvalidError:"Controlla e riprova.",hostedFieldsTokenizationNetworkErrorError:"Errore di rete. Riprova.",hostedFieldsTokenizationCvvVerificationFailedError:"La verifica della carta di credito non è andata a buon fine. Controlla i dati e riprova.",paypalButtonMustBeUsed:"Usa il pulsante PayPal per procedere al pagamento.",paypalAccountTokenizationFailedError:"Si è verificato un errore nel collegamento del conto PayPal. Riprova.",paypalFlowFailedError:"Si è verificato un errore di connessione a PayPal. Riprova.",paypalTokenizationRequestActiveError:"L'autorizzazione di pagamento PayPal è già in corso.",venmoCanceledError:"Si è verificato un errore. Assicurati di avere la versione più recente dell'app Venmo installata sul tuo dispositivo e che il browser supporti l'uso di Venmo.",vaultManagerPaymentMethodDeletionError:"Impossibile eliminare il metodo di pagamento; riprova.",venmoAppFailedError:"Impossibile trovare l'app Venmo sul dispositivo in uso.",unsupportedCardTypeError:"Questo tipo di carta non è supportato. Prova con un'altra carta.",applePayTokenizationError:"Si è verificato un errore di rete durante l'elaborazione del pagamento con Apple Pay. Riprova.",applePayActiveCardError:"Collega una carta supportata al tuo Apple Pay Wallet.",cardholderNameLabel:"Titolare della carta",cardNumberLabel:"Numero di carta",cvvLabel:"CVV",cvvThreeDigitLabelSubheading:"(3 cifre)",cvvFourDigitLabelSubheading:"(4 cifre)",cardholderNamePlaceholder:"Titolare della carta",expirationDateLabel:"Data di scadenza",expirationDateLabelSubheading:"(MM/AA)",expirationDatePlaceholder:"MM/AA",postalCodeLabel:"CAP",saveCardLabel:"Salva carta",payWithCard:"Paga con una carta",endingIn:"Le cui ultime cifre sono {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"Carta",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],230:[function(e,t,i){"use strict";t.exports={payingWith:"{{paymentSource}}で支払う",chooseAnotherWayToPay:"別の支払方法を選択する",chooseAWayToPay:"支払方法を選択する",otherWaysToPay:"その他の支払方法",edit:"編集",doneEditing:"完了",editPaymentMethods:"支払方法の編集",CreditCardDeleteConfirmationMessage:"末尾が{{identifier}}の{{secondaryIdentifier}}カードを削除しますか?",PayPalAccountDeleteConfirmationMessage:"PayPalアカウント{{identifier}}を削除しますか?",VenmoAccountDeleteConfirmationMessage:"ユーザー名{{identifier}}のVenmoアカウントを削除してよろしいですか?",genericDeleteConfirmationMessage:"この支払い方法を削除してよろしいですか?",deleteCancelButton:"キャンセル",deleteConfirmationButton:"削除",fieldEmptyForCvv:"セキュリティコードを入力してください。",fieldEmptyForExpirationDate:"有効期限を入力してください。",fieldEmptyForCardholderName:"カード保有者の名前を入力してください。",fieldTooLongForCardholderName:"カード保有者の名前は256文字未満にしてください。",fieldEmptyForNumber:"番号を入力してください。",fieldEmptyForPostalCode:"郵便番号を入力してください。",fieldInvalidForCardholderName:"このカード保有者の名前は無効です。",fieldInvalidForCvv:"このセキュリティコードは無効です。",fieldInvalidForExpirationDate:"この有効期限は無効です。",fieldInvalidForNumber:"このカード番号は無効です。",fieldInvalidForPostalCode:"この郵便番号は無効です。",genericError:"弊社側で問題が発生しました。",hostedFieldsTokenizationFailOnDuplicateError:"このクレジットカードは、保存済みの支払方法としてすでに登録されています。",hostedFieldsFailedTokenizationError:"情報を確認してもう一度お試しください。",hostedFieldsFieldsInvalidError:"情報を確認してもう一度お試しください。",hostedFieldsTokenizationNetworkErrorError:"ネットワークエラーです。もう一度お試しください。",hostedFieldsTokenizationCvvVerificationFailedError:"クレジットカードの認証に失敗しました。情報を確認してもう一度お試しください。",paypalButtonMustBeUsed:"お客さまの支払いを続行するには、PayPalボタンを使用します。",paypalAccountTokenizationFailedError:"PayPalアカウントの追加で問題が発生しました。もう一度お試しください。",paypalFlowFailedError:"PayPalへの接続に問題が発生しました。もう一度お試しください。",paypalTokenizationRequestActiveError:"PayPal支払いの承認はすでに処理中です。",venmoCanceledError:"問題が発生しました。お客さまの端末にインストールされているVenmoアプリが最新のバージョンであること、お使いのブラウザがVenmoへの切り替えをサポートしていることを確認してください。",vaultManagerPaymentMethodDeletionError:"支払方法を削除できません。もう一度お試しください。",venmoAppFailedError:"お客さまの端末でVenmoアプリが見つかりませんでした。",unsupportedCardTypeError:"このカードタイプはサポートされていません。別のカードをご使用ください。",applePayTokenizationError:"Apple Payの支払いを処理する際にネットワークエラーが発生しました。もう一度お試しください。",applePayActiveCardError:"Apple Payウォレットに対応しているカードを追加してください。",cardholderNameLabel:"カード保有者の名前",cardNumberLabel:"カード番号",cvvLabel:"セキュリティコード",cvvThreeDigitLabelSubheading:"(3桁)",cvvFourDigitLabelSubheading:"(4桁)",cardholderNamePlaceholder:"カード保有者の名前",expirationDateLabel:"有効期限",expirationDateLabelSubheading:"(MM/YY)",expirationDatePlaceholder:"MM/YY",postalCodeLabel:"郵便番号",saveCardLabel:"カードを保存",payWithCard:"カードで支払う",endingIn:"末尾が{{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"カード",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"銀聯(UnionPay)"}},{}],231:[function(e,t,i){"use strict";t.exports={payingWith:"{{paymentSource}}(으)로 결제",chooseAnotherWayToPay:"다른 결제수단 선택",chooseAWayToPay:"결제수단 선택",otherWaysToPay:"다른 방법으로 결제",edit:"편집",doneEditing:"완료",editPaymentMethods:"결제수단 편집",CreditCardDeleteConfirmationMessage:"끝번호가 {{identifier}}인 {{secondaryIdentifier}} 카드를 삭제하시겠어요?",PayPalAccountDeleteConfirmationMessage:"PayPal 계정 {{identifier}}을(를) 삭제하시겠어요?",VenmoAccountDeleteConfirmationMessage:"사용자 이름이 {{identifier}}인 Venmo 계정을 삭제하시겠어요?",genericDeleteConfirmationMessage:"이 결제수단을 삭제하시겠어요?",deleteCancelButton:"취소",deleteConfirmationButton:"삭제",fieldEmptyForCvv:"CVV를 입력하세요.",fieldEmptyForExpirationDate:"만료일을 입력하세요.",fieldEmptyForCardholderName:"카드 소유자 이름을 입력하세요.",fieldTooLongForCardholderName:"카드 소유자 이름은 256자 미만이어야 합니다.",fieldEmptyForNumber:"번호를 입력하세요.",fieldEmptyForPostalCode:"우편번호를 입력하세요.",fieldInvalidForCardholderName:"이 카드 소유자 이름은 유효하지 않습니다.",fieldInvalidForCvv:"이 보안 코드가 올바르지 않습니다.",fieldInvalidForExpirationDate:"이 만료일이 올바르지 않습니다.",fieldInvalidForNumber:"이 카드 번호가 올바르지 않습니다.",fieldInvalidForPostalCode:"이 우편번호가 올바르지 않습니다.",genericError:"저희 쪽에 문제가 발생했습니다.",hostedFieldsTokenizationFailOnDuplicateError:"저장된 결제수단에 이미 이 신용카드가 존재합니다.",hostedFieldsFailedTokenizationError:"정보를 확인하고 다시 시도해 주세요.",hostedFieldsFieldsInvalidError:"정보를 확인하고 다시 시도해 주세요.",hostedFieldsTokenizationNetworkErrorError:"네트워크 오류가 발생했습니다. 다시 시도해 주세요.",hostedFieldsTokenizationCvvVerificationFailedError:"신용카드 인증에 실패했습니다. 정보를 확인하고 다시 시도해 주세요.",paypalButtonMustBeUsed:"결제를 계속하려면 PayPal 버튼을 사용하세요.",paypalAccountTokenizationFailedError:"PayPal 계정을 추가하는 동안 문제가 발생했습니다. 다시 시도해 주세요.",paypalFlowFailedError:"PayPal 계정을 연결하는 동안 문제가 발생했습니다. 다시 시도해 주세요.",paypalTokenizationRequestActiveError:"PayPal 결제 승인이 이미 진행 중입니다.",venmoCanceledError:"오류가 발생했습니다. 기기에 최신 버전의 Venmo 앱이 설치되어 있으며 브라우저가 Venmo로 전환 기능을 지원하는지 확인하세요.",vaultManagerPaymentMethodDeletionError:"결제수단을 삭제할 수 없습니다. 다시 시도해 주세요.",venmoAppFailedError:"기기에서 Venmo 앱을 찾을 수 없습니다.",unsupportedCardTypeError:"이 카드 형식은 지원되지 않습니다. 다른 카드로 시도해 주세요.",applePayTokenizationError:"Apple Pay 결제를 처리하는 동안 네트워크 오류가 발생했습니다. 다시 시도해 주세요.",applePayActiveCardError:"Apple Pay 전자지갑에 지원되는 카드를 추가하세요.",cardholderNameLabel:"카드 소유자 이름",cardNumberLabel:"카드 번호",cvvLabel:"CVV",cvvThreeDigitLabelSubheading:"(3자리)",cvvFourDigitLabelSubheading:"(4자리)",cardholderNamePlaceholder:"카드 소유자 이름",expirationDateLabel:"만료일",expirationDateLabelSubheading:"(MM/YY)",expirationDatePlaceholder:"MM/YY",postalCodeLabel:"우편번호",saveCardLabel:"카드 저장",payWithCard:"카드로 결제",endingIn:"끝번호: {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"카드",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],232:[function(e,t,i){"use strict";t.exports={payingWith:"Betalen met {{paymentSource}}",chooseAnotherWayToPay:"Kies een andere betaalmethode",chooseAWayToPay:"Kies een betaalwijze",otherWaysToPay:"Andere manieren om te betalen",edit:"Bewerk",doneEditing:"Klaar",editPaymentMethods:"Betaalmethoden aanpassen",CreditCardDeleteConfirmationMessage:"{{secondaryIdentifier}}-kaart eindigend op {{identifier}} verwijderen?",PayPalAccountDeleteConfirmationMessage:"PayPal-rekening {{identifier}} verwijderen?",VenmoAccountDeleteConfirmationMessage:"Weet u zeker dat u Venmo-rekening met gebruikersnaam {{identifier}} wilt verwijderen?",genericDeleteConfirmationMessage:"Weet u zeker dat u deze betaalmethode wilt verwijderen?",deleteCancelButton:"Annuleren",deleteConfirmationButton:"Verwijderen",fieldEmptyForCvv:"Vul een CSC in.",fieldEmptyForExpirationDate:"Vul een vervaldatum in.",fieldEmptyForCardholderName:"Vul een naam voor de kaarthouder in.",fieldTooLongForCardholderName:"De naam van de kaarthouder moet korter zijn dan 256 tekens.",fieldEmptyForNumber:"Vul een nummer in.",fieldEmptyForPostalCode:"Vul een postcode in.",fieldInvalidForCardholderName:"Naam kaarthouder is ongeldig.",fieldInvalidForCvv:"Deze CSC is ongeldig.",fieldInvalidForExpirationDate:"Deze vervaldatum is ongeldig.",fieldInvalidForNumber:"Dit creditcardnummer is ongeldig.",fieldInvalidForPostalCode:"Deze postcode is ongeldig.",genericError:"Er is iets fout gegaan.",hostedFieldsTokenizationFailOnDuplicateError:"Deze creditcard staat al geregistreerd als een opgeslagen betaalmethode.",hostedFieldsFailedTokenizationError:"Controleer uw gegevens en probeer het opnieuw.",hostedFieldsFieldsInvalidError:"Controleer uw gegevens en probeer het opnieuw.",hostedFieldsTokenizationNetworkErrorError:"Netwerkfout. Probeer het opnieuw.",hostedFieldsTokenizationCvvVerificationFailedError:"De controle van de creditcard is mislukt. Controleer uw gegevens en probeer het opnieuw.",paypalButtonMustBeUsed:"Gebruik de PayPal-knop om door te gaan met uw betaling.",paypalAccountTokenizationFailedError:"Er is iets misgegaan bij het toevoegen van de PayPal-rekening. Probeer het opnieuw.",paypalFlowFailedError:"Er is iets misgegaan bij de verbinding met PayPal. Probeer het opnieuw.",paypalTokenizationRequestActiveError:"De autorisatie van de PayPal-betaling is al in behandeling.",venmoCanceledError:"Er ging iets fout. Controleer of de meest recente versie van de Venmo-app op je apparaat is geïnstalleerd en dat je browser overschakelen naar Venmo ondersteunt.",vaultManagerPaymentMethodDeletionError:"Kan de betaalmethode niet verwijderen, probeer het opnieuw.",venmoAppFailedError:"De Venmo-app is niet aangetroffen op je apparaat.",unsupportedCardTypeError:"Dit type creditcard wordt niet ondersteund. Gebruik een andere creditcard.",applePayTokenizationError:"Er is een netwerkfout opgetreden bij het verwerken van de Apple Pay-betaling. Probeer het opnieuw.",applePayActiveCardError:"Voeg een ondersteunde creditcard toe aan je Apple Pay-wallet.",cardholderNameLabel:"Naam kaarthouder",cardNumberLabel:"Creditcardnummer",cvvLabel:"CSC",cvvThreeDigitLabelSubheading:"(3 cijfers)",cvvFourDigitLabelSubheading:"(4 cijfers)",cardholderNamePlaceholder:"Naam kaarthouder",expirationDateLabel:"Vervaldatum",expirationDateLabelSubheading:"(MM/JJ)",expirationDatePlaceholder:"MM/JJ",postalCodeLabel:"Postcode",saveCardLabel:"Creditcard opslaan",payWithCard:"Betalen met creditcard",endingIn:"Eindigend op {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"Creditcard",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],233:[function(e,t,i){"use strict";t.exports={payingWith:"Betaling med {{paymentSource}}",chooseAnotherWayToPay:"Velg en annen måte å betale på",chooseAWayToPay:"Velg betalingsmåte",otherWaysToPay:"Andre måter å betale på",edit:"Rediger",doneEditing:"Fullført",editPaymentMethods:"Endre betalingsmetodene dine",CreditCardDeleteConfirmationMessage:"Vil du slette {{secondaryIdentifier}}-kortet som slutter på {{identifier}}?",PayPalAccountDeleteConfirmationMessage:"Vil du slette PayPal-kontoen {{identifier}}?",VenmoAccountDeleteConfirmationMessage:"Er du sikker på at du vil slette Venmo-kontoen med brukernavnet {{identifier}}?",genericDeleteConfirmationMessage:"Er du sikker på at du vil slette denne betalingsmetoden?",deleteCancelButton:"Avbryt",deleteConfirmationButton:"Slett",fieldEmptyForCvv:"Oppgi en kortsikkerhetskode (CVV).",fieldEmptyForExpirationDate:"Oppgi en utløpsdato.",fieldEmptyForCardholderName:"Oppgi et navn for kortinnehaveren.",fieldTooLongForCardholderName:"Makslengden for kortinnehaverens navn er 256 tegn.",fieldEmptyForNumber:"Oppgi et nummer.",fieldEmptyForPostalCode:"Oppgi et postnummer.",fieldInvalidForCardholderName:"Denne kortinnehaverens navn er ikke gyldig.",fieldInvalidForCvv:"Denne sikkerhetskoden er ikke gyldig.",fieldInvalidForExpirationDate:"Denne utløpsdatoen er ikke gyldig.",fieldInvalidForNumber:"Dette kortnummeret er ikke gyldig.",fieldInvalidForPostalCode:"Dette postnummeret er ikke gyldig.",genericError:"Noe gikk galt hos oss.",hostedFieldsTokenizationFailOnDuplicateError:"Dette betalingskortet eksisterer allerede som en lagret betalingsmetode.",hostedFieldsFailedTokenizationError:"Kontroller informasjonen og prøv på nytt.",hostedFieldsFieldsInvalidError:"Kontroller informasjonen og prøv på nytt.",hostedFieldsTokenizationNetworkErrorError:"Nettverksfeil. Prøv på nytt.",hostedFieldsTokenizationCvvVerificationFailedError:"Bekreftelsen av betalingskortet mislyktes. Kontroller informasjonen og prøv på nytt.",paypalButtonMustBeUsed:"Bruk PayPal-knappen for å fortsette med betalingen.",paypalAccountTokenizationFailedError:"Noe gikk galt da PayPal-kontoen ble lagt til. Prøv på nytt.",paypalFlowFailedError:"Det oppsto et problem med tilkoblingen til PayPal. Prøv på nytt.",paypalTokenizationRequestActiveError:"Godkjenning av PayPal-betalingen pågår allerede",venmoCanceledError:"Noe gikk galt. Kontroller at du har installert den nyeste versjonen av Venmo-appen på enheten og at nettleseren din støtter bytte til Venmo.",vaultManagerPaymentMethodDeletionError:"Kunne ikke slette betalingsmetoden. Prøv på nytt.",venmoAppFailedError:"Finner ikke Venmo-appen på enheten.",unsupportedCardTypeError:"Denne korttypen støttes ikke. Prøv med et annet kort.",applePayTokenizationError:"Det oppsto en nettverksfeil under behandlingen av Apple Pay-betalingen. Prøv på nytt.",applePayActiveCardError:"Legg til et kort som støttes i Apple Pay-lommeboken din.",cardholderNameLabel:"Kortinnehaverens navn",cardNumberLabel:"Kortnummer",cvvLabel:"CVV",cvvThreeDigitLabelSubheading:"(3 siffer)",cvvFourDigitLabelSubheading:"(4 siffer)",cardholderNamePlaceholder:"Kortinnehaverens navn",expirationDateLabel:"Utløpsdato",expirationDateLabelSubheading:"(MM/ÅÅ)",expirationDatePlaceholder:"MM/ÅÅ",postalCodeLabel:"Postnummer",saveCardLabel:"Lagre kort",payWithCard:"Betal med kort",endingIn:"Slutter på {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"Kort",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],234:[function(e,t,i){"use strict";t.exports={payingWith:"Źródło finansowania płatności: {{paymentSource}}",chooseAnotherWayToPay:"Wybierz inne źródło finansowania płatności",chooseAWayToPay:"Wybierz źródło finansowania płatności",otherWaysToPay:"Inne źródła finansowania płatności",edit:"Edytuj",doneEditing:"Gotowe",editPaymentMethods:"Edytuj źródła finansowania płatności",CreditCardDeleteConfirmationMessage:"Usunąć kartę {{secondaryIdentifier}} o numerze zakończonym cyframi {{identifier}}?",PayPalAccountDeleteConfirmationMessage:"Usunąć konto PayPal {{identifier}}?",VenmoAccountDeleteConfirmationMessage:"Czy na pewno chcesz usunąć konto Venmo z nazwą użytkownika {{identifier}}?",genericDeleteConfirmationMessage:"Czy na pewno chcesz usunąć to źródło finansowania płatności?",deleteCancelButton:"Anuluj",deleteConfirmationButton:"Usuń",fieldEmptyForCvv:"Podaj kod bezpieczeństwa.",fieldEmptyForExpirationDate:"Podaj datę ważności.",fieldEmptyForCardholderName:"Podaj imię i nazwisko posiadacza karty.",fieldTooLongForCardholderName:"Imię i nazwisko posiadacza karty musi mieć mniej niż 256 znaków.",fieldEmptyForNumber:"Podaj numer.",fieldEmptyForPostalCode:"Podaj kod pocztowy.",fieldInvalidForCardholderName:"To imię i nazwisko posiadacza karty jest nieprawidłowe.",fieldInvalidForCvv:"Podany kod bezpieczeństwa jest nieprawidłowy.",fieldInvalidForExpirationDate:"Podana data ważności jest nieprawidłowa.",fieldInvalidForNumber:"Podany numer karty jest nieprawidłowy.",fieldInvalidForPostalCode:"Podany kod pocztowy jest nieprawidłowy.",genericError:"Wystąpił błąd po naszej stronie.",hostedFieldsTokenizationFailOnDuplicateError:"Ta karta kredytowa jest już zapisana jako źródło finansowania płatności.",hostedFieldsFailedTokenizationError:"Sprawdź swoje informacje i spróbuj ponownie.",hostedFieldsFieldsInvalidError:"Sprawdź swoje informacje i spróbuj ponownie.",hostedFieldsTokenizationNetworkErrorError:"Błąd sieci. Spróbuj ponownie.",hostedFieldsTokenizationCvvVerificationFailedError:"Weryfikacja karty kredytowej nie powiodła się. Sprawdź swoje informacje i spróbuj ponownie.",paypalButtonMustBeUsed:"Użyj przycisku PayPal, aby kontynuować płatność.",paypalAccountTokenizationFailedError:"Coś poszło nie tak podczas dodawania konta PayPal. Spróbuj ponownie.",paypalFlowFailedError:"Coś poszło nie tak podczas łączenia z systemem PayPal. Spróbuj ponownie.",paypalTokenizationRequestActiveError:"Autoryzacja płatności PayPal jest już w trakcie realizacji.",venmoCanceledError:"Wystąpił problem. Upewnij się, czy na swoim urządzeniu masz zainstalowaną najnowszą wersję aplikacji Venmo i Twoja przeglądarka ją obsługuje.",vaultManagerPaymentMethodDeletionError:"Nie można usunąć źródła finansowania płatności. Spróbuj ponownie.",venmoAppFailedError:"Nie można odnaleźć aplikacji Venmo na urządzeniu.",unsupportedCardTypeError:"Ten typ karty nie jest obsługiwany. Spróbuj użyć innej karty.",applePayTokenizationError:"Wystąpił błąd sieci podczas przetwarzania płatności Apple Pay. Spróbuj ponownie.",applePayActiveCardError:"Dodaj obsługiwaną kartę do portfela Apple Pay.",cardholderNameLabel:"Imię i nazwisko posiadacza karty",cardNumberLabel:"Numer karty",cvvLabel:"Kod CVC",cvvThreeDigitLabelSubheading:"(3 cyfry)",cvvFourDigitLabelSubheading:"(4 cyfry)",cardholderNamePlaceholder:"Imię i nazwisko posiadacza karty",expirationDateLabel:"Data ważności",expirationDateLabelSubheading:"(MM/RR)",expirationDatePlaceholder:"MM/RR",postalCodeLabel:"Kod pocztowy",saveCardLabel:"Zapisz kartę",payWithCard:"Zapłać kartą",endingIn:"O numerze zakończonym cyframi {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"Karta",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],235:[function(e,t,i){"use strict";t.exports={payingWith:"Pagando com {{paymentSource}}",chooseAnotherWayToPay:"Escolher outro meio de pagamento",chooseAWayToPay:"Escolher um meio de pagamento",otherWaysToPay:"Outro meio de pagamento",edit:"Editar",doneEditing:"Concluído",editPaymentMethods:"Editar meios de pagamento",CreditCardDeleteConfirmationMessage:"Excluir cartão com {{secondaryIdentifier}} com final {{identifier}}?",PayPalAccountDeleteConfirmationMessage:"Excluir conta do PayPal {{identifier}}?",VenmoAccountDeleteConfirmationMessage:"Tem certeza de que deseja excluir a conta do Venmo com o nome de usuário {{identifier}}?",genericDeleteConfirmationMessage:"Tem certeza de que deseja excluir este meio de pagamento?",deleteCancelButton:"Cancelar",deleteConfirmationButton:"Excluir",fieldEmptyForCvv:"Informe o Código de Segurança.",fieldEmptyForExpirationDate:"Informe a data de vencimento.",fieldEmptyForCardholderName:"Informe o nome do titular do cartão.",fieldTooLongForCardholderName:"O nome do titular do cartão deve ter menos de 256 caracteres.",fieldEmptyForNumber:"Informe um número.",fieldEmptyForPostalCode:"Informe um CEP.",fieldInvalidForCardholderName:"O nome do titular do cartão é inválido.",fieldInvalidForCvv:"Este código de segurança não é válido.",fieldInvalidForExpirationDate:"Esta data de vencimento não é válida.",fieldInvalidForNumber:"O número do cartão não é válido.",fieldInvalidForPostalCode:"Este CEP não é válido.",genericError:"Ocorreu um erro.",hostedFieldsTokenizationFailOnDuplicateError:"Este cartão de crédito já está salvo em seus meios de pagamento.",hostedFieldsFailedTokenizationError:"Verifique as informações e tente novamente.",hostedFieldsFieldsInvalidError:"Verifique as informações e tente novamente.",hostedFieldsTokenizationNetworkErrorError:"Erro de rede. Tente novamente.",hostedFieldsTokenizationCvvVerificationFailedError:"Falha ao verificar o cartão de crédito. Verifique as informações e tente novamente.",paypalButtonMustBeUsed:"Use o botão do PayPal para prosseguir com o seu pagamento.",paypalAccountTokenizationFailedError:"Ocorreu um erro ao adicionar a conta do PayPal. Tente novamente.",paypalFlowFailedError:"Ocorreu um erro de conexão com o PayPal. Tente novamente.",paypalTokenizationRequestActiveError:"A autorização de pagamento do PayPal já está em andamento.",venmoCanceledError:"Ocorreu um erro. Certifique-se de ter a versão mais recente do aplicativo Venmo instalado no seu dispositivo e que o seu navegador suporte a mudança para o Venmo.",vaultManagerPaymentMethodDeletionError:"Não é possível excluir o meio de pagamento, tente novamente.",venmoAppFailedError:"Não foi possível encontrar o aplicativo Venmo no seu dispositivo.",unsupportedCardTypeError:"Este tipo de cartão não é aceito. Experimente outro cartão.",applePayTokenizationError:"Ocorreu um erro de rede ao processar o pagamento com Apple Pay. Tente novamente.",applePayActiveCardError:"Adicione cartão suportado à sua carteira do Apple Pay.",cardholderNameLabel:"Nome do titular do cartão",cardNumberLabel:"Número do cartão",cvvLabel:"CSC",cvvThreeDigitLabelSubheading:"(3 dígitos)",cvvFourDigitLabelSubheading:"(4 dígitos)",cardholderNamePlaceholder:"Nome do titular do cartão",expirationDateLabel:"Data de vencimento",expirationDateLabelSubheading:"(MM/AA)",expirationDatePlaceholder:"MM/AA",postalCodeLabel:"CEP",saveCardLabel:"Salvar cartão",payWithCard:"Pague com seu cartão",endingIn:"Com final {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"Cartão",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],236:[function(e,t,i){"use strict";t.exports={payingWith:"Pagar com {{paymentSource}}",chooseAnotherWayToPay:"Escolher outra forma de pagamento",chooseAWayToPay:"Escolha um meio de pagamento",otherWaysToPay:"Outras formas de pagamento",edit:"Editar",doneEditing:"Concluído",editPaymentMethods:"Editar meios de pagamento",CreditCardDeleteConfirmationMessage:"Eliminar o cartão {{secondaryIdentifier}} terminado em {{identifier}}?",PayPalAccountDeleteConfirmationMessage:"Eliminar {{identifier}} da conta PayPal?",VenmoAccountDeleteConfirmationMessage:"Tem a certeza de que pretende eliminar a conta Venmo com o nome de utilizador {{identifier}}?",genericDeleteConfirmationMessage:"Tem certeza de que pretende eliminar este meio de pagamento?",deleteCancelButton:"Cancelar",deleteConfirmationButton:"Eliminar",fieldEmptyForCvv:"Introduza o código CVV.",fieldEmptyForExpirationDate:"Introduza a data de validade.",fieldEmptyForCardholderName:"Introduza um nome do titular do cartão.",fieldTooLongForCardholderName:"O nome do titular do cartão tem de ter menos de 256 carateres.",fieldEmptyForNumber:"Introduza um número.",fieldEmptyForPostalCode:"Introduza o código postal.",fieldInvalidForCardholderName:"Este nome do titular do cartão não é válido.",fieldInvalidForCvv:"Este código de segurança não é válido.",fieldInvalidForExpirationDate:"Esta data de validade não é correta.",fieldInvalidForNumber:"Este número de cartão não é válido.",fieldInvalidForPostalCode:"Este código postal não é válido.",genericError:"Tudo indica que houve um problema.",hostedFieldsTokenizationFailOnDuplicateError:"Este cartão de crédito já está registado como um meio de pagamento guardado.",hostedFieldsFailedTokenizationError:"Verifique os dados e tente novamente.",hostedFieldsFieldsInvalidError:"Verifique os dados e tente novamente.",hostedFieldsTokenizationNetworkErrorError:"Erro de rede. Tente novamente.",hostedFieldsTokenizationCvvVerificationFailedError:"A verificação do cartão de crédito falhou. Verifique os dados e tente novamente.",paypalButtonMustBeUsed:"Use o botão PayPal para continuar com o seu pagamento.",paypalAccountTokenizationFailedError:"Ocorreu um erro ao associar a conta PayPal. Tente novamente.",paypalFlowFailedError:"Ocorreu um erro na ligação com PayPal. Tente novamente.",paypalTokenizationRequestActiveError:"Já há uma autorização de pagamento PayPal em curso.",venmoCanceledError:"Ocorreu um erro. Certifique-se de que tem a versão mais recente da aplicação Venmo instalada no seu dispositivo e que o navegador suporta a mudança para o Venmo.",vaultManagerPaymentMethodDeletionError:"Não é possível eliminar o meio de pagamento, tente novamente.",venmoAppFailedError:"Não foi possível encontrar a aplicação Venmo no dispositivo.",unsupportedCardTypeError:"Este tipo de cartão não é suportado. Tente usar outro cartão.",applePayTokenizationError:"Ocorreu um erro de rede ao processar o pagamento com Apple Pay. Tente novamente.",applePayActiveCardError:"Adicione um cartão suportado à sua carteira Apple Pay.",cardholderNameLabel:"Nome do titular do cartão",cardNumberLabel:"Número do cartão",cvvLabel:"CVV",cvvThreeDigitLabelSubheading:"(3 dígitos)",cvvFourDigitLabelSubheading:"(4 dígitos)",cardholderNamePlaceholder:"Nome do titular do cartão",expirationDateLabel:"Data de validade",expirationDateLabelSubheading:"(MM/AA)",expirationDatePlaceholder:"MM/AA",postalCodeLabel:"Código postal",saveCardLabel:"Guardar cartão",payWithCard:"Pagar com cartão",endingIn:"Terminado em {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"Cartão",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],237:[function(e,t,i){"use strict";t.exports={payingWith:"Способы оплаты: {{paymentSource}}",chooseAnotherWayToPay:"Выберите другой способ оплаты",chooseAWayToPay:"Выберите способ оплаты",otherWaysToPay:"Другие способы оплаты",edit:"Редактировать",doneEditing:"Готово",editPaymentMethods:"Редактировать способы оплаты",CreditCardDeleteConfirmationMessage:"Удалить карту {{secondaryIdentifier}}, оканчивающуюся на {{identifier}}?",PayPalAccountDeleteConfirmationMessage:"Удалить счет PayPal {{identifier}}?",VenmoAccountDeleteConfirmationMessage:"Вы действительно хотите удалить счет Venmo с именем пользователя {{identifier}}?",genericDeleteConfirmationMessage:"Вы действительно хотите удалить этот способ оплаты?",deleteCancelButton:"Отмена",deleteConfirmationButton:"Удалить",fieldEmptyForCvv:"Укажите код безопасности.",fieldEmptyForExpirationDate:"Укажите дату окончания срока действия.",fieldEmptyForCardholderName:"Введите имя и фамилию владельца карты.",fieldTooLongForCardholderName:"Имя владельца карты должно содержать не более 256 символов.",fieldEmptyForNumber:"Введите номер.",fieldEmptyForPostalCode:"Укажите почтовый индекс.",fieldInvalidForCardholderName:"Недопустимое имя владельца карты.",fieldInvalidForCvv:"Этот код безопасности недействителен.",fieldInvalidForExpirationDate:"Эта дата окончания срока действия недействительна.",fieldInvalidForNumber:"Этот номер карты недействителен.",fieldInvalidForPostalCode:"Этот почтовый индекс недействителен.",genericError:"Возникла проблема с нашей стороны.",hostedFieldsTokenizationFailOnDuplicateError:"Эта кредитная карта уже указана как сохраненный источник средств.",hostedFieldsFailedTokenizationError:"Проверьте правильность ввода данных и повторите попытку.",hostedFieldsFieldsInvalidError:"Проверьте правильность ввода данных и повторите попытку.",hostedFieldsTokenizationNetworkErrorError:"Ошибка сети. Повторите попытку.",hostedFieldsTokenizationCvvVerificationFailedError:"Проверка банковской карты не выполнена. Проверьте правильность ввода данных и повторите попытку.",paypalButtonMustBeUsed:"Используйте кнопку PayPal, чтобы продолжить совершение оплаты.",paypalAccountTokenizationFailedError:"Что-то пошло не так — не удалось добавить учетную запись PayPal. Повторите попытку.",paypalFlowFailedError:"Что-то пошло не так — не удалось подключиться к системе PayPal. Повторите попытку.",paypalTokenizationRequestActiveError:"Выполняется авторизация платежа PayPal.",venmoCanceledError:"Возникла ошибка. Просим вас убедиться, что у вас установлена новейшая версия приложения Venmo и ваш браузер поддерживает переключение к Venmo.",vaultManagerPaymentMethodDeletionError:"Не удалось удалить способ оплаты. Повторите попытку.",venmoAppFailedError:"Приложение Venmo не обнаружено на вашем устройстве.",unsupportedCardTypeError:"Этот тип карты не поддерживается. Попробуйте воспользоваться другой картой.",applePayTokenizationError:"При обработке платежа через Apple Pay возникла сетевая ошибка. Повторите попытку.",applePayActiveCardError:"Добавьте поддерживаемую карту к своему счету Apple Pay.",cardholderNameLabel:"Имя и фамилия владельца",cardNumberLabel:"Номер карты",cvvLabel:"Код безопасности",cvvThreeDigitLabelSubheading:"(3 цифры)",cvvFourDigitLabelSubheading:"(4 цифры)",cardholderNamePlaceholder:"Имя и фамилия владельца",expirationDateLabel:"Срок действия",expirationDateLabelSubheading:"(ММ/ГГ)",expirationDatePlaceholder:"ММ/ГГ",postalCodeLabel:"Индекс",saveCardLabel:"Сохранить карту",payWithCard:"Оплатить картой",endingIn:"Последние четыре цифры номера карты: {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"Карта",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],238:[function(e,t,i){"use strict";t.exports={payingWith:"Spôsob úhrady: {{paymentSource}}",chooseAnotherWayToPay:"Vyberte iný spôsob platby",chooseAWayToPay:"Vyberte spôsob platby",otherWaysToPay:"Iné spôsoby platby",edit:"Upraviť",doneEditing:"Hotovo",editPaymentMethods:"Upraviť spôsoby platby",CreditCardDeleteConfirmationMessage:"Odstrániť kartu {{secondaryIdentifier}} končiacu na {{identifier}}?",PayPalAccountDeleteConfirmationMessage:"Odstrániť účet PayPal {{identifier}}?",VenmoAccountDeleteConfirmationMessage:"Naozaj chcete odstrániť účet Venmo s menom používateľa {{identifier}}?",genericDeleteConfirmationMessage:"Ste si istí, že chcete tento spôsob platby odstrániť?",deleteCancelButton:"Zrušiť",deleteConfirmationButton:"Odstrániť",fieldEmptyForCvv:"Zadajte číslo CVV.",fieldEmptyForExpirationDate:"Zadajte dátum skončenia platnosti.",fieldEmptyForCardholderName:"Zadajte meno majiteľa karty.",fieldTooLongForCardholderName:"Meno majiteľa karty musí obsahovať menej ako 256 znakov.",fieldEmptyForNumber:"Zadajte číslo.",fieldEmptyForPostalCode:"Zadajte PSČ.",fieldInvalidForCardholderName:"Toto meno majiteľa karty je neplatné.",fieldInvalidForCvv:"Tento bezpečnostný kód je neplatný.",fieldInvalidForExpirationDate:"Tento dátum skončenia platnosti je neplatný.",fieldInvalidForNumber:"Toto číslo karty je neplatné.",fieldInvalidForPostalCode:"Toto PSČ je neplatné.",genericError:"Vyskytla sa chyba na našej strane.",hostedFieldsTokenizationFailOnDuplicateError:"Táto kreditná karta už existuje ako uložená metóda platby.",hostedFieldsFailedTokenizationError:"Skontrolujte údaje a skúste to znova.",hostedFieldsFieldsInvalidError:"Skontrolujte údaje a skúste to znova.",hostedFieldsTokenizationNetworkErrorError:"Chyba v sieti. Skúste to znova.",hostedFieldsTokenizationCvvVerificationFailedError:"Overenie kreditnej karty nebolo úspešné. Skontrolujte údaje a skúste to znova.",paypalButtonMustBeUsed:"Ak chcete pokračovať v platbe, použite tlačidlo PayPal.",paypalAccountTokenizationFailedError:"Vyskytla sa chyba pri pridávaní účtu PayPal. Skúste to znova.",paypalFlowFailedError:"Vyskytla sa chyba pri pripájaní do účtu PayPal. Skúste to znova.",paypalTokenizationRequestActiveError:"Autorizácia platby PayPal už prebieha.",venmoCanceledError:"Vyskytla sa chyba. Skontrolujte, či máte v zariadení nainštalovanú najnovšiu verziu aplikácie Venmo a či prehliadač podporuje prechod na aplikáciu Venmo.",vaultManagerPaymentMethodDeletionError:"Nebolo možné odstrániť spôsob platby, skúste to znova.",venmoAppFailedError:"Aplikáciu Venmo sa vo vašom zariadení nepodarilo nájsť.",unsupportedCardTypeError:"Tento typ karty nie je podporovaný. Skúste inú kartu.",applePayTokenizationError:"Počas spracúvania platby cez Apple Pay došlo k chybe siete. Skúste to znova.",applePayActiveCardError:"Pridajte si podporovanú kartu do peňaženky Apple Pay.",cardholderNameLabel:"Meno majiteľa karty",cardNumberLabel:"Číslo karty",cvvLabel:"CVV",cvvThreeDigitLabelSubheading:"(3 číslice)",cvvFourDigitLabelSubheading:"(4 číslice)",cardholderNamePlaceholder:"Meno majiteľa karty",expirationDateLabel:"Dátum skončenia platnosti",expirationDateLabelSubheading:"(MM/RR)",expirationDatePlaceholder:"MM/RR",postalCodeLabel:"PSČ",saveCardLabel:"Uložiť kartu",payWithCard:"Zaplatiť kartou",endingIn:"S posledným štvorčíslím {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"Karta",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],239:[function(e,t,i){"use strict";t.exports={payingWith:"Betalas med {{paymentSource}}",chooseAnotherWayToPay:"Välj ett annat sätt att betala",chooseAWayToPay:"Välj hur du vill betala",otherWaysToPay:"Andra sätt att betala",edit:"Ändra",doneEditing:"Klart",editPaymentMethods:"Redigera betalningsmetoder",CreditCardDeleteConfirmationMessage:"Ta bort {{secondaryIdentifier}}-kort som slutar på {{identifier}}?",PayPalAccountDeleteConfirmationMessage:"Ta bort PayPal-konto {{identifier}}?",VenmoAccountDeleteConfirmationMessage:"Är du säker på att du vill ta bort Venmo-konto med användarnamn {{identifier}}?",genericDeleteConfirmationMessage:"Är du säker på att du vill ta bort den här betalningsmetoden?",deleteCancelButton:"Avbryt",deleteConfirmationButton:"Ta bort",fieldEmptyForCvv:"Fyll i en CVV-kod.",fieldEmptyForExpirationDate:"Fyll i ett utgångsdatum.",fieldEmptyForCardholderName:"Fyll i kortinnehavarens namn.",fieldTooLongForCardholderName:"Kortinnehavarens namn måste vara kortare än 256 tecken.",fieldEmptyForNumber:"Fyll i ett nummer.",fieldEmptyForPostalCode:"Fyll i ett postnummer.",fieldInvalidForCardholderName:"Namnet på kortinnehavaren är ogiltigt.",fieldInvalidForCvv:"Den här säkerhetskoden är inte giltig.",fieldInvalidForExpirationDate:"Det här utgångsdatumet är inte giltigt.",fieldInvalidForNumber:"Det här kortnumret är inte giltigt.",fieldInvalidForPostalCode:"Det här postnumret är inte giltigt.",genericError:"Ett fel uppstod.",hostedFieldsTokenizationFailOnDuplicateError:"Det här betalkortet finns redan som en sparad betalningsmetod.",hostedFieldsFailedTokenizationError:"Kontrollera uppgifterna och försök igen.",hostedFieldsFieldsInvalidError:"Kontrollera uppgifterna och försök igen.",hostedFieldsTokenizationNetworkErrorError:"Nätverksfel. Försök igen.",hostedFieldsTokenizationCvvVerificationFailedError:"Verifieringen av betalkort misslyckades. Kontrollera uppgifterna och försök igen.",paypalButtonMustBeUsed:"Använd PayPal-knappen för att fortsätta med din betalning.",paypalAccountTokenizationFailedError:"Ett fel uppstod när PayPal-kontot skulle läggas till. Försök igen.",paypalFlowFailedError:"Ett fel uppstod när anslutningen till PayPal skulle upprättas. Försök igen.",paypalTokenizationRequestActiveError:"Betalningsgodkännandet för PayPal behandlas redan.",venmoCanceledError:"Något gick fel. Se till att du har den senaste versionen av Venmo-appen installerad på din enhet och att webbläsaren stöder att gå över till Venmo.",vaultManagerPaymentMethodDeletionError:"Det gick inte att ta bort betalningsmetoden. Försök igen.",venmoAppFailedError:"Venmo-appen kunde inte hittas på din enhet.",unsupportedCardTypeError:"Den här korttypen stöds inte. Pröva med ett annat kort.",applePayTokenizationError:"Ett nätverksfel inträffade när Apple Pay-betalningen skulle behandlas. Försök igen.",applePayActiveCardError:"Lägg till ett kort som stöds i Apple Pay-e-plånboken.",cardholderNameLabel:"Kortinnehavarens namn",cardNumberLabel:"Kortnummer",cvvLabel:"CVV",cvvThreeDigitLabelSubheading:"(3 siffror)",cvvFourDigitLabelSubheading:"(4 siffror)",cardholderNamePlaceholder:"Kortinnehavarens namn",expirationDateLabel:"Utgångsdatum",expirationDateLabelSubheading:"(MM/ÅÅ)",expirationDatePlaceholder:"MM/ÅÅ",postalCodeLabel:"Postnummer",saveCardLabel:"Spara kort",payWithCard:"Betala med kort",endingIn:"Slutar på {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"Kort",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],240:[function(e,t,i){"use strict";t.exports={payingWith:"การชำระเงินด้วย {{paymentSource}}",chooseAnotherWayToPay:"เลือกวิธีอื่นเพื่อชำระเงิน",chooseAWayToPay:"เลือกวิธีชำระเงิน",otherWaysToPay:"วิธีอื่นๆ ในการชำระเงิน",edit:"แก้ไข",doneEditing:"เสร็จแล้ว",editPaymentMethods:"แก้ไขวิธีการชำระเงิน",CreditCardDeleteConfirmationMessage:"ลบบัตร {{secondaryIdentifier }} ที่ลงท้ายด้วย {{identifier}} หรือไม่",PayPalAccountDeleteConfirmationMessage:"ลบ {{identifier}} บัญชี PayPal หรือไม่",VenmoAccountDeleteConfirmationMessage:"คุณมั่นใจว่าต้องการลบบัญชี Venmo ที่มีชื่อผู้ใช้ {{identifier}} หรือไม่",genericDeleteConfirmationMessage:"คุณมั่นใจว่าต้องการลบวิธีการชำระเงินนี้หรือไม่",deleteCancelButton:"ยกเลิก",deleteConfirmationButton:"ลบ",fieldEmptyForCvv:"โปรดกรอก CVV (รหัสการตรวจสอบยืนยันบัตร)",fieldEmptyForExpirationDate:"โปรดกรอกวันที่หมดอายุ",fieldEmptyForCardholderName:"โปรดกรอกชื่อเจ้าของบัตร",fieldTooLongForCardholderName:"ชื่อผู้ถือบัตรจะต้องไม่เกิน 256 อักขระ",fieldEmptyForNumber:"โปรดกรอกหมายเลข",fieldEmptyForPostalCode:"โปรดกรอกรหัสไปรษณีย์",fieldInvalidForCardholderName:"ชื่อผู้ถือบัตรนี้ไม่ถูกต้องชื่อผู้ถือบัตรนี้ไม่ถูกต้อง",fieldInvalidForCvv:"รหัสความปลอดภัยนี้ไม่ถูกต้อง",fieldInvalidForExpirationDate:"วันที่หมดอายุนี้ไม่ถูกต้อง",fieldInvalidForNumber:"หมายเลขบัตรนี้ไม่ถูกต้อง",fieldInvalidForPostalCode:"รหัสไปรษณีย์นี้ไม่ถูกต้อง",genericError:"เกิดข้อผิดพลาดขึ้นในระบบของเรา",hostedFieldsTokenizationFailOnDuplicateError:"บัตรเครดิตนี้ถูกบันทึกไว้เป็นวิธีการชำระเงิน",hostedFieldsFailedTokenizationError:"โปรดตรวจสอบข้อมูลของคุณ แล้วลองใหม่อีกครั้ง",hostedFieldsFieldsInvalidError:"โปรดตรวจสอบข้อมูลของคุณ แล้วลองใหม่อีกครั้ง",hostedFieldsTokenizationNetworkErrorError:"ข้อผิดพลาดด้านเครือข่าย โปรดลองอีกครั้ง",hostedFieldsTokenizationCvvVerificationFailedError:"การตรวจสอบยืนยันบัตรเครดิตล้มเหลว โปรดตรวจสอบข้อมูลของคุณ แล้วลองใหม่อีกครั้ง",paypalButtonMustBeUsed:"ใช้ปุ่ม PayPal เพื่อดำเนินการชำระเงินต่อ",paypalAccountTokenizationFailedError:"เกิดข้อผิดพลาดในการเพิ่มบัญชี PayPal โปรดลองอีกครั้ง",paypalFlowFailedError:"เกิดข้อผิดพลาดในการเชื่อมต่อกับ PayPal โปรดลองอีกครั้ง",paypalTokenizationRequestActiveError:"การอนุญาตการชำระเงินของ PayPal อยู่ในระหว่างดำเนินการ",venmoCanceledError:"เกิดข้อผิดพลาดบางประการ ตรวจสอบว่าคุณมีแอป Venmo เวอร์ชันล่าสุดติดตั้งในอุปกรณ์ของคุณ และมีเบราเซอร์ที่รองรับ Venmo",vaultManagerPaymentMethodDeletionError:"ไม่สามารถลบวิธีการชำระเงินได้ ลองอีกครั้ง",venmoAppFailedError:"ไม่พบแอป Venmo บนอุปกรณ์ของคุณ",unsupportedCardTypeError:"ไม่รองรับบัตรประเภทนี้ โปรดลองใช้บัตรใบอื่น",applePayTokenizationError:"เกิดข้อผิดพลาดด้านเครือข่ายขึ้นขณะดำเนินการชำระเงินด้วย Apple Pay โปรดลองอีกครั้ง",applePayActiveCardError:"เพิ่มบัตรที่รองรับในกระเป๋าสตางค์ Apple Pay ของคุณ",cardholderNameLabel:"ชื่อเจ้าของบัตร",cardNumberLabel:"หมายเลขบัตร",cvvLabel:"CVV",cvvThreeDigitLabelSubheading:"(3 หลัก)",cvvFourDigitLabelSubheading:"(4 หลัก)",cardholderNamePlaceholder:"ชื่อเจ้าของบัตร",expirationDateLabel:"วันหมดอายุ",expirationDateLabelSubheading:"(ดด/ปป)",expirationDatePlaceholder:"ดด/ปป",postalCodeLabel:"รหัสไปรษณีย์",saveCardLabel:"บันทึกบัตร",payWithCard:"ชำระเงินด้วยบัตร",endingIn:"ลงท้ายด้วย {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"บัตร",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],241:[function(e,t,i){"use strict";t.exports={payingWith:"正在使用{{paymentSource}}付款",chooseAnotherWayToPay:"选择其他付款方式",chooseAWayToPay:"选择付款方式",otherWaysToPay:"其他付款方式",edit:"编辑",doneEditing:"完成",editPaymentMethods:"编辑付款方式",CreditCardDeleteConfirmationMessage:"删除尾号为{{identifier}}的{{secondaryIdentifier}}卡?",PayPalAccountDeleteConfirmationMessage:"删除PayPal账户{{identifier}}?",VenmoAccountDeleteConfirmationMessage:"确定要删除用户名为{{identifier}}的Venmo账户吗?",genericDeleteConfirmationMessage:"确定要删除该付款方式吗?",deleteCancelButton:"取消",deleteConfirmationButton:"删除",fieldEmptyForCvv:"请填写CVV。",fieldEmptyForExpirationDate:"请填写有效期限。",fieldEmptyForCardholderName:"请填写持卡人的姓名。",fieldTooLongForCardholderName:"持卡人姓名必须少于256个字符。",fieldEmptyForNumber:"请填写一个号码。",fieldEmptyForPostalCode:"请填写邮政编码。",fieldInvalidForCardholderName:"此持卡人姓名无效。",fieldInvalidForCvv:"此安全代码无效。",fieldInvalidForExpirationDate:"此有效期限无效。",fieldInvalidForNumber:"此卡号无效。",fieldInvalidForPostalCode:"此邮政编码无效。",genericError:"我们遇到了一些问题",hostedFieldsTokenizationFailOnDuplicateError:"此信用卡已作为保存后的付款方式存在。",hostedFieldsFailedTokenizationError:"请检查您的信息,然后重试。",hostedFieldsFieldsInvalidError:"请检查您的信息,然后重试。",hostedFieldsTokenizationNetworkErrorError:"网络错误。请重试。",hostedFieldsTokenizationCvvVerificationFailedError:"信用卡验证失败。请检查您的信息,然后重试。",paypalButtonMustBeUsed:"使用PayPal按钮继续进行付款。",paypalAccountTokenizationFailedError:"添加PayPal账户时出错。请重试。",paypalFlowFailedError:"连接到PayPal时出错。请重试。",paypalTokenizationRequestActiveError:"PayPal付款授权已在进行中。",venmoCanceledError:"我们遇到了问题。请确保您的设备上已安装最新版本的Venmo应用,并且您的浏览器支持切换到Venmo。",vaultManagerPaymentMethodDeletionError:"无法删除付款方式,请重试。",venmoAppFailedError:"在您的设备上找不到Venmo应用。",unsupportedCardTypeError:"不支持该卡类型。请尝试其他卡。",applePayTokenizationError:"处理Apple Pay付款时出现网络错误。请重试。",applePayActiveCardError:"请添加受支持的卡到您的Apple Pay钱包。",cardholderNameLabel:"持卡人姓名",cardNumberLabel:"卡号",cvvLabel:"CVV",cvvThreeDigitLabelSubheading:"(3位数)",cvvFourDigitLabelSubheading:"(4位数)",cardholderNamePlaceholder:"持卡人姓名",expirationDateLabel:"有效期限",expirationDateLabelSubheading:"(MM/YY)",expirationDatePlaceholder:"MM/YY",postalCodeLabel:"邮政编码",saveCardLabel:"保存卡",payWithCard:"用卡付款",endingIn:"尾号为{{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"卡",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"银联"}},{}],242:[function(e,t,i){"use strict";t.exports={payingWith:"付款方式為 {{paymentSource}}",chooseAnotherWayToPay:"選擇其他付款方式",chooseAWayToPay:"選擇付款方式",otherWaysToPay:"其他付款方式",edit:"編輯",doneEditing:"完成",editPaymentMethods:"編輯付款方式",CreditCardDeleteConfirmationMessage:"要刪除末碼為 {{identifier}} 的 {{secondaryIdentifier}} 卡嗎?",PayPalAccountDeleteConfirmationMessage:"要刪除 PayPal 帳戶 {{identifier}} 嗎?",VenmoAccountDeleteConfirmationMessage:"確定要刪除使用者名稱為 {{identifier}} 的 Venmo 帳戶嗎?",genericDeleteConfirmationMessage:"確定要刪除此付款方式嗎?",deleteCancelButton:"取消",deleteConfirmationButton:"刪除",fieldEmptyForCvv:"請填寫信用卡認證碼。",fieldEmptyForExpirationDate:"請填寫到期日。",fieldEmptyForCardholderName:"請填寫持卡人的名字。",fieldTooLongForCardholderName:"持卡人姓名必須少於 256 個字元。",fieldEmptyForNumber:"請填寫號碼。",fieldEmptyForPostalCode:"請填寫郵遞區號。",fieldInvalidForCardholderName:"持卡人姓名無效。",fieldInvalidForCvv:"此安全代碼無效。",fieldInvalidForExpirationDate:"此到期日無效。",fieldInvalidForNumber:"此卡號無效。",fieldInvalidForPostalCode:"此郵遞區號無效。",genericError:"系統發生錯誤。",hostedFieldsTokenizationFailOnDuplicateError:"此信用卡已存在,為已儲存的付款方式。",hostedFieldsFailedTokenizationError:"請檢查你的資料並再試一次。",hostedFieldsFieldsInvalidError:"請檢查你的資料並再試一次。",hostedFieldsTokenizationNetworkErrorError:"網絡錯誤。再試一次。",hostedFieldsTokenizationCvvVerificationFailedError:"信用卡認證失敗。請檢查你的資料並再試一次。",paypalButtonMustBeUsed:"使用 PayPal 按鈕以繼續付款。",paypalAccountTokenizationFailedError:"加入 PayPal 帳戶時發生錯誤。再試一次。",paypalFlowFailedError:"連接 PayPal 時發生錯誤。再試一次。",paypalTokenizationRequestActiveError:"PayPal 付款授權已在處理中。",venmoCanceledError:"系統發生錯誤,請確保你已在裝置上安裝最新版本的 Venmo 應用程式,而且你的瀏覽器支援切換至 Venmo。",vaultManagerPaymentMethodDeletionError:"無法刪除付款方式,請再試一次。",venmoAppFailedError:"在你的裝置上找不到 Venmo 應用程式。",unsupportedCardTypeError:"不可使用此信用卡類型。請改用其他信用卡。",applePayTokenizationError:"處理 Apple Pay 付款時發生網絡錯誤。再試一次。",applePayActiveCardError:"在 Apple Pay 錢包中加入支援的信用卡。",cardholderNameLabel:"持卡人名字",cardNumberLabel:"卡號",cvvLabel:"信用卡認證碼",cvvThreeDigitLabelSubheading:"(3 位數)",cvvFourDigitLabelSubheading:"(4 位數)",cardholderNamePlaceholder:"持卡人名字",expirationDateLabel:"到期日",expirationDateLabelSubheading:"(MM/YY)",expirationDatePlaceholder:"月 / 年",postalCodeLabel:"郵遞區號",saveCardLabel:"儲存信用卡",payWithCard:"使用信用卡付款",endingIn:"末碼為 {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"信用卡",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],243:[function(e,t,i){"use strict";t.exports={payingWith:"以 {{paymentSource}} 付款",chooseAnotherWayToPay:"選擇付款的以其他方式付款",chooseAWayToPay:"選擇付款方式",otherWaysToPay:"其他付款方式",edit:"編輯",doneEditing:"完成",editPaymentMethods:"編輯付款方式",CreditCardDeleteConfirmationMessage:"確定要刪除末碼為 {{identifier}} 的 {{secondaryIdentifier}} 卡片嗎?",PayPalAccountDeleteConfirmationMessage:"確定要刪除 {{identifier}} PayPal 帳戶嗎?",VenmoAccountDeleteConfirmationMessage:"確定要刪除用戶名稱為 {{identifier}} 的 Venmo 帳戶嗎?",genericDeleteConfirmationMessage:"確定要刪除此付款方式?",deleteCancelButton:"取消",deleteConfirmationButton:"刪除",fieldEmptyForCvv:"請填妥信用卡驗證碼。",fieldEmptyForExpirationDate:"請填妥到期日。",fieldEmptyForCardholderName:"請填妥持卡人姓名。",fieldTooLongForCardholderName:"持卡人姓名不能超過 256 個字元。",fieldEmptyForNumber:"請填妥號碼。",fieldEmptyForPostalCode:"請填寫郵遞區號。",fieldInvalidForCardholderName:"此持卡人姓名無效。",fieldInvalidForCvv:"這組安全代碼無效。",fieldInvalidForExpirationDate:"此到期日無效。",fieldInvalidForNumber:"此卡號無效。",fieldInvalidForPostalCode:"此郵遞區號無效。",genericError:"我們的系統發生問題。",hostedFieldsTokenizationFailOnDuplicateError:"此信用卡已存在,為已儲存的付款方式。",hostedFieldsFailedTokenizationError:"請檢查你的資料並重試。",hostedFieldsFieldsInvalidError:"請檢查你的資料並重試。",hostedFieldsTokenizationNetworkErrorError:"網路錯誤。請重試。",hostedFieldsTokenizationCvvVerificationFailedError:"信用卡認證失敗。請檢查你的資料並重試。",paypalButtonMustBeUsed:"使用 PayPal 按鈕以繼續付款。",paypalAccountTokenizationFailedError:"新增 PayPal 帳戶時,系統發生錯誤。請重試。",paypalFlowFailedError:"連結至 PayPal 時,系統發生錯誤。請重試。",paypalTokenizationRequestActiveError:"PayPal 支付款項的授權已在處理中。",venmoCanceledError:"系統發生錯誤。確認你的裝置上裝有最新版本的 Venmo 應用程式,而且瀏覽器支援切換至 Venmo。",vaultManagerPaymentMethodDeletionError:"無法刪除付款方式,請再試一次。",venmoAppFailedError:"你的裝置上找不到 Venmo 應用程式。",unsupportedCardTypeError:"不支援此卡片類型。請改用其他卡片。",applePayTokenizationError:"在處理 Apple Pay 付款時發生網路錯誤。請重試。",applePayActiveCardError:"新增支援的卡片至你的 Apple Pay 錢包。",cardholderNameLabel:"持卡人姓名",cardNumberLabel:"卡號",cvvLabel:"CVV",cvvThreeDigitLabelSubheading:"(3 位數)",cvvFourDigitLabelSubheading:"(4 位數)",cardholderNamePlaceholder:"持卡人姓名",expirationDateLabel:"到期日",expirationDateLabelSubheading:"(月 / 年)",expirationDatePlaceholder:"月 / 年",postalCodeLabel:"郵遞區號",saveCardLabel:"儲存卡片",payWithCard:"使用信用卡 / 扣帳卡付款",endingIn:"末碼為 {{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"信用卡或扣帳卡",PayPal:"PayPal","PayPal Credit":"PayPal 信貸","Google Pay":"Google Pay","American Express":"美國運通 (American Express)",Discover:"Discover","Diners Club":"大來國際 (Diners Club)",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"UnionPay"}},{}],244:[function(e,t,i){"use strict";t.exports={payingWith:"使用{{paymentSource}}付款",chooseAnotherWayToPay:"选择其它付款方式",chooseAWayToPay:"选择付款方式",otherWaysToPay:"其它付款方式",edit:"编辑",doneEditing:"完成",editPaymentMethods:"编辑付款方式",CreditCardDeleteConfirmationMessage:"删除尾号为{{identifier}}的{{secondaryIdentifier}}卡?",PayPalAccountDeleteConfirmationMessage:"删除PayPal账户{{identifier}}?",VenmoAccountDeleteConfirmationMessage:"确定要删除用户名为{{identifier}}的Venmo账户吗?",genericDeleteConfirmationMessage:"确定要删除此付款方式吗?",deleteCancelButton:"取消",deleteConfirmationButton:"删除",fieldEmptyForCvv:"请填写 CVV。",fieldEmptyForExpirationDate:"请填写有效期限。",fieldEmptyForCardholderName:"请填写持卡人姓名。",fieldTooLongForCardholderName:"持卡人姓名必须少于256个字符。",fieldEmptyForNumber:"请填写号码。",fieldEmptyForPostalCode:"请填写邮政编码。",fieldInvalidForCardholderName:"此持卡人姓名无效。",fieldInvalidForCvv:"此验证码无效。",fieldInvalidForExpirationDate:"此有效期限无效。",fieldInvalidForNumber:"此卡号无效。",fieldInvalidForPostalCode:"此邮政编码无效。",genericError:"我们遇到了一些问题。",hostedFieldsTokenizationFailOnDuplicateError:"此信用卡已存在于已保存的付款方式中。",hostedFieldsFailedTokenizationError:"请检查您的信息,然后重试。",hostedFieldsFieldsInvalidError:"请检查您的信息,然后重试。",hostedFieldsTokenizationNetworkErrorError:"网络错误。请重试。",hostedFieldsTokenizationCvvVerificationFailedError:"信用卡认证失败。请检查您的信息,然后重试。",paypalButtonMustBeUsed:"使用PayPal按钮以便继续进行您的付款。",paypalAccountTokenizationFailedError:"添加PayPal账户时遇到了问题。请重试。",paypalFlowFailedError:"连接到PayPal时遇到了问题。请重试。",paypalTokenizationRequestActiveError:"PayPal付款授权正在处理中。",venmoCanceledError:"我们遇到了一些问题。请确保您的设备上安装了最新版本的Venmo应用,并且您的浏览器支持切换到Venmo。",vaultManagerPaymentMethodDeletionError:"无法删除付款方式,请重试。",venmoAppFailedError:"未能在您的设备上找到Venmo应用。",unsupportedCardTypeError:"不支持此类型的卡。请尝试其它卡。",applePayTokenizationError:"处理Apple Pay付款时出现了网络错误。请重试。",applePayActiveCardError:"在您的Apple Pay钱包中添加一张受支持的卡。",cardholderNameLabel:"持卡人姓名",cardNumberLabel:"卡号",cvvLabel:"CVV",cvvThreeDigitLabelSubheading:"(3位数)",cvvFourDigitLabelSubheading:"(4位数)",cardholderNamePlaceholder:"持卡人姓名",expirationDateLabel:"有效期限",expirationDateLabelSubheading:"(月/年)",expirationDatePlaceholder:"月/年",postalCodeLabel:"邮政编码",saveCardLabel:"保存卡",payWithCard:"使用卡付款",endingIn:"尾号为{{lastFourCardDigits}}","Apple Pay":"Apple Pay",Venmo:"Venmo",Card:"卡",PayPal:"PayPal","PayPal Credit":"PayPal Credit","Google Pay":"Google Pay","American Express":"American Express",Discover:"Discover","Diners Club":"Diners Club",MasterCard:"Mastercard",Visa:"Visa",JCB:"JCB",Maestro:"Maestro",UnionPay:"银联"}},{}],245:[function(e,t,i){"use strict";var r=e("../lib/assign").assign,n=e("@braintree/class-list"),o=e("../lib/dropin-error"),a=e("../constants").errors,s=e("../lib/promise");function l(e){r(this,e=e||{})}l.prototype.getElementById=function(e){return this.element?this.element.querySelector('[data-braintree-id="'+e+'"]'):null},l.prototype.requestPaymentMethod=function(){return s.reject(new o(a.NO_PAYMENT_METHOD_ERROR))},l.prototype.getPaymentMethod=function(){return this.activeMethodView&&this.activeMethodView.paymentMethod},l.prototype.onSelection=function(){},l.prototype.teardown=function(){return s.resolve()},l.prototype.preventUserAction=function(){this.element&&n.add(this.element,"braintree-sheet--loading"),this.model.preventUserAction()},l.prototype.allowUserAction=function(){this.element&&n.remove(this.element,"braintree-sheet--loading"),this.model.allowUserAction()},t.exports=l},{"../constants":187,"../lib/assign":193,"../lib/dropin-error":197,"../lib/promise":204,"@braintree/class-list":35}],246:[function(e,t,i){"use strict";var r=e("./base-view"),n=e("../lib/add-selection-event-handler"),o=e("../constants").paymentMethodTypes;function a(){r.apply(this,arguments),this._initialize()}a.prototype=Object.create(r.prototype),a.prototype.constructor=a,a.ID=a.prototype.ID="delete-confirmation",a.prototype._initialize=function(){this._yesButton=this.getElementById("delete-confirmation__yes"),this._noButton=this.getElementById("delete-confirmation__no"),this._messageBox=this.getElementById("delete-confirmation__message"),n(this._yesButton,function(){this.model.deleteVaultedPaymentMethod()}.bind(this)),n(this._noButton,function(){this.model.cancelDeleteVaultedPaymentMethod()}.bind(this))},a.prototype.applyPaymentMethod=function(e){var t,i,r=this.strings[e.type+"DeleteConfirmationMessage"];if(r){switch(e.type){case o.card:t=e.details.lastFour,i=e.details.cardType,i=this.strings[i]||i;break;case o.paypal:t=e.details.email;break;case o.venmo:t=e.details.username}r=r.replace("{{identifier}}",t),i&&(r=r.replace("{{secondaryIdentifier}}",i))}else r=this.strings.genericDeleteConfirmationMessage;this._messageBox.innerText=r},a.prototype.onSelection=function(){window.requestAnimationFrame(function(){this._yesButton.focus()}.bind(this))},t.exports=a},{"../constants":187,"../lib/add-selection-event-handler":191,"./base-view":245}],247:[function(e,t,i){"use strict";var r=e("../lib/analytics"),n=e("../constants").analyticsKinds,o=e("./base-view"),a=e("@braintree/class-list"),s=e("./payment-sheet-views"),l=e("./payment-methods-view"),d=e("./payment-options-view"),c=e("./delete-confirmation-view"),p=e("../lib/add-selection-event-handler"),u=e("../lib/promise"),h=e("../lib/wait"),m=e("../lib/supports-flexbox"),y=e("../constants").CHANGE_ACTIVE_PAYMENT_METHOD_TIMEOUT,f=e("../constants").errors.DEVELOPER_MISCONFIGURATION_MESSAGE;function E(){o.apply(this,arguments),this.dependenciesInitializing=0,this._initialize()}function v(e){return"braintree-show-"+e}E.prototype=Object.create(o.prototype),E.prototype.constructor=E,E.prototype._initialize=function(){var e;this._hasMultiplePaymentOptions=this.model.supportedPaymentOptions.length>1,this._views={},this.sheetContainer=this.getElementById("sheet-container"),this.sheetErrorText=this.getElementById("sheet-error-text"),this.toggle=this.getElementById("toggle"),this.disableWrapper=this.getElementById("disable-wrapper"),this.lowerContainer=this.getElementById("lower-container"),this.loadingContainer=this.getElementById("loading-container"),this.dropinContainer=this.element.querySelector(".braintree-dropin"),this.supportsFlexbox=m(),this.model.on("asyncDependenciesReady",this.hideLoadingIndicator.bind(this)),this.model.on("errorOccurred",this.showSheetError.bind(this)),this.model.on("errorCleared",this.hideSheetError.bind(this)),this.model.on("preventUserAction",this.preventUserAction.bind(this)),this.model.on("allowUserAction",this.allowUserAction.bind(this)),this.paymentSheetViewIDs=Object.keys(s).reduce(function(e,t){var i,r;return-1!==this.model.supportedPaymentOptions.indexOf(t)&&((r=new(i=s[t])({element:this.getElementById(i.ID),mainView:this,model:this.model,client:this.client,strings:this.strings})).initialize(),this.addView(r),e.push(r.ID)),e}.bind(this),[]),this.paymentMethodsViews=new l({element:this.element,model:this.model,client:this.client,strings:this.strings}),this.addView(this.paymentMethodsViews),this.deleteConfirmationView=new c({element:this.getElementById("delete-confirmation"),model:this.model,strings:this.strings}),this.addView(this.deleteConfirmationView),p(this.toggle,this.toggleAdditionalOptions.bind(this)),this.model.on("changeActivePaymentMethod",function(){h.delay(y).then(function(){this.setPrimaryView(l.ID)}.bind(this))}.bind(this)),this.model.on("changeActiveView",this._onChangeActiveView.bind(this)),this.model.on("removeActivePaymentMethod",function(){var e=this.getView(this.model.getActivePaymentViewId());e&&"function"==typeof e.removeActivePaymentMethod&&e.removeActivePaymentMethod()}.bind(this)),this.model.on("enableEditMode",this.enableEditMode.bind(this)),this.model.on("disableEditMode",this.disableEditMode.bind(this)),this.model.on("confirmPaymentMethodDeletion",this.openConfirmPaymentMethodDeletionDialog.bind(this)),this.model.on("cancelVaultedPaymentMethodDeletion",this.cancelVaultedPaymentMethodDeletion.bind(this)),this.model.on("startVaultedPaymentMethodDeletion",this.startVaultedPaymentMethodDeletion.bind(this)),this.model.on("finishVaultedPaymentMethodDeletion",this.finishVaultedPaymentMethodDeletion.bind(this)),this._hasMultiplePaymentOptions&&(e=new d({client:this.client,element:this.getElementById(d.ID),mainView:this,model:this.model,strings:this.strings}),this.addView(e)),this._sendToDefaultView()},E.prototype._onChangeActiveView=function(e){var t=e.newViewId,i=this.getView(t);t===l.ID?(a.add(this.paymentMethodsViews.container,"braintree-methods--active"),a.remove(this.sheetContainer,"braintree-sheet--active")):(h.delay(0).then(function(){a.add(this.sheetContainer,"braintree-sheet--active")}.bind(this)),a.remove(this.paymentMethodsViews.container,"braintree-methods--active"),this.getView(t).getPaymentMethod()||this.model.setPaymentMethodRequestable({isRequestable:!1})),i.onSelection()},E.prototype.addView=function(e){this._views[e.ID]=e},E.prototype.getView=function(e){return this._views[e]},E.prototype.setPrimaryView=function(e,t){var i;h.delay(0).then(function(){this.element.className=v(e),t&&a.add(this.element,v(t))}.bind(this)),this.primaryView=this.getView(e),this.model.changeActiveView(e),-1!==this.paymentSheetViewIDs.indexOf(e)?this.model.getPaymentMethods().length>0||this.getView(d.ID)?this.showToggle():this.hideToggle():e===l.ID?(this.showToggle(),this.getElementById("lower-container").appendChild(this.getElementById("options"))):e===d.ID&&this.hideToggle(),this.supportsFlexbox||this.element.setAttribute("data-braintree-no-flexbox",!0),i=this.primaryView.getPaymentMethod(),this.model.setPaymentMethodRequestable({isRequestable:Boolean(i&&!this.model.isInEditMode()),type:i&&i.type,selectedPaymentMethod:i}),this.model.clearError()},E.prototype.requestPaymentMethod=function(){return this.getView(this.model.getActivePaymentViewId()).requestPaymentMethod().then(function(e){return r.sendEvent(this.client,"request-payment-method."+n[e.type]),e}.bind(this)).catch(function(e){return r.sendEvent(this.client,"request-payment-method.error"),u.reject(e)}.bind(this))},E.prototype.hideLoadingIndicator=function(){a.remove(this.dropinContainer,"braintree-loading"),a.add(this.dropinContainer,"braintree-loaded"),a.add(this.loadingContainer,"braintree-hidden")},E.prototype.showLoadingIndicator=function(){a.add(this.dropinContainer,"braintree-loading"),a.remove(this.dropinContainer,"braintree-loaded"),a.remove(this.loadingContainer,"braintree-hidden")},E.prototype.toggleAdditionalOptions=function(){var e,t=-1!==this.paymentSheetViewIDs.indexOf(this.primaryView.ID);this.hideToggle(),this._hasMultiplePaymentOptions?t?0===this.model.getPaymentMethods().length?this.setPrimaryView(d.ID):(this.setPrimaryView(l.ID,d.ID),this.hideToggle()):a.add(this.element,v(d.ID)):(e=this.paymentSheetViewIDs[0],a.add(this.element,v(e)),this.model.changeActiveView(e))},E.prototype.showToggle=function(){this.model.isInEditMode()||(a.remove(this.toggle,"braintree-hidden"),a.add(this.lowerContainer,"braintree-hidden"))},E.prototype.hideToggle=function(){a.add(this.toggle,"braintree-hidden"),a.remove(this.lowerContainer,"braintree-hidden")},E.prototype.showSheetError=function(e){var t,i,r=this.strings.genericError;t=this.strings.hasOwnProperty(e)?this.strings[e]:e&&"string"==typeof e.code?this.strings[(i=e.code,i.toLowerCase().replace(/(\_\w)/g,(function(e){return e[1].toUpperCase()}))+"Error")]||r:"developerError"===e?f:r,a.add(this.dropinContainer,"braintree-sheet--has-error"),this.sheetErrorText.innerHTML=t},E.prototype.hideSheetError=function(){a.remove(this.dropinContainer,"braintree-sheet--has-error")},E.prototype.getOptionsElements=function(){return this._views.options.elements},E.prototype.preventUserAction=function(){a.remove(this.disableWrapper,"braintree-hidden")},E.prototype.allowUserAction=function(){a.add(this.disableWrapper,"braintree-hidden")},E.prototype.teardown=function(){var e,t=Object.keys(this._views).map(function(t){return this._views[t].teardown().catch((function(t){e=t}))}.bind(this));return u.all(t).then((function(){return e?u.reject(e):u.resolve()}))},E.prototype.enableEditMode=function(){this.setPrimaryView(this.paymentMethodsViews.ID),this.paymentMethodsViews.enableEditMode(),this.hideToggle(),this.model.setPaymentMethodRequestable({isRequestable:!1})},E.prototype.disableEditMode=function(){var e;this.hideSheetError(),this.paymentMethodsViews.disableEditMode(),this.showToggle(),e=this.primaryView.getPaymentMethod(),this.model.setPaymentMethodRequestable({isRequestable:Boolean(e),type:e&&e.type,selectedPaymentMethod:e})},E.prototype.openConfirmPaymentMethodDeletionDialog=function(e){this.deleteConfirmationView.applyPaymentMethod(e),this.setPrimaryView(this.deleteConfirmationView.ID)},E.prototype.cancelVaultedPaymentMethodDeletion=function(){this.setPrimaryView(this.paymentMethodsViews.ID)},E.prototype.startVaultedPaymentMethodDeletion=function(){this.element.className="",this.showLoadingIndicator()},E.prototype.finishVaultedPaymentMethodDeletion=function(e){var t=this;return this.paymentMethodsViews.refreshPaymentMethods(),e&&this.model.getPaymentMethods().length>0?(this.model.enableEditMode(),this.showSheetError("vaultManagerPaymentMethodDeletionError")):this._sendToDefaultView(),new u((function(e){h.delay(500).then((function(){t.hideLoadingIndicator(),e()}))}))},E.prototype._sendToDefaultView=function(){var e=this.model.getPaymentMethods(),t=!1!==this.model.merchantConfiguration.preselectVaultedPaymentMethod;e.length>0?t?(r.sendEvent(this.client,"vaulted-card.preselect"),this.model.changeActivePaymentMethod(e[0])):this.setPrimaryView(this.paymentMethodsViews.ID):this._hasMultiplePaymentOptions?this.setPrimaryView(d.ID):this.setPrimaryView(this.paymentSheetViewIDs[0])},t.exports=E},{"../constants":187,"../lib/add-selection-event-handler":191,"../lib/analytics":192,"../lib/promise":204,"../lib/supports-flexbox":206,"../lib/wait":209,"./base-view":245,"./delete-confirmation-view":246,"./payment-methods-view":249,"./payment-options-view":250,"./payment-sheet-views":255,"@braintree/class-list":35}],248:[function(e,t,i){"use strict";var r=e("../lib/analytics"),n=e("./base-view"),o=e("@braintree/class-list"),a=e("../constants"),s=e("../lib/add-selection-event-handler");function l(){n.apply(this,arguments),this._initialize()}l.prototype=Object.create(n.prototype),l.prototype.constructor=l,l.prototype._initialize=function(){var e,t='
\n
\n \n \n \n
\n
\n\n\n\n
@TITLE
@SUBTITLE
\n\n
\n
\n \n \n \n
\n
\n',i=a.paymentMethodCardTypes,r=a.paymentMethodTypes;switch(this.element=document.createElement("div"),this.element.className="braintree-method",this.element.setAttribute("tabindex","0"),this.element.setAttribute("role","button"),s(this.element,function(){this.model.isInEditMode()?this._selectDelete():this._choosePaymentMethod()}.bind(this)),this.paymentMethod.type){case r.applePay:t=t.replace(/@ICON/g,"logoApplePay").replace(/@CLASSNAME/g,"").replace(/@TITLE/g,this.strings["Apple Pay"]).replace(/@SUBTITLE/g,"");break;case r.card:e=this.strings.endingIn.replace("{{lastFourCardDigits}}",this.paymentMethod.details.lastFour),t=t.replace(/@ICON/g,"icon-"+i[this.paymentMethod.details.cardType]).replace(/@CLASSNAME/g," braintree-icon--bordered").replace(/@TITLE/g,e).replace(/@SUBTITLE/g,this.strings[this.paymentMethod.details.cardType]);break;case r.googlePay:t=t.replace(/@ICON/g,"logoGooglePay").replace(/@CLASSNAME/g,"").replace(/@TITLE/g,this.strings["Google Pay"]).replace(/@SUBTITLE/g,"");break;case r.paypal:t=t.replace(/@ICON/g,"logoPayPal").replace(/@CLASSNAME/g,"").replace(/@TITLE/g,this.paymentMethod.details.email).replace(/@SUBTITLE/g,this.strings.PayPal);break;case r.venmo:t=t.replace(/@ICON/g,"logoVenmo").replace(/@CLASSNAME/g,"").replace(/@TITLE/g,this.paymentMethod.details.username).replace(/@SUBTITLE/g,this.strings.Venmo)}this.element.innerHTML=t,this.checkMark=this.element.querySelector(".braintree-method__check-container")},l.prototype.setActive=function(e){setTimeout(function(){o.toggle(this.element,"braintree-method--active",e)}.bind(this),0)},l.prototype.enableEditMode=function(){o.add(this.checkMark,"braintree-hidden"),this.paymentMethod.hasSubscription&&o.add(this.element,"braintree-method--disabled")},l.prototype.disableEditMode=function(){o.remove(this.checkMark,"braintree-hidden"),o.remove(this.element,"braintree-method--disabled")},l.prototype.teardown=function(){this.element.parentNode&&this.element.parentNode.removeChild(this.element)},l.prototype._choosePaymentMethod=function(){this.paymentMethod.vaulted&&r.sendEvent(this.client,"vaulted-"+a.analyticsKinds[this.paymentMethod.type]+".select"),this.model.changeActivePaymentMethod(this.paymentMethod)},l.prototype._selectDelete=function(){this.model.confirmPaymentMethodDeletion(this.paymentMethod)},t.exports=l},{"../constants":187,"../lib/add-selection-event-handler":191,"../lib/analytics":192,"./base-view":245,"@braintree/class-list":35}],249:[function(e,t,i){"use strict";var r=e("./base-view"),n=e("./payment-method-view"),o=e("../lib/dropin-error"),a=e("@braintree/class-list"),s=e("../constants").errors,l=e("../lib/promise"),d=e("../lib/add-selection-event-handler"),c={CreditCard:"Card",PayPalAccount:"PayPal",ApplePayCard:"Apple Pay",AndroidPayCard:"Google Pay",VenmoAccount:"Venmo"};function p(){r.apply(this,arguments),this._initialize()}p.prototype=Object.create(r.prototype),p.prototype.constructor=p,p.ID=p.prototype.ID="methods",p.prototype._initialize=function(){this.views=[],this.container=this.getElementById("methods-container"),this._headingLabel=this.getElementById("methods-label"),this._editButton=this.getElementById("methods-edit"),this.model.on("addPaymentMethod",this._addPaymentMethod.bind(this)),this.model.on("changeActivePaymentMethod",this._changeActivePaymentMethodView.bind(this)),this.model.on("refreshPaymentMethods",this.refreshPaymentMethods.bind(this)),this.refreshPaymentMethods(),this.model.merchantConfiguration.vaultManager&&(this.model.on("removePaymentMethod",this._removePaymentMethod.bind(this)),d(this._editButton,function(){this.model.isInEditMode()?this.model.disableEditMode():this.model.enableEditMode()}.bind(this)),a.remove(this._editButton,"braintree-hidden"))},p.prototype.removeActivePaymentMethod=function(){this.activeMethodView&&(this.activeMethodView.setActive(!1),this.activeMethodView=null,a.add(this._headingLabel,"braintree-no-payment-method-selected"))},p.prototype._getPaymentMethodString=function(){var e,t;return this.activeMethodView?(e=c[this.activeMethodView.paymentMethod.type],t=this.strings[e],this.strings.payingWith.replace("{{paymentSource}}",t)):""},p.prototype.enableEditMode=function(){a.add(this.container,"braintree-methods--edit"),this._editButton.innerHTML=this.strings.deleteCancelButton,this._headingLabel.innerHTML=this.strings.editPaymentMethods,this.views.forEach((function(e){e.enableEditMode()}))},p.prototype.disableEditMode=function(){a.remove(this.container,"braintree-methods--edit"),this._editButton.innerHTML=this.strings.edit,this._headingLabel.innerHTML=this._getPaymentMethodString(),this.views.forEach((function(e){e.disableEditMode()}))},p.prototype._addPaymentMethod=function(e){var t=new n({model:this.model,paymentMethod:e,client:this.client,strings:this.strings});this.model.isGuestCheckout&&this.container.firstChild&&(this.views[0].teardown(),this.views.pop()),this.container.firstChild?this.container.insertBefore(t.element,this.container.firstChild):this.container.appendChild(t.element),this.views.push(t)},p.prototype._removePaymentMethod=function(e){var t;for(t=0;t=0;e--)this._addPaymentMethod(t[e])},t.exports=p},{"../constants":187,"../lib/add-selection-event-handler":191,"../lib/dropin-error":197,"../lib/promise":204,"./base-view":245,"./payment-method-view":248,"@braintree/class-list":35}],250:[function(e,t,i){"use strict";var r=e("../lib/analytics"),n=e("../lib/add-selection-event-handler"),o=e("./base-view"),a=e("../constants").paymentOptionIDs;function s(){o.apply(this,arguments),this._initialize()}s.prototype=Object.create(o.prototype),s.prototype.constructor=s,s.ID=s.prototype.ID="options",s.prototype._initialize=function(){this.container=this.getElementById("payment-options-container"),this.elements={},this.model.supportedPaymentOptions.forEach(function(e){this._addPaymentOption(e)}.bind(this))},s.prototype._addPaymentOption=function(e){var t,i=document.createElement("div"),o='\n\n
\n @OPTION_TITLE\n
\n
\n',s=function(){this.mainView.setPrimaryView(e),this.model.selectPaymentOption(e),r.sendEvent(this.client,"selected."+a[e])}.bind(this);switch(i.className="braintree-option braintree-option__"+e,i.setAttribute("tabindex","0"),e){case a.applePay:t=this.strings["Apple Pay"],o=o.replace(/@ICON/g,"logoApplePay");break;case a.card:t=this.strings.Card,o=(o=o.replace(/@ICON/g,"iconCardFront")).replace(/@CLASSNAME/g,"braintree-icon--bordered");break;case a.googlePay:t=this.strings["Google Pay"],o=o.replace(/@ICON/g,"logoGooglePay");break;case a.paypal:t=this.strings.PayPal,o=o.replace(/@ICON/g,"logoPayPal");break;case a.paypalCredit:t=this.strings["PayPal Credit"],o=o.replace(/@ICON/g,"logoPayPalCredit");break;case a.venmo:t=this.strings.Venmo,o=o.replace(/@ICON/g,"logoVenmo")}o=(o=(o=o.replace(/@OPTION_LABEL/g,this._generateOptionLabel(t))).replace(/@OPTION_TITLE/g,t)).replace(/@CLASSNAME/g,""),i.innerHTML=o,n(i,s),this.container.appendChild(i),this.elements[e]={div:i,clickHandler:s}},s.prototype._generateOptionLabel=function(e){return this.strings.payingWith.replace("{{paymentSource}}",e)},t.exports=s},{"../constants":187,"../lib/add-selection-event-handler":191,"../lib/analytics":192,"./base-view":245}],251:[function(e,t,i){(function(i){(function(){"use strict";var r=e("../../lib/assign").assign,n=e("../base-view"),o=e("braintree-web/apple-pay"),a=e("../../lib/dropin-error"),s=e("../../lib/is-https"),l=e("../../lib/promise"),d=e("../../constants").paymentOptionIDs;function c(){n.apply(this,arguments)}c.prototype=Object.create(n.prototype),c.prototype.constructor=c,c.ID=c.prototype.ID=d.applePay,c.prototype.initialize=function(){var e=this;return e.applePayConfiguration=r({},e.model.merchantConfiguration.applePay),e.applePaySessionVersion=e.applePayConfiguration.applePaySessionVersion||2,delete e.applePayConfiguration.applePaySessionVersion,o.create({client:this.client}).then((function(t){var i=e.getElementById("apple-pay-button");e.applePayInstance=t,i.onclick=e._showPaymentSheet.bind(e),i.style["-apple-pay-button-style"]=e.model.merchantConfiguration.applePay.buttonStyle||"black",e.model.asyncDependencyReady(c.ID)})).catch((function(t){e.model.asyncDependencyFailed({view:e.ID,error:new a(t)})}))},c.prototype._showPaymentSheet=function(){var e=this,t=e.applePayInstance.createPaymentRequest(this.applePayConfiguration.paymentRequest),r=new i.ApplePaySession(e.applePaySessionVersion,t);return r.onvalidatemerchant=function(t){e.applePayInstance.performValidation({validationURL:t.validationURL,displayName:e.applePayConfiguration.displayName}).then((function(e){r.completeMerchantValidation(e)})).catch((function(t){e.model.reportError(t),r.abort()}))},r.onpaymentauthorized=function(t){e.applePayInstance.tokenize({token:t.payment.token}).then((function(n){r.completePayment(i.ApplePaySession.STATUS_SUCCESS),n.rawPaymentData=t.payment,e.model.addPaymentMethod(n)})).catch((function(t){e.model.reportError(t),r.completePayment(i.ApplePaySession.STATUS_FAILURE)}))},r.begin(),!1},c.prototype.updateConfiguration=function(e,t){this.applePayConfiguration[e]=t},c.isEnabled=function(e){var t=e.client.getConfiguration().gatewayConfiguration.applePayWeb&&Boolean(e.merchantConfiguration.applePay),r=e.merchantConfiguration.applePay&&e.merchantConfiguration.applePay.applePaySessionVersion;return r=r||2,t&&i.ApplePaySession&&s.isHTTPS()&&i.ApplePaySession.supportsVersion(r)?l.resolve(Boolean(i.ApplePaySession.canMakePayments())):l.resolve(!1)},t.exports=c}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../constants":187,"../../lib/assign":193,"../../lib/dropin-error":197,"../../lib/is-https":200,"../../lib/promise":204,"../base-view":245,"braintree-web/apple-pay":49}],252:[function(e,t,i){(function(i){(function(){"use strict";var r,n=e("../../lib/analytics"),o=e("../../lib/assign").assign,a=e("../../lib/browser-detection"),s=e("../base-view"),l=e("braintree-web/paypal-checkout"),d=e("../../lib/dropin-error"),c=e("../../constants"),p=e("@braintree/asset-loader"),u=e("../../translations").fiveCharacterLocales,h=e("../../lib/promise"),m=["offerCredit","locale"];function y(){s.apply(this,arguments)}y.prototype=Object.create(s.prototype),y.prototype.initialize=function(){var e,t=Boolean(this._isPayPalCredit),r=!1,n=this,a=t?"paypalCredit":"paypal",s=this.model.merchantConfiguration[a],c="#braintree--dropin__"+this.model.componentID;return this.paypalConfiguration=o({},s),e=setTimeout((function(){n.model.asyncDependencyFailed({view:n.ID,error:new d("There was an error connecting to PayPal.")})}),3e4),l.create({client:this.client}).then((function(o){var s,l='[data-braintree-id="paypal-button"]',d="production"===n.client.getConfiguration().gatewayConfiguration.environment?"production":"sandbox",h=n.model.merchantConfiguration.locale;return n.paypalInstance=o,n.paypalConfiguration.offerCredit=Boolean(t),s={env:d,style:n.paypalConfiguration.buttonStyle||{},commit:n.paypalConfiguration.commit,payment:function(){return o.createPayment(n.paypalConfiguration).catch(p)},onAuthorize:function(e){var t=n.paypalConfiguration.vault&&!1===n.paypalConfiguration.vault.vaultPayPal;return t&&(e.vault=!1),o.tokenizePayment(e).then((function(e){t||"vault"!==n.paypalConfiguration.flow||n.model.isGuestCheckout||(e.vaulted=!0),n.model.addPaymentMethod(e)})).catch(p)},onError:p},h&&h in u&&(n.paypalConfiguration.locale=h,s.locale=h),s.funding={disallowed:[]},Object.keys(i.paypal.FUNDING).forEach((function(e){"PAYPAL"!==e&&"CREDIT"!==e&&s.funding.disallowed.push(i.paypal.FUNDING[e])})),t?(l='[data-braintree-id="paypal-credit-button"]',s.style.label="credit"):s.funding.disallowed.push(i.paypal.FUNDING.CREDIT),l=c+" "+l,i.paypal.Button.render(s,l).then((function(){n.model.asyncDependencyReady(a),r=!0,clearTimeout(e)}))})).catch(p);function p(t){r?n.model.reportError(t):(n.model.asyncDependencyFailed({view:n.ID,error:t}),clearTimeout(e))}},y.prototype.requestPaymentMethod=function(){return this.model.reportError("paypalButtonMustBeUsed"),s.prototype.requestPaymentMethod.call(this)},y.prototype.updateConfiguration=function(e,t){-1===m.indexOf(e)&&(this.paypalConfiguration[e]=t)},y.isEnabled=function(e){var t=e.client.getConfiguration().gatewayConfiguration,o=e.merchantConfiguration.paypal||e.merchantConfiguration.paypalCredit;return t.paypalEnabled?a.isIe9()||a.isIe10()?(n.sendEvent(e.client,e.viewID+".checkout.js-browser-not-supported"),h.resolve(!1)):i.paypal&&i.paypal.Button?h.resolve(!0):r||(r=p.loadScript({src:c.CHECKOUT_JS_SOURCE,id:c.PAYPAL_CHECKOUT_SCRIPT_ID,dataAttributes:{"log-level":o.logLevel||"warn"}}).then((function(){return h.resolve(!0)})).catch((function(){return h.resolve(!1)})).then((function(e){return r=null,h.resolve(e)}))):h.resolve(!1)},t.exports=y}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../constants":187,"../../lib/analytics":192,"../../lib/assign":193,"../../lib/browser-detection":194,"../../lib/dropin-error":197,"../../lib/promise":204,"../../translations":228,"../base-view":245,"@braintree/asset-loader":1,"braintree-web/paypal-checkout":132}],253:[function(e,t,i){"use strict";var r=e("../../lib/assign").assign,n=e("../base-view"),o=e("@braintree/class-list"),a=e("../../constants"),s=e("../../lib/dropin-error"),l=e("braintree-web/hosted-fields"),d=e("../../lib/is-utf-8"),c=e("../../lib/transition-helper"),p=e("../../lib/promise"),u=["empty","inputSubmitRequest","binAvailable"];function h(){n.apply(this,arguments)}function m(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function y(e){return e[0].toUpperCase()+e.substr(1)}function f(e){var t=d()?"•":"*";return Array(e+1).join(t)}h.prototype=Object.create(n.prototype),h.prototype.constructor=h,h.ID=h.prototype.ID=a.paymentOptionIDs.card,h.prototype.initialize=function(){var e,t,i,r=this.getElementById("cardholder-name-field-group"),n=this.getElementById("card-view-icons");return this.merchantConfiguration=this.model.merchantConfiguration.card||{},this.merchantConfiguration.vault=this.merchantConfiguration.vault||{},this.hasCardholderName=Boolean(this.merchantConfiguration.cardholderName),this.cardholderNameRequired=this.hasCardholderName&&!0===this.merchantConfiguration.cardholderName.required,i=this._generateHostedFieldsOptions(),n.innerHTML='
\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n\x3c!-- Remove braintree-hidden class when supportedCardType accurately indicates Diners Club support --\x3e\n
\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n',this._hideUnsupportedCardIcons(),this.hasCVV=i.fields.cvv,this.saveCardInput=this.getElementById("save-card-input"),this.cardNumberIcon=this.getElementById("card-number-icon"),this.cardNumberIconSvg=this.getElementById("card-number-icon-svg"),this.cvvIcon=this.getElementById("cvv-icon"),this.cvvIconSvg=this.getElementById("cvv-icon-svg"),this.cvvLabelDescriptor=this.getElementById("cvv-label-descriptor"),this.fieldErrors={},this.hasCardholderName||r.parentNode.removeChild(r),this.hasCVV||(e=this.getElementById("cvv-field-group")).parentNode.removeChild(e),i.fields.postalCode||(t=this.getElementById("postal-code-field-group")).parentNode.removeChild(t),this.model.isGuestCheckout||!0!==this.merchantConfiguration.vault.allowVaultCardOverride||o.remove(this.getElementById("save-card-field-group"),"braintree-hidden"),!1===this.merchantConfiguration.vault.vaultCard&&(this.saveCardInput.checked=!1),l.create(i).then(function(e){this.hostedFieldsInstance=e,this.hostedFieldsInstance.on("blur",this._onBlurEvent.bind(this)),this.hostedFieldsInstance.on("cardTypeChange",this._onCardTypeChangeEvent.bind(this)),this.hostedFieldsInstance.on("focus",this._onFocusEvent.bind(this)),this.hostedFieldsInstance.on("notEmpty",this._onNotEmptyEvent.bind(this)),this.hostedFieldsInstance.on("validityChange",this._onValidityChangeEvent.bind(this)),u.forEach(function(e){this.hostedFieldsInstance.on(e,function(t){this.model._emit("card:"+e,t)}.bind(this))}.bind(this)),this.model.asyncDependencyReady(h.ID)}.bind(this)).catch(function(e){this.model.asyncDependencyFailed({view:this.ID,error:e})}.bind(this))},h.prototype._sendRequestableEvent=function(){this._isTokenizing||this.model.setPaymentMethodRequestable({isRequestable:this._validateForm(),type:a.paymentMethodTypes.card})},h.prototype._generateHostedFieldsOptions=function(){var e,t=this.client.getConfiguration().gatewayConfiguration.challenges,i=-1!==t.indexOf("cvv"),n=-1!==t.indexOf("postal_code"),o=this.merchantConfiguration.overrides,a={client:this.client,fields:{cardholderName:{container:this._getFieldContainer("cardholder-name"),placeholder:this.strings.cardholderNamePlaceholder},number:{container:this._getFieldContainer("number"),placeholder:(e=f(4),[e,e,e,e].join(" "))},expirationDate:{container:this._getFieldContainer("expiration"),placeholder:this.strings.expirationDatePlaceholder},cvv:{container:this._getFieldContainer("cvv"),placeholder:f(3)},postalCode:{container:this._getFieldContainer("postal-code")}},styles:{input:{"font-size":"16px","font-family":'-apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif',color:"#000"},":focus":{color:"black"},"::-webkit-input-placeholder":{color:"#6a6a6a"},":-moz-placeholder":{color:"#6a6a6a"},"::-moz-placeholder":{color:"#6a6a6a"},":-ms-input-placeholder ":{color:"#6a6a6a"},"input::-ms-clear":{color:"transparent"}}};return this.hasCardholderName||delete a.fields.cardholderName,i||delete a.fields.cvv,n||delete a.fields.postalCode,o?(o.fields&&(o.fields.cvv&&void 0!==o.fields.cvv.placeholder&&(this._hasCustomCVVPlaceholder=!0),Object.keys(o.fields).forEach((function(e){"cvv"!==e&&"postalCode"!==e||null!==o.fields[e]?a.fields[e]&&r(a.fields[e],o.fields[e],{selector:a.fields[e].selector}):delete a.fields[e]}))),o.styles&&Object.keys(o.styles).forEach((function(e){var t;null!==o.styles[e]?"string"!=typeof o.styles[e]?(t=o.styles[e],Object.keys(t).forEach((function(e){var i=m(e);t[i]=t[e]})),a.styles[e]=a.styles[e]||{},r(a.styles[e],o.styles[e])):a.styles[e]=o.styles[e]:delete a.styles[e]})),a):a},h.prototype._validateForm=function(e){var t,i,r,n=!0,o=this.client.getConfiguration().gatewayConfiguration.creditCards.supportedCardTypes;return!!this.hostedFieldsInstance&&(r=this.hostedFieldsInstance.getState(),Object.keys(r.fields).forEach(function(t){var i=r.fields[t];(e||n)&&(i.isEmpty?this.cardholderNameRequired||"cardholderName"!==t?(n=!1,e&&this.showFieldError(t,this.strings["fieldEmptyFor"+y(t)])):n=!0:i.isValid||(n=!1,e&&this.showFieldError(t,this.strings["fieldInvalidFor"+y(t)])))}.bind(this)),r.fields.number.isValid&&((i=(t=r.cards[0])&&a.configurationCardTypes[t.type])&&-1!==o.indexOf(i)||(n=!1,e&&this.showFieldError("number",this.strings.unsupportedCardTypeError))),n)},h.prototype.getPaymentMethod=function(){if(this._validateForm())return{type:a.paymentMethodTypes.card}},h.prototype.tokenize=function(){var e,t=this,i=t.hostedFieldsInstance.getState(),r={vault:this._shouldVault()};return this.model.clearError(),this._validateForm(!0)?(!this.cardholderNameRequired&&i.fields.cardholderName&&i.fields.cardholderName.isEmpty&&(r.fieldsToTokenize=Object.keys(i.fields).filter((function(e){return"cardholderName"!==e}))),t._isTokenizing=!0,t.hostedFieldsInstance.tokenize(r).then((function(r){return!1===t.merchantConfiguration.clearFieldsAfterTokenization||Object.keys(i.fields).forEach((function(e){t.hostedFieldsInstance.clear(e)})),t._shouldVault()&&(r.vaulted=!0),new p((function(i){e=function(){setTimeout((function(){t.model.addPaymentMethod(r),i(r),o.remove(t.element,"braintree-sheet--tokenized")}),0)},c.onTransitionEnd(t.element,"max-height",e),setTimeout((function(){t.allowUserAction(),t._isTokenizing=!1}),a.CHANGE_ACTIVE_PAYMENT_METHOD_TIMEOUT),o.add(t.element,"braintree-sheet--tokenized")}))})).catch((function(e){return t._isTokenizing=!1,t.model.reportError(e),t.allowUserAction(),p.reject(new s({message:a.errors.NO_PAYMENT_METHOD_ERROR,braintreeWebError:e}))}))):(t.model.reportError("hostedFieldsFieldsInvalidError"),t.allowUserAction(),p.reject(new s(a.errors.NO_PAYMENT_METHOD_ERROR)))},h.prototype.showFieldError=function(e,t){var i=this.getElementById(m(e)+"-field-group"),r=i.querySelector("input");this.fieldErrors.hasOwnProperty(e)||(this.fieldErrors[e]=this.getElementById(m(e)+"-field-error")),o.add(i,"braintree-form__field-group--has-error"),this.fieldErrors[e].innerHTML=t,r?r.setAttribute("aria-invalid",!0):(this.hostedFieldsInstance.setAttribute({field:e,attribute:"aria-invalid",value:!0}),this.hostedFieldsInstance.setMessage({field:e,message:t}))},h.prototype.hideFieldError=function(e){var t=this.getElementById(m(e)+"-field-group"),i=t.querySelector("input");this.fieldErrors.hasOwnProperty(e)||(this.fieldErrors[e]=this.getElementById(m(e)+"-field-error")),o.remove(t,"braintree-form__field-group--has-error"),i?i.removeAttribute("aria-invalid"):(this.hostedFieldsInstance.removeAttribute({field:e,attribute:"aria-invalid"}),this.hostedFieldsInstance.setMessage({field:e,message:""}))},h.prototype.teardown=function(){return this.hostedFieldsInstance.teardown()},h.prototype._shouldVault=function(){return!this.model.isGuestCheckout&&this.saveCardInput.checked},h.prototype._getFieldContainer=function(e){return"expiration"===e&&(e="expiration-date"),this.getElementById(e+"-field-group").querySelector(".braintree-form__hosted-field")},h.prototype._onBlurEvent=function(e){var t=e.fields[e.emittedBy],i=this.getElementById(m(e.emittedBy)+"-field-group");o.remove(i,"braintree-form__field-group--is-focused"),this._shouldApplyFieldEmptyError(e.emittedBy,t)?this.showFieldError(e.emittedBy,this.strings["fieldEmptyFor"+y(e.emittedBy)]):t.isEmpty||t.isValid?"number"!==e.emittedBy||this._isCardTypeSupported(e.cards[0].type)||this.showFieldError("number",this.strings.unsupportedCardTypeError):this.showFieldError(e.emittedBy,this.strings["fieldInvalidFor"+y(e.emittedBy)]),this.model._emit("card:blur",e),setTimeout(function(){this._shouldApplyFieldEmptyError(e.emittedBy,t)&&this.showFieldError(e.emittedBy,this.strings["fieldEmptyFor"+y(e.emittedBy)])}.bind(this),150)},h.prototype._onCardTypeChangeEvent=function(e){var t,i="#iconCardFront",r="#iconCVVBack",n=this.strings.cvvThreeDigitLabelSubheading,a=f(3),s=this.getElementById("number-field-group");1===e.cards.length?(i="#icon-"+(t=e.cards[0].type),"american-express"===t&&(r="#iconCVVFront",n=this.strings.cvvFourDigitLabelSubheading,a=f(4)),o.add(s,"braintree-form__field-group--card-type-known")):o.remove(s,"braintree-form__field-group--card-type-known"),this.cardNumberIconSvg.setAttribute("xlink:href",i),this.hasCVV&&(this.cvvIconSvg.setAttribute("xlink:href",r),this.cvvLabelDescriptor.innerHTML=n,this._hasCustomCVVPlaceholder||this.hostedFieldsInstance.setAttribute({field:"cvv",attribute:"placeholder",value:a})),this.model._emit("card:cardTypeChange",e)},h.prototype._onFocusEvent=function(e){var t=this.getElementById(m(e.emittedBy)+"-field-group");o.add(t,"braintree-form__field-group--is-focused"),this.model._emit("card:focus",e)},h.prototype._onNotEmptyEvent=function(e){this.hideFieldError(e.emittedBy),this.model._emit("card:notEmpty",e)},h.prototype._onValidityChangeEvent=function(e){var t,i=e.fields[e.emittedBy];t="number"===e.emittedBy&&e.cards[0]?i.isValid&&this._isCardTypeSupported(e.cards[0].type):i.isValid,o.toggle(i.container,"braintree-form__field--valid",t),i.isPotentiallyValid&&this.hideFieldError(e.emittedBy),this._sendRequestableEvent(),this.model._emit("card:validityChange",e)},h.prototype.requestPaymentMethod=function(){return this.preventUserAction(),this.tokenize()},h.prototype.onSelection=function(){this.hostedFieldsInstance&&setTimeout(function(){this.hasCardholderName?this.hostedFieldsInstance.focus("cardholderName"):this.hostedFieldsInstance.focus("number")}.bind(this),50)},h.prototype._hideUnsupportedCardIcons=function(){var e=this.client.getConfiguration().gatewayConfiguration.creditCards.supportedCardTypes;Object.keys(a.configurationCardTypes).forEach(function(t){var i,r=a.configurationCardTypes[t];-1===e.indexOf(r)&&(i=this.getElementById(t+"-card-icon"),o.add(i,"braintree-hidden"))}.bind(this))},h.prototype._isCardTypeSupported=function(e){var t=a.configurationCardTypes[e];return-1!==this.client.getConfiguration().gatewayConfiguration.creditCards.supportedCardTypes.indexOf(t)},h.isEnabled=function(e){var t=e.client.getConfiguration().gatewayConfiguration,i=!1===e.merchantConfiguration.card;return p.resolve(!i&&t.creditCards.supportedCardTypes.length>0)},h.prototype._shouldApplyFieldEmptyError=function(e,t){return!!t.isEmpty&&(!("cardholderName"===e&&!this.cardholderNameRequired)&&(i=document.activeElement&&document.activeElement.id,document.activeElement instanceof HTMLIFrameElement&&-1!==i.indexOf("braintree-hosted-field")));var i},t.exports=h},{"../../constants":187,"../../lib/assign":193,"../../lib/dropin-error":197,"../../lib/is-utf-8":201,"../../lib/promise":204,"../../lib/transition-helper":208,"../base-view":245,"@braintree/class-list":35,"braintree-web/hosted-fields":81}],254:[function(e,t,i){(function(i){(function(){"use strict";var r=e("../../lib/assign").assign,n=e("../base-view"),o=e("braintree-web/google-payment"),a=e("../../lib/dropin-error"),s=e("../../constants"),l=e("@braintree/asset-loader"),d=e("../../lib/promise"),c=e("../../lib/analytics");function p(){n.apply(this,arguments)}function u(e){return new i.google.payments.api.PaymentsClient({environment:"production"===e.getConfiguration().gatewayConfiguration.environment?"PRODUCTION":"TEST"})}p.prototype=Object.create(n.prototype),p.prototype.constructor=p,p.ID=p.prototype.ID=s.paymentOptionIDs.googlePay,p.prototype.initialize=function(){var e,t,i,n=this;return n.googlePayConfiguration=r({},n.model.merchantConfiguration.googlePay),t=n.googlePayConfiguration.googlePayVersion,i=n.googlePayConfiguration.merchantId,e=r({buttonType:"short"},n.googlePayConfiguration.button,{onClick:function(e){e.preventDefault(),n.preventUserAction(),n.tokenize().then((function(){n.allowUserAction()}))}}),delete n.googlePayConfiguration.googlePayVersion,delete n.googlePayConfiguration.merchantId,delete n.googlePayConfiguration.button,o.create({client:n.client,googlePayVersion:t,googleMerchantId:i}).then((function(e){n.googlePayInstance=e,n.paymentsClient=u(n.client)})).then((function(){n.getElementById("google-pay-button").appendChild(n.paymentsClient.createButton(e)),n.model.asyncDependencyReady(p.ID)})).catch((function(e){n.model.asyncDependencyFailed({view:n.ID,error:new a(e)})}))},p.prototype.tokenize=function(){var e,t=this,i=t.googlePayInstance.createPaymentDataRequest(t.googlePayConfiguration);return t.paymentsClient.loadPaymentData(i).then((function(i){return e=i,t.googlePayInstance.parseResponse(i)})).then((function(i){i.rawPaymentData=e,t.model.addPaymentMethod(i)})).catch((function(e){var i=e;if("DEVELOPER_ERROR"===e.statusCode)console.error(e),i="developerError";else{if("CANCELED"===e.statusCode)return void c.sendEvent(t.client,"googlepay.loadPaymentData.canceled");e.statusCode&&c.sendEvent(t.client,"googlepay.loadPaymentData.failed")}t.model.reportError(i)}))},p.prototype.updateConfiguration=function(e,t){this.googlePayConfiguration[e]=t},p.isEnabled=function(e){return e.client.getConfiguration().gatewayConfiguration.androidPay&&Boolean(e.merchantConfiguration.googlePay)?d.resolve().then((function(){return i.google&&i.google.payments&&i.google.payments.api&&i.google.payments.api.PaymentsClient?d.resolve():l.loadScript({id:s.GOOGLE_PAYMENT_SCRIPT_ID,src:s.GOOGLE_PAYMENT_SOURCE})})).then((function(){return u(e.client).isReadyToPay({allowedPaymentMethods:["CARD","TOKENIZED_CARD"]})})).then((function(e){return Boolean(e.result)})):d.resolve(!1)},t.exports=p}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../constants":187,"../../lib/analytics":192,"../../lib/assign":193,"../../lib/dropin-error":197,"../../lib/promise":204,"../base-view":245,"@braintree/asset-loader":1,"braintree-web/google-payment":74}],255:[function(e,t,i){"use strict";var r=e("../../constants").paymentOptionIDs,n={};n[r.applePay]=e("./apple-pay-view"),n[r.card]=e("./card-view"),n[r.googlePay]=e("./google-pay-view"),n[r.paypal]=e("./paypal-view"),n[r.paypalCredit]=e("./paypal-credit-view"),n[r.venmo]=e("./venmo-view"),t.exports=n},{"../../constants":187,"./apple-pay-view":251,"./card-view":253,"./google-pay-view":254,"./paypal-credit-view":256,"./paypal-view":257,"./venmo-view":258}],256:[function(e,t,i){"use strict";var r=e("../../lib/assign").assign,n=e("../../lib/promise"),o=e("../../constants").paymentOptionIDs,a=e("./base-paypal-view");function s(){a.apply(this,arguments),this._isPayPalCredit=!0}s.prototype=Object.create(a.prototype),s.prototype.constructor=s,s.ID=s.prototype.ID=o.paypalCredit,s.isEnabled=function(e){return e.merchantConfiguration.paypalCredit?a.isEnabled(r({viewID:s.ID},e)):n.resolve(!1)},t.exports=s},{"../../constants":187,"../../lib/assign":193,"../../lib/promise":204,"./base-paypal-view":252}],257:[function(e,t,i){"use strict";var r=e("../../lib/assign").assign,n=e("../../lib/promise"),o=e("../../constants").paymentOptionIDs,a=e("./base-paypal-view");function s(){a.apply(this,arguments)}s.prototype=Object.create(a.prototype),s.prototype.constructor=s,s.ID=s.prototype.ID=o.paypal,s.isEnabled=function(e){return e.merchantConfiguration.paypal?a.isEnabled(r({viewID:s.ID},e)):n.resolve(!1)},t.exports=s},{"../../constants":187,"../../lib/assign":193,"../../lib/promise":204,"./base-paypal-view":252}],258:[function(e,t,i){"use strict";var r=e("../../lib/assign").assign,n=e("../base-view"),o=e("braintree-web/venmo"),a=e("../../lib/dropin-error"),s=e("../../lib/promise"),l=e("../../constants").paymentOptionIDs;function d(){n.apply(this,arguments)}d.prototype=Object.create(n.prototype),d.prototype.constructor=d,d.ID=d.prototype.ID=l.venmo,d.prototype.initialize=function(){var e=this,t=r({},e.model.merchantConfiguration.venmo,{client:this.client});return o.create(t).then((function(t){return e.venmoInstance=t,e.venmoInstance.hasTokenizationResult()?e.venmoInstance.tokenize().then((function(t){e.model.reportAppSwitchPayload(t)})).catch((function(t){e._isIgnorableError(t)||e.model.reportAppSwitchError(l.venmo,t)})):s.resolve()})).then((function(){e.getElementById("venmo-button").addEventListener("click",(function(t){return t.preventDefault(),e.preventUserAction(),e.venmoInstance.tokenize().then((function(t){e.model.addPaymentMethod(t)})).catch((function(t){e._isIgnorableError(t)||e.model.reportError(t)})).then((function(){e.allowUserAction()}))})),e.model.asyncDependencyReady(d.ID)})).catch((function(t){e.model.asyncDependencyFailed({view:e.ID,error:new a(t)})}))},d.prototype._isIgnorableError=function(e){return"VENMO_APP_CANCELED"===e.code||"VENMO_DESKTOP_CANCELED"===e.code},d.isEnabled=function(e){return e.client.getConfiguration().gatewayConfiguration.payWithVenmo&&Boolean(e.merchantConfiguration.venmo)?s.resolve(o.isBrowserSupported(e.merchantConfiguration.venmo)):s.resolve(!1)},t.exports=d},{"../../constants":187,"../../lib/assign":193,"../../lib/dropin-error":197,"../../lib/promise":204,"../base-view":245,"braintree-web/venmo":153}]},{},[190])(190)})); \ No newline at end of file diff --git a/scripts/qrious.min.js b/scripts/qrious.min.js index 5735ea62..60fa20ac 100644 --- a/scripts/qrious.min.js +++ b/scripts/qrious.min.js @@ -1,6 +1,2 @@ -/*! QRious v4.0.2 | (C) 2017 Alasdair Mercer | GPL v3 License -Based on jsqrencode | (C) 2010 tz@execpc.com | GPL v3 License -*/ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.QRious=e()}(this,function(){"use strict";function t(t,e){var n;return"function"==typeof Object.create?n=Object.create(t):(s.prototype=t,n=new s,s.prototype=null),e&&i(!0,n,e),n}function e(e,n,s,r){var o=this;return"string"!=typeof e&&(r=s,s=n,n=e,e=null),"function"!=typeof n&&(r=s,s=n,n=function(){return o.apply(this,arguments)}),i(!1,n,o,r),n.prototype=t(o.prototype,s),n.prototype.constructor=n,n.class_=e||o.class_,n.super_=o,n}function i(t,e,i){for(var n,s,a=0,h=(i=o.call(arguments,2)).length;a>1&1,n=0;n0;e--)n[e]=n[e]?n[e-1]^_.EXPONENT[v._modN(_.LOG[n[e]]+t)]:n[e-1];n[0]=_.EXPONENT[v._modN(_.LOG[n[0]]+t)]}for(t=0;t<=i;t++)n[t]=_.LOG[n[t]]},_checkBadness:function(){var t,e,i,n,s,r=0,o=this._badness,a=this.buffer,h=this.width;for(s=0;sh*h;)u-=h*h,c++;for(r+=c*v.N4,n=0;n=o-2&&(t=o-2,s>9&&t--);var a=t;if(s>9){for(r[a+2]=0,r[a+3]=0;a--;)e=r[a],r[a+3]|=255&e<<4,r[a+2]=e>>4;r[2]|=255&t<<4,r[1]=t>>4,r[0]=64|t>>12}else{for(r[a+1]=0,r[a+2]=0;a--;)e=r[a],r[a+2]|=255&e<<4,r[a+1]=e>>4;r[1]|=255&t<<4,r[0]=64|t>>4}for(a=t+3-(s<10);a=5&&(i+=v.N1+n[e]-5);for(e=3;et||3*n[e-3]>=4*n[e]||3*n[e+3]>=4*n[e])&&(i+=v.N3);return i},_finish:function(){this._stringBuffer=this.buffer.slice();var t,e,i=0,n=3e4;for(e=0;e<8&&(this._applyMask(e),(t=this._checkBadness())>=1)1&n&&(s[r-1-e+8*r]=1,e<6?s[8+r*e]=1:s[8+r*(e+1)]=1);for(e=0;e<7;e++,n>>=1)1&n&&(s[8+r*(r-7+e)]=1,e?s[6-e+8*r]=1:s[7+8*r]=1)},_interleaveBlocks:function(){var t,e,i=this._dataBlock,n=this._ecc,s=this._eccBlock,r=0,o=this._calculateMaxLength(),a=this._neccBlock1,h=this._neccBlock2,f=this._stringBuffer;for(t=0;t1)for(t=u.BLOCK[n],i=s-7;;){for(e=s-7;e>t-3&&(this._addAlignment(e,i),!(e6)for(t=d.BLOCK[r-7],e=17,i=0;i<6;i++)for(n=0;n<3;n++,e--)1&(e>11?r>>e-12:t>>e)?(s[5-i+o*(2-n+o-11)]=1,s[2-n+o-11+o*(5-i)]=1):(this._setMask(5-i,2-n+o-11),this._setMask(2-n+o-11,5-i))},_isMasked:function(t,e){var i=v._getMaskBit(t,e);return 1===this._mask[i]},_pack:function(){var t,e,i,n=1,s=1,r=this.width,o=r-1,a=r-1,h=(this._dataBlock+this._eccBlock)*(this._neccBlock1+this._neccBlock2)+this._neccBlock2;for(e=0;ee&&(i=t,t=e,e=i),i=e,i+=e*e,i>>=1,i+=t},_modN:function(t){for(;t>=255;)t=((t-=255)>>8)+(255&t);return t},N1:3,N2:3,N3:40,N4:10}),p=v,m=f.extend({draw:function(){this.element.src=this.qrious.toDataURL()},reset:function(){this.element.src=""},resize:function(){var t=this.element;t.width=t.height=this.qrious.size}}),g=h.extend(function(t,e,i,n){this.name=t,this.modifiable=Boolean(e),this.defaultValue=i,this._valueTransformer=n},{transform:function(t){var e=this._valueTransformer;return"function"==typeof e?e(t,this):t}}),k=h.extend(null,{abs:function(t){return null!=t?Math.abs(t):null},hasOwn:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},noop:function(){},toUpperCase:function(t){return null!=t?t.toUpperCase():null}}),w=h.extend(function(t){this.options={},t.forEach(function(t){this.options[t.name]=t},this)},{exists:function(t){return null!=this.options[t]},get:function(t,e){return w._get(this.options[t],e)},getAll:function(t){var e,i=this.options,n={};for(e in i)k.hasOwn(i,e)&&(n[e]=w._get(i[e],t));return n},init:function(t,e,i){"function"!=typeof i&&(i=k.noop);var n,s;for(n in this.options)k.hasOwn(this.options,n)&&(s=this.options[n],w._set(s,s.defaultValue,e),w._createAccessor(s,e,i));this._setAll(t,e,!0)},set:function(t,e,i){return this._set(t,e,i)},setAll:function(t,e){return this._setAll(t,e)},_set:function(t,e,i,n){var s=this.options[t];if(!s)throw new Error("Invalid option: "+t);if(!s.modifiable&&!n)throw new Error("Option cannot be modified: "+t);return w._set(s,e,i)},_setAll:function(t,e,i){if(!t)return!1;var n,s=!1;for(n in t)k.hasOwn(t,n)&&this._set(n,t[n],e,i)&&(s=!0);return s}},{_createAccessor:function(t,e,i){var n={get:function(){return w._get(t,e)}};t.modifiable&&(n.set=function(n){w._set(t,n,e)&&i(n,t)}),Object.defineProperty(e,t.name,n)},_get:function(t,e){return e["_"+t.name]},_set:function(t,e,i){var n="_"+t.name,s=i[n],r=t.transform(null!=e?e:t.defaultValue);return i[n]=r,r!==s}}),M=w,b=h.extend(function(){this._services={}},{getService:function(t){var e=this._services[t];if(!e)throw new Error("Service is not being managed with name: "+t);return e},setService:function(t,e){if(this._services[t])throw new Error("Service is already managed with name: "+t);e&&(this._services[t]=e)}}),B=new M([new g("background",!0,"white"),new g("backgroundAlpha",!0,1,k.abs),new g("element"),new g("foreground",!0,"black"),new g("foregroundAlpha",!0,1,k.abs),new g("level",!0,"L",k.toUpperCase),new g("mime",!0,"image/png"),new g("padding",!0,null,k.abs),new g("size",!0,100,k.abs),new g("value",!0,"")]),y=new b,O=h.extend(function(t){B.init(t,this,this.update.bind(this));var e=B.get("element",this),i=y.getService("element"),n=e&&i.isCanvas(e)?e:i.createCanvas(),s=e&&i.isImage(e)?e:i.createImage();this._canvasRenderer=new c(this,n,!0),this._imageRenderer=new m(this,s,s===e),this.update()},{get:function(){return B.getAll(this)},set:function(t){B.setAll(t,this)&&this.update()},toDataURL:function(t){return this.canvas.toDataURL(t||this.mime)},update:function(){var t=new p({level:this.level,value:this.value});this._canvasRenderer.render(t),this._imageRenderer.render(t)}},{use:function(t){y.setService(t.getName(),t)}});Object.defineProperties(O.prototype,{canvas:{get:function(){return this._canvasRenderer.getElement()}},image:{get:function(){return this._imageRenderer.getElement()}}});var A=O,L=h.extend({getName:function(){}}).extend({createCanvas:function(){},createImage:function(){},getName:function(){return"element"},isCanvas:function(t){},isImage:function(t){}}).extend({createCanvas:function(){return document.createElement("canvas")},createImage:function(){return document.createElement("img")},isCanvas:function(t){return t instanceof HTMLCanvasElement},isImage:function(t){return t instanceof HTMLImageElement}});return A.use(new L),A}); - -//# sourceMappingURL=qrious.min.js.map \ No newline at end of file +/*! For license information please see qrious.min.js.LICENSE.txt */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.QRious=e()}(this,(function(){"use strict";function t(t,i){var s;return"function"==typeof Object.create?s=Object.create(t):(n.prototype=t,s=new n,n.prototype=null),i&&e(!0,s,i),s}function e(t,e,i){for(var n,o,a=0,h=(i=r.call(arguments,2)).length;a>1&1,n=0;n0;e--)n[e]=n[e]?n[e-1]^l.EXPONENT[d._modN(l.LOG[n[e]]+t)]:n[e-1];n[0]=l.EXPONENT[d._modN(l.LOG[n[0]]+t)]}for(t=0;t<=i;t++)n[t]=l.LOG[n[t]]},_checkBadness:function(){var t,e,i,n,s,r=0,o=this._badness,a=this.buffer,h=this.width;for(s=0;sh*h;)u-=h*h,c++;for(r+=c*d.N4,n=0;n=o-2&&(t=o-2,s>9&&t--);var a=t;if(s>9){for(r[a+2]=0,r[a+3]=0;a--;)e=r[a],r[a+3]|=255&e<<4,r[a+2]=e>>4;r[2]|=255&t<<4,r[1]=t>>4,r[0]=64|t>>12}else{for(r[a+1]=0,r[a+2]=0;a--;)e=r[a],r[a+2]|=255&e<<4,r[a+1]=e>>4;r[1]|=255&t<<4,r[0]=64|t>>4}for(a=t+3-(s<10);a=5&&(i+=d.N1+n[e]-5);for(e=3;et||3*n[e-3]>=4*n[e]||3*n[e+3]>=4*n[e])&&(i+=d.N3);return i},_finish:function(){this._stringBuffer=this.buffer.slice();var t,e,i=0,n=3e4;for(e=0;e<8&&(this._applyMask(e),(t=this._checkBadness())>=1)1&n&&(s[r-1-e+8*r]=1,e<6?s[8+r*e]=1:s[8+r*(e+1)]=1);for(e=0;e<7;e++,n>>=1)1&n&&(s[8+r*(r-7+e)]=1,e?s[6-e+8*r]=1:s[7+8*r]=1)},_interleaveBlocks:function(){var t,e,i=this._dataBlock,n=this._ecc,s=this._eccBlock,r=0,o=this._calculateMaxLength(),a=this._neccBlock1,h=this._neccBlock2,f=this._stringBuffer;for(t=0;t1)for(t=c.BLOCK[n],i=s-7;;){for(e=s-7;e>t-3&&(this._addAlignment(e,i),!(e6)for(t=_.BLOCK[r-7],e=17,i=0;i<6;i++)for(n=0;n<3;n++,e--)1&(e>11?r>>e-12:t>>e)?(s[5-i+o*(2-n+o-11)]=1,s[2-n+o-11+o*(5-i)]=1):(this._setMask(5-i,2-n+o-11),this._setMask(2-n+o-11,5-i))},_isMasked:function(t,e){var i=d._getMaskBit(t,e);return 1===this._mask[i]},_pack:function(){var t,e,i,n=1,s=1,r=this.width,o=r-1,a=r-1,h=(this._dataBlock+this._eccBlock)*(this._neccBlock1+this._neccBlock2)+this._neccBlock2;for(e=0;ee&&(i=t,t=e,e=i),i=e,i+=e*e,(i>>=1)+t},_modN:function(t){for(;t>=255;)t=((t-=255)>>8)+(255&t);return t},N1:3,N2:3,N3:40,N4:10}),v=d,p=h.extend({draw:function(){this.element.src=this.qrious.toDataURL()},reset:function(){this.element.src=""},resize:function(){var t=this.element;t.width=t.height=this.qrious.size}}),m=a.extend((function(t,e,i,n){this.name=t,this.modifiable=Boolean(e),this.defaultValue=i,this._valueTransformer=n}),{transform:function(t){var e=this._valueTransformer;return"function"==typeof e?e(t,this):t}}),g=a.extend(null,{abs:function(t){return null!=t?Math.abs(t):null},hasOwn:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},noop:function(){},toUpperCase:function(t){return null!=t?t.toUpperCase():null}}),k=a.extend((function(t){this.options={},t.forEach((function(t){this.options[t.name]=t}),this)}),{exists:function(t){return null!=this.options[t]},get:function(t,e){return k._get(this.options[t],e)},getAll:function(t){var e,i=this.options,n={};for(e in i)g.hasOwn(i,e)&&(n[e]=k._get(i[e],t));return n},init:function(t,e,i){var n,s;for(n in"function"!=typeof i&&(i=g.noop),this.options)g.hasOwn(this.options,n)&&(s=this.options[n],k._set(s,s.defaultValue,e),k._createAccessor(s,e,i));this._setAll(t,e,!0)},set:function(t,e,i){return this._set(t,e,i)},setAll:function(t,e){return this._setAll(t,e)},_set:function(t,e,i,n){var s=this.options[t];if(!s)throw new Error("Invalid option: "+t);if(!s.modifiable&&!n)throw new Error("Option cannot be modified: "+t);return k._set(s,e,i)},_setAll:function(t,e,i){if(!t)return!1;var n,s=!1;for(n in t)g.hasOwn(t,n)&&this._set(n,t[n],e,i)&&(s=!0);return s}},{_createAccessor:function(t,e,i){var n={get:function(){return k._get(t,e)}};t.modifiable&&(n.set=function(n){k._set(t,n,e)&&i(n,t)}),Object.defineProperty(e,t.name,n)},_get:function(t,e){return e["_"+t.name]},_set:function(t,e,i){var n="_"+t.name,s=i[n],r=t.transform(null!=e?e:t.defaultValue);return i[n]=r,r!==s}}),w=k,M=a.extend((function(){this._services={}}),{getService:function(t){var e=this._services[t];if(!e)throw new Error("Service is not being managed with name: "+t);return e},setService:function(t,e){if(this._services[t])throw new Error("Service is already managed with name: "+t);e&&(this._services[t]=e)}}),b=new w([new m("background",!0,"white"),new m("backgroundAlpha",!0,1,g.abs),new m("element"),new m("foreground",!0,"black"),new m("foregroundAlpha",!0,1,g.abs),new m("level",!0,"L",g.toUpperCase),new m("mime",!0,"image/png"),new m("padding",!0,null,g.abs),new m("size",!0,100,g.abs),new m("value",!0,"")]),B=new M,y=a.extend((function(t){b.init(t,this,this.update.bind(this));var e=b.get("element",this),i=B.getService("element"),n=e&&i.isCanvas(e)?e:i.createCanvas(),s=e&&i.isImage(e)?e:i.createImage();this._canvasRenderer=new f(this,n,!0),this._imageRenderer=new p(this,s,s===e),this.update()}),{get:function(){return b.getAll(this)},set:function(t){b.setAll(t,this)&&this.update()},toDataURL:function(t){return this.canvas.toDataURL(t||this.mime)},update:function(){var t=new v({level:this.level,value:this.value});this._canvasRenderer.render(t),this._imageRenderer.render(t)}},{use:function(t){B.setService(t.getName(),t)}});Object.defineProperties(y.prototype,{canvas:{get:function(){return this._canvasRenderer.getElement()}},image:{get:function(){return this._imageRenderer.getElement()}}});var O=y,A=a.extend({getName:function(){}}).extend({createCanvas:function(){},createImage:function(){},getName:function(){return"element"},isCanvas:function(t){},isImage:function(t){}}).extend({createCanvas:function(){return document.createElement("canvas")},createImage:function(){return document.createElement("img")},isCanvas:function(t){return t instanceof HTMLCanvasElement},isImage:function(t){return t instanceof HTMLImageElement}});return O.use(new A),O})); \ No newline at end of file diff --git a/scripts/qrious.min.js.LICENSE.txt b/scripts/qrious.min.js.LICENSE.txt new file mode 100644 index 00000000..e09ab023 --- /dev/null +++ b/scripts/qrious.min.js.LICENSE.txt @@ -0,0 +1,3 @@ +/*! QRious v4.0.2 | (C) 2017 Alasdair Mercer | GPL v3 License +Based on jsqrencode | (C) 2010 tz@execpc.com | GPL v3 License +*/ diff --git a/scripts/u2f.js b/scripts/u2f.js index a5cc7407..e3489ac2 100644 --- a/scripts/u2f.js +++ b/scripts/u2f.js @@ -1,779 +1 @@ -//Copyright 2014-2015 Google Inc. All rights reserved. - -//Use of this source code is governed by a BSD-style -//license that can be found in the LICENSE file or at -//https://developers.google.com/open-source/licenses/bsd - -// ref: https://github.com/google/u2f-ref-code/blob/master/u2f-gae-demo/war/js/u2f-api.js - -/** - * @fileoverview The U2F api. - */ -'use strict'; - -/** - * Modification: - * Wrap implementation so that we can exit if window.u2f is already supplied by the browser (see below). - */ -(function (root) { - /** - * Modification: - * Only continue load this library if window.u2f is not already supplied by the browser. - */ - var isFirefox = navigator.userAgent.indexOf('Firefox') !== -1 || navigator.userAgent.indexOf('Gecko/') !== -1; - var browserImplementsU2f = !!((typeof root.u2f !== 'undefined') && root.u2f.register); - - if (isFirefox && browserImplementsU2f) { - root.u2f.isSupported = true; - return; - } - - /** - * Namespace for the U2F api. - * @type {Object} - */ - var u2f = root.u2f || {}; - - /** - * Modification: - * Check if browser supports U2F API before this wrapper was added. - */ - u2f.isSupported = !!(((typeof u2f !== 'undefined') && u2f.register) || ((typeof chrome !== 'undefined') && chrome.runtime)); - - /** - * FIDO U2F Javascript API Version - * @number - */ - var js_api_version; - - /** - * The U2F extension id - * @const {string} - */ - // The Chrome packaged app extension ID. - // Uncomment this if you want to deploy a server instance that uses - // the package Chrome app and does not require installing the U2F Chrome extension. - u2f.EXTENSION_ID = 'kmendfapggjehodndflmmgagdbamhnfd'; - // The U2F Chrome extension ID. - // Uncomment this if you want to deploy a server instance that uses - // the U2F Chrome extension to authenticate. - // u2f.EXTENSION_ID = 'pfboblefjcgdjicmnffhdgionmgcdmne'; - - - /** - * Message types for messsages to/from the extension - * @const - * @enum {string} - */ - u2f.MessageTypes = { - 'U2F_REGISTER_REQUEST': 'u2f_register_request', - 'U2F_REGISTER_RESPONSE': 'u2f_register_response', - 'U2F_SIGN_REQUEST': 'u2f_sign_request', - 'U2F_SIGN_RESPONSE': 'u2f_sign_response', - 'U2F_GET_API_VERSION_REQUEST': 'u2f_get_api_version_request', - 'U2F_GET_API_VERSION_RESPONSE': 'u2f_get_api_version_response' - }; - - - /** - * Response status codes - * @const - * @enum {number} - */ - u2f.ErrorCodes = { - 'OK': 0, - 'OTHER_ERROR': 1, - 'BAD_REQUEST': 2, - 'CONFIGURATION_UNSUPPORTED': 3, - 'DEVICE_INELIGIBLE': 4, - 'TIMEOUT': 5 - }; - - - /** - * A message for registration requests - * @typedef {{ - * type: u2f.MessageTypes, - * appId: ?string, - * timeoutSeconds: ?number, - * requestId: ?number - * }} - */ - u2f.U2fRequest; - - - /** - * A message for registration responses - * @typedef {{ - * type: u2f.MessageTypes, - * responseData: (u2f.Error | u2f.RegisterResponse | u2f.SignResponse), - * requestId: ?number - * }} - */ - u2f.U2fResponse; - - - /** - * An error object for responses - * @typedef {{ - * errorCode: u2f.ErrorCodes, - * errorMessage: ?string - * }} - */ - u2f.Error; - - /** - * Data object for a single sign request. - * @typedef {enum {BLUETOOTH_RADIO, BLUETOOTH_LOW_ENERGY, USB, NFC}} - */ - u2f.Transport; - - - /** - * Data object for a single sign request. - * @typedef {Array} - */ - u2f.Transports; - - /** - * Data object for a single sign request. - * @typedef {{ - * version: string, - * challenge: string, - * keyHandle: string, - * appId: string - * }} - */ - u2f.SignRequest; - - - /** - * Data object for a sign response. - * @typedef {{ - * keyHandle: string, - * signatureData: string, - * clientData: string - * }} - */ - u2f.SignResponse; - - - /** - * Data object for a registration request. - * @typedef {{ - * version: string, - * challenge: string - * }} - */ - u2f.RegisterRequest; - - - /** - * Data object for a registration response. - * @typedef {{ - * version: string, - * keyHandle: string, - * transports: Transports, - * appId: string - * }} - */ - u2f.RegisterResponse; - - - /** - * Data object for a registered key. - * @typedef {{ - * version: string, - * keyHandle: string, - * transports: ?Transports, - * appId: ?string - * }} - */ - u2f.RegisteredKey; - - - /** - * Data object for a get API register response. - * @typedef {{ - * js_api_version: number - * }} - */ - u2f.GetJsApiVersionResponse; - - - //Low level MessagePort API support - - /** - * Sets up a MessagePort to the U2F extension using the - * available mechanisms. - * @param {function((MessagePort|u2f.WrappedChromeRuntimePort_))} callback - */ - u2f.getMessagePort = function (callback) { - if (typeof chrome != 'undefined' && chrome.runtime) { - // The actual message here does not matter, but we need to get a reply - // for the callback to run. Thus, send an empty signature request - // in order to get a failure response. - var msg = { - type: u2f.MessageTypes.U2F_SIGN_REQUEST, - signRequests: [] - }; - chrome.runtime.sendMessage(u2f.EXTENSION_ID, msg, function () { - if (!chrome.runtime.lastError) { - // We are on a whitelisted origin and can talk directly - // with the extension. - u2f.getChromeRuntimePort_(callback); - } else { - // chrome.runtime was available, but we couldn't message - // the extension directly, use iframe - u2f.getIframePort_(callback); - } - }); - } else if (u2f.isAndroidChrome_()) { - u2f.getAuthenticatorPort_(callback); - } else if (u2f.isIosChrome_()) { - u2f.getIosPort_(callback); - } else { - // chrome.runtime was not available at all, which is normal - // when this origin doesn't have access to any extensions. - u2f.getIframePort_(callback); - } - }; - - /** - * Detect chrome running on android based on the browser's useragent. - * @private - */ - u2f.isAndroidChrome_ = function () { - var userAgent = navigator.userAgent; - return userAgent.indexOf('Chrome') != -1 && - userAgent.indexOf('Android') != -1; - }; - - /** - * Detect chrome running on iOS based on the browser's platform. - * @private - */ - u2f.isIosChrome_ = function () { - return ["iPhone", "iPad", "iPod"].indexOf(navigator.platform) > -1; - }; - - /** - * Connects directly to the extension via chrome.runtime.connect. - * @param {function(u2f.WrappedChromeRuntimePort_)} callback - * @private - */ - u2f.getChromeRuntimePort_ = function (callback) { - var port = chrome.runtime.connect(u2f.EXTENSION_ID, - { 'includeTlsChannelId': true }); - setTimeout(function () { - callback(new u2f.WrappedChromeRuntimePort_(port)); - }, 0); - }; - - /** - * Return a 'port' abstraction to the Authenticator app. - * @param {function(u2f.WrappedAuthenticatorPort_)} callback - * @private - */ - u2f.getAuthenticatorPort_ = function (callback) { - setTimeout(function () { - callback(new u2f.WrappedAuthenticatorPort_()); - }, 0); - }; - - /** - * Return a 'port' abstraction to the iOS client app. - * @param {function(u2f.WrappedIosPort_)} callback - * @private - */ - u2f.getIosPort_ = function (callback) { - setTimeout(function () { - callback(new u2f.WrappedIosPort_()); - }, 0); - }; - - /** - * A wrapper for chrome.runtime.Port that is compatible with MessagePort. - * @param {Port} port - * @constructor - * @private - */ - u2f.WrappedChromeRuntimePort_ = function (port) { - this.port_ = port; - }; - - /** - * Format and return a sign request compliant with the JS API version supported by the extension. - * @param {Array} signRequests - * @param {number} timeoutSeconds - * @param {number} reqId - * @return {Object} - */ - u2f.formatSignRequest_ = - function (appId, challenge, registeredKeys, timeoutSeconds, reqId) { - if (js_api_version === undefined || js_api_version < 1.1) { - // Adapt request to the 1.0 JS API - var signRequests = []; - for (var i = 0; i < registeredKeys.length; i++) { - signRequests[i] = { - version: registeredKeys[i].version, - challenge: challenge, - keyHandle: registeredKeys[i].keyHandle, - appId: appId - }; - } - return { - type: u2f.MessageTypes.U2F_SIGN_REQUEST, - signRequests: signRequests, - timeoutSeconds: timeoutSeconds, - requestId: reqId - }; - } - // JS 1.1 API - return { - type: u2f.MessageTypes.U2F_SIGN_REQUEST, - appId: appId, - challenge: challenge, - registeredKeys: registeredKeys, - timeoutSeconds: timeoutSeconds, - requestId: reqId - }; - }; - - /** - * Format and return a register request compliant with the JS API version supported by the extension.. - * @param {Array} signRequests - * @param {Array} signRequests - * @param {number} timeoutSeconds - * @param {number} reqId - * @return {Object} - */ - u2f.formatRegisterRequest_ = - function (appId, registeredKeys, registerRequests, timeoutSeconds, reqId) { - if (js_api_version === undefined || js_api_version < 1.1) { - // Adapt request to the 1.0 JS API - for (var i = 0; i < registerRequests.length; i++) { - registerRequests[i].appId = appId; - } - var signRequests = []; - for (var i = 0; i < registeredKeys.length; i++) { - signRequests[i] = { - version: registeredKeys[i].version, - challenge: registerRequests[0], - keyHandle: registeredKeys[i].keyHandle, - appId: appId - }; - } - return { - type: u2f.MessageTypes.U2F_REGISTER_REQUEST, - signRequests: signRequests, - registerRequests: registerRequests, - timeoutSeconds: timeoutSeconds, - requestId: reqId - }; - } - // JS 1.1 API - return { - type: u2f.MessageTypes.U2F_REGISTER_REQUEST, - appId: appId, - registerRequests: registerRequests, - registeredKeys: registeredKeys, - timeoutSeconds: timeoutSeconds, - requestId: reqId - }; - }; - - - /** - * Posts a message on the underlying channel. - * @param {Object} message - */ - u2f.WrappedChromeRuntimePort_.prototype.postMessage = function (message) { - this.port_.postMessage(message); - }; - - - /** - * Emulates the HTML 5 addEventListener interface. Works only for the - * onmessage event, which is hooked up to the chrome.runtime.Port.onMessage. - * @param {string} eventName - * @param {function({data: Object})} handler - */ - u2f.WrappedChromeRuntimePort_.prototype.addEventListener = - function (eventName, handler) { - var name = eventName.toLowerCase(); - if (name == 'message' || name == 'onmessage') { - this.port_.onMessage.addListener(function (message) { - // Emulate a minimal MessageEvent object - handler({ 'data': message }); - }); - } else { - console.error('WrappedChromeRuntimePort only supports onMessage'); - } - }; - - /** - * Wrap the Authenticator app with a MessagePort interface. - * @constructor - * @private - */ - u2f.WrappedAuthenticatorPort_ = function () { - this.requestId_ = -1; - this.requestObject_ = null; - } - - /** - * Launch the Authenticator intent. - * @param {Object} message - */ - u2f.WrappedAuthenticatorPort_.prototype.postMessage = function (message) { - var intentUrl = - u2f.WrappedAuthenticatorPort_.INTENT_URL_BASE_ + - ';S.request=' + encodeURIComponent(JSON.stringify(message)) + - ';end'; - document.location = intentUrl; - }; - - /** - * Tells what type of port this is. - * @return {String} port type - */ - u2f.WrappedAuthenticatorPort_.prototype.getPortType = function () { - return "WrappedAuthenticatorPort_"; - }; - - - /** - * Emulates the HTML 5 addEventListener interface. - * @param {string} eventName - * @param {function({data: Object})} handler - */ - u2f.WrappedAuthenticatorPort_.prototype.addEventListener = function (eventName, handler) { - var name = eventName.toLowerCase(); - if (name == 'message') { - var self = this; - /* Register a callback to that executes when - * chrome injects the response. */ - window.addEventListener( - 'message', self.onRequestUpdate_.bind(self, handler), false); - } else { - console.error('WrappedAuthenticatorPort only supports message'); - } - }; - - /** - * Callback invoked when a response is received from the Authenticator. - * @param function({data: Object}) callback - * @param {Object} message message Object - */ - u2f.WrappedAuthenticatorPort_.prototype.onRequestUpdate_ = - function (callback, message) { - var messageObject = JSON.parse(message.data); - var intentUrl = messageObject['intentURL']; - - var errorCode = messageObject['errorCode']; - var responseObject = null; - if (messageObject.hasOwnProperty('data')) { - responseObject = /** @type {Object} */ ( - JSON.parse(messageObject['data'])); - } - - callback({ 'data': responseObject }); - }; - - /** - * Base URL for intents to Authenticator. - * @const - * @private - */ - u2f.WrappedAuthenticatorPort_.INTENT_URL_BASE_ = - 'intent:#Intent;action=com.google.android.apps.authenticator.AUTHENTICATE'; - - /** - * Wrap the iOS client app with a MessagePort interface. - * @constructor - * @private - */ - u2f.WrappedIosPort_ = function () { }; - - /** - * Launch the iOS client app request - * @param {Object} message - */ - u2f.WrappedIosPort_.prototype.postMessage = function (message) { - var str = JSON.stringify(message); - var url = "u2f://auth?" + encodeURI(str); - location.replace(url); - }; - - /** - * Tells what type of port this is. - * @return {String} port type - */ - u2f.WrappedIosPort_.prototype.getPortType = function () { - return "WrappedIosPort_"; - }; - - /** - * Emulates the HTML 5 addEventListener interface. - * @param {string} eventName - * @param {function({data: Object})} handler - */ - u2f.WrappedIosPort_.prototype.addEventListener = function (eventName, handler) { - var name = eventName.toLowerCase(); - if (name !== 'message') { - console.error('WrappedIosPort only supports message'); - } - }; - - /** - * Sets up an embedded trampoline iframe, sourced from the extension. - * @param {function(MessagePort)} callback - * @private - */ - u2f.getIframePort_ = function (callback) { - // Create the iframe - var iframeOrigin = 'chrome-extension://' + u2f.EXTENSION_ID; - var iframe = document.createElement('iframe'); - iframe.src = iframeOrigin + '/u2f-comms.html'; - iframe.setAttribute('style', 'display:none'); - document.body.appendChild(iframe); - - var channel = new MessageChannel(); - var ready = function (message) { - if (message.data == 'ready') { - channel.port1.removeEventListener('message', ready); - callback(channel.port1); - } else { - console.error('First event on iframe port was not "ready"'); - } - }; - channel.port1.addEventListener('message', ready); - channel.port1.start(); - - iframe.addEventListener('load', function () { - // Deliver the port to the iframe and initialize - iframe.contentWindow.postMessage('init', iframeOrigin, [channel.port2]); - }); - }; - - - //High-level JS API - - /** - * Default extension response timeout in seconds. - * @const - */ - u2f.EXTENSION_TIMEOUT_SEC = 30; - - /** - * A singleton instance for a MessagePort to the extension. - * @type {MessagePort|u2f.WrappedChromeRuntimePort_} - * @private - */ - u2f.port_ = null; - - /** - * Callbacks waiting for a port - * @type {Array} - * @private - */ - u2f.waitingForPort_ = []; - - /** - * A counter for requestIds. - * @type {number} - * @private - */ - u2f.reqCounter_ = 0; - - /** - * A map from requestIds to client callbacks - * @type {Object.} - * @private - */ - u2f.callbackMap_ = {}; - - /** - * Creates or retrieves the MessagePort singleton to use. - * @param {function((MessagePort|u2f.WrappedChromeRuntimePort_))} callback - * @private - */ - u2f.getPortSingleton_ = function (callback) { - if (u2f.port_) { - callback(u2f.port_); - } else { - if (u2f.waitingForPort_.length == 0) { - u2f.getMessagePort(function (port) { - u2f.port_ = port; - u2f.port_.addEventListener('message', - /** @type {function(Event)} */(u2f.responseHandler_)); - - // Careful, here be async callbacks. Maybe. - while (u2f.waitingForPort_.length) - u2f.waitingForPort_.shift()(u2f.port_); - }); - } - u2f.waitingForPort_.push(callback); - } - }; - - /** - * Handles response messages from the extension. - * @param {MessageEvent.} message - * @private - */ - u2f.responseHandler_ = function (message) { - var response = message.data; - var reqId = response['requestId']; - if (!reqId || !u2f.callbackMap_[reqId]) { - console.error('Unknown or missing requestId in response.'); - return; - } - var cb = u2f.callbackMap_[reqId]; - delete u2f.callbackMap_[reqId]; - cb(response['responseData']); - }; - - /** - * Dispatches an array of sign requests to available U2F tokens. - * If the JS API version supported by the extension is unknown, it first sends a - * message to the extension to find out the supported API version and then it sends - * the sign request. - * @param {string=} appId - * @param {string=} challenge - * @param {Array} registeredKeys - * @param {function((u2f.Error|u2f.SignResponse))} callback - * @param {number=} opt_timeoutSeconds - */ - u2f.sign = function (appId, challenge, registeredKeys, callback, opt_timeoutSeconds) { - if (js_api_version === undefined) { - // Send a message to get the extension to JS API version, then send the actual sign request. - u2f.getApiVersion( - function (response) { - js_api_version = response['js_api_version'] === undefined ? 0 : response['js_api_version']; - console.log("Extension JS API Version: ", js_api_version); - u2f.sendSignRequest(appId, challenge, registeredKeys, callback, opt_timeoutSeconds); - }); - } else { - // We know the JS API version. Send the actual sign request in the supported API version. - u2f.sendSignRequest(appId, challenge, registeredKeys, callback, opt_timeoutSeconds); - } - }; - - /** - * Dispatches an array of sign requests to available U2F tokens. - * @param {string=} appId - * @param {string=} challenge - * @param {Array} registeredKeys - * @param {function((u2f.Error|u2f.SignResponse))} callback - * @param {number=} opt_timeoutSeconds - */ - u2f.sendSignRequest = function (appId, challenge, registeredKeys, callback, opt_timeoutSeconds) { - u2f.getPortSingleton_(function (port) { - var reqId = ++u2f.reqCounter_; - u2f.callbackMap_[reqId] = callback; - var timeoutSeconds = (typeof opt_timeoutSeconds !== 'undefined' ? - opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC); - var req = u2f.formatSignRequest_(appId, challenge, registeredKeys, timeoutSeconds, reqId); - port.postMessage(req); - }); - }; - - /** - * Dispatches register requests to available U2F tokens. An array of sign - * requests identifies already registered tokens. - * If the JS API version supported by the extension is unknown, it first sends a - * message to the extension to find out the supported API version and then it sends - * the register request. - * @param {string=} appId - * @param {Array} registerRequests - * @param {Array} registeredKeys - * @param {function((u2f.Error|u2f.RegisterResponse))} callback - * @param {number=} opt_timeoutSeconds - */ - u2f.register = function (appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) { - if (js_api_version === undefined) { - // Send a message to get the extension to JS API version, then send the actual register request. - u2f.getApiVersion( - function (response) { - js_api_version = response['js_api_version'] === undefined ? 0 : response['js_api_version']; - console.log("Extension JS API Version: ", js_api_version); - u2f.sendRegisterRequest(appId, registerRequests, registeredKeys, - callback, opt_timeoutSeconds); - }); - } else { - // We know the JS API version. Send the actual register request in the supported API version. - u2f.sendRegisterRequest(appId, registerRequests, registeredKeys, - callback, opt_timeoutSeconds); - } - }; - - /** - * Dispatches register requests to available U2F tokens. An array of sign - * requests identifies already registered tokens. - * @param {string=} appId - * @param {Array} registerRequests - * @param {Array} registeredKeys - * @param {function((u2f.Error|u2f.RegisterResponse))} callback - * @param {number=} opt_timeoutSeconds - */ - u2f.sendRegisterRequest = function (appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) { - u2f.getPortSingleton_(function (port) { - var reqId = ++u2f.reqCounter_; - u2f.callbackMap_[reqId] = callback; - var timeoutSeconds = (typeof opt_timeoutSeconds !== 'undefined' ? - opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC); - var req = u2f.formatRegisterRequest_( - appId, registeredKeys, registerRequests, timeoutSeconds, reqId); - port.postMessage(req); - }); - }; - - - /** - * Dispatches a message to the extension to find out the supported - * JS API version. - * If the user is on a mobile phone and is thus using Google Authenticator instead - * of the Chrome extension, don't send the request and simply return 0. - * @param {function((u2f.Error|u2f.GetJsApiVersionResponse))} callback - * @param {number=} opt_timeoutSeconds - */ - u2f.getApiVersion = function (callback, opt_timeoutSeconds) { - u2f.getPortSingleton_(function (port) { - // If we are using Android Google Authenticator or iOS client app, - // do not fire an intent to ask which JS API version to use. - if (port.getPortType) { - var apiVersion; - switch (port.getPortType()) { - case 'WrappedIosPort_': - case 'WrappedAuthenticatorPort_': - apiVersion = 1.1; - break; - - default: - apiVersion = 0; - break; - } - callback({ 'js_api_version': apiVersion }); - return; - } - var reqId = ++u2f.reqCounter_; - u2f.callbackMap_[reqId] = callback; - var req = { - type: u2f.MessageTypes.U2F_GET_API_VERSION_REQUEST, - timeoutSeconds: (typeof opt_timeoutSeconds !== 'undefined' ? - opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC), - requestId: reqId - }; - port.postMessage(req); - }); - }; - - /** - * Modification: - * Assign u2f back to window (root) scope. - */ - root.u2f = u2f; -}(this)); +"use strict";!function(e){var t=-1!==navigator.userAgent.indexOf("Firefox")||-1!==navigator.userAgent.indexOf("Gecko/"),o=!(void 0===e.u2f||!e.u2f.register);if(t&&o)e.u2f.isSupported=!0;else{var r,n=e.u2f||{};n.isSupported=!!(void 0!==n&&n.register||"undefined"!=typeof chrome&&chrome.runtime),n.EXTENSION_ID="kmendfapggjehodndflmmgagdbamhnfd",n.MessageTypes={U2F_REGISTER_REQUEST:"u2f_register_request",U2F_REGISTER_RESPONSE:"u2f_register_response",U2F_SIGN_REQUEST:"u2f_sign_request",U2F_SIGN_RESPONSE:"u2f_sign_response",U2F_GET_API_VERSION_REQUEST:"u2f_get_api_version_request",U2F_GET_API_VERSION_RESPONSE:"u2f_get_api_version_response"},n.ErrorCodes={OK:0,OTHER_ERROR:1,BAD_REQUEST:2,CONFIGURATION_UNSUPPORTED:3,DEVICE_INELIGIBLE:4,TIMEOUT:5},n.U2fRequest,n.U2fResponse,n.Error,n.Transport,n.Transports,n.SignRequest,n.SignResponse,n.RegisterRequest,n.RegisterResponse,n.RegisteredKey,n.GetJsApiVersionResponse,n.getMessagePort=function(e){if("undefined"!=typeof chrome&&chrome.runtime){var t={type:n.MessageTypes.U2F_SIGN_REQUEST,signRequests:[]};chrome.runtime.sendMessage(n.EXTENSION_ID,t,(function(){chrome.runtime.lastError?n.getIframePort_(e):n.getChromeRuntimePort_(e)}))}else n.isAndroidChrome_()?n.getAuthenticatorPort_(e):n.isIosChrome_()?n.getIosPort_(e):n.getIframePort_(e)},n.isAndroidChrome_=function(){var e=navigator.userAgent;return-1!=e.indexOf("Chrome")&&-1!=e.indexOf("Android")},n.isIosChrome_=function(){return["iPhone","iPad","iPod"].indexOf(navigator.platform)>-1},n.getChromeRuntimePort_=function(e){var t=chrome.runtime.connect(n.EXTENSION_ID,{includeTlsChannelId:!0});setTimeout((function(){e(new n.WrappedChromeRuntimePort_(t))}),0)},n.getAuthenticatorPort_=function(e){setTimeout((function(){e(new n.WrappedAuthenticatorPort_)}),0)},n.getIosPort_=function(e){setTimeout((function(){e(new n.WrappedIosPort_)}),0)},n.WrappedChromeRuntimePort_=function(e){this.port_=e},n.formatSignRequest_=function(e,t,o,s,i){if(void 0===r||r<1.1){for(var a=[],p=0;p - - - - - - - - Bitwarden - - - - - - - - - -
-
- -
-

- -

-
-
-
- - - +Bitwarden

\ No newline at end of file diff --git a/u2f-connector.html b/u2f-connector.html index 02307c04..2da8f693 100644 --- a/u2f-connector.html +++ b/u2f-connector.html @@ -1,12 +1 @@ - - - - - - Bitwarden U2F Connector - - - - - - +Bitwarden U2F Connector \ No newline at end of file diff --git a/version.json b/version.json index 8270e524..719cdd93 100644 --- a/version.json +++ b/version.json @@ -1 +1 @@ -{"version":"2.20.4"} \ No newline at end of file +{"version":"2.21.0"} \ No newline at end of file diff --git a/webauthn-connector.html b/webauthn-connector.html index feebd831..415bf420 100644 --- a/webauthn-connector.html +++ b/webauthn-connector.html @@ -1,16 +1 @@ - - - - - - Bitwarden WebAuthn Connector - - - - -
- -
- - - +Bitwarden WebAuthn Connector
\ No newline at end of file diff --git a/webauthn-fallback-connector.html b/webauthn-fallback-connector.html index 2a508655..cd941bf4 100644 --- a/webauthn-fallback-connector.html +++ b/webauthn-fallback-connector.html @@ -1,36 +1 @@ - - - - - - Bitwarden WebAuthn Connector - - - -
-
-
- -
-

- -

-
-
-
-

-
- - -
-
-

- -

-
-
-
-
-
- - +Bitwarden WebAuthn Connector


\ No newline at end of file